1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Studenikin, 16 авг 2019.

  1. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Всем привет. Делаю плагин на выдачу предметов, при нажатии на которые должны выполняться определенные действия. Возник вопрос, как правильно проверять ItemStack по которому кликнули, что это тот, который нужен, а не просто вытащенный из инвентаря или скрафченный?
    То есть проверять не по getType() и getMeta().getDysplayName(), а менее костыльно
     
  2. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Это предмет в меню, а мне надо проверять предмет в инвентаре, через InteractEvent
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
    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;
        }
    }
     
  4. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Спасибо
     
  5. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Вместо "cmd" можно любую стрингу вставлять?
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ага.
     
  7. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    спасибо
     

Поделиться этой страницей