aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0792-Remove-CraftItemStack-setAmount-null-assignment.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0792-Remove-CraftItemStack-setAmount-null-assignment.patch')
-rw-r--r--patches/server/0792-Remove-CraftItemStack-setAmount-null-assignment.patch30
1 files changed, 30 insertions, 0 deletions
diff --git a/patches/server/0792-Remove-CraftItemStack-setAmount-null-assignment.patch b/patches/server/0792-Remove-CraftItemStack-setAmount-null-assignment.patch
new file mode 100644
index 0000000000..5b5c421ff2
--- /dev/null
+++ b/patches/server/0792-Remove-CraftItemStack-setAmount-null-assignment.patch
@@ -0,0 +1,30 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Josh Roy <[email protected]>
+Date: Mon, 23 Jan 2023 19:19:01 -0500
+Subject: [PATCH] Remove CraftItemStack#setAmount null assignment
+
+This creates a problem with Paper's item serialization
+api where deserialized items, which are internally
+created as a CraftItemStack, will be completely lost if
+#setAmount(0) is invoked (since the underlying handle
+is set to null), while a regular Bukkit ItemStack
+simply sets the amount field to zero, retaining the
+item's data.
+
+Vanilla treats items with zero amounts the same as items
+with less than zero amounts, so this code doesn't create
+a problem with operations on the vanilla ItemStack.
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+index 08178a88ba7d0881a6c2843eef24a846cf07adb4..4d29c34e221b749b6972c7ed79ac1f86da999ed7 100644
+--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+@@ -186,7 +186,7 @@ public final class CraftItemStack extends ItemStack {
+ }
+
+ this.handle.setCount(amount);
+- if (amount == 0) {
++ if (false && amount == 0) { // Paper - remove CraftItemStack#setAmount null assignment
+ this.handle = null;
+ }
+ }