diff options
author | Bjarne Koll <[email protected]> | 2024-07-12 20:47:08 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2024-07-12 20:47:08 +0200 |
commit | 5a503d7db42eee8d287b7ed32db22a369e9e3146 (patch) | |
tree | 0fbe7b8b146691737b8b60a92667268fae4ee57d /patches/server/1040-Correctly-call-PlayerItemBreakEvent.patch | |
parent | ffe31a1cd057d1ded5eedad6c0236d8efa8aedfd (diff) | |
download | Paper-5a503d7db42eee8d287b7ed32db22a369e9e3146.tar.gz Paper-5a503d7db42eee8d287b7ed32db22a369e9e3146.zip |
Bulk bugfixes for itemstack damage API (#11063)
A general set of bugfixes for itemstack damage related logic.
1. Prevent NPE when calling deprecated ItemStack#getMaxItemUseDuration()
2. Do not apply enchantments when damaging items via API
3. Do not error when passing a null equipment slot to hurtAndBreak
4. Correctly call PlayerItemBreakEvent
Diffstat (limited to 'patches/server/1040-Correctly-call-PlayerItemBreakEvent.patch')
-rw-r--r-- | patches/server/1040-Correctly-call-PlayerItemBreakEvent.patch | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/patches/server/1040-Correctly-call-PlayerItemBreakEvent.patch b/patches/server/1040-Correctly-call-PlayerItemBreakEvent.patch new file mode 100644 index 0000000000..6637cd6cd0 --- /dev/null +++ b/patches/server/1040-Correctly-call-PlayerItemBreakEvent.patch @@ -0,0 +1,34 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Bjarne Koll <[email protected]> +Date: Fri, 12 Jul 2024 19:09:44 +0200 +Subject: [PATCH] Correctly call PlayerItemBreakEvent + +The minecraft 1.21 update changed the invocation order in +ItemStack#hurtAndBreak, now first shrinking the itemstack to a count of +zero and then invoking the break callback. + +This leads to spigots logic no longer firing at all. This patch now +correctly executes on count of zero and temporarily bumps the count to +one before passing it to event handlers to maintain compatibility with +the event contracts. + +This fix was chosen over invoking the callback prior to shrinking the +stack to not disrupt potential new vanilla changes that might depend on +this behaviour. + +diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java +index 0f2b3c5ca88478a541bf9e61ae61cc99a7d08836..2c312c0b741fb96a008881e9e01fa660a1fb63ab 100644 +--- a/src/main/java/net/minecraft/world/item/ItemStack.java ++++ b/src/main/java/net/minecraft/world/item/ItemStack.java +@@ -731,8 +731,10 @@ public final class ItemStack implements DataComponentHolder { + + this.hurtAndBreak(amount, worldserver, entity, (item) -> { // Paper - Add EntityDamageItemEvent + // CraftBukkit start - Check for item breaking +- if (this.count == 1 && entity instanceof net.minecraft.world.entity.player.Player) { ++ if (this.count == 0 && entity instanceof net.minecraft.world.entity.player.Player) { // Paper - correctly call item break event - run if count reached 0 ++ this.setCount(1); // Paper - correctly call item break event - grow to count 1 + org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((net.minecraft.world.entity.player.Player) entity, this); ++ this.setCount(0); // Paper - correctly call item break event - reset to count 0 + } + // CraftBukkit end + if (slot != null) entity.onEquippedItemBroken(item, slot); // Paper - itemstack damage API - do not process entity related callbacks when damaging from API |