Apply setLastDamageCause after processing events and the event has not been canceled. Fixes BUKKIT-1881

This allows previous causes to be available during the event, as well as making the damage cause a valid one. If EntityDamageEvent is canceled, then it's not the last DamageCause.

Also prevents setting DamageCause involuntarily through construction.
This commit is contained in:
feildmaster
2012-07-01 05:04:06 -05:00
parent e4e994f710
commit 00efc8c464
7 changed files with 20 additions and 1 deletions

View File

@@ -274,6 +274,7 @@ public abstract class EntityLiving extends Entity {
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
event.getEntity().setLastDamageCause(event);
this.damageEntity(DamageSource.STUCK, event.getDamage());
}
// CraftBukkit end
@@ -301,6 +302,7 @@ public abstract class EntityLiving extends Entity {
this.world.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled() && event.getDamage() != 0) {
event.getEntity().setLastDamageCause(event);
this.damageEntity(DamageSource.DROWN, event.getDamage());
}
// CraftBukkit end
@@ -1362,6 +1364,7 @@ public abstract class EntityLiving extends Entity {
return;
}
event.getEntity().setLastDamageCause(event);
this.damageEntity(DamageSource.OUT_OF_WORLD, event.getDamage());
// CraftBukkit end
}