diff --git a/src/main/java/net/minecraft/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java index 801b64ad7d..98afd9cdc7 100644 --- a/src/main/java/net/minecraft/server/EntityCreature.java +++ b/src/main/java/net/minecraft/server/EntityCreature.java @@ -5,6 +5,9 @@ import java.util.Random; // CraftBukkit start import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.entity.CraftCreature; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.EntityTargetEvent.TargetReason; // CraftBukkit end public class EntityCreature extends EntityLiving { @@ -27,12 +30,37 @@ public class EntityCreature extends EntityLiving { float f = 16F; if (d == null) { - d = l(); + // CraftBukkit start + Entity target = l(); + if(target != null) { + EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), target.getBukkitEntity(), TargetReason.CLOSEST_PLAYER); + CraftServer server = ((WorldServer) this.l).getServer(); + server.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + if(event.getTarget() == null) { + d = null; + } else { + d = ((CraftEntity) event.getTarget()).getHandle(); + } + } + } + // CraftBukkit end if (d != null) { a = l.a(((Entity) (this)), d, f); } } else if (!d.B()) { - d = null; + // CraftBukkit start + EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), null, TargetReason.TARGET_DIED); + CraftServer server = ((WorldServer) this.l).getServer(); + server.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + if(event.getTarget() == null) { + d = null; + } else { + d = ((CraftEntity) event.getTarget()).getHandle(); + } + } + // CraftBukkit end } else { float f1 = d.a(((Entity) (this))); diff --git a/src/main/java/net/minecraft/server/EntityMobs.java b/src/main/java/net/minecraft/server/EntityMobs.java index df910e41d5..e75b345c3d 100644 --- a/src/main/java/net/minecraft/server/EntityMobs.java +++ b/src/main/java/net/minecraft/server/EntityMobs.java @@ -5,10 +5,13 @@ import java.util.Random; // CraftBukkit start import org.bukkit.craftbukkit.entity.CraftMonster; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.EntityTargetEvent.TargetReason; // CraftBukkit end public class EntityMobs extends EntityCreature implements IMobs { @@ -57,7 +60,22 @@ public class EntityMobs extends EntityCreature implements IMobs { return true; } if (entity != this) { - d = entity; + // CraftBukkit start + org.bukkit.entity.Entity bukkitTarget = null; + if(entity != null) { + bukkitTarget = entity.getBukkitEntity(); + } + EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), bukkitTarget, TargetReason.TARGET_ATTACKED_ENTITY); + CraftServer server = ((WorldServer) this.l).getServer(); + server.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + if(event.getTarget() == null) { + d = null; + } else { + d = ((CraftEntity) event.getTarget()).getHandle(); + } + } + // CraftBukkit end } return true; } else { diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java index f22ea2f04f..18e768ec33 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -5,7 +5,10 @@ import java.util.Random; // CraftBukkit start import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.craftbukkit.entity.CraftPigZombie; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.EntityTargetEvent.TargetReason; // CraftBukkit end public class EntityPigZombie extends EntityZombie { @@ -82,9 +85,24 @@ public class EntityPigZombie extends EntityZombie { } private void g(Entity entity) { - d = entity; - a = 400 + W.nextInt(400); - b = W.nextInt(40); + // CraftBukkit start + org.bukkit.entity.Entity bukkitTarget = null; + if(entity != null) { + bukkitTarget = entity.getBukkitEntity(); + } + EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), bukkitTarget, TargetReason.PIG_ZOMBIE_TARGET); + CraftServer server = ((WorldServer) this.l).getServer(); + server.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + if(event.getTarget() == null) { + d = null; + } else { + d = ((CraftEntity) event.getTarget()).getHandle(); + a = 400 + W.nextInt(400); + b = W.nextInt(40); + } + } + // CraftBukkit end } protected String e() { diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java index 1d1c746c01..77bd7eb4d3 100644 --- a/src/main/java/net/minecraft/server/EntitySpider.java +++ b/src/main/java/net/minecraft/server/EntitySpider.java @@ -4,7 +4,10 @@ import java.util.Random; // CraftBukkit start import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.craftbukkit.entity.CraftSpider; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.EntityTargetEvent.TargetReason; // CraftBukkit stop public class EntitySpider extends EntityMobs { @@ -52,8 +55,19 @@ public class EntitySpider extends EntityMobs { float f2 = b(1.0F); if (f2 > 0.5F && W.nextInt(100) == 0) { - this.d = null; - return; + // CraftBukkit start + EntityTargetEvent event = new EntityTargetEvent(this.getBukkitEntity(), null, TargetReason.FORGOT_TARGET); + CraftServer server = ((WorldServer) this.l).getServer(); + server.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + if(event.getTarget() == null) { + this.d = null; + } else { + this.d = ((CraftEntity) event.getTarget()).getHandle(); + } + return; + } + // CraftBukkit end } if (f1 > 2.0F && f1 < 6F && W.nextInt(10) == 0) { if (A) {