diff --git a/pom.xml b/pom.xml index f19fb0a..d73506f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ cn.handyplus.menu PlayerMenu PlayerMenu - 1.4.5 + 1.5.0 一个有点好用的玩家菜单插件 diff --git a/src/main/java/cn/handyplus/menu/core/MenuCore.java b/src/main/java/cn/handyplus/menu/core/MenuCore.java index 749f434..011e358 100644 --- a/src/main/java/cn/handyplus/menu/core/MenuCore.java +++ b/src/main/java/cn/handyplus/menu/core/MenuCore.java @@ -25,6 +25,7 @@ import cn.handyplus.menu.service.MenuLimitService; import cn.handyplus.menu.util.MenuUtil; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; import java.util.Arrays; @@ -73,6 +74,14 @@ public static void executeMenu(HandyInventory handyInventory, Player player, Men MenuUtil.playSound(player, menuButtonParam.getSound()); // 执行命令 executeCommand(player, menuButtonParam.getCommands(), handyInventory, 0); + // 执行右键命令 + if (ClickType.RIGHT.equals(menuButtonParam.getEventClickType())) { + executeCommand(player, menuButtonParam.getActions().get("right"), handyInventory, 0); + } + // 执行左键命令 + if (ClickType.LEFT.equals(menuButtonParam.getEventClickType())) { + executeCommand(player, menuButtonParam.getActions().get("left"), handyInventory, 0); + } } /** @@ -81,6 +90,7 @@ public static void executeMenu(HandyInventory handyInventory, Player player, Men * @param player 玩家 * @param commands 命令 * @param handyInventory gui + * @param index 递归基数 */ private static void executeCommand(Player player, List commands, HandyInventory handyInventory, Integer index) { if (CollUtil.isEmpty(commands)) { @@ -230,6 +240,10 @@ public static boolean check(Player player, MenuButtonParam menuButtonParam) { if (MenuUtil.clickCd(player, menuButtonParam.getId(), menuButtonParam.getCd(), true)) { return true; } + // 判断点击类型是否满足 + if (StrUtil.isNotEmpty(menuButtonParam.getClickType()) && !menuButtonParam.getEventClickType().name().equalsIgnoreCase(menuButtonParam.getClickType())) { + return true; + } // 判断点击金钱是否满足 int money = menuButtonParam.getMoney(); if (money > 0 && VaultUtil.getPlayerVault(player) < money) { diff --git a/src/main/java/cn/handyplus/menu/inventory/MenuGui.java b/src/main/java/cn/handyplus/menu/inventory/MenuGui.java index 47acd33..4b18c49 100644 --- a/src/main/java/cn/handyplus/menu/inventory/MenuGui.java +++ b/src/main/java/cn/handyplus/menu/inventory/MenuGui.java @@ -1,6 +1,7 @@ package cn.handyplus.menu.inventory; import cn.handyplus.lib.constants.BaseConstants; +import cn.handyplus.lib.core.CollUtil; import cn.handyplus.lib.core.NumberUtil; import cn.handyplus.lib.core.StrUtil; import cn.handyplus.lib.inventory.HandyInventory; @@ -25,6 +26,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -181,8 +183,11 @@ public static MenuButtonParam getMenuButtonParam(MemorySection memorySection, Of int customModelDataId = memorySection.getInt("custom-model-data"); int priority = memorySection.getInt("priority"); List commands = memorySection.getStringList("commands"); + List leftActions = memorySection.getStringList("actions.left"); + List rightActions = memorySection.getStringList("actions.right"); List conditions = memorySection.getStringList("conditions"); String sound = memorySection.getString("sound"); + String clickType = memorySection.getString("clickType"); String failSound = memorySection.getString("failSound"); boolean isEnchant = memorySection.getBoolean("isEnchant", false); boolean hideFlag = memorySection.getBoolean("hideFlag", true); @@ -235,6 +240,15 @@ public static MenuButtonParam getMenuButtonParam(MemorySection memorySection, Of menuButtonParam.setDynamicAmount(dynamicAmount); menuButtonParam.setNotPermission(notPermission); menuButtonParam.setPriority(priority); + Map> actions = new HashMap<>(); + if (CollUtil.isNotEmpty(leftActions)) { + actions.put("left", leftActions); + } + if (CollUtil.isNotEmpty(rightActions)) { + actions.put("right", rightActions); + } + menuButtonParam.setActions(actions); + menuButtonParam.setClickType(clickType); // 扩展商店属性 menuButtonParam.setShopType(shopType); menuButtonParam.setShopMaterial(shopMaterial); diff --git a/src/main/java/cn/handyplus/menu/listener/InventoryCloseEventListener.java b/src/main/java/cn/handyplus/menu/listener/InventoryCloseEventListener.java index 758d2b8..6ffbd28 100644 --- a/src/main/java/cn/handyplus/menu/listener/InventoryCloseEventListener.java +++ b/src/main/java/cn/handyplus/menu/listener/InventoryCloseEventListener.java @@ -199,6 +199,19 @@ public void onEvent(InventoryCloseEvent event) throws IOException { if (StrUtil.isNotEmpty(input)) { createMenuItem.put("input", input); } + String clickType = menuButtonParam.getClickType(); + if (StrUtil.isNotEmpty(clickType)) { + createMenuItem.put("clickType", clickType); + } + Map> actions = menuButtonParam.getActions(); + if (!actions.isEmpty()) { + if (actions.containsKey("right")) { + createMenuItem.put("actions.right", actions.get("right")); + } + if (actions.containsKey("left")) { + createMenuItem.put("actions.left", actions.get("left")); + } + } } if (createMenuItem.get("id") == null) { MenuItem menuItem = new MenuItem(); diff --git a/src/main/java/cn/handyplus/menu/listener/gui/InventoryClickEventListener.java b/src/main/java/cn/handyplus/menu/listener/gui/InventoryClickEventListener.java index a561918..236491f 100644 --- a/src/main/java/cn/handyplus/menu/listener/gui/InventoryClickEventListener.java +++ b/src/main/java/cn/handyplus/menu/listener/gui/InventoryClickEventListener.java @@ -37,6 +37,8 @@ public void rawSlotClick(HandyInventory handyInventory, InventoryClickEvent even return; } MenuButtonParam menuButtonParam = (MenuButtonParam) obj; + // 注入点击类型 + menuButtonParam.setEventClickType(event.getClick()); // 检查点击条件是否满足 if (MenuCore.check(player, menuButtonParam)) { // 播放未满足条件的声音 diff --git a/src/main/java/cn/handyplus/menu/param/MenuButtonParam.java b/src/main/java/cn/handyplus/menu/param/MenuButtonParam.java index ff13c83..28726f4 100644 --- a/src/main/java/cn/handyplus/menu/param/MenuButtonParam.java +++ b/src/main/java/cn/handyplus/menu/param/MenuButtonParam.java @@ -1,8 +1,10 @@ package cn.handyplus.menu.param; import lombok.Data; +import org.bukkit.event.inventory.ClickType; import java.util.List; +import java.util.Map; /** * 菜单属性 @@ -197,4 +199,25 @@ public class MenuButtonParam { * @since 1.3.7 */ private String input; + + /** + * 动作 + * + * @since 1.5.0 + */ + private Map> actions; + + /** + * 点击类型 + * + * @since 1.5.0 + */ + private String clickType; + + /** + * 事件当前点击类型 + * + * @since 1.5.0 + */ + private ClickType eventClickType; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f484dd3..7401e1a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: PlayerMenu main: cn.handyplus.menu.PlayerMenu -version: 1.4.5 +version: 1.5.0 author: handy api-version: 1.13 website: https://ricedoc.handyplus.cn/wiki/PlayerMenu/log/