From ecd61cf8490a547760dc8cda13e5812bfbb8d6bd Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 28 Nov 2024 15:49:26 +0800 Subject: [PATCH] add close icon --- .../bukkit/market/BukkitMarketManager.java | 18 ++++++++++++++---- core/src/main/resources/config.yml | 13 ++++++++++++- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/market/BukkitMarketManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/market/BukkitMarketManager.java index 77838e1d..8b3e98ae 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/market/BukkitMarketManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/market/BukkitMarketManager.java @@ -68,12 +68,13 @@ public class BukkitMarketManager implements MarketManager, Listener { protected TextValue title; protected String[] layout; - protected final HashMap decorativeIcons; + protected final HashMap[]>> decorativeIcons; protected final ConcurrentHashMap marketGUICache; protected char itemSlot; protected char sellSlot; protected char sellAllSlot; + protected char closeSlot; protected CustomFishingItem sellIconAllowItem; protected CustomFishingItem sellIconDenyItem; @@ -190,7 +191,10 @@ public class BukkitMarketManager implements MarketManager, Listener { for (Map.Entry entry : decorativeSection.getStringRouteMappedValues(false).entrySet()) { if (entry.getValue() instanceof Section innerSection) { char symbol = Objects.requireNonNull(innerSection.getString("symbol")).charAt(0); - decorativeIcons.put(symbol, new SingleItemParser("gui", innerSection, plugin.getConfigManager().getItemFormatFunctions()).getItem()); + decorativeIcons.put(symbol, Pair.of( + new SingleItemParser("gui", innerSection, plugin.getConfigManager().getItemFormatFunctions()).getItem(), + plugin.getActionManager().parseActions(innerSection.getSection("action"))) + ); } } } @@ -213,8 +217,8 @@ public class BukkitMarketManager implements MarketManager, Listener { gui.addElement(new MarketGUIElement(itemSlot, new ItemStack(Material.AIR))); gui.addElement(new MarketDynamicGUIElement(sellSlot, new ItemStack(Material.AIR))); gui.addElement(new MarketDynamicGUIElement(sellAllSlot, new ItemStack(Material.AIR))); - for (Map.Entry entry : decorativeIcons.entrySet()) { - gui.addElement(new MarketGUIElement(entry.getKey(), entry.getValue().build(context))); + for (Map.Entry[]>> entry : decorativeIcons.entrySet()) { + gui.addElement(new MarketGUIElement(entry.getKey(), entry.getValue().left().build(context))); } gui.build().refresh().show(); marketGUICache.put(player.getUniqueId(), gui); @@ -336,6 +340,12 @@ public class BukkitMarketManager implements MarketManager, Listener { event.setCancelled(true); } + Pair[]> decorativeIcon = this.decorativeIcons.get(element.getSymbol()); + if (decorativeIcon != null) { + ActionManager.trigger(gui.context, decorativeIcon.right()); + return; + } + if (element.getSymbol() == sellSlot) { Pair pair = getItemsToSell(gui.context, gui.getItemsInGUI()); diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 1cca1adb..4da05187 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -206,7 +206,7 @@ mechanics: earnings-multiplier: 1 # Layout for the market menu layout: - - 'AAAAAAAAA' + - 'AAAAAAAAC' - 'AIIIIIIIA' - 'AIIIIIIIA' - 'AIIIIIIIA' @@ -353,6 +353,17 @@ mechanics: name: ' ' components: minecraft:hide_tooltip: {} + close-icon: + symbol: 'C' + material: RED_STAINED_GLASS_PANE + display: + name: ' ' + components: + minecraft:hide_tooltip: {} + # Add actions on click + action: + action_1: + type: close-inv # This section is only effective if "override-vanilla" is set to true # Meaning vanilla mechanics, such as lure enchantment, will no longer apply # You must configure their effects in CustomFishing instead