Minecraft utiliza el formato de etiqueta binaria (en ingles Named Binary Tag) con nombre para los diversos archivos en los que guarda los datos. Notch describe el formato en una muy breve explicación specification. El formato está diseñado para almacenar datos en una estructura de árbol compuesta de varias etiquetas. Todas las etiquetas tienen una identificación y un nombre. La versión original conocida era 19132 como se introdujo en Beta 1.3, y desde entonces se ha actualizado a 19133 con Anvil, con la adición de la etiqueta Int Array. El formato NBT se remonta a Indev con las etiquetas 0 a 10 en uso.
Otro formato más fácil de usar de NBT es en cadena simple, como se usa en comandos. Este formato se conoce como 'SNBT' , abreviatura de 'NBT en cadena' . Es diferente del formato JSON; por lo tanto, cualquier JSON utilizado en NBT, como raw json text, debe encerrarse dentro de una etiqueta de cadena .
Los TAGs[]
Una etiqueta es una parte individual del árbol de datos. El primer byte en una etiqueta es el tipo de etiqueta (ID), seguido de un entero sin signo big-endian de dos bytes para la longitud del nombre, luego el nombre como una cadena en formato UTF-8 (El TAG 'Fin' no tiene nombre y no contiene los 2 bytes adicionales; se supone que el nombre está vacío). El nombre de las etiquetas puede contener espacios, aunque Minecraft nunca guarda etiquetas con espacios en los nombres. Finalmente, dependiendo del tipo de etiqueta, los bytes que siguen son parte de la "carga útil" de esa etiqueta. Esta tabla describe cada una de las 13 etiquetas conocidas en la versión 19133 del formato de etiqueta binaria nombrada:
ID | Icono | Tipo de Tag | Payload | SNBT Format[Solo JE] | Descripción | Storage Capacity |
---|---|---|---|---|---|---|
0 | TAG_End | - | - | Se usa para marcar el final de las etiquetas compuestas. Esta etiqueta no tiene nombre, por lo que solo es un byte 0. También puede ser el tipo de etiquetas de Lista vacías. | N/A | |
1 | TAG_Byte | 1 byte / 8 bits, signed | <number>b or <number>B
|
Un tipo entero firmado. A veces se usa como si fuera un dato booleanos. | (27) a (27 - 1) (-128 to 127) | |
2 | TAG_Short | 2 bytes / 16 bits, signed, big endian | <number>s or <number>S
|
Es un tipo entero firmado. | (215) a (215 - 1) (-32,768 to 32,767) | |
3 | TAG_Int | 4 bytes / 32 bits, signed, big endian | <number>
|
Es un tipo entero firmado | (231) a (231 - 1) (-2,147,483,648 to 2,147,483,647) | |
4 | TAG_Long | 8 bytes / 64 bits, signed, big endian | <number>l or <number>L
|
Es un tipo entero firmado | (263) a (263 - 1) (-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807) | |
5 | TAG_Float | 4 bytes / 32 bits, signed, big endian, IEEE 754-2008, binary32 | <number>f or <number>F
|
Es un tipo de dato Float firmado. | La precisión varía a lo largo de la recta numérica; See Single-precision floating-point format. El valor máximo esta sobre 3.4*1038 | |
6 | TAG_Double | 8 bytes / 64 bits, signed, big endian, IEEE 754-2008, binary64 | <decimal number> , <number>d or <number>D
|
Es un tipo de dato Double firmado. | La precisión varía a lo largo de la recta numérica; See Double-precision floating-point format. El valor máximo esta sobre 1.8*10308 | |
7 | TAG_Byte_Array | TAG_Int's payload size, then size TAG_Byte's payloads. | [B;<byte>,<byte>,...]
|
Este TAG es un array de bytes. | El número máximo de elementos varía entre (231 - 9) y (231 - 1) (2,147,483,639 y 2,147,483,647), dependiendo de la JVM específica. | |
8 | TAG_String | Longitud de carga útil de TAG_Short, luego una cadena UTF-8 con longitud de tamaño. | - | Una cadena UTF-8. Tiene un tamaño, en lugar de ser nulo terminado. | 32,767 bytes interpretables como UTF-8 (see UTF-8 format; los caracteres más utilizados son de un solo byte). | |
9 | TAG_List | - | [<value>,<value>,...]
|
Una lista de cargas de etiquetas, sin ID de etiquetas repetidas ni nombres de etiquetas. | Debido a las limitaciones de JVM y la implementación de ArrayList, el número máximo de elementos de lista es(231 - 9), or 2,147,483,639. También tenga en cuenta que las etiquetas Lista y Compuesto no pueden anidarse más allá de una profundidad de 512. | |
10 | TAG_Compound | Etiquetas completamente formadas, seguidas de un TAG_End. | {<tag name>:<value>,<tag name>:<value>,...}
|
Una lista de etiquetas completamente formadas, incluidos sus ID, nombres y cargas útiles. No hay dos etiquetas que puedan tener el mismo nombre. | A diferencia de las listas, no existe un límite estricto para el número de etiquetas dentro de un Compuesto (por supuesto, siempre existe el límite implícito de la memoria virtual). Sin embargo, tenga en cuenta que las etiquetas de Compound y List no pueden anidarse más allá de una profundidad de 512. | |
11 | TAG_Int_Array | - | [I;<integer>,<integer>,...]
|
Un conjunto de cargas útiles de TAG_Int. | El número máximo de elementos varía entre (231 - 9) y (231 - 1) (2,147,483,639 y 2,147,483,647), dependiendo de la JVM específica. | |
12 | TAG_Long_Array | - | [L;<long>,<long>,...]
|
Un conjunto de cargas útiles de TAG_Long. | El número máximo de elementos varía entre (231 - 9) y (231 - 1) (2,147,483,639 y 2,147,483,647), dependiendo de la JVM específica. |
Las etiquetas List y Compound pueden estar anidadas recursivamente y, a menudo, están anidadas recursivamente. También debe tenerse en cuenta que, en una lista de listas, cada una de las sublistas puede incluir un tipo diferente de etiqueta.
Formato de los Archivos[]
Un archivo NBT es una etiqueta compuesta GZip'd, nombre e ID de etiqueta incluidos. Algunos de los archivos utilizados por Minecraft pueden estar sin comprimir, pero en la mayoría de los casos los archivos siguen las especificaciones originales de Notch y están comprimidos con GZip. En Legacy Console Edition, chunks se comprimen con XMemCompress, una variación de un algoritmo de compresión LZX. No hay encabezado para especificar la versión o cualquier otra información, solo el archivo level.dat especifica la versión.
El como lo usan en Minecraft[]
El uso de Minecraft del formato NBT es extraño a veces. En algunos casos, las listas vacías pueden representarse como una lista de etiquetas de bytes en lugar de una lista del tipo correcto, o como una lista de etiquetas finales en las versiones más nuevas de Minecraft, lo que puede romper algunas herramientas NBT más antiguas. Además, casi todas las etiquetas raíz tienen una cadena de nombre vacía y encapsulan solo una etiqueta compuesta con los datos reales y un nombre. Por ejemplo:
- La etiqueta raíz para la mayoría de las estructuras NBT en Minecraft.
- SomeName: La única etiqueta contenida dentro de la etiqueta raíz: tiene un nombre y contiene todos los datos reales.
Otra rareza notable es que, aunque la especificación original de Notch permite espacios en los nombres de las etiquetas, e incluso el ejemplo usa espacios en los nombres de las etiquetas, Minecraft no tiene archivos conocidos en los que las etiquetas tengan espacios en sus nombres. También hay un uso inconsistente de mayúsculas y minúsculas, principalmente camelCase o PascalCase, pero a veces incluso en minúsculas.
Uses[]
- level.dat se almacena en formato comprimido NBT.
- <player>.dat Los archivos se almacenan en formato comprimido NBT.
- idcounts.dat se almacena en formato NBT sin comprimir.
- villages.dat se almacena en formato NBT comprimido.
- map_<#>.dat Los archivos se almacenan en formato comprimido NBT.
- servers.dat, se utiliza para almacenar la lista de servidores multijugador guardados como NBT sin comprimir.
- Chunks se almacenan en formato NBT comprimido dentro de los archivos Region.
- scoreboard.dat se almacena en formato NBT comprimido.
- Generated structures se almacena en formato NBT comprimido.
- Saved structures se almacena en formato NBT comprimido.
Software[]
Mojang ha proporcionado clases Java NBT de muestra para que los desarrolladores las utilicen y hagan referencia como parte del código fuente del convertidor McRegion -> Anvil converter. desde la 1.13, Minecraft incluye un convertidor integrado entre el formato SNBT y el formato NBT comprimido. Viene con el cliente y el servidor oficial.[1]
Official[]
El generador de datos de Minecraft puede convertir archivos Stringified NBT sin comprimir con extensión .snbt en una carpeta de entrada a archivos de formato NBT comprimidos con GZip con extensión .nbt en una carpeta de salida y viceversa.
El generador de datos Vanilla puede convertir cualquier formato NBT comprimido con GZip a formato SNBT. Simplemente puede cambiar la extensión de archivo de un archivo, como level.dat a level.nbt y ponerlo en la entrada y el generador decodificará los datos NBT comprimidos con GZip.
Software de terceros[]
La comunidad ha desarrollado programas para ver y modificar archivos NBT comprimidos y sin comprimir:
Nombre | NBT Version | Descripción | Capturas |
---|---|---|---|
CL-NBT | 19132 | CL-NBT es una implementación NBT en Common Lisp que puede leer y escribir archivos NBT y cargar y guardar archivos McRegion. El formato del yunque funciona con ligeras modificaciones. | |
MineBack Ultimate | 19133 | MineBack Ultimate proporciona un editor NBT completo que admite todos los tipos de archivos de formato NBT disponibles (Mapa, Nivel, Mundo, etc.). Viene con una GUI moderna y muchas funciones auxiliares. | |
NBT for Python | 19133 | Biblioteca para analizar y escribir archivos NBT, tanto independientes como en archivos de región, hecho en el lenguaje de Python. Se proporcionan ejemplos de aplicaciones para inspeccionar y editar los archivos de datos de Minecraft (estadísticas de bloque / cofre / mobs y mapeo mundial simple). Admite los antiguos formatos McRegion, pre-aplanado y los últimos Anvil. | |
NBTEdit | 19132 | Permite ver y modificar archivos NBT a través de un control de árbol de Windows. Está desactualizado no solo por ser una versión NBT antigua, sino porque no admite múltiples etiquetas con el mismo nombre y fuerza rangos incorrectos en algunos tipos, y carece de soporte para archivos NBT sin comprimir. | |
NBTExplorer - Forum Post | 19133 | Inspirado y basado en NBTEdit, este programa permite ver y editar archivos NBT a través de un control de árbol de Windows. Admite archivos NBT comprimidos y sin comprimir, y permite la edición directa de las estructuras NBT en archivos MCRegion y Anvil, level.dat, etc. | |
NBT grammar for Synalyze It! | 19132 | Usando esta gramática Synalyze It! muestra un volcado hexadecimal codificado por colores junto con el árbol de etiquetas analizadas. Actualmente solo se admiten archivos sin comprimir. | |
NEINedit | 19132 | NTB Editor para mac con una estructura de árbol basada en texto. | |
NBT2YAML | 19133 | nbt2yaml presenta una interfaz de línea de comandos para leer y editar archivos Minecraft NBT usando un formato YAML personalizado. También incluye una API de Python para analizar y escribir archivos NBT desde una estructura de datos Python simple. | |
webNBT | 19133 | webNBT es un editor NBT que se ejecuta en navegadores modernos sin requerir que el usuario descargue una aplicación o use complementos de navegador de terceros (como Flash o JavaScript). |
Historial[]
Java Edition | |||||
---|---|---|---|---|---|
1.0.0 | 28 de septiembre de 2011 | Notch publico en twitter "Estoy trabajando en una forma de guardar datos arbitrarios con instancias de elementos." | |||
1.12 | ? | Se agregaron las etiquetas de matriz larga . | |||
1.13 | 18w01a | Se agregó un generador de datos tanto a Minecraft client como al software multijugador predeterminado. | |||
1.14 | 19w08a | Las etiquetas de cadena ahora pueden estar entre comillas simples ' además de comillas dobles " .[2] |
Referencias[]
- ↑ https://wiki.vg/Data_Generators#NBT_converters
- ↑ "Allow single quote in strings by boq · Pull Request #52" – Mojang/brigadier – GitHub.
Versiones | |||||||
---|---|---|---|---|---|---|---|
Desarrollo |
| ||||||
Técnico |
| ||||||
Multijugador |
| ||||||
Personalización del juego |