Помогите Проверка ItemStack

Studenikin

Старожил
Пользователь
Баллы
123
Имя в Minecraft
stuvanya
Всем привет. Делаю плагин на выдачу предметов, при нажатии на которые должны выполняться определенные действия. Возник вопрос, как правильно проверять ItemStack по которому кликнули, что это тот, который нужен, а не просто вытащенный из инвентаря или скрафченный?
То есть проверять не по getType() и getMeta().getDysplayName(), а менее костыльно
 
Как то так.
Код:
public class EventListener implements Listener {
    @EventHandler
    public void on(InventoryClickEvent e) {
        Inventory inv = e.getClickedInventory();
        if (inv != null && inv.getHolder() instanceof Menu) {
            e.setCancelled(true);
            Menu menu = (Menu) inv.getHolder();
            menu.getStack(e.getSlot()).runCommand();
        }
    }
}
Это предмет в меню, а мне надо проверять предмет в инвентаре, через InteractEvent
 
Это предмет в меню, а мне надо проверять предмет в инвентаре, через InteractEvent
Код:
public class ItemCMD {
    public static void setTagCMD(String cmd, ItemStack item) {
        ItemMeta meta = item.getItemMeta();
        PersistentDataContainer tag = meta.getPersistentDataContainer();
        tag.set(NamespacedKey.minecraft("cmd"), PersistentDataType.STRING, cmd);
        item.setItemMeta(meta);
    }
    
    private static String getTagCMD(ItemStack item) {
        ItemMeta meta = item.getItemMeta();
        PersistentDataContainer tag = meta.getPersistentDataContainer();
        return tag.get(NamespacedKey.minecraft("cmd"), PersistentDataType.STRING);
    }
    
    private static boolean hasTagCMD(ItemStack item) {
        ItemMeta meta = item.getItemMeta();
        PersistentDataContainer tag = meta.getPersistentDataContainer();
        return tag.has(NamespacedKey.minecraft("cmd"), PersistentDataType.STRING);
    }
    
    public static boolean runComandItem(ItemStack item) {
        if (hasTagCMD(item)) {
            Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), getTagCMD(item));
            return true;
        }
        return false;
    }

    public static boolean runComandItem(ItemStack item, Player player) {
        if (hasTagCMD(item)) {
            player.performCommand(getTagCMD(item));
            return true;
        }
        return false;
    }
}
 
Код:
public class ItemCMD {
    public static void setTagCMD(String cmd, ItemStack item) {
        ItemMeta meta = item.getItemMeta();
        PersistentDataContainer tag = meta.getPersistentDataContainer();
        tag.set(NamespacedKey.minecraft("cmd"), PersistentDataType.STRING, cmd);
        item.setItemMeta(meta);
    }
   
    private static String getTagCMD(ItemStack item) {
        ItemMeta meta = item.getItemMeta();
        PersistentDataContainer tag = meta.getPersistentDataContainer();
        return tag.get(NamespacedKey.minecraft("cmd"), PersistentDataType.STRING);
    }
   
    private static boolean hasTagCMD(ItemStack item) {
        ItemMeta meta = item.getItemMeta();
        PersistentDataContainer tag = meta.getPersistentDataContainer();
        return tag.has(NamespacedKey.minecraft("cmd"), PersistentDataType.STRING);
    }
   
    public static boolean runComandItem(ItemStack item) {
        if (hasTagCMD(item)) {
            Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), getTagCMD(item));
            return true;
        }
        return false;
    }

    public static boolean runComandItem(ItemStack item, Player player) {
        if (hasTagCMD(item)) {
            player.performCommand(getTagCMD(item));
            return true;
        }
        return false;
    }
}
Спасибо
 
Назад
Верх