Al Etiqueta binaria con nombre (NBT) es utilizado por Minecraft para los diversos archivos en los que guarda datos. El formato está diseñado para almacenar datos en una estructura de árbol formada por varias etiquetas. Todas las etiquetas tienen una identificación y un nombre.
Otro formato más fácil de usar de NBT es en cadena simple, como se usa en los comandos. Este formato se conoce como SNBT, corto para NBT en cadena.
- 1 formato SNBT
- 2 objeto NBT
- 3 archivo NBT
- 3.1 Definición de TAG
- Uso de 3.2
- Usos de 3.2.1
- 4 Software oficial
- Historia de 5
- 6
- Enlaces 7 externos
Formato SNBT
Esta función es exclusiva de Java Edition.SNBT, también conocido como etiqueta de datos, se utiliza a menudo en el comando en Java Edition. Se puede describir comenzando con pares de atributo-valor entre llaves. Un uso común de las etiquetas de datos en Java Edition son los comandos, que se utilizan para especificar datos complejos para cualquier entidad.
Una etiqueta de datos consta de cero o más pares de atributo-valor delimitados por comas y encerrados entre llaves. Cada par atributo-valor consta de un nombre de etiqueta y el valor de la etiqueta, separados por dos puntos. Sin embargo, algunos valores pueden ser una etiqueta compuesta y ellos mismos contienen pares atributo-valor, lo que permite que una etiqueta de datos describa una estructura de datos jerárquica.
Example: {name1:123,name2:"sometext1",name3:{subname1:456,subname2:"sometext2"}}El nombre de la etiqueta puede incluirse entre comillas dobles si es necesario.
Es diferente del formato JSON; por lo tanto, cualquier JSON utilizado en NBT, como el texto JSON sin formato, debe incluirse dentro de una etiqueta de cadena.
Formato de cada tipo
Las estructuras de datos definidas también esperan que los valores sean del tipo correcto.
Tipos de valor de etiquetas de datosTipo | Descripción | Formato | Ejemplo |
---|---|---|---|
Byte | Un entero de 8 bits con signo, que va de -128 a 127 (inclusive). | bo B | 34B, -20b |
Corto | Un entero de 16 bits con signo, que va de -32,768 a 32,767 (inclusive). | s o S | 31415s, -27183s |
Int. | Un entero de 32 bits con signo, que va desde -2,147,483,648 y 2,147,483,647 (inclusive). | 31415926 | |
Largo | Un entero de 64 bits con signo, que va de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (inclusive). | l o L | 31415926l |
Flotador | Un número de coma flotante de precisión simple de 32 bits, que va desde -3.4E + 38 a + 3.4E + 38.
Consulte el punto flotante IEEE para obtener más detalles. |
por F | 3.1415926f |
Doble | Un punto flotante de doble precisión de 64 bits, que va desde -1.7E + 308 a + 1.7E + 308.
Consulte el punto flotante IEEE para obtener más detalles. |
, do D | 3.1415926 |
Cordón | Una secuencia de caracteres entre comillas. Para cadenas sin comas, corchetes, llaves o espacios, el espacio entre comillas es opcional. Las comillas pueden ser comillas simples 'o dobles ". Las comillas anidadas se pueden incluir dentro de una cadena escapando del carácter con un escape. | , " "(" dentro debe escaparse a "), o ' '(' dentro hay que escapar a ') |
"Llámame" Ismael "" 'Llámame "Ismael"' 'Llámame' Ismael '' "Llámame 'Ismael'" |
Lista | Una lista ordenada de etiquetas, encerrada entre corchetes y delimitada por comas. Las etiquetas deben ser del mismo tipo, determinado por la primera etiqueta de la lista. | [ , , ...] | [3.2,64.5,129.5] |
Compuesto | Una lista ordenada de pares atributo-valor, encerrada entre llaves y delimitada por comas.
Cada etiqueta puede ser de cualquier tipo. |
{ : , : , ...} | {X: 3, Y: 64, Z: 129} |
Matriz de bytes | B; seguido de una lista ordenada de enteros de 8 bits, delimitados por comas. La etiqueta está entre corchetes. | [B; B, B,...] | [B; 1b, 2b, 3b] |
Int Array | I; seguido de una lista ordenada de enteros de 32 bits, delimitados por comas. La etiqueta está entre corchetes. | [I; , , ...] | [I; 1,2,3] |
Matriz larga | L; seguido de una lista ordenada de enteros de 64 bits, delimitados por comas. La etiqueta está entre corchetes. | [L; yo L, ...] | [L; 1 l, 2 l, 3 l] |
Boolean | Un valor, expresado como verdadero, falso. El juego lo resuelve en una etiqueta Byte como 0b (para falso) y 1b (para verdadero). | verdadero, falso o 0b, 1b | {doFoo: true} |
Objeto NBT
Cuando el juego se está ejecutando, las entidades y las entidades de bloque en los fragmentos de carga se almacenan en la memoria. No se almacenan con NBT, en cambio, son solo objetos programáticos.
Al procesar operaciones NBT, el juego necesita generar un objeto NBT programático a partir de entidades / entidades de bloque, analizar SNBT en un objeto NBT, modificar entidades / bloques según el objeto NBT proporcionado o convertir el objeto NBT en SNBT.
Generando objeto NBT
Al generar NBT a partir de una entidad / bloque, las propiedades de la entidad / bloque se agregan al objeto NBT programático.
Tenga en cuenta que no se agregan todas las propiedades. Por ejemplo, el valor de si un jugador está abriendo un cofre no se agregará al objeto NBT.
Se agrega un valor con cierto tipo de datos. Por ejemplo, un ID con espacio de nombres se convertirá en un valor de cadena.
Estos objetos NBT también se almacenarán en los archivos guardados del juego como archivos NBT cuando el juego se cierre o se guarde automáticamente. Entonces, las estructuras de datos que describen las etiquetas NBT y el tipo de datos para cada etiqueta son básicamente las mismas que se usan en los archivos guardados del juego. Estas estructuras de datos se describen en otros artículos y los comandos esperan que las etiquetas de datos usen los mismos nombres de atributo (que distinguen entre mayúsculas y minúsculas):
Enlaces de especificación de estructura de datosObjecten | Ejemplos |
---|---|
Entidades de bloque | cofres, hornos, bloques de comando, generadores de mafias, letreros, etc. |
artículos | artículos en inventarios (incluye especificaciones para encantamientos, tradición, nombres personalizados, etc.) |
Entidades de artículo | artículos en el suelo |
Turbas | enredaderas, vacas, aldeanos, etc. |
proyectiles | flechas, bolas de fuego, pociones arrojadas, etc. |
Vehículos | barcos, carros mineros, etc. |
Azulejos dinámicos | TNT imprimado, arena / grava / polvo de hormigón / yunques que caen |
Otras entidades | cohetes de fuegos artificiales, pinturas y marcos de artículos |
Conversión a SNBT
Esta función es exclusiva de Java Edition.Un objeto NBT programático se convertiría en un SNBT al intentar obtenerlo con / data get, etc.
Una vez convertido, un número siempre va seguido de una letra (minúsculas para b, s, f, d y mayúsculas para L) excepto Integer. Por ejemplo, 3s para un corto, 3.2f para un flotador, etc.
Y una cadena siempre se encierra entre comillas simples o dobles.
Otros tipos de datos se expresan como el #Format de cada tipo de tabla anterior.
Conversión de SNBT
Esta función es exclusiva de Java Edition.Un SNBT se convertirá en un objeto NBT programático cuando el juego lo analice.
Un número seguido de una letra (B, S, L, F, D o su minúscula) se resuelve en el tipo de datos correspondiente. Por ejemplo, 3s para un corto, 3.2f para un flotante, etc. La letra puede ser mayúscula o minúscula. Cuando no se usa ninguna letra, se asume que es doble si hay un punto decimal, int si no hay un punto decimal y el tamaño se ajusta a 32 bits, o cadena si ninguno es cierto.
Se supone que un literal entre corchetes es una lista a menos que se utilice un identificador: [I; 1,2,3] para una matriz int y [L; 1L, 2L, 3L] para una matriz larga.
verdadero y falso se convierten en 1b y 0b respectivamente.
Modificar entidad / bloque basado en objeto NBT
Esta función es exclusiva de Java Edition.Modificar entidad / bloque basado en un objeto NBT programático no es un progreso simple. Todas las etiquetas determinadas deben resolverse antes de cambiar las propiedades de un bloque / entidad. Tenga en cuenta que solo se pueden cambiar determinadas propiedades. Por ejemplo, cuando se usa el comando / data para modificar una entidad de bloque, sus coordenadas no se pueden cambiar.
Si una propiedad necesita un valor de ID con espacio de nombres y obtiene una etiqueta de cadena, la cadena se convertirá en una ID.
Si una propiedad necesita un valor de texto JSON y obtiene una etiqueta de cadena, la cadena se analizará en un objeto de texto JSON.
Si una propiedad necesita un valor numérico de cierto tipo y obtiene una etiqueta numérica de tipo incorrecto, el número obtendrá alguna operación de redondeo y se convertirá al tipo requerido.
Si una propiedad necesita un valor numérico y obtiene una etiqueta no numérica, el número se convertirá en 0.
Si una propiedad necesita un valor de cadena y obtiene una etiqueta que no es de cadena, la cadena se convertirá en una cadena vacía.
Si una propiedad necesita una lista o matriz de cierto tipo y obtiene una etiqueta de tipo incorrecto, se obtendrá una lista / matriz vacía.
Si una propiedad necesita una etiqueta compuesta y obtiene una etiqueta no compuesta, se obtendrá una etiqueta compuesta vacía.
Prueba de etiquetas NBT
Esta función es exclusiva de Java Edition.Cuando los comandos como / borrar, / ejecutar si los datos se utilizan para hacer coincidir las etiquetas de datos, o el argumento nbt en el selector de destino intenta apuntar a la entidad, el juego convierte SNBT en un objeto NBT programático y obtiene el objeto NBT programático del bloque / entidad / almacenamiento, luego compara los dos objetos NBT.
Solo verifican la presencia de las etiquetas proporcionadas en la entidad / bloque / almacenamiento de destino. Esto significa que la entidad / bloque / almacenamiento puede tener etiquetas adicionales y aun así coincidir. Esto es cierto incluso para las listas: el orden y la cantidad de elementos en una lista no se considera una lista, y siempre que todos los elementos solicitados estén en la lista, coinciden incluso si hay elementos adicionales. Por ejemplo, una entidad con datos {Pos: [1d, 2d, 3d], Etiquetas: ["a", "b"]} puede ser segmentada por @e [nbt = {Pos: [3d, 2d, 1d]} ] o incluso solo @e [nbt = {Pos: [2d]}] a pesar de que el primero representa una posición totalmente diferente y el segundo no es una posición válida en absoluto. Tenga en cuenta que @e [nbt = {Etiquetas:}] no puede coincidir, porque una lista vacía solo puede coincidir con una lista vacía.
Sin embargo, el orden y la cantidad de elementos en una matriz byte / long / int is admitido.
Las etiquetas de datos solicitadas en la entidad / bloque / almacenamiento de destino deben coincidir exactamente para que las etiquetas proporcionadas pasen, incluido el tipo de datos (por ejemplo, 1, un int, no coincidirá con 1d, un doble). Los espacios de nombres tampoco se pueden omitir porque en el objeto NBT es solo una cadena simple que no se resolverá en un ID de espacio de nombres (por ejemplo, @e [nbt = {Item: {id: "stone"}}] no coincidirá con una piedra entidad de elemento, debe ser @e [nbt = {Item: {id: "minecraft: stone"}}]). Lo mismo es cierto para la cadena de texto JSON, que debe ser exactamente igual para coincidir con la etiqueta proporcionada (por ejemplo, @e [nbt = {CustomName: '"a"'}] no coincidirá con ninguna entidad, debe ser @e [ nbt = {CustomName: "{" text ":" a "}"}] o @e [nbt = {CustomName: '{"text": "a"}'}]).
Archivo NBT
Un archivo NBT es una etiqueta compuesta comprimida, con el nombre y la identificación de la etiqueta incluidos. El archivo en el zip debe contener la etiqueta Compound que es como los primeros bytes. Algunos de los archivos utilizados por Minecraft pueden estar descomprimidos, pero en la mayoría de los casos, los archivos siguen la especificación original de Notch y están comprimidos con GZip.
Definición de TAG
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 (Nota TAG_Fin no tiene nombre y no contiene los 2 bytes adicionales; se supone que el nombre está vacío). 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 NBT:
ID | Ícono | Tipo de etiqueta | carga útil | Descripción | Capacidad de almacenamiento |
---|---|---|---|---|---|
0 | ETIQUETA_Fin | - | Se utiliza para marcar el final de las etiquetas compuestas. Esta etiqueta no tiene nombre, por lo que es solo un byte 0. También puede ser el tipo de etiquetas List vacías. | N/A | |
1 | ETIQUETA_Byte | 1 byte / 8 bits, firmado | Un tipo integral con signo. A veces se usa para booleanos. | Rango completo de - (27) a (27 - 1) (-128 a 127) | |
2 | ETIQUETA_Corto | 2 bytes / 16 bits, firmado, big endian | Un tipo integral con signo. | Rango completo de - (215) a (215 - 1) (-32,768 a 32,767) | |
3 | ETIQUETA_Int. | 4 bytes / 32 bits, firmado, big endian | Un tipo integral con signo. | Rango completo de - (231) a (231 - 1) (-2,147,483,648 a 2,147,483,647) | |
4 | ETIQUETA_Largo | 8 bytes / 64 bits, firmado, big endian | Un tipo integral con signo. | Rango completo de - (263) a (263 - 1) (-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807) | |
5 | ETIQUETA_Flotador | 4 bytes / 32 bits, firmado, big endian, IEEE 754-2008, binary32 | Un tipo de punto flotante firmado. | La precisión varía a lo largo de la recta numérica; Consulte Formato de punto flotante de precisión simple. Valor máximo alrededor de 3.4 * 1038 | |
6 | ETIQUETA_Doble | 8 bytes / 64 bits, firmado, big endian, IEEE 754-2008, binary64 | Un tipo de punto flotante firmado. | La precisión varía a lo largo de la recta numérica; Consulte Formato de punto flotante de precisión doble. Valor máximo alrededor de 1.8 * 10308 | |
7 | ETIQUETA_Byte_Formación | El tamaño de la carga útil de TAG_Int, luego el tamaño de las cargas útiles de TAG_Byte. | Una matriz 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 | ETIQUETA_Cordón | Una longitud de carga útil TAG_Short, pero en su lugar sin signo [1], luego una cadena UTF-8 parecida a bytes de longitud. | Una cuerda UTF-8. Tiene un tamaño, en lugar de tener una terminación nula. | 65,535 bytes interpretables como UTF-8 (consulte el formato UTF-8 modificado; los caracteres más utilizados son un solo byte). | |
9 | ETIQUETA_Lista | TagId de carga útil de TAG_Byte, luego el tamaño de carga útil de TAG_Int, luego las cargas útiles de las etiquetas de tamaño, todos de tipo tagId. | Una lista de cargas útiles de etiquetas, sin identificadores de etiqueta repetidos ni nombres de etiqueta. | Debido a las limitaciones de JVM y la implementación de ArrayList, el número máximo de elementos de lista es (231 - 9), o 2,147,483,639. También tenga en cuenta que las etiquetas List y Compound no se pueden anidar más allá de una profundidad de 512. | |
10 | ETIQUETA_Compuesto | Etiquetas completamente formadas, seguidas de TAG_End. | Una lista de etiquetas completamente formadas, incluidos sus ID, nombres y cargas útiles. No puede haber dos etiquetas con 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 es posible que las etiquetas Compound y List no se aniden más allá de una profundidad de 512. | |
11 | ETIQUETA_Int._Formación | El tamaño de la carga útil de TAG_Int, luego el tamaño de las cargas útiles de TAG_Int. | Una matriz 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 | ETIQUETA_Largo_Formación | El tamaño de la carga útil de TAG_Int, luego el tamaño de las cargas útiles de TAG_Long. | Una matriz 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 de forma recursiva y, a menudo, lo están. También debe tenerse en cuenta que, en una lista de listas, cada una de las sublistas puede incluir un tipo diferente de etiqueta.
Uso
Minecraft a veces usa el formato NBT de manera inconsistente; en algunos casos, las listas vacías pueden representarse como una lista de etiquetas Byte en lugar de una lista del tipo correcto, o como una lista de etiquetas finales en las versiones más recientes 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 de Minecraft.
- SomeName: la única etiqueta contenida dentro de la etiqueta raíz; tiene un nombre y contiene todos los datos reales.
Además, también hay un uso inconsistente de mayúsculas y minúsculas, principalmente camelCase o PascalCase, pero a veces incluso en minúsculas.
Utiliza materiales de
En esta sección falta información sobre los NBT Bedrock Edition. Amplíe la sección para incluir esta información. Pueden existir más detalles en la página de discusión.- level.dat se almacena en formato NBT comprimido.
- Los archivos .dat se almacenan en formato NBT comprimido.
- idcounts.dat se almacena en formato NBT comprimido.
- village.dat se almacena en formato NBT comprimido.
- raids.dat se almacena en formato NBT comprimido.
- Los archivos map _ <#> .dat se almacenan en formato NBT comprimido.
- servers.dat, que se utiliza para almacenar la lista de servidores multijugador guardados como NBT sin comprimir.
- hotbar.nbt, que se utiliza para guardar hotbars como formato NBT sin comprimir.
- Los fragmentos se almacenan en formato NBT comprimido dentro de los archivos de región.
- scoreboard.dat se almacena en formato NBT comprimido.
- Las estructuras generadas se almacenan en formato NBT comprimido.
- Las estructuras guardadas se almacenan en formato NBT comprimido.
Software oficial
: Tutoriales / Ejecución del generador de datosMojang ha proporcionado clases de muestra de Java NBT para que los desarrolladores las utilicen y hagan referencia como parte del código fuente del convertidor de formato de archivo MCRegion a Anvil. [2] Desde Java Edition 1.13, Minecraft incluye un convertidor integrado entre el formato SNBT y el formato NBT comprimido, que viene con el cliente y el servidor oficial. [3]
El generador de datos de Minecraft puede convertir archivos NBT Stringified sin comprimir con extensión .snbt en una carpeta de entrada a archivos en formato NBT comprimidos GZip con extensión .nbt en una carpeta de salida, y viceversa.
El generador de datos vanilla puede convertir cualquier formato NBT comprimido GZip a formato SNBT. La extensión de un archivo se puede cambiar simplemente, como level.dat a level.nbt y poner en la carpeta de entrada, y el generador luego decodifica los datos NBT comprimidos en GZip.
Historia
Notch describió el formato de archivo NBT en una breve especificación. [4]
La versión original conocida fue 19132 como se introdujo en Beta 1.3, y desde entonces se ha actualizado a 19133 con el formato de archivo Anvil, que agrega la etiqueta Int Array. El formato NBT se remonta a Indev con las etiquetas 0 a 10 en uso.
Edición Java | |||||
---|---|---|---|---|---|
1.0.0 | 28 de septiembre de 2011 | Notch trabaja en "guardar datos arbitrarios con instancias de elementos". | |||
1.8 | 14w03a | Los datos NBT ahora admiten el uso de ID de cadena en lugar de ID numéricos. | |||
1.12 | ? | Se agregaron etiquetas de matriz larga. | |||
1.13 | 18w01a | Se agregó un generador de datos tanto al cliente de Minecraft como al software multijugador predeterminado. | |||
1.14 | 19w08a | Las etiquetas de cadena en SNBT ahora pueden estar entre comillas simples 'además de comillas dobles ". [5] |
- ↑ https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html#writeUTF-java.lang.String-
- ↑ http://www.mojang.com/2012/02/new-minecraft-map-format-anvil/
- ↑ https: // página web.vg/Data_Generators#NBT_converters
- ↑ http://web.archive.org/web/20110723210920/http://www.minecraft.net/docs/NBT.txt especificación
- ↑ "Permitir comillas simples en cadenas por boq · Pull Request # 52" - Mojang / brigadier - GitHub.
Enlaces externos
- nbt, una biblioteca de Java para trabajar con el formato NBT.
- NBT en la página web.vg
- NBTExplorer, una herramienta para ver y editar archivos NBT.
- NBT Studio, sucesor de NBTExplorer que incluye características adicionales como soporte Bedrock y SNBT.
- webNBT, una herramienta en línea para ver y editar archivos NBT.
Edición Java | |||||||
---|---|---|---|---|---|---|---|
versiones |
| ||||||
Desarrollo |
| ||||||
Apoyo técnico |
| ||||||
Multijugador |
| ||||||
Personalización del juego |
|