Close
    Search Search

    Formato NBT

    A Tag binária nomeada (NBT) formato é usado pelo Minecraft para os vários arquivos nos quais ele salva dados. O formato é projetado para armazenar dados em uma estrutura de árvore composta de várias tags. Todas as tags têm um ID e um nome.

    Outro formato de NBT mais amigável é em string simples, como usado em comandos. Este formato é conhecido como SNBT, abreviatura de NBT stringified.

    Formato SNBT

    Formato NBT Este recurso é exclusivo para o Java Edition. 

    SNBT, também conhecido como etiqueta de dados, é freqüentemente usado no comando em Java Edition. Ele pode ser descrito começando com pares de valor de atributo entre chaves. Um uso comum de tags de dados no Java Edition é em comandos, usados ​​para especificar dados complexos para qualquer entidade.





    Uma tag de dados consiste em zero ou mais pares de valor de atributo delimitados por vírgulas e colocados entre chaves. Cada par atributo-valor consiste em um nome de tag e o valor da tag, separados por dois pontos. Alguns valores, no entanto, podem ser uma marca composta e eles próprios contêm pares de valor de atributo, permitindo que uma marca de dados descreva uma estrutura de dados hierárquica.

    Example: {name1:123,name2:"sometext1",name3:{subname1:456,subname2:"sometext2"}}

    O nome da tag pode ser colocado entre aspas duplas, se necessário.

    É diferente do formato JSON; portanto, qualquer JSON usado em NBT, como texto JSON bruto, deve ser colocado dentro de uma tag de string.

    Formato de cada tipo

    As estruturas de dados definidas também esperam que os valores sejam do tipo correto.

    Tipos de valores de tags de dados
    Tipo Descrição Formato Exemplo
     Byte Um número inteiro de 8 bits com sinal, variando de -128 a 127 (inclusive). b ou B 34B, -20b
     Baixo Um número inteiro de 16 bits com sinal, variando de -32,768 a 32,767 (inclusive). s ou S 31415s, -27183s
     int Um número inteiro assinado de 32 bits, variando de -2,147,483,648 e 2,147,483,647 (inclusive). 31415926
     longo Um número inteiro de 64 bits com sinal, variando de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (inclusive). eu ou eu 31415926l
     Flutuador Um número de ponto flutuante de precisão única de 32 bits, variando de -3.4E + 38 a + 3.4E + 38.

    Consulte o ponto flutuante IEEE para obter detalhes.



    para F 3.1415926f
     Duplo Um ponto flutuante de precisão dupla de 64 bits, variando de -1.7E + 308 a + 1.7E + 308.

    Consulte o ponto flutuante IEEE para obter detalhes.

    , d ou D 3.1415926
     Tanga Uma sequência de caracteres entre aspas. Para strings sem vírgulas, colchetes, colchetes ou espaços, o fechamento das aspas é opcional. As aspas podem ser aspas simples ou duplas ". Aspas aninhadas podem ser incluídas em uma string escapando o caractere com um escape. , " "(" dentro precisa ser escapado para "), ou ' '(' dentro precisa ser escapado para ')

    "Me chame de" Ismael ""

    'Me chame de' Ismael ''

    'Me chame de' Ismael ''

    "Me chame de 'Ismael'"

     Lista Uma lista ordenada de tags, entre colchetes e delimitadas por vírgulas. As tags devem ser do mesmo tipo, determinado pela primeira tag da lista. [ , , ...] [3.2,64.5,129.5]
     Compound Uma lista ordenada de pares de atributo-valor, colocados entre chaves e delimitados por vírgulas.

    Cada tag pode ser de qualquer tipo.

    { : , : , ...} {X: 3, Y: 64, Z: 129}
     Byte Array B; seguido por uma lista ordenada de inteiros de 8 bits, delimitados por vírgulas. A tag está entre colchetes. [B; b, B, ...] [B; 1b, 2b, 3b]
     Array Int EU; seguido por uma lista ordenada de inteiros de 32 bits, delimitados por vírgulas. A tag está entre colchetes. [EU; , , ...] [I; 1,2,3]
     Long Array EU; seguido por uma lista ordenada de inteiros de 64 bits, delimitados por vírgulas. A tag está entre colchetes. [EU; eu, EU,...] [L; 1l, 2l, 3l]
     Booleano Um valor expresso como verdadeiro, falso. Ele é resolvido pelo jogo em uma tag Byte como 0b (para falso) e 1b (para verdadeiro). verdadeiro, falso ou 0b, 1b {doFoo: true}

    Objeto NBT

    Quando o jogo está em execução, entidades e entidades de bloco em blocos de carregamento são armazenadas na memória. Eles não são armazenados com o NBT; em vez disso, são apenas objetos programáticos.



    Ao processar operações NBT, o jogo precisa gerar objeto NBT programático a partir de entidades / entidades de bloco, analisar SNBT em objeto NBT, modificar entidades / blocos com base no objeto NBT fornecido ou converter objeto NBT em SNBT.

    Gerando objeto NBT

    Ao gerar NBT a partir de uma entidade / bloco, as propriedades da entidade / bloco são adicionadas ao objeto NBT programático.

    Observe que nem todas as propriedades são adicionadas. Por exemplo, o valor de se um jogador está abrindo um baú não será adicionado ao objeto NBT.

    Um valor é adicionado com determinado tipo de dados. Por exemplo, um ID com namespace será convertido em um valor de string.

    Esses objetos NBT também serão armazenados em arquivos salvos do jogo como arquivos NBT quando o jogo for encerrado ou salvo automaticamente. Portanto, as estruturas de dados que as tags NBT descrevem e o tipo de dados para cada tag são basicamente os mesmos usados ​​nos arquivos salvos do jogo. Essas estruturas de dados são descritas em outros artigos e comandos esperam que as tags de dados usem os mesmos nomes de atributos (que diferenciam maiúsculas de minúsculas):

    Links de especificação de estrutura de dados
    objetos Exemplos
    Entidades de bloco baús, fornalhas, blocos de comando, geradores de turba, sinais, etc.
    Unid itens em estoques (inclui especificações para encantamentos, tradição, nomes personalizados, etc.)
    Entidades de item itens no chão
    Mobs trepadeiras, vacas, aldeões, etc.
    Projéteis flechas, bolas de fogo, poções de arremesso, etc.
    Veículos barcos, minecarts, etc.
    Ladrilhos dinâmicos TNT preparado, queda de areia / cascalho / pó de concreto / bigornas
    Outras entidades foguetes de fogos de artifício, pinturas e molduras de itens

    Conversão para SNBT

    Formato NBT Este recurso é exclusivo para o Java Edition. 

    Um objeto NBT programático seria convertido em um SNBT ao tentar obtê-lo com / data get etc.

    Depois de convertido, um número é sempre seguido por uma letra (minúscula para b, s, f, d e maiúscula para L), exceto inteiro. Por exemplo, 3s para um short, 3.2f para um float, etc.

    E uma string está sempre entre aspas duplas ou simples.

    Outros tipos de dados são expressos como o #Format de cada tabela de tipo acima.

    Conversão de SNBT

    Formato NBT Este recurso é exclusivo para o Java Edition. 

    Um SNBT será convertido em um objeto NBT programático quando analisado pelo jogo.

    Um número seguido por uma letra (B, S, L, F, D ou suas minúsculas) é resolvido para o tipo de dados correspondente. Por exemplo, 3s para um curto, 3.2f para um float, etc. A letra pode ser maiúscula ou minúscula. Quando nenhuma letra é usada, ele assume double se houver um ponto decimal, int se não houver um ponto decimal e o tamanho couber em 32 bits, ou corda se nenhum for verdadeiro.

    Um literal entre colchetes é considerado uma lista, a menos que um identificador seja usado: [I; 1,2,3] para uma matriz interna e [L; 1L, 2L, 3L] para uma matriz longa.

    verdadeiro e falso são convertidos em 1b e 0b, respectivamente.

    Modificar entidade / bloco com base no objeto NBT

    Formato NBT Este recurso é exclusivo para o Java Edition. 

    Modificar entidade / bloco com base em um objeto NBT programático não é um progresso simples. Todas as tags certas precisam ser resolvidas antes de alterar as propriedades de um bloco / entidade. Observe que apenas algumas propriedades podem ser alteradas. Por exemplo, ao usar o comando / data para modificar uma entidade de bloco, suas coordenadas não podem ser alteradas.

    Se uma propriedade precisa de um valor de ID com espaço de nomes e obtém uma tag de string, a string será convertida em um ID.

    Se uma propriedade precisa de um valor de texto JSON e obtém uma tag de string, a string será analisada em um objeto de texto JSON.

    Se uma propriedade precisa de um valor numérico de certo tipo e obtém uma etiqueta numérica do tipo errado, o número obterá alguma operação de arredondamento e será convertido para o tipo necessário.

    Se uma propriedade precisar de um valor numérico e receber uma tag não numérica, o número se tornará 0.

    Se uma propriedade precisar de um valor de string e receber uma tag que não seja de string, a string se tornará uma string vazia.

    Se uma propriedade precisa de uma lista ou array de certo tipo e obtém uma tag do tipo errado, uma lista / array vazio será obtido.

    Se uma propriedade precisa de uma tag de compount e obtém uma tag não-compount, uma tag de compount vazia será obtida.

    Teste de tags NBT

    Formato NBT Este recurso é exclusivo para o Java Edition. 

    Quando comandos como / clear, / execute se os dados forem usados ​​para coincidir com as tags de dados, ou o argumento nbt no seletor de destino tenta a entidade de destino, o jogo converte SNBT em objeto NBT programático e obtém o objeto NBT programático de bloco / entidade / armazenamento, então compara os dois objetos NBT.

    Eles verificam apenas a presença das tags fornecidas na entidade / bloco / armazenamento de destino. Isso significa que a entidade / bloco / armazenamento pode ter tags adicionais e ainda corresponder. Isso é verdadeiro até mesmo para listas: a ordem e o número de elementos em uma lista de uma lista não são considerados e, desde que cada elemento solicitado esteja na lista, ele corresponde mesmo se houver elementos adicionais. Por exemplo, uma entidade com dados {Pos: [1d, 2d, 3d], Tags: ["a", "b"]} pode ser segmentada por @e [nbt = {Pos: [3d, 2d, 1d]} ] ou mesmo apenas @e [nbt = {Pos: [2d]}], embora a primeira represente uma posição totalmente diferente e a última não seja uma posição válida. Observe que @e [nbt = {Tags:}] não pode corresponder, porque uma lista vazia só pode corresponder a uma lista vazia.

    No entanto, a ordem e o número de elementos em uma matriz byte / long / int is reconhecido.

    As tags de dados solicitadas na entidade / bloco / armazenamento de destino devem corresponder exatamente para que as tags fornecidas passem, incluindo o tipo de dados (por exemplo, 1, um int, não corresponderá a 1d, um duplo). Os namespaces também não podem ser omitidos porque no objeto NBT é apenas uma string simples que não será resolvida em um ID de namespace (por exemplo, @e [nbt = {Item: {id: "stone"}}] não corresponderá a uma pedra entidade do item, deve ser @e [nbt = {Item: {id: "minecraft: stone"}}]). O mesmo é verdadeiro para string de texto JSON, que deve ser exatamente igual para corresponder à tag fornecida (por exemplo, @e [nbt = {CustomName: '"a"'}] não corresponderá a nenhuma entidade, deve ser @e [ nbt = {CustomName: "{" text ":" a "}"}] ou @e [nbt = {CustomName: '{"text": "a"}'}]).

    Arquivo NBT

    Um arquivo NBT é uma tag Compound compactada, com o nome e o ID da tag incluídos. O arquivo no zip deve conter a tag Compound como os primeiros bytes. Alguns dos arquivos utilizados pelo Minecraft podem ser descompactados, mas na maioria dos casos, os arquivos seguem a especificação original do Notch e são compactados com GZip.

    Definição de TAG

    Uma tag é uma parte individual da árvore de dados. O primeiro byte em uma tag é o tipo de tag (ID), seguido por um inteiro não assinado big-endian de dois bytes para o comprimento do nome, então o nome como uma string no formato UTF-8 (Nota TAG_Fim não é nomeado e não contém os 2 bytes extras; o nome é considerado vazio). Finalmente, dependendo do tipo de tag, os bytes que seguem fazem parte da carga útil dessa tag. Esta tabela descreve cada uma das 13 tags conhecidas na versão 19133 do formato NBT:

    ID ícone Tipo de Tag carga paga Descrição Capacidade de Armazenamento
    0 MARCAÇÃO_Fim - Usado para marcar o fim das tags compostas. Esta tag não tem nome, por isso é sempre um único byte 0. Também pode ser o tipo de tags de Lista vazias. N / D
    1 MARCAÇÃO_Byte 1 byte / 8 bits, assinado Um tipo integral assinado. Às vezes usado para booleanos. Faixa completa de - (27) a (27 - 1)
    (-128 a 127)
    2 MARCAÇÃO_Baixo 2 bytes / 16 bits, assinado, big endian Um tipo integral assinado. Faixa completa de - (215) a (215 - 1)
    (-32,768 a 32,767)
    3 MARCAÇÃO_int 4 bytes / 32 bits, assinado, big endian Um tipo integral assinado. Faixa completa de - (231) a (231 - 1)
    (-2,147,483,648 a 2,147,483,647)
    4 MARCAÇÃO_longo 8 bytes / 64 bits, assinado, big endian Um tipo integral assinado. Faixa completa de - (263) a (263 - 1)
    (-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807)
    5 MARCAÇÃO_Flutuador 4 bytes / 32 bits, assinado, big endian, IEEE 754-2008, binário32 Um tipo de ponto flutuante assinado. A precisão varia ao longo da linha numérica;
    Consulte Formato de ponto flutuante de precisão única. Valor máximo de cerca de 3.4 * 1038
    6 MARCAÇÃO_Duplo 8 bytes / 64 bits, assinado, big endian, IEEE 754-2008, binário64 Um tipo de ponto flutuante assinado. A precisão varia ao longo da linha numérica;
    Consulte Formato de ponto flutuante de precisão dupla. Valor máximo de cerca de 1.8 * 10308
    7 MARCAÇÃO_Byte_Ordem Tamanho da carga útil de TAG_Int, então dimensione as cargas úteis de TAG_Byte. Uma matriz de bytes. O número máximo de elementos varia entre (231 - 9) e (231 - 1) (2,147,483,639 e 2,147,483,647), dependendo da JVM específica.
    8 MARCAÇÃO_Tanga Um comprimento de carga útil semelhante a TAG_Short, mas em vez disso não assinado [1], então uma string UTF-8 semelhante por bytes de comprimento. Uma string UTF-8. Ele tem um tamanho, em vez de ser terminado em nulo. 65,535 bytes interpretáveis ​​como UTF-8 (consulte o formato UTF-8 modificado; os caracteres mais comumente usados ​​são um único byte).
    9 MARCAÇÃO_Lista TAG_Byte's payload tagId, depois TAG_Int's payload size, então size tags 'payloads, todos do tipo tagId. Uma lista de cargas úteis de tag, sem IDs de tag repetidos ou quaisquer nomes de tag. Devido às limitações da JVM e à implementação de ArrayList, o número máximo de elementos da lista é (231 - 9), ou 2,147,483,639. Observe também que as tags List e Compound não podem ser aninhadas além de uma profundidade de 512.
    10 MARCAÇÃO_Compound Tags totalmente formadas, seguidas por um TAG_End. Uma lista de tags totalmente formadas, incluindo seus IDs, nomes e cargas úteis. Duas tags não podem ter o mesmo nome. Ao contrário das listas, não há um limite rígido para o número de tags em um Composto (é claro, sempre há o limite implícito de memória virtual). Observe, no entanto, que as tags Compound e List não podem ser aninhadas além de uma profundidade de 512.
    11 MARCAÇÃO_int_Ordem Tamanho da carga útil de TAG_Int, então dimensione cargas úteis de TAG_Int. Uma matriz de cargas úteis de TAG_Int. O número máximo de elementos varia entre (231 - 9) e (231 - 1) (2,147,483,639 e 2,147,483,647), dependendo da JVM específica.
    12 MARCAÇÃO_longo_Ordem Tamanho da carga útil de TAG_Int, então dimensione as cargas úteis de TAG_Long. Uma matriz de cargas úteis de TAG_Long. O número máximo de elementos varia entre (231 - 9) e (231 - 1) (2,147,483,639 e 2,147,483,647), dependendo da JVM específica.

    As tags List e Compound podem ser e freqüentemente são aninhadas recursivamente. Também deve ser observado que, em uma lista de listas, cada uma das sublistas pode listar um tipo diferente de tag.

    Uso

    O Minecraft às vezes usa o formato NBT de maneira inconsistente; em alguns casos, as listas vazias podem ser representadas como uma lista de tags de bytes em vez de uma lista do tipo correto, ou como uma lista de tags de fim em versões mais recentes do Minecraft, o que pode quebrar algumas ferramentas NBT mais antigas. Além disso, quase toda tag raiz tem uma string de nome vazia e encapsula apenas uma tag Compound com os dados reais e um nome. Por exemplo:

    • A marca raiz para a maioria das estruturas NBT do Minecraft.
      •  SomeName: a única marca contida na marca raiz - tem um nome e contém todos os dados reais.

    Além disso, há também o uso inconsistente de maiúsculas e minúsculas, principalmente camelCase ou PascalCase, mas às vezes até em minúsculas.

    Uso

    Esta seção não contém informações sobre os NBTs da Bedrock Edition.  Por favor, expanda a seção para incluir essas informações. Mais detalhes podem existir na página de discussão.
    • level.dat é armazenado em formato NBT compactado.
    • Os arquivos .dat são armazenados no formato NBT compactado.
    • idcounts.dat é armazenado em formato NBT compactado.
    • village.dat é armazenado em formato NBT compactado.
    • raids.dat é armazenado em formato NBT compactado.
    • Os arquivos map _ <#>. dat são armazenados no formato NBT compactado.
    • servers.dat, que é usado para armazenar a lista de servidores multijogador salvos como NBT descompactado.
    • hotbar.nbt, que é usado para salvar hotbars como formato NBT descompactado.
    • Os pedaços são armazenados no formato NBT compactado nos arquivos de região.
    • scoreboard.dat é armazenado em formato NBT compactado.
    • As estruturas geradas são armazenadas no formato NBT compactado.
    • As estruturas salvas são armazenadas no formato NBT compactado.

    Software oficial

    : Tutoriais / Executando o Gerador de Dados

    A Mojang forneceu exemplos de classes Java NBT para os desenvolvedores usarem e fazerem referência como parte do código-fonte do conversor de formato de arquivo MCRegion para Anvil. [2] Desde o Java Edition 1.13, o Minecraft inclui um conversor embutido entre o formato SNBT e o formato NBT compactado, que vem com o cliente e o servidor oficial. [3]

    O gerador de dados do Minecraft é capaz de converter arquivos NBT stringificados não compactados com extensão .snbt em uma pasta de entrada para arquivos no formato NBT compactados GZip com extensão .nbt em uma pasta de saída e vice-versa.

    O gerador de dados vanilla pode converter qualquer formato NBT compactado GZip para o formato SNBT. A extensão de um arquivo pode simplesmente ser alterada, como level.dat para level.nbt e colocada na pasta de entrada, e o gerador então decodifica os dados NBT compactados GZip.

    História

    O formato do arquivo NBT foi descrito por Notch em uma breve especificação. [4]

    A versão original conhecida era a 19132, introduzida no Beta 1.3, e desde então foi atualizada para 19133 com o formato de arquivo Anvil, que adiciona a tag Int Array. O formato NBT remonta a Indev com tags de 0 a 10 em uso.

    Java Edition
    1.0.028 de Setembro de 2011Notch trabalha para "salvar dados arbitrários com instâncias de itens".
    1.814w03aOs dados NBT agora são compatíveis com o uso de IDs de string em vez de IDs numéricos.
    1.12?Adicionadas tags de matriz longa.
    1.1318w01aAdicionado um gerador de dados ao cliente Minecraft e ao software multijogador padrão.
    1.1419w08a As tags de string no SNBT agora podem estar entre aspas simples, além das aspas duplas ". [5]

    1. ↑ https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html#writeUTF-java.lang.String-
    2. ↑ http://www.mojang.com/2012/02/new-minecraft-map-format-anvil/
    3. ↑ https: // web page.vg/Data_Generators#NBT_converters
    4. ↑ http://web.archive.org/web/20110723210920/http://www.minecraft.net/docs/NBT.txt especificação
    5. ↑ "Permitir aspas simples em strings por boq · Pull Request # 52" - Mojang / brigadier - GitHub.

    Links externos

    • nbt, uma biblioteca Java para trabalhar com o formato NBT.
    • NBT na página web.vg
    • NBTExplorer, uma ferramenta para visualizar e editar arquivos NBT.
    • NBT Studio, sucessor do NBTExplorer que inclui recursos adicionais, como suporte a Bedrock e SNBT.
    • webNBT, uma ferramenta online para visualizar e editar arquivos NBT.
    Formato NBT Java Edition
    versões
    • Demo
      • Países
    • Demonstração do PC Gamer (Beta 1.3)
    Desenvolvimento
    Histórico da versão
    • Pré-Clássico
    • O clássico
      • Criativo clássico inicial
      • Teste Multijogador
      • Formato NBT Teste de Sobrevivência
      • Late Classic Creative
    • Indev
    • Formato NBT Infdev
    • alfa
    • beta
    • Lançamento Completo
    • Versões de desenvolvimento
    • Recursos removidos
      • Blocos
      • Unid
    • Recursos não utilizados
    • Recursos exclusivos
    • Recursos mencionados
      • Dimensão do céu
    • Versões planejadas
    Técnico
    • Bugs conhecidos
      • Minecraft Launcher
    • Os requisitos de hardware
    • al_version
    • Entidade de bloco
    • comandos
      • Funções
    • Crashes
    • Valores de dados
      • O clássico
      • Indev
      • Pré-aplainamento
    • Versão de dados
    • Tela de depuração
    • Códigos de formatação
    • Códigos-chave
    • Minecraft Launcher
    • Versão do protocolo
    • Localização do recurso
    • Screenshot
    • semente
    • Estatísticas
    • Carrapato
    • Pedaço de desova
    • Coordenadas
    .Minecraft
    • client.jar
    • client.json
    • launcher_profiles.json
    • options.txt
    Recursos de desenvolvimento
    • Formato de arquivo bigorna
    • Formato de pedaços
    • Formato de armazenamento de comando
    • Formato de estruturas geradas
    • Formato de nível
    • Mesas de saque
    • Formato do item do mapa
    • Modelo
    • Formato NBT
    • Mapa de ofuscação
    • Formato do jogador
    • formato raids.dat
    • Formato de texto JSON bruto
    • Formato de arquivo de região
    • Formato de arquivo de bloco de estrutura
      • Formato de arquivo esquemático
    • Formato de placar
    • Formato de lista de servidores
    • sounds.json
    • Legendas
    • formato de aldeias.dat
    Recursos de desenvolvimento legados
    • Formato de nível clássico
    • Protocolo de servidor clássico
    • Formato de nível Indev
    • Formato de nível alfa
    • server_level.dat
    Multiplayer
    • servidor
    • Minecraft Realms
    • Lista de servidores
    • server.properties
    • Requisitos do servidor
    Personalização do jogo
    • Skins
    • Capes
    • Pacotes de recursos
    • Pacotes de dados


    Adicione um comentário do Formato NBT
    Comentário enviado com sucesso! Vamos analisá-lo nas próximas horas.