From 8dbe0db973b415d17823073723ed7329018d365a Mon Sep 17 00:00:00 2001 From: handy Date: Thu, 26 Dec 2024 10:54:07 +0800 Subject: [PATCH] =?UTF-8?q?1.5.0=20=E6=B7=BB=E5=8A=A0=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=A0=A1=E9=AA=8C=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=B7=A6=E5=8F=B3=E9=94=AE=E6=89=A7=E8=A1=8C=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../java/cn/handyplus/menu/core/MenuCore.java | 14 +++++++++++ .../cn/handyplus/menu/inventory/MenuGui.java | 14 +++++++++++ .../listener/InventoryCloseEventListener.java | 13 +++++++++++ .../gui/InventoryClickEventListener.java | 2 ++ .../handyplus/menu/param/MenuButtonParam.java | 23 +++++++++++++++++++ src/main/resources/plugin.yml | 2 +- 7 files changed, 68 insertions(+), 2 deletions(-) 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/