Fixed ENTITY_DAMAGE involving slimes (per DHowet)

This commit is contained in:
Dinnerbone 2011-02-24 12:49:48 +00:00
parent 51be9e77c6
commit c97fa40d2b
2 changed files with 20 additions and 2 deletions

View File

@ -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);
}
}

View File

@ -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();