Paper/patches/api/0466-Deprecate-ItemStack-setType.patch
2024-04-26 17:00:40 -07:00

55 lines
2.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Date: Thu, 29 Feb 2024 17:54:26 -0500
Subject: [PATCH] Deprecate ItemStack#setType
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
index 9440cffffa1d7e75d2d76d55d5608bafd69b645b..91083a135a7e979e32cbb3531b5ef69b7a28f305 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -134,8 +134,18 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
* {@link Material#isItem()} returns false.</b>
*
* @param type New type to set the items in this stack to
+ * @deprecated <b>Setting the material type of ItemStacks is no longer supported.</b>
+ * <p>
+ * This method is deprecated due to potential illegal behavior that may occur
+ * during the context of which this ItemStack is being used, allowing for certain item validation to be bypassed.
+ * It is recommended to instead create a new ItemStack object with the desired
+ * Material type, and if possible, set it in the appropriate context.
+ *
+ * Using this method in ItemStacks passed in events will result in undefined behavior.
+ * @see ItemStack#withType(Material)
*/
@Utility
+ @Deprecated // Paper
public void setType(@NotNull Material type) {
Preconditions.checkArgument(type != null, "Material cannot be null");
this.type = type;
@@ -148,6 +158,24 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
this.data = null;
}
}
+ // Paper start
+ /**
+ * Creates a new ItemStack with the specified Material type, where the item count and item meta is preserved.
+ *
+ * @param type The Material type of the new ItemStack.
+ * @return A new ItemStack instance with the specified Material type.
+ */
+ @NotNull
+ @org.jetbrains.annotations.Contract(value = "_ -> new", pure = true)
+ public ItemStack withType(@NotNull Material type) {
+ ItemStack itemStack = new ItemStack(type, this.amount);
+ if (this.hasItemMeta()) {
+ itemStack.setItemMeta(this.getItemMeta());
+ }
+
+ return itemStack;
+ }
+ // Paper end
/**
* Gets the amount of items in this stack