#NBT tags doesnt apply (NMS, 1.17.1)

1 messages · Page 1 of 1 (latest)

alpine coral
#

Hello! I'm trying to set some NBT tags for my items, but it doesn't set
My methods:

    public ItemStack setNBT(ItemStack itemStack, String key, String value) {
        net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
        NBTTagCompound itemCompound = (nmsItem.hasTag()) ? nmsItem.getTag() : new NBTTagCompound();
        itemCompound.setString(key, value);
        nmsItem.setTag(itemCompound);
        return CraftItemStack.asBukkitCopy(nmsItem);
    }

    public String getNBT(ItemStack itemStack, String key) {
        net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
        NBTTagCompound itemCompound = (nmsItem.hasTag()) ? nmsItem.getTag() : new NBTTagCompound();
        itemCompound.getString(key);
        return itemCompound.getString(key);
    }

    public boolean hasNBT(ItemStack itemStack, String key) {
        return !getNBT(itemStack, key).equals("");
    }
#
    public TWDItem(ItemStack itemStack, int tier, String customItemName) {
        this.tier = tier;
        this.customItemName = customItemName;
        NBTManager nbtManager = new NBTManager();
        nbtManager.setNBT(itemStack, "tier", String.valueOf(tier));
        nbtManager.setNBT(itemStack, "twd_customItem", customItemName);
        System.out.println(customItemName + " - " + "tier: " + nbtManager.getNBT(itemStack, "tier"));
        System.out.println(customItemName + " - " + "twd_customItem: " + nbtManager.getNBT(itemStack, "tier"));
        this.itemStack = itemStack;
    }
#
    public static TWDItem getCustomItemFromConfig(String name) {
        FileConfiguration fileConfiguration = Main.getInstance().getConfigManager().getCustomItems();
        String displayName = fileConfiguration.getString("CustomItems." + name + ".Name");
        Material material = Material.valueOf(fileConfiguration.getString("CustomItems." + name + ".Material").toUpperCase());
        List<String> lore = fileConfiguration.getStringList("CustomItems." + name + ".Lore");
        int tier = fileConfiguration.getInt("CustomItems." + name + ".Tier");

        ItemStack itemStack = new ItemStack(material);
        ItemMeta itemMeta = itemStack.getItemMeta(); {
            itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', displayName));
            List<String> translatedLore = new ArrayList<>();
            lore.forEach(entry -> translatedLore.add(ChatColor.translateAlternateColorCodes('&', entry)));
            itemMeta.setLore(translatedLore);
        }
        itemStack.setItemMeta(itemMeta);

        /*NBTManager nbtManager = new NBTManager();
        nbtManager.setNBT(itemStack, "twd_customItem", name);*/

        return new TWDItem(itemStack, tier, name);
    }
marsh peak
#

you're creating new instances of items instead of modifying the current ones
try this:

public TWDItem(ItemStack itemStack, int tier, String customItemName) {
        this.tier = tier;
        this.customItemName = customItemName;
        NBTManager nbtManager = new NBTManager();
        itemStack = nbtManager.setNBT(itemStack, "tier", String.valueOf(tier));
        itemStack = nbtManager.setNBT(itemStack, "twd_customItem", customItemName);
        System.out.println(customItemName + " - " + "tier: " + nbtManager.getNBT(itemStack, "tier"));
        System.out.println(customItemName + " - " + "twd_customItem: " + nbtManager.getNBT(itemStack, "tier"));
        this.itemStack = itemStack;
    }
#

@alpine coral does it work?

alpine coral
#

I'm changing all the constructors

#

@marsh peak, u r the best

#

it works