From 4acf18a81a009279fa67e87fac95b4ea261d2aaa Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Thu, 4 Apr 2024 17:59:56 +0200 Subject: [PATCH] Check for empty items, add array overload --- ...Add-Raw-Byte-ItemStack-Serialization.patch | 21 +++++++++++++++---- ...-Add-methods-to-get-translation-keys.patch | 4 ++-- patches/api/0264-Item-Rarity-API.patch | 4 ++-- .../api/0282-ItemStack-repair-check-API.patch | 4 ++-- patches/api/0387-ItemStack-damage-API.patch | 4 ++-- ...proper-checking-of-empty-item-stacks.patch | 4 ++-- patches/api/0459-ItemStack-Tooltip-API.patch | 4 ++-- 7 files changed, 29 insertions(+), 16 deletions(-) diff --git a/patches/api/0189-Add-Raw-Byte-ItemStack-Serialization.patch b/patches/api/0189-Add-Raw-Byte-ItemStack-Serialization.patch index a5afbf0a87..b4f3f94979 100644 --- a/patches/api/0189-Add-Raw-Byte-ItemStack-Serialization.patch +++ b/patches/api/0189-Add-Raw-Byte-ItemStack-Serialization.patch @@ -22,7 +22,7 @@ index 688fccdbc5cf831008ef2f27db9d15b0921a7561..e4861a8be534bfeae0385f0197261fa6 // Paper end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index fd3d4dd231d756d51db0155a4c3ad970c4f456ed..a9ca792de95236535f8b6779fce2875e6c3bd2a9 100644 +index fd3d4dd231d756d51db0155a4c3ad970c4f456ed..331faa8c050ce8d3d10d5c4d91f4cb70e7242312 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -26,6 +26,7 @@ import org.jetbrains.annotations.Nullable; @@ -33,7 +33,7 @@ index fd3d4dd231d756d51db0155a4c3ad970c4f456ed..a9ca792de95236535f8b6779fce2875e private Material type = Material.AIR; private int amount = 0; private MaterialData data = null; -@@ -650,6 +651,97 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -650,6 +651,110 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat return Bukkit.getServer().getItemFactory().ensureServerConversions(this); } @@ -62,7 +62,7 @@ index fd3d4dd231d756d51db0155a4c3ad970c4f456ed..a9ca792de95236535f8b6779fce2875e + } + + /** -+ * Serializes a collection of items to raw bytes in NBT. ++ * Serializes a collection of items to raw bytes in NBT. Serializes empty items as null. + *

