--- ../src-base/minecraft/net/minecraft/entity/EntityCreature.java +++ ../src-work/minecraft/net/minecraft/entity/EntityCreature.java @@ -13,12 +13,18 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; +// CraftBukkit start +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.EntityUnleashEvent; +// CraftBukkit end + public abstract class EntityCreature extends EntityLiving { public static final UUID field_110179_h = UUID.fromString("E199AD21-BA8A-4C53-8D13-6182D5C69D3A"); public static final AttributeModifier field_110181_i = (new AttributeModifier(field_110179_h, "Fleeing speed bonus", 2.0D, 2)).setSaved(false); - private PathEntity pathToEntity; - protected Entity entityToAttack; + public PathEntity pathToEntity; // CraftBukkit - private -> public + public Entity entityToAttack; // CraftBukkit - protected -> public protected boolean hasAttacked; protected int fleeingTick; private ChunkCoordinates homePosition = new ChunkCoordinates(0, 0, 0); @@ -52,8 +58,29 @@ if (this.entityToAttack == null) { - this.entityToAttack = this.findPlayerToAttack(); + // CraftBukkit start + Entity target = this.findPlayerToAttack(); + if (target != null) + { + EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), target.getBukkitEntity(), EntityTargetEvent.TargetReason.CLOSEST_PLAYER); + this.worldObj.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) + { + if (event.getTarget() == null) + { + this.entityToAttack = null; + } + else + { + this.entityToAttack = ((CraftEntity) event.getTarget()).getHandle(); + } + } + } + + // CraftBukkit end + if (this.entityToAttack != null) { this.pathToEntity = this.worldObj.getPathEntityToEntity(this, this.entityToAttack, f4, true, false, false, true); @@ -70,7 +97,23 @@ } else { - this.entityToAttack = null; + // CraftBukkit start + EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), null, EntityTargetEvent.TargetReason.TARGET_DIED); + this.worldObj.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) + { + if (event.getTarget() == null) + { + this.entityToAttack = null; + } + else + { + this.entityToAttack = ((CraftEntity) event.getTarget()).getHandle(); + } + } + + // CraftBukkit end } if (this.entityToAttack instanceof EntityPlayerMP && ((EntityPlayerMP)this.entityToAttack).theItemInWorldManager.isCreative()) @@ -122,7 +165,8 @@ double d1 = vec3.xCoord - this.posX; double d2 = vec3.zCoord - this.posZ; double d3 = vec3.yCoord - (double)i; - float f1 = (float)(Math.atan2(d2, d1) * 180.0D / Math.PI) - 90.0F; + // CraftBukkit - Math -> TrigMath + float f1 = (float)(org.bukkit.craftbukkit.TrigMath.atan2(d2, d1) * 180.0D / Math.PI) - 90.0F; float f2 = MathHelper.wrapAngleTo180_float(f1 - this.rotationYaw); this.moveForward = (float)this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue(); @@ -303,6 +347,7 @@ { if (f > 10.0F) { + this.worldObj.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE)); // CraftBukkit this.clearLeashed(true, true); } @@ -335,6 +380,7 @@ if (f > 10.0F) { + this.worldObj.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), EntityUnleashEvent.UnleashReason.DISTANCE)); // CraftBukkit this.clearLeashed(true, true); } }