aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHexedHero <[email protected]>2022-04-18 10:51:45 +0100
committerGitHub <[email protected]>2022-04-18 11:51:45 +0200
commitc66b0f99f230ac752840c1604fc886873b72467c (patch)
tree0710eddea94f51e4f5b995e044139e8955b80b5f
parent8bfb1d22f83921e6c26bae80530fef7f4d3ea8e6 (diff)
downloadPaper-c66b0f99f230ac752840c1604fc886873b72467c.tar.gz
Paper-c66b0f99f230ac752840c1604fc886873b72467c.zip
Add pre-unbreaking amount to PlayerItemDamageEvent (#7724)
-rw-r--r--patches/api/0378-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch52
-rw-r--r--patches/server/0895-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch23
-rw-r--r--test-plugin/src/main/java/io/papermc/paper/testplugin/TestPlugin.java7
3 files changed, 82 insertions, 0 deletions
diff --git a/patches/api/0378-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch b/patches/api/0378-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch
new file mode 100644
index 0000000000..5775b6f33c
--- /dev/null
+++ b/patches/api/0378-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch
@@ -0,0 +1,52 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: HexedHero <[email protected]>
+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 2d049633998b3965ce0f4a6a4cea3169da0d5658..a2993c7434c9775483a1b4628f2f66454b0d666d 100644
+--- a/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java
++++ b/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java
+@@ -15,12 +15,21 @@ 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
+ }
+
+ /**
+@@ -42,6 +51,19 @@ 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/0895-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch b/patches/server/0895-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch
new file mode 100644
index 0000000000..eb5a640d95
--- /dev/null
+++ b/patches/server/0895-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch
@@ -0,0 +1,23 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: HexedHero <[email protected]>
+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 dc4639f905fb71435daf29c61f64621a3e2cc533..6837c965592d4584cfc958a1008b98791a0fc780 100644
+--- a/src/main/java/net/minecraft/world/item/ItemStack.java
++++ b/src/main/java/net/minecraft/world/item/ItemStack.java
+@@ -551,10 +551,11 @@ 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());
+ }
}