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 list = serverLevel.getNearbyEntities(Villager.class, this.attackTargeting, this.golem, aABB); List 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(); } }