Named Binary Tag/1.16

From Forge Community Wiki

Information between two points are passed in many different ways in Minecraft. The most common of them is known as NBTs. NBTs are a structured binary file used to store information on the disk. They are also used as intermediaries to hold information that will be sent across a network. Understanding and utilizing NBTs properly is a good start to understanding disk storage in general.

NBT Types

There are a total of fourteen different nbt data types that can be parsed. The most common one to use is CompoundNBTs within a TileEntity or Entity when it comes to writing to the disk. However, on capabilities, other types can be specified to reduce the space it takes on a file.

All types implement INBT in some fashion. This interface holds basic methods for writing to a file and copying itself. It also holds basic methods to determine the output to a chat line.

Id Name Description
0 EndNBT Specifies the end of an nbt file.
1 ByteNBT Holds a byte. Also used to store a boolean value.
2 ShortNBT Holds a short.
3 IntNBT Holds an integer.
4 LongNBT Holds a long.
5 FloatNBT Holds a float.
6 DoubleNBT Holds a double.
7 ByteArrayNBT Holds a byte array. Can be parsed from an array of primitive bytes or a list of byte objects.
8 StringNBT Holds a string.
9 ListNBT Holds a list of a specific INBT.
10 CompoundNBT Holds an object comprised of INBTs. It works similarly to a java object where it can store other primitives, objects, or itself inside.
11 IntArrayNBT Holds an integer array. Can be parsed from an array of primitive integers or a list of integer objects.
12 LongArrayNBT Holds an long array. Can be parsed from an array of primitive long, a list of long objects, or a LongSet.
99 NumberNBT Holds a generic number. Used when the specific INBT for a number is not specified. All numbers can be converted to each other.

In most cases, you will only have to deal with CompoundNBT and ListNBT. The others are usually handled internally by whichever type uses them.

Common Usages

CompoundNBTs are used similar to objects. You can put and value within them using a key. You can then retrieve the value once again with that same key. It has specific methods for putting and getting most of the different types of data (e.g. an integer using putInt and getInt).

ListNBTs are functionally the same as ArrayLists. You can add, remove, set, or get a specific NBT type.