From b61b67059f9b8f3980f9faf5eac5731cdab80bba Mon Sep 17 00:00:00 2001 From: 1robie <97293924+1robie@users.noreply.github.com> Date: Thu, 19 Mar 2026 19:56:42 +0100 Subject: [PATCH] feat: introduce ClickAction enum to streamline action handling in InventoryLoader --- .../maxlego08/menu/api/utils/ClickAction.java | 27 +++++++++++++++++++ .../menu/loader/InventoryLoader.java | 14 +++++----- 2 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 API/src/main/java/fr/maxlego08/menu/api/utils/ClickAction.java diff --git a/API/src/main/java/fr/maxlego08/menu/api/utils/ClickAction.java b/API/src/main/java/fr/maxlego08/menu/api/utils/ClickAction.java new file mode 100644 index 00000000..7c042113 --- /dev/null +++ b/API/src/main/java/fr/maxlego08/menu/api/utils/ClickAction.java @@ -0,0 +1,27 @@ +package fr.maxlego08.menu.api.utils; + +import org.bukkit.event.block.Action; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public enum ClickAction { + LEFT_CLICK(Action.LEFT_CLICK_BLOCK, Action.LEFT_CLICK_AIR), + RIGHT_CLICK(Action.RIGHT_CLICK_BLOCK, Action.RIGHT_CLICK_AIR), + LEFT_CLICK_BLOCK(Action.LEFT_CLICK_BLOCK), + RIGHT_CLICK_BLOCK(Action.RIGHT_CLICK_BLOCK), + LEFT_CLICK_AIR(Action.LEFT_CLICK_AIR), + RIGHT_CLICK_AIR(Action.RIGHT_CLICK_AIR), + PHYSICAL(Action.PHYSICAL) + ; + private final List actions; + + ClickAction(Action ... actions) { + this.actions = List.of(actions); + } + + @NotNull + public List asActions() { + return this.actions; + } +} diff --git a/src/main/java/fr/maxlego08/menu/loader/InventoryLoader.java b/src/main/java/fr/maxlego08/menu/loader/InventoryLoader.java index 7d99a92f..58ca10df 100644 --- a/src/main/java/fr/maxlego08/menu/loader/InventoryLoader.java +++ b/src/main/java/fr/maxlego08/menu/loader/InventoryLoader.java @@ -19,6 +19,7 @@ import fr.maxlego08.menu.api.pattern.PatternManager; import fr.maxlego08.menu.api.requirement.Requirement; import fr.maxlego08.menu.api.utils.ClearInvType; +import fr.maxlego08.menu.api.utils.ClickAction; import fr.maxlego08.menu.api.utils.Loader; import fr.maxlego08.menu.api.utils.OpenWithItem; import fr.maxlego08.menu.common.utils.ZUtils; @@ -33,10 +34,7 @@ import java.io.File; import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; public class InventoryLoader extends ZUtils implements Loader { @@ -248,18 +246,20 @@ private void loadOpenWithItem(YamlConfiguration configuration, ZInventory invent MenuItemStack loadedItem = menuItemStackLoader.load(configuration, loadString + ".item.", file); List actionStrings = configuration.getStringList(loadString + ".actions"); - List actions = new ArrayList<>(actionStrings.size()); + Set actions = new HashSet<>(); for (String string : actionStrings) { try { - actions.add(Action.valueOf(string.toUpperCase())); + actions.addAll(ClickAction.valueOf(string.toUpperCase()).asActions()); } catch (Exception ignored) { + if (Configuration.enableDebug) + Logger.info("Invalid click action " + string + " in " + file.getAbsolutePath() + " for openWithItem, skipping it.", Logger.LogType.WARNING); } } String type = configuration.getString(loadString + ".type", "full"); ItemStackSimilar itemStackSimilar = this.plugin.getInventoryManager().getItemStackVerification(type).orElseGet(FullSimilar::new); - inventory.setOpenWithItem(new OpenWithItem(loadedItem, actions, itemStackSimilar)); + inventory.setOpenWithItem(new OpenWithItem(loadedItem, new ArrayList<>(actions), itemStackSimilar)); } } catch (Exception ignored) { }