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

  • Автор темы Автор темы 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 item, String name, String 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());

Казалось бы, все до ужаса просто, но я чет застрял на этом моменте и не могу понять, почему нпе в лицо кидает
 
Дарю. Уже давно нет необходимости в нмс и рефлексиях.
Код:
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);
    }
}
 
Дарю. Уже давно нет необходимости в нмс и рефлексиях.
Код:
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);
    }
}
У меня такого нет -
PersistentDataContainer

Я так понимаю, то что ты скинул идёт под версию выше 1.12 ?
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх