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.
Dieser Commit ist enthalten in:
Ursprung
e4e994f710
Commit
00efc8c464
@ -94,6 +94,7 @@ public class BlockCactus extends Block {
|
||||
world.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
damagee.setLastDamageCause(event);
|
||||
entity.damageEntity(DamageSource.CACTUS, event.getDamage());
|
||||
}
|
||||
return;
|
||||
|
@ -346,6 +346,7 @@ public abstract class Entity {
|
||||
this.world.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
event.getEntity().setLastDamageCause(event);
|
||||
this.damageEntity(DamageSource.BURN, event.getDamage());
|
||||
}
|
||||
} else {
|
||||
@ -390,6 +391,7 @@ public abstract class Entity {
|
||||
server.getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
damagee.setLastDamageCause(event);
|
||||
this.damageEntity(DamageSource.LAVA, event.getDamage());
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -33,24 +33,30 @@ public class EntitySnowman extends EntityGolem {
|
||||
public void e() {
|
||||
super.e();
|
||||
if (this.aT()) {
|
||||
// CraftBukkit start
|
||||
EntityDamageEvent event = new EntityDamageEvent(this.getBukkitEntity(), EntityDamageEvent.DamageCause.DROWNING, 1);
|
||||
this.world.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
event.getEntity().setLastDamageCause(event);
|
||||
this.damageEntity(DamageSource.DROWN, event.getDamage());
|
||||
}
|
||||
// CraftBukkit end
|
||||
}
|
||||
|
||||
int i = MathHelper.floor(this.locX);
|
||||
int j = MathHelper.floor(this.locZ);
|
||||
|
||||
if (this.world.getBiome(i, j).i() > 1.0F) {
|
||||
// CraftBukkit start
|
||||
EntityDamageEvent event = new EntityDamageEvent(this.getBukkitEntity(), EntityDamageEvent.DamageCause.MELTING, 1);
|
||||
this.world.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
event.getEntity().setLastDamageCause(event);
|
||||
this.damageEntity(DamageSource.BURN, event.getDamage());
|
||||
}
|
||||
// CraftBukkit end
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; ++i) {
|
||||
|
@ -144,6 +144,7 @@ public class Explosion {
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
damagee.setLastDamageCause(event);
|
||||
entity.damageEntity(DamageSource.EXPLOSION, event.getDamage());
|
||||
entity.motX += d0 * d10;
|
||||
entity.motY += d1 * d10;
|
||||
|
@ -58,6 +58,7 @@ public class FoodMetaData {
|
||||
entityhuman.world.getServer().getPluginManager().callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
event.getEntity().setLastDamageCause(event);
|
||||
entityhuman.damageEntity(DamageSource.STARVE, event.getDamage());
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
@ -360,7 +360,12 @@ public class CraftEventFactory {
|
||||
} else {
|
||||
event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, damage);
|
||||
}
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
|
||||
callEvent(event);
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
event.getEntity().setLastDamageCause(event);
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren