Fix entity armor not showing on death animation (#7355)

This commit is contained in:
Jake Potrebic 2022-02-18 10:16:41 -08:00
parent 722983fbc7
commit 82a3c96a4f
3 changed files with 24 additions and 13 deletions

View file

@ -72,8 +72,6 @@ public net.minecraft.server.level.ChunkMap getPoiManager()Lnet/minecraft/world/e
# Improve death events # Improve death events
public net.minecraft.world.entity.LivingEntity getDeathSound()Lnet/minecraft/sounds/SoundEvent; public net.minecraft.world.entity.LivingEntity getDeathSound()Lnet/minecraft/sounds/SoundEvent;
public net.minecraft.world.entity.LivingEntity getSoundVolume()F public net.minecraft.world.entity.LivingEntity getSoundVolume()F
public net.minecraft.world.entity.Mob handItems
public net.minecraft.world.entity.Mob armorItems
# Add sun related api # Add sun related api
public net.minecraft.world.entity.Mob isSunBurnTick()Z public net.minecraft.world.entity.Mob isSunBurnTick()Z

View file

@ -94,11 +94,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+ // entityliving.awardKillScore(this, this.deathScore, source); + // entityliving.awardKillScore(this, this.deathScore, source);
+ // } + // }
// Paper start - clear equipment if event is not cancelled // Paper start - clear equipment if event is not cancelled
if (this instanceof Mob mob) { if (this instanceof Mob) {
java.util.Collections.fill(mob.handItems, ItemStack.EMPTY); for (EquipmentSlot slot : this.clearedEquipmentSlots) {
@@ -0,0 +0,0 @@ public abstract class LivingEntity extends Entity { @@ -0,0 +0,0 @@ public abstract class LivingEntity extends Entity {
this.dropCustomDeathLoot(source, i, flag); this.dropCustomDeathLoot(source, i, flag);
this.clearEquipmentSlots = true; // Paper this.clearEquipmentSlots = prev; // Paper
} }
- // CraftBukkit start - Call death event - // CraftBukkit start - Call death event
- org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops); // Paper - org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops); // Paper

View file

@ -131,9 +131,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
+ entityliving.awardKillScore(this, this.deathScore, source); + entityliving.awardKillScore(this, this.deathScore, source);
+ } + }
+ // Paper start - clear equipment if event is not cancelled + // Paper start - clear equipment if event is not cancelled
+ if (this instanceof Mob mob) { + if (this instanceof Mob) {
+ java.util.Collections.fill(mob.handItems, ItemStack.EMPTY); + for (EquipmentSlot slot : this.clearedEquipmentSlots) {
+ java.util.Collections.fill(mob.armorItems, ItemStack.EMPTY); + this.setItemSlot(slot, ItemStack.EMPTY);
+ }
+ this.clearedEquipmentSlots.clear();
+ } + }
+ // Paper end + // Paper end
+ +
@ -178,8 +180,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
} }
- protected void dropAllDeathLoot(DamageSource source) { - protected void dropAllDeathLoot(DamageSource source) {
+ protected boolean clearEquipmentSlots = true; // Paper + // Paper start
+ protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) { // Paper + protected boolean clearEquipmentSlots = true;
+ protected Set<EquipmentSlot> clearedEquipmentSlots = new java.util.HashSet<>();
+ protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) {
+ // Paper end
Entity entity = source.getEntity(); Entity entity = source.getEntity();
int i; int i;
@ -187,9 +192,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
this.dropEquipment(); // CraftBukkit - from below this.dropEquipment(); // CraftBukkit - from below
if (this.shouldDropLoot() && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { if (this.shouldDropLoot() && this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
this.dropFromLootTable(source, flag); this.dropFromLootTable(source, flag);
+ this.clearEquipmentSlots = false; // Paper + // Paper start
+ final boolean prev = this.clearEquipmentSlots;
+ this.clearEquipmentSlots = false;
+ this.clearedEquipmentSlots.clear();
+ // Paper end
this.dropCustomDeathLoot(source, i, flag); this.dropCustomDeathLoot(source, i, flag);
+ this.clearEquipmentSlots = true; // Paper + this.clearEquipmentSlots = prev; // Paper
} }
// CraftBukkit start - Call death event // CraftBukkit start - Call death event
- CraftEventFactory.callEntityDeathEvent(this, this.drops); - CraftEventFactory.callEntityDeathEvent(this, this.drops);
@ -218,7 +227,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
this.spawnAtLocation(itemstack); this.spawnAtLocation(itemstack);
+ if (this.clearEquipmentSlots) { // Paper + if (this.clearEquipmentSlots) { // Paper
this.setItemSlot(enumitemslot, ItemStack.EMPTY); this.setItemSlot(enumitemslot, ItemStack.EMPTY);
+ } // Paper + // Paper start
+ } else {
+ this.clearedEquipmentSlots.add(enumitemslot);
+ }
+ // Paper end
} }
} }