Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как получить кастомное имя предмета

Статус
Закрыто для дальнейших ответов.

RoyalCraft

Активный участник
Пользователь
Баллы
68
Имя в Minecraft
Stressless
В гугле не смог найти информации. Суть в чем:

Через код предмету задается имя через
Код:
meta.setDisplayName("name");
и пихается игроку в инвентарь

Далее при определенных действиях (например, клике на него) пытаюсь получить его имя уже в игре через
Код:
meta.getDisplayName();
и это возвращает null. Читал, что это работает в том случае, если имя предмету было дано через наковальню или что то в том роде. Как тогда получить название ? Пихать значение в PersistentDataContainer ?
 
это работает в том случае, если имя предмету было дано через наковальню или что то в том роде
Нет никакой разницы в установке названия через наковальню и через апи.
У тебя нулл, потому что ты получаешь мету не у того предмета
 
Нет никакой разницы в установке названия через наковальню и через апи.
У тебя нулл, потому что ты получаешь мету не у того предмета
У того т.к. из того же предмета я тяну данные из PersistentDataContainer. Пример ниже



Код:
if (event.getSlotType().equals(InventoryType.SlotType.ARMOR)) {

            NamespacedKey searchKey = new NamespacedKey(MyPlugin.getInstance(), "hiddenTag");
            ItemMeta meta = event.getCurrentItem().getItemMeta();
            if (meta != null) {
                event.getWhoClicked().sendMessage(meta.getDisplayName()); <-- NULL
                PersistentDataContainer data = meta.getPersistentDataContainer();
                if (data.has(searchKey)) {
                      event.getWhoClicked().sendMessage(data.get(searchKey, PersistentDataType.STRING)); <--- РАБОТАЕТ НОРМАЛЬНО
                }
            }

        }
 
Последнее редактирование:
У того т.к. из того же предмета я тяну данные из PersistentDataContainer. Пример ниже



Код:
if (event.getSlotType().equals(InventoryType.SlotType.ARMOR)) {

            NamespacedKey searchKey = new NamespacedKey(MyPlugin.getInstance(), "hiddenTag");
            ItemMeta meta = event.getCurrentItem().getItemMeta();
            if (meta != null) {
                event.getWhoClicked().sendMessage(meta.getDisplayName()); <-- NULL
                PersistentDataContainer data = meta.getPersistentDataContainer();
                if (data.has(searchKey)) {
                      event.getWhoClicked().sendMessage(data.get(searchKey, PersistentDataType.STRING)); <--- РАБОТАЕТ НОРМАЛЬНО
                }
            }

        }
Есть же meta.hasDisplayName() для проверки на отсутствие дисплейнейма.
 
У того т.к. из того же предмета я тяну данные из PersistentDataContainer. Пример ниже



Код:
if (event.getSlotType().equals(InventoryType.SlotType.ARMOR)) {

            NamespacedKey searchKey = new NamespacedKey(MyPlugin.getInstance(), "hiddenTag");
            ItemMeta meta = event.getCurrentItem().getItemMeta();
            if (meta != null) {
                event.getWhoClicked().sendMessage(meta.getDisplayName()); <-- NULL
                PersistentDataContainer data = meta.getPersistentDataContainer();
                if (data.has(searchKey)) {
                      event.getWhoClicked().sendMessage(data.get(searchKey, PersistentDataType.STRING)); <--- РАБОТАЕТ НОРМАЛЬНО
                }
            }

        }
Название, которое ты устанавливаешь программно, отображается на предмете? Показывай скриншот и код, которым устанавливаешь
 
Всем спасибо за ответы. Проблема была в моей невнимательности. Кастомное имя задаю через yml, но в этот раз его не задал, хотя был уверен до последнего, что задал )
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх