minecraft-src/net/minecraft/world/entity/ai/goal/target/DefendVillageTargetGoal.java
2025-07-04 03:45:38 +03:00

53 lines
1.8 KiB
Java

package net.minecraft.world.entity.ai.goal.target;
import java.util.EnumSet;
import java.util.List;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.goal.Goal.Flag;
import net.minecraft.world.entity.ai.targeting.TargetingConditions;
import net.minecraft.world.entity.animal.IronGolem;
import net.minecraft.world.entity.npc.Villager;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.AABB;
import org.jetbrains.annotations.Nullable;
public class DefendVillageTargetGoal extends TargetGoal {
private final IronGolem golem;
@Nullable
private LivingEntity potentialTarget;
private final TargetingConditions attackTargeting = TargetingConditions.forCombat().range(64.0);
public DefendVillageTargetGoal(IronGolem golem) {
super(golem, false, true);
this.golem = golem;
this.setFlags(EnumSet.of(Flag.TARGET));
}
@Override
public boolean canUse() {
AABB aABB = this.golem.getBoundingBox().inflate(10.0, 8.0, 10.0);
ServerLevel serverLevel = getServerLevel(this.golem);
List<? extends LivingEntity> list = serverLevel.getNearbyEntities(Villager.class, this.attackTargeting, this.golem, aABB);
List<Player> list2 = serverLevel.getNearbyPlayers(this.attackTargeting, this.golem, aABB);
for (LivingEntity livingEntity : list) {
Villager villager = (Villager)livingEntity;
for (Player player : list2) {
int i = villager.getPlayerReputation(player);
if (i <= -100) {
this.potentialTarget = player;
}
}
}
return this.potentialTarget == null ? false : !(this.potentialTarget instanceof Player player2 && (player2.isSpectator() || player2.isCreative()));
}
@Override
public void start() {
this.golem.setTarget(this.potentialTarget);
super.start();
}
}