diff --git a/paper-api/src/main/java/org/bukkit/inventory/ItemStack.java b/paper-api/src/main/java/org/bukkit/inventory/ItemStack.java index c33a866a03..86404d3b8b 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/paper-api/src/main/java/org/bukkit/inventory/ItemStack.java @@ -574,6 +574,50 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat return result.ensureServerConversions(); // Paper } + // Paper start + /** + * Edits the {@link ItemMeta} of this stack. + *
+ * 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. + *
+ * + * @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. + *+ * 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. + *
+ * + * @param metaClass the type of meta to edit + * @param consumer the meta consumer + * @param