Paper/patches/api/0462-Deprecate-ItemStack-setType.patch
Riley Park f17519338b
Expose server build information (#10729)
* Expose server build information

* squash patches

* final tweaks

---------

Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
Co-authored-by: masmc05 <masmc05@gmail.com>
2024-05-15 17:06:59 -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 8db71bd075b8ece36c6f0dc0339841df9257038b..4818b4e6583414fa98194bb6f3c5dbd4bd95be3a 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -136,8 +136,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;
@@ -150,6 +160,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