diff options
Diffstat (limited to 'patches/api/0287-ItemStack-editMeta.patch')
-rw-r--r-- | patches/api/0287-ItemStack-editMeta.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/patches/api/0287-ItemStack-editMeta.patch b/patches/api/0287-ItemStack-editMeta.patch new file mode 100644 index 0000000000..7893a035c9 --- /dev/null +++ b/patches/api/0287-ItemStack-editMeta.patch @@ -0,0 +1,61 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Riley Park <[email protected]> +Date: Sun, 23 May 2021 05:04:28 -0700 +Subject: [PATCH] ItemStack#editMeta + + +diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java +index 2d945516ec65ffe103479aea218b3002cc572dc1..f9faef1b73b5027a3d22e76a0b33b7c952f3ae08 100644 +--- a/src/main/java/org/bukkit/inventory/ItemStack.java ++++ b/src/main/java/org/bukkit/inventory/ItemStack.java +@@ -547,6 +547,50 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat + return result.ensureServerConversions(); // Paper + } + ++ // Paper start ++ /** ++ * Edits the {@link ItemMeta} of this stack. ++ * <p> ++ * The {@link java.util.function.Consumer} must only interact ++ * with this stack's {@link ItemMeta} through the provided {@link ItemMeta} instance. ++ * Calling this method or any other meta-related method of the {@link ItemStack} class ++ * (such as {@link #getItemMeta()}, {@link #addItemFlags(ItemFlag...)}, {@link #lore()}, etc.) ++ * from inside the consumer is disallowed and will produce undefined results or exceptions. ++ * </p> ++ * ++ * @param consumer the meta consumer ++ * @return {@code true} if the edit was successful, {@code false} otherwise ++ */ ++ public boolean editMeta(final @NotNull java.util.function.Consumer<? super ItemMeta> consumer) { ++ return editMeta(ItemMeta.class, consumer); ++ } ++ ++ /** ++ * Edits the {@link ItemMeta} of this stack if the meta is of the specified type. ++ * <p> ++ * The {@link java.util.function.Consumer} must only interact ++ * with this stack's {@link ItemMeta} through the provided {@link ItemMeta} instance. ++ * Calling this method or any other meta-related method of the {@link ItemStack} class ++ * (such as {@link #getItemMeta()}, {@link #addItemFlags(ItemFlag...)}, {@link #lore()}, etc.) ++ * from inside the consumer is disallowed and will produce undefined results or exceptions. ++ * </p> ++ * ++ * @param metaClass the type of meta to edit ++ * @param consumer the meta consumer ++ * @param <M> the meta type ++ * @return {@code true} if the edit was successful, {@code false} otherwise ++ */ ++ public <M extends ItemMeta> boolean editMeta(final @NotNull Class<M> metaClass, final @NotNull java.util.function.Consumer<@NotNull ? super M> consumer) { ++ final @Nullable ItemMeta meta = this.getItemMeta(); ++ if (metaClass.isInstance(meta)) { ++ consumer.accept((M) meta); ++ this.setItemMeta(meta); ++ return true; ++ } ++ return false; ++ } ++ // Paper end ++ + /** + * Get a copy of this ItemStack's {@link ItemMeta}. + * |