--- ../src-base/minecraft/net/minecraft/entity/ai/EntityAITarget.java +++ ../src-work/minecraft/net/minecraft/entity/ai/EntityAITarget.java @@ -12,6 +12,11 @@ import net.minecraft.util.MathHelper; import org.apache.commons.lang3.StringUtils; +// CraftBukkit start +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.event.entity.EntityTargetEvent; +// CraftBukkit end + public abstract class EntityAITarget extends EntityAIBase { protected EntityCreature taskOwner; @@ -156,6 +161,51 @@ } } + // CraftBukkit start - Check all the different target goals for the reason, default to RANDOM_TARGET + EntityTargetEvent.TargetReason reason = EntityTargetEvent.TargetReason.RANDOM_TARGET; + + if (this instanceof EntityAIDefendVillage) + { + reason = EntityTargetEvent.TargetReason.DEFEND_VILLAGE; + } + else if (this instanceof EntityAIHurtByTarget) + { + reason = EntityTargetEvent.TargetReason.TARGET_ATTACKED_ENTITY; + } + else if (this instanceof EntityAINearestAttackableTarget) + { + if (p_75296_1_ instanceof EntityPlayer) + { + reason = EntityTargetEvent.TargetReason.CLOSEST_PLAYER; + } + } + else if (this instanceof EntityAIOwnerHurtByTarget) + { + reason = EntityTargetEvent.TargetReason.TARGET_ATTACKED_OWNER; + } + else if (this instanceof EntityAIOwnerHurtTarget) + { + reason = EntityTargetEvent.TargetReason.OWNER_ATTACKED_TARGET; + } + + org.bukkit.event.entity.EntityTargetLivingEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTargetLivingEvent(this.taskOwner, p_75296_1_, reason); + + if (event.isCancelled() || event.getTarget() == null) + { + this.taskOwner.setAttackTarget(null); + return false; + } + else if (p_75296_1_.getBukkitEntity() != event.getTarget()) + { + this.taskOwner.setAttackTarget((EntityLivingBase)((CraftEntity) event.getTarget()).getHandle()); + } + + if (this.taskOwner instanceof EntityCreature) + { + ((EntityCreature) this.taskOwner).entityToAttack = ((CraftEntity) event.getTarget()).getHandle(); + } + + // CraftBukkit end return true; } }