aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0788-ItemStack-damage-API.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0788-ItemStack-damage-API.patch')
-rw-r--r--patches/server/0788-ItemStack-damage-API.patch32
1 files changed, 30 insertions, 2 deletions
diff --git a/patches/server/0788-ItemStack-damage-API.patch b/patches/server/0788-ItemStack-damage-API.patch
index b6c586f282..ba4a14ae11 100644
--- a/patches/server/0788-ItemStack-damage-API.patch
+++ b/patches/server/0788-ItemStack-damage-API.patch
@@ -10,8 +10,36 @@ the logic associated with damaging them
== AT ==
public net.minecraft.world.entity.LivingEntity entityEventForEquipmentBreak(Lnet/minecraft/world/entity/EquipmentSlot;)B
+diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
+index acce1b72185d4687ef5a72dd4014d87149f4b092..dc473b46394b41d951b68ed0eb6993e6807a0d29 100644
+--- a/src/main/java/net/minecraft/world/item/ItemStack.java
++++ b/src/main/java/net/minecraft/world/item/ItemStack.java
+@@ -713,7 +713,14 @@ public final class ItemStack implements DataComponentHolder {
+ return;
+ }
+ }
++ // Paper start - ItemStack damage API - split hurtAndBreak to skip pre-checks like creative mode
++ this.hurtAndBreakWithoutChecks(amount, entity, slot);
++ }
++ }
+
++ public void hurtAndBreakWithoutChecks(int amount, LivingEntity entity, @org.checkerframework.checker.nullness.qual.Nullable EquipmentSlot slot) {
++ {
++ // Paper end - ItemStack damage API - split hurtAndBreak to skip pre-checks like creative mode
+ RandomSource randomsource = entity.getRandom();
+ ServerPlayer entityplayer;
+
+@@ -726,7 +733,7 @@ public final class ItemStack implements DataComponentHolder {
+ }
+
+ this.hurtAndBreak(amount, randomsource, entity, () -> { // Paper - Add EntityDamageItemEvent
+- entity.broadcastBreakEvent(slot);
++ if (slot != null) entity.broadcastBreakEvent(slot); // Paper - ItemStack damage API - slot is nullable
+ Item item = this.getItem();
+ // CraftBukkit start - Check for item breaking
+ if (this.count == 1 && entity instanceof net.minecraft.world.entity.player.Player) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
-index 2537d4d4ec1243f3b80ec13a6b863ec6de619919..f866a3c2f5ec5954bab9de5f8d3e2a8c55824805 100644
+index 2537d4d4ec1243f3b80ec13a6b863ec6de619919..6cf60ff71e398dbf6110f94a00e9bb973916a7f8 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -1103,4 +1103,48 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
@@ -59,7 +87,7 @@ index 2537d4d4ec1243f3b80ec13a6b863ec6de619919..f866a3c2f5ec5954bab9de5f8d3e2a8c
+ }
+
+ private void damageItemStack0(final net.minecraft.world.item.ItemStack nmsStack, final int amount, final net.minecraft.world.entity.EquipmentSlot slot) {
-+ nmsStack.hurtAndBreak(amount, this.getHandle(), slot);
++ nmsStack.hurtAndBreakWithoutChecks(amount, this.getHandle(), slot);
+ }
+ // Paper end - ItemStack damage API
}