From ab1b31206418cbb0e3528361ee60aacc76447a58 Mon Sep 17 00:00:00 2001 From: Tamion <70228790+notTamion@users.noreply.github.com> Date: Mon, 13 Jan 2025 00:29:52 +0100 Subject: [PATCH] Call PlayerItemDamageEvent for tridents (#11899) --- .../features/0028-Optimize-Hoppers.patch | 4 +-- .../minecraft/world/item/ItemStack.java.patch | 28 ++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/paper-server/patches/features/0028-Optimize-Hoppers.patch b/paper-server/patches/features/0028-Optimize-Hoppers.patch index 0536fe611d3c..3625f8dfce87 100644 --- a/paper-server/patches/features/0028-Optimize-Hoppers.patch +++ b/paper-server/patches/features/0028-Optimize-Hoppers.patch @@ -60,10 +60,10 @@ index cc2d442682496197d29ace79b22e6cf6fb7edf5e..ae220a732c78ab076261f20b5a54c71d /* Drop global time updates if (this.tickCount % 20 == 0) { diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index 0eb9811e573f0c38de3eeb17099872efcbb4c2dd..b511fe8295369ac4014beb351cd2e3f770c10170 100644 +index b393be76bead3c66ab0bd8a0e6fd9b9ef81d8e28..76f50437396f8f856381d0fbef52953ef7c263f6 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -808,10 +808,16 @@ public final class ItemStack implements DataComponentHolder { +@@ -827,10 +827,16 @@ public final class ItemStack implements DataComponentHolder { } public ItemStack copy() { diff --git a/paper-server/patches/sources/net/minecraft/world/item/ItemStack.java.patch b/paper-server/patches/sources/net/minecraft/world/item/ItemStack.java.patch index 297a82f02d1d..e0ed9f76a08e 100644 --- a/paper-server/patches/sources/net/minecraft/world/item/ItemStack.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/item/ItemStack.java.patch @@ -292,7 +292,33 @@ this.shrink(1); onBreak.accept(item); } -@@ -512,9 +_,14 @@ +@@ -506,15 +_,39 @@ + return; + } + +- int min = Math.min(this.getDamageValue() + i, this.getMaxDamage() - 1); ++ int min = Math.min(this.getDamageValue() + i, this.getMaxDamage() - 1); // Paper - Expand PlayerItemDamageEvent - diff on change as min computation is copied post event. ++ ++ // Paper start - Expand PlayerItemDamageEvent ++ if (min - this.getDamageValue() > 0) { ++ org.bukkit.event.player.PlayerItemDamageEvent event = new org.bukkit.event.player.PlayerItemDamageEvent( ++ serverPlayer.getBukkitEntity(), ++ org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(this), ++ min - this.getDamageValue(), ++ damage ++ ); ++ if (!event.callEvent() || event.getDamage() == 0) { ++ return; ++ } ++ ++ // Prevent breaking the item in this code path as callers may expect the item to survive ++ // (given the method name) ++ min = Math.min(this.getDamageValue() + event.getDamage(), this.getMaxDamage() - 1); ++ } ++ // Paper end - Expand PlayerItemDamageEvent ++ + this.applyDamage(min, serverPlayer, item -> {}); + } } public void hurtAndBreak(int amount, LivingEntity entity, EquipmentSlot slot) {