Fix totems negating incorrect item (#11776)

This commit is contained in:
Owen 2024-12-22 23:58:01 -05:00 committed by GitHub
parent f8bf600375
commit 188124bcc3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -668,22 +668,25 @@
if (deathProtection != null) { if (deathProtection != null) {
+ hand = interactionHand; // CraftBukkit + hand = interactionHand; // CraftBukkit
itemStack = itemInHand.copy(); itemStack = itemInHand.copy();
- itemInHand.shrink(1);
+ // itemInHand.shrink(1); // CraftBukkit + // itemInHand.shrink(1); // CraftBukkit
break; + break;
} + }
} + }
+
- if (itemStack != null) {
- if (this instanceof ServerPlayer serverPlayer) {
+ org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; + org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null;
+ EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); + EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot);
+ event.setCancelled(itemStack == null); + event.setCancelled(itemStack == null);
+ this.level().getCraftServer().getPluginManager().callEvent(event); + this.level().getCraftServer().getPluginManager().callEvent(event);
+ +
+ if (!event.isCancelled()) { + if (!event.isCancelled()) {
+ if (!itemStack.isEmpty() && itemStack != null) { // Paper - only reduce item if actual totem was found + if (!itemInHand.isEmpty() && itemStack != null) { // Paper - only reduce item if actual totem was found
+ itemStack.shrink(1); itemInHand.shrink(1);
- break;
- }
- }
-
- if (itemStack != null) {
- if (this instanceof ServerPlayer serverPlayer) {
+ } + }
+ // Paper start - fix NPE when pre-cancelled EntityResurrectEvent is uncancelled + // Paper start - fix NPE when pre-cancelled EntityResurrectEvent is uncancelled
+ // restore the previous behavior in that case by defaulting to vanillas totem of undying efect + // restore the previous behavior in that case by defaulting to vanillas totem of undying efect