From 4f11bcb72418b898c624563a9fb752ef30a9e450 Mon Sep 17 00:00:00 2001 From: ZorTik Date: Thu, 5 Feb 2026 12:29:02 +0100 Subject: [PATCH 1/2] feat: element item postprocessing --- core/src/main/java/me/zort/containr/Element.java | 10 ++++++++++ core/src/main/java/me/zort/containr/GUI.java | 1 + 2 files changed, 11 insertions(+) diff --git a/core/src/main/java/me/zort/containr/Element.java b/core/src/main/java/me/zort/containr/Element.java index 889437a..ec2f820 100644 --- a/core/src/main/java/me/zort/containr/Element.java +++ b/core/src/main/java/me/zort/containr/Element.java @@ -23,4 +23,14 @@ public void click(ContextClickInfo info) {} @Nullable public abstract ItemStack item(Player player); + /** + * Post-process the created ItemStack before it is applied to the GUI. + * + * @param player The player for which the item has been created. + * @param item The created item. Is not the same as the returned from {@link #item(Player)}. + * @return The modified item. + */ + public ItemStack postProcessItem(Player player, ItemStack item) { + return item; + } } diff --git a/core/src/main/java/me/zort/containr/GUI.java b/core/src/main/java/me/zort/containr/GUI.java index 5d9acea..e2d0fae 100644 --- a/core/src/main/java/me/zort/containr/GUI.java +++ b/core/src/main/java/me/zort/containr/GUI.java @@ -217,6 +217,7 @@ public void update(@NotNull Player p, boolean clear, Class... item = NBT.modifyNBT(item, nbtItem -> nbtItem.setString(Constants.ELEMENT_ID_KEY, element.getId())); } if(slot < inventory.getSize() && slot >= 0) { + item = element.postProcessItem(p, item); inventory.setItem(slot, item); } else { String err = "Cannot complete menu %s for player %s because index out of bounds: %d >= %d"; From c89622f1eb04a3afcbd709fd7b00fc33442a0aa2 Mon Sep 17 00:00:00 2001 From: ZorTik Date: Sat, 7 Feb 2026 02:27:57 +0100 Subject: [PATCH 2/2] feat: update item in menu after postprocessing --- core/src/main/java/me/zort/containr/Element.java | 8 +++++--- core/src/main/java/me/zort/containr/GUI.java | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/me/zort/containr/Element.java b/core/src/main/java/me/zort/containr/Element.java index ec2f820..2259129 100644 --- a/core/src/main/java/me/zort/containr/Element.java +++ b/core/src/main/java/me/zort/containr/Element.java @@ -9,6 +9,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.function.Consumer; + @Getter public abstract class Element implements Component { @@ -28,9 +30,9 @@ public void click(ContextClickInfo info) {} * * @param player The player for which the item has been created. * @param item The created item. Is not the same as the returned from {@link #item(Player)}. - * @return The modified item. + * @param newItemConsumer The handler that MUST be called after the item has been modified to update the menu. */ - public ItemStack postProcessItem(Player player, ItemStack item) { - return item; + public void postProcessItem(Player player, ItemStack item, Consumer newItemConsumer) { + // No modifications by default. } } diff --git a/core/src/main/java/me/zort/containr/GUI.java b/core/src/main/java/me/zort/containr/GUI.java index e2d0fae..ed052d0 100644 --- a/core/src/main/java/me/zort/containr/GUI.java +++ b/core/src/main/java/me/zort/containr/GUI.java @@ -217,7 +217,9 @@ public void update(@NotNull Player p, boolean clear, Class... item = NBT.modifyNBT(item, nbtItem -> nbtItem.setString(Constants.ELEMENT_ID_KEY, element.getId())); } if(slot < inventory.getSize() && slot >= 0) { - item = element.postProcessItem(p, item); + Consumer processFinalItem = (finalItem) -> inventory.setItem(slot, finalItem); + element.postProcessItem(p, item, processFinalItem); + inventory.setItem(slot, item); } else { String err = "Cannot complete menu %s for player %s because index out of bounds: %d >= %d";