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/