+ * If you need a string representation to put into a file, you can for example use {@link java.util.Base64} encoding. + * @@ -76,7 +76,7 @@ index fd3d4dd231d756d51db0155a4c3ad970c4f456ed..a9ca792de95236535f8b6779fce2875e + output.writeByte(ARRAY_SERIALIZATION_VERSION); + output.writeInt(items.size()); + for (final ItemStack item : items) { -+ if (item == null) { ++ if (item == null || item.isEmpty()) { + // Ensure the correct order by including empty/null items + output.writeInt(0); + continue; @@ -93,6 +93,19 @@ index fd3d4dd231d756d51db0155a4c3ad970c4f456ed..a9ca792de95236535f8b6779fce2875e + } + + /** ++ * Serializes a collection of items to raw bytes in NBT. Serializes empty items as null. ++ *

++ * If you need a string representation to put into a file, you can for example use {@link java.util.Base64} encoding. ++ * ++ * @param items items to serialize ++ * @return bytes representing the items in NBT ++ * @see #serializeAsBytes() ++ */ ++ public static byte @NotNull [] serializeItemsAsBytes(@Nullable ItemStack @NotNull [] items) { ++ return serializeItemsAsBytes(java.util.Arrays.asList(items)); ++ } ++ ++ /** + * Deserializes this itemstack from raw NBT bytes. + *

+ * If you need a string representation to put into a file, you can for example use {@link java.util.Base64} encoding. diff --git a/patches/api/0211-Add-methods-to-get-translation-keys.patch b/patches/api/0211-Add-methods-to-get-translation-keys.patch index c37e9e2f08..ef987b8bee 100644 --- a/patches/api/0211-Add-methods-to-get-translation-keys.patch +++ b/patches/api/0211-Add-methods-to-get-translation-keys.patch @@ -478,7 +478,7 @@ index 5bd252c0ae3b09fe141d131360c67bb9bfbf5422..78587d9fabe6371a23a7963917b054db + } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 01596d82ec54fdefe0acd7ea776f38c94d4d7d77..221e189503d35b59b364503d0e89dd20d1183c1f 100644 +index 331faa8c050ce8d3d10d5c4d91f4cb70e7242312..8638c26f95eb75ea111087c07a5e736ba63dd964 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -25,7 +25,7 @@ import org.jetbrains.annotations.Nullable; @@ -498,7 +498,7 @@ index 01596d82ec54fdefe0acd7ea776f38c94d4d7d77..221e189503d35b59b364503d0e89dd20 public String getTranslationKey() { return Bukkit.getUnsafe().getTranslationKey(this); } -@@ -944,5 +945,16 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -957,5 +958,16 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat ItemMeta itemMeta = getItemMeta(); return itemMeta != null && itemMeta.hasItemFlag(flag); } diff --git a/patches/api/0264-Item-Rarity-API.patch b/patches/api/0264-Item-Rarity-API.patch index a1f44910d5..089b9d01eb 100644 --- a/patches/api/0264-Item-Rarity-API.patch +++ b/patches/api/0264-Item-Rarity-API.patch @@ -88,10 +88,10 @@ index 72a29fff4c497a2a66e2746ad42553bcb712e20d..22db1d8645a450308fe91d0cd100c926 // Paper end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 221e189503d35b59b364503d0e89dd20d1183c1f..a85877288fe421c4c834db326f54543855df8441 100644 +index 8638c26f95eb75ea111087c07a5e736ba63dd964..b9d60079bdb7ee0db19b03986ff11c0bdf54d068 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -956,5 +956,15 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -969,5 +969,15 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat public @NotNull String translationKey() { return Bukkit.getUnsafe().getTranslationKey(this); } diff --git a/patches/api/0282-ItemStack-repair-check-API.patch b/patches/api/0282-ItemStack-repair-check-API.patch index 7cf982d896..dfd6d44f67 100644 --- a/patches/api/0282-ItemStack-repair-check-API.patch +++ b/patches/api/0282-ItemStack-repair-check-API.patch @@ -26,10 +26,10 @@ index a3810c693d3748fba818e4a835ceb77762f433b9..d9e3e4ad108a94ac6f0f5378d22d4784 * Returns the server's protocol version. * diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index a85877288fe421c4c834db326f54543855df8441..73908f0e8d49377a4fb86c960fde10940998a325 100644 +index b9d60079bdb7ee0db19b03986ff11c0bdf54d068..752f4b23b9450a45c66cd0be9eca5c79c8379e87 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -966,5 +966,27 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -979,5 +979,27 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat public io.papermc.paper.inventory.ItemRarity getRarity() { return Bukkit.getUnsafe().getItemStackRarity(this); } diff --git a/patches/api/0387-ItemStack-damage-API.patch b/patches/api/0387-ItemStack-damage-API.patch index 731baa9c66..b0031e1e78 100644 --- a/patches/api/0387-ItemStack-damage-API.patch +++ b/patches/api/0387-ItemStack-damage-API.patch @@ -65,10 +65,10 @@ index 70953573a7bcfa682dbaeaa8e3db0c847b254fdd..041ff387a0f9e8037e2834118ef241dd // Paper end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 2de0170ddd7c3c9f30cfec0596ede3386b0fb176..0bc0fb38204acb11a48157e8371ff9328e02e8c7 100644 +index 1af246a1149708d333874ba0eda33f9a6743c01b..5f8b7eb48561e9e81e03be3b09c47becc585513a 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -1050,5 +1050,19 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -1063,5 +1063,19 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat public boolean canRepair(@NotNull ItemStack toBeRepaired) { return Bukkit.getUnsafe().isValidRepairItemStack(toBeRepaired, this); } diff --git a/patches/api/0434-Allow-proper-checking-of-empty-item-stacks.patch b/patches/api/0434-Allow-proper-checking-of-empty-item-stacks.patch index c8e4473b7c..68e8d51601 100644 --- a/patches/api/0434-Allow-proper-checking-of-empty-item-stacks.patch +++ b/patches/api/0434-Allow-proper-checking-of-empty-item-stacks.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Allow proper checking of empty item stacks This adds a method to check if an item stack is empty or not. This mirrors vanilla's implementation of the same method. diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 0bc0fb38204acb11a48157e8371ff9328e02e8c7..95dc486f5d93113cb016142a66ffd76fb81d66c3 100644 +index 5f8b7eb48561e9e81e03be3b09c47becc585513a..d84f1fa4c9240f579eb02f9e7a76dbcb080ea81a 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -1064,5 +1064,24 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -1077,5 +1077,24 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat public @NotNull ItemStack damage(int amount, @NotNull org.bukkit.entity.LivingEntity livingEntity) { return livingEntity.damageItemStack(this, amount); } diff --git a/patches/api/0459-ItemStack-Tooltip-API.patch b/patches/api/0459-ItemStack-Tooltip-API.patch index 96c684e62b..6cd69b2fd2 100644 --- a/patches/api/0459-ItemStack-Tooltip-API.patch +++ b/patches/api/0459-ItemStack-Tooltip-API.patch @@ -119,10 +119,10 @@ index f2163b5238e1667a44bf623cd52bab90d9f2d88d..9a65c4f614a6c358d74491794d7b2517 + @NotNull java.util.List computeTooltipLines(@NotNull ItemStack itemStack, @NotNull io.papermc.paper.inventory.tooltip.TooltipContext tooltipContext, @Nullable org.bukkit.entity.Player player); // Paper - expose itemstack tooltip lines } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index f44b587ca5f6fdf09020e60fedf575e479b5d948..a28a588024f3face03d9f5e7682adb95d7e971c1 100644 +index 25155c1ab8f0d8c322adc008085044e391267c8d..6a97df55a72bfc3d503bf448afd7e11be8e87df9 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -1084,4 +1084,21 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat +@@ -1097,4 +1097,21 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat return type.isAir() || amount <= 0; } // Paper end