Skip to content
Iltotore edited this page Aug 26, 2020 · 9 revisions

NBT (Named Binary Tag) is a data format originally created by Markuss Person for Minecraft. This format can be extremely compact and usefull for storage.

Different types of NBT Tags

ID Name Description
0 End Used to mark de end of a NBTTagCompound
1 Byte Store a signed byte
2 Short Store a signed short
3 Int Store a signed int
4 Long Store a signed long
5 Float Store a signed float
6 Double Store a signed double
7 Byte Array Store an array of signed bytes. Prefixed by a signed int representing its length. In this API the array become a List
8 String Store a String prefixed by an unsigned short representing his length in bytes
9 List Represent a List of nameless NBT Tags. Prefixed by the type of the contained NBT and the length of the list
10 Compound Represent a list of named NBT Tags. It can be compared to a Map. Note all NBT files represent a NBTTagCompound
11 Int Array Store an array of signed integers. Prefixed by a signed int representing its length. In this API the array become a List

Edit entities's NBT

Firstly, you need to get the entity's NBTTagCompound by using NBTManager#getNBTTag(Entity).

NBTManager nbtManager = SpigotMetadataAPI.getAPI().getNBTManager();
NBTTagCompound nbtTag = nbtManager.getNBTTag(entity);

Now you can edit the entity's NBTTagCompound.

nbtTag.setInt("Fire", 100); //Ignites the entity for 100 ticks (5 seconds)

Now, you need to update the entity's tags.

nbtManager.setNBTTag(entity, nbtTag);

Done !

I/O

Since 2.0, there is an I/O support for NBT Tags. With GZIP, data become extremely lightweight. This storing way can be used to store a lot of data or to send data.

Reading DAT files

You can read .dat files by using NBTInputStream. It works as a normal DataInputStream with new methods like readTag() or readNamedTag(). readTag() return a NBTBase and readNamedTag() a NamedNBT. Note: Minecraft vanilla nbt files contain only a named NBTTagCompound containing all data and are often GZIPped.

Writing DAT files

You can write in nbt files by using NBTOuputStream. It add writeTag(NBTBase) and writeNamedTag(NamedNBT) methods.

Non-wiki pages

Clone this wiki locally