Skip to content

Commit d078dc0

Browse files
authored
1.5.0 添加点击类型校验,添加左右键执行命令的配置方法 (#6)
1 parent 6eb0352 commit d078dc0

File tree

7 files changed

+68
-2
lines changed

7 files changed

+68
-2
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>cn.handyplus.menu</groupId>
88
<name>PlayerMenu</name>
99
<artifactId>PlayerMenu</artifactId>
10-
<version>1.4.5</version>
10+
<version>1.5.0</version>
1111
<description>一个有点好用的玩家菜单插件</description>
1212

1313
<properties>

src/main/java/cn/handyplus/menu/core/MenuCore.java

+14
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import cn.handyplus.menu.service.MenuLimitService;
2626
import cn.handyplus.menu.util.MenuUtil;
2727
import org.bukkit.entity.Player;
28+
import org.bukkit.event.inventory.ClickType;
2829
import org.bukkit.inventory.ItemStack;
2930

3031
import java.util.Arrays;
@@ -73,6 +74,14 @@ public static void executeMenu(HandyInventory handyInventory, Player player, Men
7374
MenuUtil.playSound(player, menuButtonParam.getSound());
7475
// 执行命令
7576
executeCommand(player, menuButtonParam.getCommands(), handyInventory, 0);
77+
// 执行右键命令
78+
if (ClickType.RIGHT.equals(menuButtonParam.getEventClickType())) {
79+
executeCommand(player, menuButtonParam.getActions().get("right"), handyInventory, 0);
80+
}
81+
// 执行左键命令
82+
if (ClickType.LEFT.equals(menuButtonParam.getEventClickType())) {
83+
executeCommand(player, menuButtonParam.getActions().get("left"), handyInventory, 0);
84+
}
7685
}
7786

7887
/**
@@ -81,6 +90,7 @@ public static void executeMenu(HandyInventory handyInventory, Player player, Men
8190
* @param player 玩家
8291
* @param commands 命令
8392
* @param handyInventory gui
93+
* @param index 递归基数
8494
*/
8595
private static void executeCommand(Player player, List<String> commands, HandyInventory handyInventory, Integer index) {
8696
if (CollUtil.isEmpty(commands)) {
@@ -230,6 +240,10 @@ public static boolean check(Player player, MenuButtonParam menuButtonParam) {
230240
if (MenuUtil.clickCd(player, menuButtonParam.getId(), menuButtonParam.getCd(), true)) {
231241
return true;
232242
}
243+
// 判断点击类型是否满足
244+
if (StrUtil.isNotEmpty(menuButtonParam.getClickType()) && !menuButtonParam.getEventClickType().name().equalsIgnoreCase(menuButtonParam.getClickType())) {
245+
return true;
246+
}
233247
// 判断点击金钱是否满足
234248
int money = menuButtonParam.getMoney();
235249
if (money > 0 && VaultUtil.getPlayerVault(player) < money) {

src/main/java/cn/handyplus/menu/inventory/MenuGui.java

+14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.handyplus.menu.inventory;
22

33
import cn.handyplus.lib.constants.BaseConstants;
4+
import cn.handyplus.lib.core.CollUtil;
45
import cn.handyplus.lib.core.NumberUtil;
56
import cn.handyplus.lib.core.StrUtil;
67
import cn.handyplus.lib.inventory.HandyInventory;
@@ -25,6 +26,7 @@
2526
import org.bukkit.inventory.meta.ItemMeta;
2627
import org.bukkit.inventory.meta.SkullMeta;
2728

29+
import java.util.HashMap;
2830
import java.util.List;
2931
import java.util.Map;
3032
import java.util.Optional;
@@ -181,8 +183,11 @@ public static MenuButtonParam getMenuButtonParam(MemorySection memorySection, Of
181183
int customModelDataId = memorySection.getInt("custom-model-data");
182184
int priority = memorySection.getInt("priority");
183185
List<String> commands = memorySection.getStringList("commands");
186+
List<String> leftActions = memorySection.getStringList("actions.left");
187+
List<String> rightActions = memorySection.getStringList("actions.right");
184188
List<String> conditions = memorySection.getStringList("conditions");
185189
String sound = memorySection.getString("sound");
190+
String clickType = memorySection.getString("clickType");
186191
String failSound = memorySection.getString("failSound");
187192
boolean isEnchant = memorySection.getBoolean("isEnchant", false);
188193
boolean hideFlag = memorySection.getBoolean("hideFlag", true);
@@ -235,6 +240,15 @@ public static MenuButtonParam getMenuButtonParam(MemorySection memorySection, Of
235240
menuButtonParam.setDynamicAmount(dynamicAmount);
236241
menuButtonParam.setNotPermission(notPermission);
237242
menuButtonParam.setPriority(priority);
243+
Map<String, List<String>> actions = new HashMap<>();
244+
if (CollUtil.isNotEmpty(leftActions)) {
245+
actions.put("left", leftActions);
246+
}
247+
if (CollUtil.isNotEmpty(rightActions)) {
248+
actions.put("right", rightActions);
249+
}
250+
menuButtonParam.setActions(actions);
251+
menuButtonParam.setClickType(clickType);
238252
// 扩展商店属性
239253
menuButtonParam.setShopType(shopType);
240254
menuButtonParam.setShopMaterial(shopMaterial);

src/main/java/cn/handyplus/menu/listener/InventoryCloseEventListener.java

+13
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,19 @@ public void onEvent(InventoryCloseEvent event) throws IOException {
199199
if (StrUtil.isNotEmpty(input)) {
200200
createMenuItem.put("input", input);
201201
}
202+
String clickType = menuButtonParam.getClickType();
203+
if (StrUtil.isNotEmpty(clickType)) {
204+
createMenuItem.put("clickType", clickType);
205+
}
206+
Map<String, List<String>> actions = menuButtonParam.getActions();
207+
if (!actions.isEmpty()) {
208+
if (actions.containsKey("right")) {
209+
createMenuItem.put("actions.right", actions.get("right"));
210+
}
211+
if (actions.containsKey("left")) {
212+
createMenuItem.put("actions.left", actions.get("left"));
213+
}
214+
}
202215
}
203216
if (createMenuItem.get("id") == null) {
204217
MenuItem menuItem = new MenuItem();

src/main/java/cn/handyplus/menu/listener/gui/InventoryClickEventListener.java

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public void rawSlotClick(HandyInventory handyInventory, InventoryClickEvent even
3737
return;
3838
}
3939
MenuButtonParam menuButtonParam = (MenuButtonParam) obj;
40+
// 注入点击类型
41+
menuButtonParam.setEventClickType(event.getClick());
4042
// 检查点击条件是否满足
4143
if (MenuCore.check(player, menuButtonParam)) {
4244
// 播放未满足条件的声音

src/main/java/cn/handyplus/menu/param/MenuButtonParam.java

+23
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package cn.handyplus.menu.param;
22

33
import lombok.Data;
4+
import org.bukkit.event.inventory.ClickType;
45

56
import java.util.List;
7+
import java.util.Map;
68

79
/**
810
* 菜单属性
@@ -197,4 +199,25 @@ public class MenuButtonParam {
197199
* @since 1.3.7
198200
*/
199201
private String input;
202+
203+
/**
204+
* 动作
205+
*
206+
* @since 1.5.0
207+
*/
208+
private Map<String, List<String>> actions;
209+
210+
/**
211+
* 点击类型
212+
*
213+
* @since 1.5.0
214+
*/
215+
private String clickType;
216+
217+
/**
218+
* 事件当前点击类型
219+
*
220+
* @since 1.5.0
221+
*/
222+
private ClickType eventClickType;
200223
}

src/main/resources/plugin.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: PlayerMenu
22
main: cn.handyplus.menu.PlayerMenu
3-
version: 1.4.5
3+
version: 1.5.0
44
author: handy
55
api-version: 1.13
66
website: https://ricedoc.handyplus.cn/wiki/PlayerMenu/log/

0 commit comments

Comments
 (0)