SPIGOT-7650: Add DamageSource for EntityDeathEvent and PlayerDeathEvent
This commit is contained in:
parent
741b844806
commit
c024a50393
@ -349,7 +349,7 @@
|
|||||||
+
|
+
|
||||||
+ String deathmessage = defaultMessage.getString();
|
+ String deathmessage = defaultMessage.getString();
|
||||||
+ keepLevel = keepInventory; // SPIGOT-2222: pre-set keepLevel
|
+ keepLevel = keepInventory; // SPIGOT-2222: pre-set keepLevel
|
||||||
+ org.bukkit.event.entity.PlayerDeathEvent event = CraftEventFactory.callPlayerDeathEvent(this, loot, deathmessage, keepInventory);
|
+ org.bukkit.event.entity.PlayerDeathEvent event = CraftEventFactory.callPlayerDeathEvent(this, damagesource, loot, deathmessage, keepInventory);
|
||||||
+
|
+
|
||||||
+ // SPIGOT-943 - only call if they have an inventory open
|
+ // SPIGOT-943 - only call if they have an inventory open
|
||||||
+ if (this.containerMenu != this.inventoryMenu) {
|
+ if (this.containerMenu != this.inventoryMenu) {
|
||||||
|
@ -596,7 +596,7 @@
|
|||||||
this.dropCustomDeathLoot(damagesource, i, flag);
|
this.dropCustomDeathLoot(damagesource, i, flag);
|
||||||
}
|
}
|
||||||
+ // CraftBukkit start - Call death event
|
+ // CraftBukkit start - Call death event
|
||||||
+ CraftEventFactory.callEntityDeathEvent(this, this.drops);
|
+ CraftEventFactory.callEntityDeathEvent(this, damagesource, this.drops);
|
||||||
+ this.drops = new ArrayList<>();
|
+ this.drops = new ArrayList<>();
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@
|
|||||||
this.setItemSlot(enumitemslot, itemstack.copyWithCount(1));
|
this.setItemSlot(enumitemslot, itemstack.copyWithCount(1));
|
||||||
return true;
|
return true;
|
||||||
} else if (!itemstack.isEmpty() && itemstack.getCount() > 1) {
|
} else if (!itemstack.isEmpty() && itemstack.getCount() > 1) {
|
||||||
@@ -423,15 +465,26 @@
|
@@ -423,18 +465,29 @@
|
||||||
entityhuman.setItemInHand(enumhand, itemstack1);
|
entityhuman.setItemInHand(enumhand, itemstack1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -92,12 +92,13 @@
|
|||||||
public boolean hurt(DamageSource damagesource, float f) {
|
public boolean hurt(DamageSource damagesource, float f) {
|
||||||
if (!this.level().isClientSide && !this.isRemoved()) {
|
if (!this.level().isClientSide && !this.isRemoved()) {
|
||||||
if (damagesource.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) {
|
if (damagesource.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) {
|
||||||
|
- this.kill();
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f)) {
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f)) {
|
||||||
+ return false;
|
+ return false;
|
||||||
+ }
|
+ }
|
||||||
|
+ this.kill(damagesource); // CraftBukkit
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
this.kill();
|
|
||||||
return false;
|
return false;
|
||||||
- } else if (!this.isInvulnerableTo(damagesource) && !this.invisible && !this.isMarker()) {
|
- } else if (!this.isInvulnerableTo(damagesource) && !this.invisible && !this.isMarker()) {
|
||||||
+ } else if (!this.isInvulnerableTo(damagesource) && (true || !this.invisible) && !this.isMarker()) { // CraftBukkit
|
+ } else if (!this.isInvulnerableTo(damagesource) && (true || !this.invisible) && !this.isMarker()) { // CraftBukkit
|
||||||
@ -108,7 +109,20 @@
|
|||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
if (damagesource.is(DamageTypeTags.IS_EXPLOSION)) {
|
if (damagesource.is(DamageTypeTags.IS_EXPLOSION)) {
|
||||||
this.brokenByAnything(damagesource);
|
this.brokenByAnything(damagesource);
|
||||||
this.kill();
|
- this.kill();
|
||||||
|
+ this.kill(damagesource); // CraftBukkit
|
||||||
|
return false;
|
||||||
|
} else if (damagesource.is(DamageTypeTags.IGNITES_ARMOR_STANDS)) {
|
||||||
|
if (this.isOnFire()) {
|
||||||
|
@@ -467,7 +520,7 @@
|
||||||
|
if (damagesource.isCreativePlayer()) {
|
||||||
|
this.playBrokenSound();
|
||||||
|
this.showBreakingParticles();
|
||||||
|
- this.kill();
|
||||||
|
+ this.kill(damagesource); // CraftBukkit
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
long i = this.level().getGameTime();
|
||||||
@@ -479,7 +532,7 @@
|
@@ -479,7 +532,7 @@
|
||||||
} else {
|
} else {
|
||||||
this.brokenByPlayer(damagesource);
|
this.brokenByPlayer(damagesource);
|
||||||
@ -118,6 +132,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@@ -532,7 +585,7 @@
|
||||||
|
f1 -= f;
|
||||||
|
if (f1 <= 0.5F) {
|
||||||
|
this.brokenByAnything(damagesource);
|
||||||
|
- this.kill();
|
||||||
|
+ this.kill(damagesource); // CraftBukkit
|
||||||
|
} else {
|
||||||
|
this.setHealth(f1);
|
||||||
|
this.gameEvent(GameEvent.ENTITY_DAMAGE, damagesource.getEntity());
|
||||||
@@ -544,13 +597,13 @@
|
@@ -544,13 +597,13 @@
|
||||||
ItemStack itemstack = new ItemStack(Items.ARMOR_STAND);
|
ItemStack itemstack = new ItemStack(Items.ARMOR_STAND);
|
||||||
|
|
||||||
@ -156,7 +179,7 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -660,9 +714,17 @@
|
@@ -660,9 +714,23 @@
|
||||||
return this.isSmall();
|
return this.isSmall();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,8 +193,14 @@
|
|||||||
@Override
|
@Override
|
||||||
public void kill() {
|
public void kill() {
|
||||||
- this.remove(Entity.RemovalReason.KILLED);
|
- this.remove(Entity.RemovalReason.KILLED);
|
||||||
+ org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDeathEvent(this, drops); // CraftBukkit - call event
|
+ // CraftBukkit start - pass DamageSource for kill
|
||||||
|
+ this.kill(null);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public void kill(DamageSource damageSource) {
|
||||||
|
+ org.bukkit.craftbukkit.event.CraftEventFactory.callEntityDeathEvent(this, (damageSource == null ? this.damageSources().genericKill() : damageSource), drops); // CraftBukkit - call event
|
||||||
+ this.remove(Entity.RemovalReason.KILLED, EntityRemoveEvent.Cause.DEATH); // CraftBukkit - add Bukkit remove cause
|
+ this.remove(Entity.RemovalReason.KILLED, EntityRemoveEvent.Cause.DEATH); // CraftBukkit - add Bukkit remove cause
|
||||||
|
+ // CraftBukkit end
|
||||||
this.gameEvent(GameEvent.ENTITY_DIE);
|
this.gameEvent(GameEvent.ENTITY_DIE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -880,13 +880,14 @@ public class CraftEventFactory {
|
|||||||
return !event.isCancelled();
|
return !event.isCancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EntityDeathEvent callEntityDeathEvent(EntityLiving victim) {
|
public static EntityDeathEvent callEntityDeathEvent(EntityLiving victim, DamageSource damageSource) {
|
||||||
return callEntityDeathEvent(victim, new ArrayList<org.bukkit.inventory.ItemStack>(0));
|
return callEntityDeathEvent(victim, damageSource, new ArrayList<org.bukkit.inventory.ItemStack>(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EntityDeathEvent callEntityDeathEvent(EntityLiving victim, List<org.bukkit.inventory.ItemStack> drops) {
|
public static EntityDeathEvent callEntityDeathEvent(EntityLiving victim, DamageSource damageSource, List<org.bukkit.inventory.ItemStack> drops) {
|
||||||
CraftLivingEntity entity = (CraftLivingEntity) victim.getBukkitEntity();
|
CraftLivingEntity entity = (CraftLivingEntity) victim.getBukkitEntity();
|
||||||
EntityDeathEvent event = new EntityDeathEvent(entity, drops, victim.getExpReward());
|
CraftDamageSource bukkitDamageSource = new CraftDamageSource(damageSource);
|
||||||
|
EntityDeathEvent event = new EntityDeathEvent(entity, bukkitDamageSource, drops, victim.getExpReward());
|
||||||
CraftWorld world = (CraftWorld) entity.getWorld();
|
CraftWorld world = (CraftWorld) entity.getWorld();
|
||||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||||
|
|
||||||
@ -901,9 +902,10 @@ public class CraftEventFactory {
|
|||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerDeathEvent callPlayerDeathEvent(EntityPlayer victim, List<org.bukkit.inventory.ItemStack> drops, String deathMessage, boolean keepInventory) {
|
public static PlayerDeathEvent callPlayerDeathEvent(EntityPlayer victim, DamageSource damageSource, List<org.bukkit.inventory.ItemStack> drops, String deathMessage, boolean keepInventory) {
|
||||||
CraftPlayer entity = victim.getBukkitEntity();
|
CraftPlayer entity = victim.getBukkitEntity();
|
||||||
PlayerDeathEvent event = new PlayerDeathEvent(entity, drops, victim.getExpReward(), 0, deathMessage);
|
CraftDamageSource bukkitDamageSource = new CraftDamageSource(damageSource);
|
||||||
|
PlayerDeathEvent event = new PlayerDeathEvent(entity, bukkitDamageSource, drops, victim.getExpReward(), 0, deathMessage);
|
||||||
event.setKeepInventory(keepInventory);
|
event.setKeepInventory(keepInventory);
|
||||||
event.setKeepLevel(victim.keepLevel); // SPIGOT-2222: pre-set keepLevel
|
event.setKeepLevel(victim.keepLevel); // SPIGOT-2222: pre-set keepLevel
|
||||||
org.bukkit.World world = entity.getWorld();
|
org.bukkit.World world = entity.getWorld();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user