Skip to content

Commit

Permalink
Check for empty items, add varargs overload
Browse files Browse the repository at this point in the history
  • Loading branch information
kennytv committed Apr 4, 2024
1 parent c43ed96 commit 456d09a
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 16 deletions.
21 changes: 17 additions & 4 deletions patches/api/0189-Add-Raw-Byte-ItemStack-Serialization.patch
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}

Expand Down Expand Up @@ -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.
+ * <p>
+ * If you need a string representation to put into a file, you can for example use {@link java.util.Base64} encoding.
+ *
Expand All @@ -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;
Expand All @@ -93,6 +93,19 @@ index fd3d4dd231d756d51db0155a4c3ad970c4f456ed..a9ca792de95236535f8b6779fce2875e
+ }
+
+ /**
+ * Serializes a collection of items to raw bytes in NBT. Serializes empty items as null.
+ * <p>
+ * 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.
+ * <p>
+ * If you need a string representation to put into a file, you can for example use {@link java.util.Base64} encoding.
Expand Down
4 changes: 2 additions & 2 deletions patches/api/0211-Add-methods-to-get-translation-keys.patch
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions patches/api/0264-Item-Rarity-API.patch
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions patches/api/0282-ItemStack-repair-check-API.patch
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions patches/api/0387-ItemStack-damage-API.patch
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions patches/api/0459-ItemStack-Tooltip-API.patch
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,10 @@ index f2163b5238e1667a44bf623cd52bab90d9f2d88d..9a65c4f614a6c358d74491794d7b2517
+ @NotNull java.util.List<net.kyori.adventure.text.Component> 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
Expand Down

0 comments on commit 456d09a

Please sign in to comment.