(Item/Entity/Tile) NBT API 1.8.2

Add custom NBT tags or modify tags of Items/Entities/Tiles without NMS!

  1. tr7zw
    Tested Minecraft Versions:
    • 1.7
    • 1.8
    • 1.9
    • 1.10
    • 1.11
    • 1.12
    • 1.13
    Source Code:
    https://github.com/tr7zw/Item-NBT-API
    (Item/Entity/Tile) NBT API
    [​IMG] [​IMG]
    The NBT API allows you to add custom NBT tags to Itemstacks, TileEntities and Entities, or modify excisting ones!
    It completely uses reflections to interact with NMS code and works with all the latest versions. On server start the plugin checks all reflections.

    Tested on Spigot
    • (1.7*)1.8.8-1.13.1
    • On startup you will get a notification if there is a version problem!
    * 1.7 Notes: Use a 1.7 with R4 (1.7.10), NBTLists may not work, everything using Gson is disabled(Add Gson before the NBTAPI loads, to turn it back on), and you can't get the NBTTypes, because 1.7 is missing this feature. TLDR: 1.7.10 is somewhat broken and may not work.

    What do I have to do as server owner?
    Just download the jar and drop it in the plugins folder. Done.

    How can I use the API as developer?
    Create the NBT Wrapper:
    Code (Text):
    NBTItem nbti = new NBTItem(item);
    NBTEntity nbtent = new NBTEntity(zombie);
    NBTTileEntity tent = new NBTTileEntity(block.getState());
    NBTFile file = new NBTFile(new File(getDataFolder(), "test.nbt"));
     
    Add/Get/Override NBT tags:
    Code (Text):
    //Set
    nbti.setString("Stringtest", "Teststring");
    nbti.setInteger("Inttest", 42);
    nbti.setDouble("Doubletest", 1.5d);
    nbti.setBoolean("Booleantest", true);
    //More are avaible!
    //Get
    nbti.getString("Stringtest");
    nbti.getInteger("Inttest");
    nbti.getDouble("Doubletest");
    nbti.getBoolean("Booleantest");
    //Get all Tags
    nbti.getKeys();
    //Check for an tag
    nbti.hasKey("Key");
    //Remove a tag
    nbti.removeKey("Key");
    //or
    nbti.setString("Stringtest", null);
    //Create NBTTagCombounds(Imagine folders)
    nbti.addCompound("subtag");
    //Get Compound
    NBTCompound comp = nbti.getCompound("subtag");
    //Get Compound parent(null at root)
    comp.getParent();
    //Save Objects via Gson
    nbti.setObject("myobject", new SimpleJsonTestObject());
    //Get Objects
    SimpleJsonTestObject simpleObject = nbti.getObject("myobject", SimpleJsonTestObject.class);

    //Access/create lists
    nbtent.getList("Attributes", NBTType.NBTTagCompound);
     
    And finally get back the Bukkit Itemstack(Changes on Tiles/Entities will happen directly):
    Code (Text):
    nbti.getItem();
    Saving the NBTFile:
    Code (Text):
    file.save();
    Maven
    Code (Text):
    <repositories>
     <repository>
      <id>jitpack.io</id>
      <url>https://jitpack.io</url>
     </repository>
    </repositories>

    <dependency>
     <groupId>com.github.tr7zw</groupId>
     <artifactId>Item-NBT-API</artifactId>
     <version>master-SNAPSHOT</version>
    </dependency>
    Example Code
    Code (Text):

     Zombie z = (Zombie) b.getWorld().spawnEntity(b.getLocation().add(0, 1, 0), EntityType.ZOMBIE);
                    NBTEntity nbtent = new NBTEntity(z);
                    nbtent.setByte("CanPickUpLoot", (byte) 1);
                    NBTList list = nbtent.getList("Attributes", NBTType.NBTTagCompound);
                    for(int i = 0; i < list.size(); i++){
                        NBTListCompound lc = list.getCompound(i);
                        if(lc.getString("Name").equals("generic.attackDamage")){
                            lc.setDouble("Base", 0.5d);
                        }
                    }
     

    Code (Text):

            ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
            NBTItem nbti = new NBTItem(head);
            NBTCompound disp = nbti.addCompound("display");
            disp.setString("Name", "Testitem");
            NBTList l = disp.getList("Lore", NBTType.NBTTagString);
            l.addString("Some lore");
            NBTCompound skull = nbti.addCompound("SkullOwner");
            skull.setString("Name", "tr7zw");
            skull.setString("Id", "fce0323d-7f50-4317-9720-5f6b14cf78ea");
            NBTListCompound texture = skull.addCompound("Properties").getList("textures", NBTType.NBTTagCompound).addCompound();
            texture.setString("Signature", "XpRfRz6/vXE6ip7/vq+40H6W70GFB0yjG6k8hG4pmFdnJFR+VQhslE0gXX/i0OAGThcAVSIT+/W1685wUxNofAiy+EhcxGNxNSJkYfOgXEVHTCuugpr+EQCUBI6muHDKms3PqY8ECxdbFTUEuWxdeiJsGt9VjHZMmUukkGhk0IobjQS3hjQ44FiT1tXuUU86oAxqjlKFpXG/iXtpcoXa33IObSI1S3gCKzVPOkMGlHZqRqKKElB54I2Qo4g5CJ+noudIDTzxPFwEEM6XrbM0YBi+SOdRvTbmrlkWF+ndzVWEINoEf++2hkO0gfeCqFqSMHuklMSgeNr/YtFZC5ShJRRv7zbyNF33jZ5DYNVR+KAK9iLO6prZhCVUkZxb1/BjOze6aN7kyN01u3nurKX6n3yQsoQQ0anDW6gNLKzO/mCvoCEvgecjaOQarktl/xYtD4YvdTTlnAlv2bfcXUtc++3UPIUbzf/jpf2g2wf6BGomzFteyPDu4USjBdpeWMBz9PxVzlVpDAtBYClFH/PFEQHMDtL5Q+VxUPu52XlzlUreMHpLT9EL92xwCAwVBBhrarQQWuLjAQXkp3oBdw6hlX6Fj0AafMJuGkFrYzcD7nNr61l9ErZmTWnqTxkJWZfZxmYBsFgV35SKc8rkRSHBNjcdKJZVN4GA+ZQH5B55mi4=");
            texture.setString("Value", "eyJ0aW1lc3RhbXAiOjE0OTMwNDkwMTcxNTIsInByb2ZpbGVJZCI6ImZjZTAzMjNkN2Y1MDQzMTc5NzIwNWY2YjE0Y2Y3OGVhIiwicHJvZmlsZU5hbWUiOiJ0cjd6dyIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTI3NDZlNWU5OGMwZWRmZTU1YTI3ZGRjNjUxMmJmNjllYzJiYmNlNmM3ZmNhNTQ5YmEzNjZkYThiNTRjZTRkYiJ9fX0=");

            NBTList attribute = nbti.getList("AttributeModifiers", NBTType.NBTTagCompound);
            NBTListCompound mod1 = attribute.addCompound();
            mod1.setInteger("Amount", 10);
            mod1.setString("AttributeName", "generic.maxHealth");
            mod1.setString("Name", "generic.maxHealth");
            mod1.setInteger("Operation", 0);
            mod1.setInteger("UUIDLeast", 59664);
            mod1.setInteger("UUIDMost", 31453);

            nbti.setInteger("HideFlags", 4);
            nbti.setBoolean("Unbreakable", true);
            head = nbti.getItem();
            e.getPlayer().getInventory().addItem(head);
     

    Code (Text):

                    Ocelot m = (Ocelot) e.getPlayer().getWorld().spawnEntity(e.getPlayer().getLocation(), EntityType.OCELOT);
                    NBTEntity ent = new NBTEntity(m);
                    System.out.println(ent);
     
    Output:
    Code (Text):

    -AgeLocked: 0b
    -HurtByTimestamp: 0
    -CatType: 0
    -Leashed: 0b
    -Health: 10.0f
    -Sitting: 0b
    -Attributes: [0:{Base:10.0d,Name:"generic.maxHealth"},1:{Base:0.0d,Name:"generic.knockbackResistance"},2:{Base:0.30000001192092896d,Name:"generic.movementSpeed"},3:{Base:0.0d,Name:"generic.armor"},4:{Base:0.0d,Name:"generic.armorToughness"},5:{Base:16.0d,Modifiers:[0:{UUIDMost:-8783172028836920024L,UUIDLeast:-6820414278857408689L,Amount:-0.030166473586416633d,Operation:1,Name:"Random spawn bonus"}],Name:"generic.followRange"}]
    -FallFlying: 0b
    -LeftHanded: 0b
    -ForcedAge: 0
    -AbsorptionAmount: 0.0f
    -HandItems: [0:{},1:{}]
    -ArmorDropChances: [0:0.085f,1:0.085f,2:0.085f,3:0.085f]
    -OwnerUUID: ""
    -InLove: 0
    -DeathTime: 0s
    -ArmorItems: [0:{},1:{},2:{},3:{}]
    -CanPickUpLoot: 0b
    -HandDropChances: [0:0.085f,1:0.085f]
    -PersistenceRequired: 0b
    -HurtTime: 0s
    -Age: 0
     

    Code (Text):
                    NBTTileEntity tent = new NBTTileEntity(b.getState());
                    tent.setString("Lock", "test");

    More Infos:

    This API can't be used for:
    • Adding custom tags to TileEntities/Entities
    Git: https://github.com/tr7zw/Item-NBT-API
    Jitpack: https://jitpack.io/#tr7zw/Item-NBT-API
    Jenkins: https://ci.codemc.org/job/Tr7zw/job/Item-NBT-API/
    Feel free to create forks for your need! (Send me a message on Spigot if you want stuff to be added)
    Yes you are allowed to integrate the API into your plugin! (Send me a link to your project so I can check it out ;))

    Plugins/projects using the api I know of:
    - Crazy Enchantments (93.000+ downloads!)
    - Vouchers
    - Item Commands
    - Comparable Hoppers
    - Logistics-API
    - Timolia

    If you like this Resource, donate me a Coffee :) Paypal.me
    Thank for the donations made by N3kas, MrDienns, and evilLamer!
    DutchplayXL, Rusketh, PYRRH4 and 16 others like this.

