El formato NBT es utilizado en Minecraft para almacenar datos en forma de árbol compuesto por tags. Todas las tags tienen una ID y un nombre propios. La versión original que podemos encontrar en Minecraft Beta 1.3 hace uso de la versión 19132
y se actualizó a la 19133
cuando se cambió a Anvil, con la adición de la TAG_Int_Array.
Una tag es una parte individual del árbol de datos. El primer byte en una tag determina su ID, le siguen dos bytes para la longitud del nombre de la tag y, por último, el nombre como cadena de caracteres en formato UTF-8.
(Nota: TAG_End no está nombrada y no contiene los 2 bytes correspondientes)
Los nombres de las tags pueden contener espacios, aunque en Minecraft nunca los almacena con espacios dentro del nombre. Finalmente, dependiendo del tipo de tag, los bytes que siguen son los datos almacenables.
La siguiente tabla describe cada una de las 12 tags conocidas en la versión 19133
del formato NBT:
ID | Icono | Tipo de tag | Almacenamiento | Descripción | Capacidad de almacenamiento |
---|---|---|---|---|---|
0 | TAG_End | Nada. | Se utiliza para indicar el final de las tags compuestas. No posee nombre, por lo que sólo es un byte 0. Puede ser el contenido de las listas vacías. | Sin capacidad para almacenar datos. | |
1 | TAG_Byte | 1 byte / 8 bits, con signo. | Integral provista de signo. A veces se emplea como booleano. | Rango comprendido entre -(2^7) y 2^7 - 1 : Desde -128 hasta 127 . |
|
2 | TAG_Short | 2 bytes / 16 bits, con signo y ordenados desde el mayor. | Un integral provisto de signo. | Rango comprendido entre -(2^15) y 2^15 - 1 : Desde -32.768 hasta 32.767 . |
|
3 | TAG_Int | 4 bytes / 32 bits, con signo y ordenados desde el mayor. | Un integral provisto de signo. | Rango comprendido entre -(2^31) y 2^31 - 1 : Desde -2.147.483.648 hasta 2.147.483.647 . |
|
4 | TAG_Long | 8 bytes / 64 bits, con signo y ordenados desde el mayor. | Un integral provisto de signo. | Rango comprendido entre -(2^63) y 2^63 - 1 : Desde -9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807 . |
|
5 | TAG_Float | 4 bytes / 32 bits, con signo y ordenados desde el mayor, IEEE 754-2008, binary32. | Número con coma flotante provisto de signo. | La precisión puede variar según la línea numérica. Formato de coma flotante de precisión simple. | |
6 | TAG_Double | 8 bytes / 64 bits, con signo y ordenados desde el mayor, IEEE 754-2008, binary64. | Número con coma flotante provisto de signo. | La precisión puede variar según la línea numérica. Formato de coma flotante de precisión doble. | |
7 | TAG_Byte_Array | Almacenamiento de igual tamaño que TAG_Int, seguido del de TAG_Byte. | Un conjunto de bytes. | El número máximo de elementos varía entre 2^31 - 9 y 2^31 - 1 : 2.147.483.639 y 2.147.483.647 , dependiento del JVM específico. |
|
8 | TAG_String | Almacenamiento de igual longitud que TAG_Short, seguido por una cadena de caracteres UTF-8. | Cadena de caracteres UTF-8. Siempre tiene un tamaño, a pesar de estar vacía. | 2^15 : 32.767 caracteres UTF-8. La mayoría de ellos son simples: Caracteres UTF-8. |
|
9 | TAG_List | Id equivalente al almacenamiento de TAG_Byte, longitud igual a la de TAG_Int, contiene los almacenamientos de cada tag y todos los tipos de Id. | Lista de tags, sin repetir IDs ni nombres asignados. | Debido a las limitaciones de JVM, el número máximo de elmementos es 2^31 - 9 o 2.147.483.639 . También hay que aclarar que las TAG_List y las TAG_Compound no deben superar una profundidad de 512 . |
|
10 | TAG_Compound | Tags completas seguidas de una TAG_End. | Una lista de tags completas, incluyen sus IDs, nombres, y capacidades. Los nombres de las mismas no se pueden repetir. | Al contrario que en TAG_List, no hay límite de lo que una TAG_Compound puede contener (aunque siempre se encuentra el límite implícito de la memoria virtual). También hay que aclarar que las TAG_Compound y las TAG_List no deben superar una profundidad de 512 . |
|
11 | TAG_Int_Array | Tamaño de almacenamiento como el de TAG_Int y almacenadas TAG_Int con sus tamaños propios. | Un conjunto de TAG_Int. | El máximo número de elementos se encuentra entre 2^31 - 9 y 2^31 - 1 : 2.147.483.639 y 2.147.483.647 , dependiendo de JVM. |
|
12 | TAG_Long_Array | Tamaño de almacenamiento como el de TAG_Int y almacenadas TAG_Long con sus tamaños propios. | Un conjunto de TAG_Long. | El máximo número de elementos se encuentra entre 2^31 - 9 y 2^31 - 1 : 2.147.483.639 y 2.147.483.647 , dependiendo de JVM. |