Overview • Usage • Features • Javadocs • License
NBT (Named Binary Tag) is a binary format devised by Notch to be Minecraft's primary means of data storage.
Due to the scuffed way the NBT format works, you'll probably want to read up on it before using this library in production. There are 12 types of tag that can be used in a complaint NBT file (see the links below for descriptions of each):
Tag type IDs 1-12 for each of these can be found here.
All valid NBT structures begin with a compound tag; the root compound. Everything else in the NBT structure is a child of this root compound.
The original NBT specification written by Notch is also hosted here.
This library can be added as a dependency via maven central:
repositories {
mavenCentral()
}
dependencies {
implementation "dev.dewy:nbt:1.5.1"
}
The Nbt class can be used to easily (de)serialize NBT data:
public static final Nbt NBT = new Nbt();
CompoundTag test = NBT.fromBase64("CgALaGVsbG8gd29ybGQDAAR0ZXN0AAAAAAA");
System.out.println(test.getName()); // hello world
System.out.println(test.getInt("test").getValue()); // 0
See the NbtTest class for full sample usage.
SNBT (Stringified NBT) is a format defined by Mojang used to record NBT tags as readable strings, used in command blocks.
The JSON NBT sample encoded as SNBT is as follows:
{"primitive":3,"array":[I;0,1,2,3],"list":["duck","goose"],"compound":{}}
Every tag in NBT JSON is represented as an object containing the following properties:
type
The tag's type ID. (byte)value
The tag's value. (JSON primitive, array, or object depending on the tag's type)name
The tag's name, omitted if contained inside a list tag. (string)
The JSON NBT sample is documented below:
{ // root compound tag named "root"
"type": 10, // compound tag type ID
"name": "root",
"value": {
"primitive": { // an int tag named "primitive" with the value 3
"type": 3, // int tag type ID
"name": "primitive",
"value": 3
},
"array": { // an int array tag named "array" with the value [0, 1, 2, 3]
"type": 11, // int array tag type ID
"name": "array",
"value": [
0,
1,
2,
3
]
},
"list": { // a list tag named "list" containing string tags.
"type": 9, // list tag type ID
"listType": 8, // string tag type ID (this list contains string tags)
"name": "list",
"value": [
{ // unnamed string tag contained within "list"
"type": 8, // string tag type ID
"value": "duck"
},
{
"type": 8,
"value": "goose"
}
]
},
"compound": { // an empty compound tag named "compound"
"type": 10, // compound tag type ID
"name": "compound",
"value": {} // empty
}
}
}
- Fully compliant with Mojang's "standards"
- Small and lightweight (40Kb!)
- Supports all Java edition NBT tags (including long array)
- Intuitive and flexible reading and writing functionality
- JSON (De)serialization
- SNBT Serialization
Javadocs for the library can be found here.
This project is licensed under the MIT license: see here.