From c97fa40d2b8cbd74857c7dd596106771d3156f87 Mon Sep 17 00:00:00 2001 From: Dinnerbone Date: Thu, 24 Feb 2011 12:49:48 +0000 Subject: [PATCH] Fixed ENTITY_DAMAGE involving slimes (per DHowet) --- .../java/net/minecraft/server/EntityHuman.java | 16 ++++++++++++++++ .../java/net/minecraft/server/EntityMonster.java | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 54a5219ef6..c509e60034 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -357,6 +357,22 @@ public abstract class EntityHuman extends EntityLiving { } } + // CraftBukkit start - this is here instead of EntityMonster because EntityLiving(s) that aren't monsters + // also damage the player in this way. For example, EntitySlime. + if (entity instanceof EntityLiving) { + CraftServer server = ((WorldServer) this.world).getServer(); + org.bukkit.entity.Entity damager = entity.getBukkitEntity(); + org.bukkit.entity.Entity damagee = this.getBukkitEntity(); + DamageCause damageType = EntityDamageEvent.DamageCause.ENTITY_ATTACK; + EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(damager, damagee, damageType, i); + server.getPluginManager().callEvent(event); + + if (event.isCancelled()) { + return false; + } + } + // CraftBukkit end + return i == 0 ? false : super.a(entity, i); } } diff --git a/src/main/java/net/minecraft/server/EntityMonster.java b/src/main/java/net/minecraft/server/EntityMonster.java index 9ad79aaf56..d06311b3c4 100644 --- a/src/main/java/net/minecraft/server/EntityMonster.java +++ b/src/main/java/net/minecraft/server/EntityMonster.java @@ -79,8 +79,10 @@ public class EntityMonster extends EntityCreature implements IMonster { protected void a(Entity entity, float f) { if ((double) f < 1.5D && entity.boundingBox.e > this.boundingBox.b && entity.boundingBox.b < this.boundingBox.e) { this.attackTicks = 20; - // CraftBukkit start - if (entity instanceof EntityLiving) { + // CraftBukkit start - this is still duplicated here and EntityHuman because it's possible for an EntityMonster + // to damage another EntityMonster, and we want to catch those events. + // This does not fire events for slime attacks, as they're not an EntityMonster. + if (entity instanceof EntityLiving && !(entity instanceof EntityHuman)) { CraftServer server = ((WorldServer) this.world).getServer(); org.bukkit.entity.Entity damager = this.getBukkitEntity(); org.bukkit.entity.Entity damagee = (entity == null) ? null : entity.getBukkitEntity();