Skip to content

Commit bac5418

Browse files
committed
1.7.7 shop菜单支持物品库 ID
1 parent e99e5dd commit bac5418

2 files changed

Lines changed: 47 additions & 4 deletions

File tree

src/main/java/cn/handyplus/menu/command/admin/GetItemCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.handyplus.menu.command.admin;
22

33
import cn.handyplus.lib.command.IHandyCommandEvent;
4+
import cn.handyplus.lib.core.MapUtil;
45
import cn.handyplus.lib.util.AssertUtil;
56
import cn.handyplus.lib.util.BaseUtil;
67
import cn.handyplus.lib.util.ItemStackUtil;
@@ -51,10 +52,10 @@ public void onCommand(CommandSender sender, Command cmd, String label, String[]
5152
} else {
5253
player = AssertUtil.notPlayer(sender, BaseUtil.getMsgNotColor("noPlayerFailureMsg"));
5354
}
54-
Integer id = AssertUtil.isNumericToInt(args[1], BaseUtil.getMsgNotColor("getMenuItemMsg"));
55+
Integer id = AssertUtil.isNumericToInt(args[1], BaseUtil.getMsgNotColor("getMenuItemMsg", MapUtil.of("id", args[1])));
5556
Optional<MenuItem> menuItem = MenuItemService.getInstance().findById(id);
5657
if (!menuItem.isPresent()) {
57-
MessageUtil.sendMessage(player, BaseUtil.getMsgNotColor("getMenuItemMsg"));
58+
MessageUtil.sendMessage(player, BaseUtil.getMsgNotColor("getMenuItemMsg", MapUtil.of("id", String.valueOf(id))));
5859
return;
5960
}
6061
ItemStack itemStack = ItemStackUtil.itemStackDeserialize(menuItem.get().getItemStack());

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

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,31 @@
1515
import cn.handyplus.menu.PlayerMenu;
1616
import cn.handyplus.menu.constants.CommandTypeEnum;
1717
import cn.handyplus.menu.constants.MenuConstants;
18+
import cn.handyplus.menu.enter.MenuItem;
1819
import cn.handyplus.menu.enter.MenuLimit;
1920
import cn.handyplus.menu.hook.PlaceholderApiUtil;
2021
import cn.handyplus.menu.hook.PlayerCurrencyUtil;
2122
import cn.handyplus.menu.hook.PlayerPointsUtil;
2223
import cn.handyplus.menu.hook.VaultUtil;
2324
import cn.handyplus.menu.inventory.MenuGui;
2425
import cn.handyplus.menu.param.MenuButtonParam;
26+
import cn.handyplus.menu.service.MenuItemService;
2527
import cn.handyplus.menu.service.MenuLimitService;
2628
import cn.handyplus.menu.util.MenuUtil;
29+
import org.bukkit.Material;
2730
import org.bukkit.entity.Player;
2831
import org.bukkit.event.inventory.ClickType;
2932
import org.bukkit.inventory.ItemStack;
33+
import org.jetbrains.annotations.NotNull;
34+
import org.jetbrains.annotations.Nullable;
3035

3136
import java.math.BigDecimal;
3237
import java.util.Arrays;
3338
import java.util.Date;
3439
import java.util.HashMap;
3540
import java.util.List;
3641
import java.util.Map;
42+
import java.util.Optional;
3743

3844
/**
3945
* 菜单逻辑核心
@@ -384,7 +390,11 @@ private static boolean shopCheck(Player player, MenuButtonParam menuButtonParam)
384390
String[] shopMaterialStr = shopMaterial.split(":");
385391
String material = shopMaterialStr[0];
386392
String number = replaceInput(player, shopMaterialStr[1]);
387-
ItemStack itemStack = ItemStackUtil.getItemByMaterial(material);
393+
// 获取物品
394+
ItemStack itemStack = getItemStack(player, material);
395+
if (itemStack == null) {
396+
return true;
397+
}
388398
// 多经济处理
389399
if (currencyPrice > 0) {
390400
replaceMap.put("${price}", String.valueOf(currencyPrice));
@@ -408,7 +418,11 @@ private static boolean shopCheck(Player player, MenuButtonParam menuButtonParam)
408418
String[] shopMaterialStr = shopMaterial.split(":");
409419
String material = shopMaterialStr[0];
410420
String number = replaceInput(player, shopMaterialStr[1]);
411-
ItemStack itemStack = ItemStackUtil.getItemByMaterial(material);
421+
// 获取物品
422+
ItemStack itemStack = getItemStack(player, material);
423+
if (itemStack == null) {
424+
return true;
425+
}
412426
Boolean rst = ItemStackUtil.removeItem(player, itemStack, Integer.valueOf(number), false);
413427
if (!rst) {
414428
MessageUtil.sendMessage(player, BaseUtil.getMsgNotColor("noItem"));
@@ -437,6 +451,34 @@ private static boolean shopCheck(Player player, MenuButtonParam menuButtonParam)
437451
return false;
438452
}
439453

454+
/**
455+
* 获取物品
456+
*
457+
* @param player 玩家
458+
* @param material 物品
459+
* @return 物品
460+
* @since 1.7.7
461+
*/
462+
private static @Nullable ItemStack getItemStack(@NotNull Player player, @NotNull String material) {
463+
ItemStack itemStack = null;
464+
// 判断是否 物品库格式 [ID] 例如 [1]
465+
if (material.startsWith("[") && material.endsWith("]")) {
466+
String id = material.substring(1, material.length() - 1);
467+
Optional<MenuItem> menuItem = MenuItemService.getInstance().findById(Integer.valueOf(id));
468+
if (menuItem.isPresent()) {
469+
itemStack = ItemStackUtil.itemStackDeserialize(menuItem.get().getItemStack());
470+
}
471+
} else {
472+
itemStack = ItemStackUtil.getItemByMaterial(material);
473+
}
474+
// 判断是否为空
475+
if (itemStack == null || Material.AIR.equals(itemStack.getType())) {
476+
MessageUtil.sendMessage(player, BaseUtil.getMsgNotColor("getMenuItemMsg", MapUtil.of("id", material)));
477+
return null;
478+
}
479+
return itemStack;
480+
}
481+
440482
/**
441483
* 获取商品价格
442484
*

0 commit comments

Comments
 (0)