diff --git a/patches/api/Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch b/patches/api/Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch new file mode 100644 index 0000000000..ac671fb4f5 --- /dev/null +++ b/patches/api/Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch @@ -0,0 +1,52 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: HexedHero <6012891+HexedHero@users.noreply.github.com> +Date: Sun, 10 Apr 2022 06:21:19 +0100 +Subject: [PATCH] Add pre-unbreaking amount to PlayerItemDamageEvent + + +diff --git a/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java b/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java ++++ b/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java +@@ -0,0 +0,0 @@ public class PlayerItemDamageEvent extends PlayerEvent implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + private final ItemStack item; + private int damage; ++ private int originalDamage; // Paper - Add pre-reduction damage + private boolean cancelled = false; + ++ @Deprecated // Paper - Add pre-reduction damage + public PlayerItemDamageEvent(@NotNull Player player, @NotNull ItemStack what, int damage) { ++ // Paper start - Add pre-reduction damage ++ this(player, what, damage, damage); ++ } ++ ++ public PlayerItemDamageEvent(@NotNull Player player, @NotNull ItemStack what, int damage, int originalDamage) { + super(player); + this.item = what; + this.damage = damage; ++ this.originalDamage = originalDamage; ++ // Paper end + } + + /** +@@ -0,0 +0,0 @@ public class PlayerItemDamageEvent extends PlayerEvent implements Cancellable { + return damage; + } + ++ // Paper start - Add pre-reduction damage ++ /** ++ * Gets the amount of durability damage this item would have taken before ++ * the Unbreaking reduction. If the item has no Unbreaking level then ++ * this value will be the same as the {@link #getDamage()} value. ++ * ++ * @return pre-reduction damage amount ++ */ ++ public int getOriginalDamage() { ++ return originalDamage; ++ } ++ // Paper end ++ + public void setDamage(int damage) { + this.damage = damage; + } diff --git a/patches/server/Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch b/patches/server/Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch new file mode 100644 index 0000000000..0876f96229 --- /dev/null +++ b/patches/server/Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch @@ -0,0 +1,23 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: HexedHero <6012891+HexedHero@users.noreply.github.com> +Date: Sun, 10 Apr 2022 06:26:32 +0100 +Subject: [PATCH] Add pre-unbreaking amount to PlayerItemDamageEvent + + +diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/item/ItemStack.java ++++ b/src/main/java/net/minecraft/world/item/ItemStack.java +@@ -0,0 +0,0 @@ public final class ItemStack { + } + } + ++ int originalDamage = amount; // Paper + amount -= k; + // CraftBukkit start + if (player instanceof ServerPlayer serverPlayer) { // Paper +- PlayerItemDamageEvent event = new PlayerItemDamageEvent(serverPlayer.getBukkitEntity(), CraftItemStack.asCraftMirror(this), amount); // Paper ++ PlayerItemDamageEvent event = new PlayerItemDamageEvent(serverPlayer.getBukkitEntity(), CraftItemStack.asCraftMirror(this), amount, originalDamage); // Paper + event.getPlayer().getServer().getPluginManager().callEvent(event); + + if (amount != event.getDamage() || event.isCancelled()) { diff --git a/test-plugin/src/main/java/io/papermc/paper/testplugin/TestPlugin.java b/test-plugin/src/main/java/io/papermc/paper/testplugin/TestPlugin.java index a0c78b9d68..45279181cc 100644 --- a/test-plugin/src/main/java/io/papermc/paper/testplugin/TestPlugin.java +++ b/test-plugin/src/main/java/io/papermc/paper/testplugin/TestPlugin.java @@ -1,6 +1,8 @@ package io.papermc.paper.testplugin; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemDamageEvent; import org.bukkit.plugin.java.JavaPlugin; public final class TestPlugin extends JavaPlugin implements Listener { @@ -8,4 +10,9 @@ public final class TestPlugin extends JavaPlugin implements Listener { public void onEnable() { this.getServer().getPluginManager().registerEvents(this, this); } + + @EventHandler + public void a(PlayerItemDamageEvent event) { + System.out.println(event.getOriginalDamage() + " to " + event.getDamage()); + } }