From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Riley Park <riley.park@meino.net> 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 1bd9f7582bb907ff178fd110fdc92834885d1d78..a7909406e9d54c1ab4789b984ed6b1da50837fce 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -542,6 +542,31 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor 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) { + final ItemMeta meta = this.getItemMeta(); + if (meta != null) { + consumer.accept(meta); + this.setItemMeta(meta); + return true; + } + return false; + } + // Paper end + /** * Get a copy of this ItemStack's {@link ItemMeta}. *