15519143469
如题:
功能如下,判断物品LORE, 如果包含某个lore,  则不能把这个物品放入 某个指定title库存中

过程中用到了InventoryMoveItemEvent,  但是发现玩家移动物品的时候不生效,    只有漏斗自动放入的时候才生效   1.12.2 spigot


2000000
本帖最后由 2000000 于 2022-11-17 17:07 编辑
    @EventHandler
    public void inventoryClickEvent(InventoryClickEvent event) {
        Inventory inventory = event.getClickedInventory();
        ItemStack clickItem = event.getCurrentItem();
        if (inventory == null || clickItem == null) return;

        if (checkItemStackLore(clickItem, "string") && event.getView().getTitle().equals("限制的title")) event.setCancelled(true);
    }

    private static boolean checkItemStackLore(ItemStack itemStack, String contains) {
        ItemMeta meta = itemStack.getItemMeta();

        if (meta == null || meta.getLore() == null) return false;
        for (String l : meta.getLore()) if (l.contains(contains)) return true;

        return false;
    }


未经测试,思路大概就是这样
遍历物品Lore来检查物品Lore是否含有指定的字符串,并且监听 InventoryClickEvent 如果有指定的字符串且 Inv 标题为您所限制的则取消此次点击

需要注意的是,如果您检查的Lore是从配置文件中获取的,那么我会建议您在插件开启时便将Lore存储进容器里,避免现场多次读取配置文件造成的卡顿

15519143469
2000000 发表于 2022-11-17 17:01
未经测试,思路大概就是这样
遍历物品Lore来检查物品Lore是否含有指定的字符串,并且监听 InventoryClick ...

原来要用点击事件