1515import cn .handyplus .menu .PlayerMenu ;
1616import cn .handyplus .menu .constants .CommandTypeEnum ;
1717import cn .handyplus .menu .constants .MenuConstants ;
18+ import cn .handyplus .menu .enter .MenuItem ;
1819import cn .handyplus .menu .enter .MenuLimit ;
1920import cn .handyplus .menu .hook .PlaceholderApiUtil ;
2021import cn .handyplus .menu .hook .PlayerCurrencyUtil ;
2122import cn .handyplus .menu .hook .PlayerPointsUtil ;
2223import cn .handyplus .menu .hook .VaultUtil ;
2324import cn .handyplus .menu .inventory .MenuGui ;
2425import cn .handyplus .menu .param .MenuButtonParam ;
26+ import cn .handyplus .menu .service .MenuItemService ;
2527import cn .handyplus .menu .service .MenuLimitService ;
2628import cn .handyplus .menu .util .MenuUtil ;
29+ import org .bukkit .Material ;
2730import org .bukkit .entity .Player ;
2831import org .bukkit .event .inventory .ClickType ;
2932import org .bukkit .inventory .ItemStack ;
33+ import org .jetbrains .annotations .NotNull ;
34+ import org .jetbrains .annotations .Nullable ;
3035
3136import java .math .BigDecimal ;
3237import java .util .Arrays ;
3338import java .util .Date ;
3439import java .util .HashMap ;
3540import java .util .List ;
3641import 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