commit | 5310f6e9f07b82bc0c4f6385c7666e454bf451c6 | [log] [download] |
---|---|---|
author | Querz <Querz@users.noreply.github.com> | Wed Apr 05 16:36:52 2017 +0200 |
committer | GitHub <noreply@github.com> | Wed Apr 05 16:36:52 2017 +0200 |
tree | ed8cf7180e4fb944af58580b6d632a97dc9885f9 | |
parent | d1dabb67f27964b5c5ebcc21d6cf7451490a204b [diff] | |
parent | 7d4ef9283981a35a275c21fb1ef40a8118345172 [diff] |
Merge pull request #4 from Querz/readme Update README.md
According to the specification, there are currently 12 different types of tags:
Tag class | Superclass | ID | Payload |
---|---|---|---|
EndTag | Tag | 0 | None |
ByteTag | NumberTag | 1 | 1 byte / 8 bits, signed |
ShortTag | NumberTag | 2 | 2 bytes / 16 bits, signed, big endian |
IntTag | NumberTag | 3 | 4 bytes / 32 bits, signed, big endian |
LongTag | NumberTag | 4 | 8 bytes / 64 bits, signed, big endian |
FloatTag | NumberTag | 5 | 4 bytes / 32 bits, signed, big endian, IEEE 754-2008, binary32 |
DoubleTag | NumberTag | 6 | 8 bytes / 64 bits, signed, big endian, IEEE 754-2008, binary64 |
ByteArrayTag | ArrayTag | 7 | IntTag‘s payload size, then size ByteTag’s payloads |
StringTag | Tag | 8 | ShortTag's payload length, then a UTF-8 string with size length |
ListTag | Tag | 9 | ByteTag‘s payload tagId, then IntTag’s payload size, then size tags' payloads, all of type tagId |
CompoundTag | Tag | 10 | Fully formed tags, followed by an EndTag |
IntArrayTag | ArrayTag | 11 | IntTag‘s payload size, then size IntTag’s payloads |
The EndTag is only used to mark the end of a CompoundTag in its serialized state or an empty ListTag.
The maximum depth of the NBT structure is 512. If the depth exceeds this restriction during serialization, deserialization or String conversion, a MaxDepthReachedException is thrown. This usually happens when a circular reference exists in the NBT structure. The NBT specification does not allow circular references, as there is no tag to represent this.
ByteTag bt = new ByteTag("8bitNumber", (byte) 1); DoubleTag dt = new DoubleTag("64bitFloatingPointNumber", 1.234); CompoundTag ct = new CompoundTag("compound"); ct.set(bt); ct.set(dt);
There are several utility classes that make your life easier using this library.
The NBTFileWriter lets you write a Tag into a gzip compressed or uncompressed file in one line. Files are gzip compressed by default. Example usage:
new NBTFileWriter("filename.dat").write(tag);
The NBTFileReader reads any file containing NBT data. No worry about compression, it will automatically uncompress gzip compressed files. Example usage:
Tag tag = new NBTFileReader("filename.dat").read();
Each tag can be converted into a JSON-like NBT String used in Minecraft commands. Example usage:
CompoundTag c = new CompoundTag("compound"); c.setByte("byte", (byte) 5); c.setString("string", "test"); String s = c.toTagString(); //output: c:{byte:5b,string:"test"}
Interested in more advanced features, and the default NBT protocol just isn't enough? Simply create your own tags! There are 3 example classes in net.querz.nbt.custom that show how to implement custom tags:
Class | ID | Description |
---|---|---|
CharTag | 110 | Character (char) tag. |
ShortArrayTag | 100 | In addition to the already existing ByteArrayTag and IntArrayTag. |
StructTag | 120 | Similar to the ListTag, but with the ability to store multiple types. |
To be able to use a custom tag, it must be registered during runtime with TagType#registerCustomTag(int, Class).