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

(Решено)не могу понять, почему кидает npe

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

Статус темы:
Закрыта.
  1. Автор темы
    reZero

    reZero Активный участник Пользователь

    Баллы:
    76
    Создаю itemStack
    PHP:
    ItemStack itemSpawn = new ItemStack(Material.SLIME_BALL);
    Вешаю на него нбт тег
    PHP:
    NBTHandler.addString(itemSpawn"owner"event.getPlayer().getName());
    При выполнении кода выбрасывается NPE с жалобой на 2 строчки:
    PHP:
       public static void addString(org.*********ventory.ItemStack itemString nameString value) {
            
    net.minecraft.server.v1_12_R1.ItemStack itemStack CraftItemStack.asNMSCopy(item);
            
    NBTTagCompound compound itemStack.getTag();
            
    //ТУТ//compound.set(name, new NBTTagString(value));
            
    itemStack.setTag(compound);
            
    ItemMeta meta CraftItemStack.getItemMeta(itemStack);
            
    item.setItemMeta(meta);
        }
    PHP:
    NBTHandler.addString(itemSpawn"owner"event.getPlayer().getName());

    Казалось бы, все до ужаса просто, но я чет застрял на этом моменте и не могу понять, почему нпе в лицо кидает
     
  2. alexandrage

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

    Баллы:
    173
    Дарю. Уже давно нет необходимости в нмс и рефлексиях.
    Код:
    package Example;
    
    import org.bukkit.Bukkit;
    import org.bukkit.NamespacedKey;
    import org.bukkit.entity.Player;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;
    import org.bukkit.persistence.PersistentDataContainer;
    import org.bukkit.persistence.PersistentDataType;
    
    public class ItemOwner {
        public static void setTagCMD(String owner, ItemStack item) {
            ItemMeta meta = item.getItemMeta();
            PersistentDataContainer tag = meta.getPersistentDataContainer();
            tag.set(NamespacedKey.minecraft("owner"), PersistentDataType.STRING, owner);
            item.setItemMeta(meta);
        }
     
        public static boolean hasTagCMD(ItemStack item) {
            ItemMeta meta = item.getItemMeta();
            PersistentDataContainer tag = meta.getPersistentDataContainer();
            return tag.has(NamespacedKey.minecraft("owner"), PersistentDataType.STRING);
        }
    
        public static String getTagOwner(ItemStack item) {
            ItemMeta meta = item.getItemMeta();
            PersistentDataContainer tag = meta.getPersistentDataContainer();
            return tag.get(NamespacedKey.minecraft("owner"), PersistentDataType.STRING);
        }
    }
     
  3. Автор темы
    reZero

    reZero Активный участник Пользователь

    Баллы:
    76
    У меня такого нет -
    PersistentDataContainer

    Я так понимаю, то что ты скинул идёт под версию выше 1.12 ?
     
  4. alexandrage

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

    Баллы:
    173
    1.13 и 1.14. В 1.13 там немного иначе, но уже было.
     
  5. Автор темы
    reZero

    reZero Активный участник Пользователь

    Баллы:
    76
    Придется плясать с бубном...
     
  6. Автор темы
    reZero

    reZero Активный участник Пользователь

    Баллы:
    76
    Энивей ничего не получается
     
  7. Автор темы
    reZero

    reZero Активный участник Пользователь

    Баллы:
    76
    Разобрался
     
Статус темы:
Закрыта.

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