Recent Updates

  1. Nullpointer fixes and logic fix
  2. Quick fix for .hasKey
  3. 1.13.1

Recent Reviews

  1. Coltify
    Coltify
    5/5,
    Version: 1.8.2
    Outstanding work I have been using this API for some time now I am really happy with it being simple to use but also having access to other useful methods like the MojangsonParser#Parse_Nbt method.

    Overall this is amazing piece of work, keep it up!
  2. i0xHeX
    i0xHeX
    5/5,
    Version: 1.8.1
    Really great and simple API to use NBT almost at all needed things. Works as indended, convenient tool to handle NBT tags without pain. Thank you!
  3. Librazy
    Librazy
    5/5,
    Version: 1.7-BETA
    Excellent NBT API, comprehensive and easy to use, thank you!
    Mess with nbt was difficult requiring dirty NMS codes. With this plugin, we can make our code cleaner and maintainable.
  4. SoFocused
    SoFocused
    5/5,
    Version: 1.6
    Powerful API, extremely useful and easy to understand. Thanks for making this beauty!!!!!
  5. D3GDev
    D3GDev
    5/5,
    Version: 1.6
    Great API, it's really useful and helpful. Easy to understand and it didn't dissapoint me.
  6. JustRamonNL
    JustRamonNL
    5/5,
    Version: 1.6
    Cool plugin ;) Its fun for my Survival server as a perk.........................
  7. Funnygatt
    Funnygatt
    5/5,
    Version: 1.6
    API is simple and clean to use, and comes with everything that is needed for any task.
  8. DevSnox
    DevSnox
    5/5,
    Version: 1.6
    Amazing NBT-API.

    Keep up the good work, thank you for this source.

    ~DevSnox

    -----------------------------

    German:

    Super NBT-API.

    Super arbeit, weiter so.
    Vielen Dank für diese Source.

    ~DevSnox
  9. Mowstyl
    Mowstyl
    5/5,
    Version: 1.6
    Working with NBT can be difficult, and using NMS usually means you'll have to recompile when a new minecraft version comes. With this API you don't need to worry about reflection and those things, going to the point. Thank you very much!
  10. Bagga
    Bagga
    5/5,
    Version: 1.6
    This is an amazing API. Works great. I recommend this for everyone.

    100ccccccchaaars