Guides / Commands & Data

Um arquivo de estrutura .nbt armazena índices de paleta, não nomes de blocos — é por isso que é tão pequeno

Três chaves contêm uma construção inteira: tamanho, paleta e blocos. Cada bloco é um número inteiro que aponta para a paleta, então um volume de pedra de 32³ custa uma string e 32.768 números.

Um arquivo de estrutura .nbt — o que um Gerador de Estruturas salva e um pacote de dados envia — é um formato muito mais simples do que parece por fora. Tudo o que uma construção precisa está em um punhado de chaves de nível superior, e uma decisão de design explica por que os arquivos são tão pequenos quanto são.

As três chaves que carregam a construção

size     [x, y, z]                       — a list of exactly three integers
palette  [ { Name, Properties } … ]      — every DISTINCT block state, once
blocks   [ { pos, state, nbt } … ]       — one entry per placed block

palette contém cada estado de bloco distinto exatamente uma vez. Uma entrada é um Name — o ID do bloco, como minecraft:oak_stairs — mais um composto Properties opcional contendo seu estado de bloco (blockstate), como facing: north e half: bottom.

blocks nunca repete um nome. Cada entrada contém um pos de três números inteiros e um state, e state é um índice para a paleta, não um ID de bloco. Escadas de Carvalho viradas para o norte são dados de string uma vez, e cada uma delas depois disso é um pequeno número inteiro.

Esse é todo o truque. Um volume de 32 × 32 × 32 de Pedra simples é uma entrada de paleta e 32.768 números de índice — não 32.768 cópias da palavra minecraft:stone. A paleta cresce com quantas coisas diferentes você construiu, e a lista de blocos cresce com o quão grande você construiu. Esses são números muito diferentes, e apenas um deles geralmente é grande.

Duas consequências que valem a pena considerar no design

Os estados de bloco (blockstates) multiplicam sua paleta, não sua lista de blocos. Escadas de Carvalho não são uma entrada de paleta — elas são uma por orientação que você realmente usou. Viradas para quatro direções, metade superior e inferior, retas e ambos os cantos internos e externos: o mesmo bloco pode ocupar uma dúzia de espaços na paleta. Assim, uma construção rica em detalhes tem uma paleta grande e uma simples não, independentemente do tamanho.

Apenas blocos colocados recebem uma entrada. A lista de blocos é uma lista, não um array 3D denso, e uma entrada que não está lá simplesmente não está lá — o visualizador nesta página preenche sua grade com -1 e trata uma coordenada ausente como nada colocado. Uma construção oca é genuinamente mais barata de armazenar do que uma sólida das mesmas dimensões.

nbt é por bloco e opcional

Cada entrada em blocks pode conter seu próprio composto nbt, e a maioria não o faz. É aqui que o conteúdo de um Baú, o texto de uma placa, o mob de um gerador e os padrões de um estandarte vivem — anexados ao bloco individual, em vez de à paleta.

A distinção importa: os dados da paleta são compartilhados e os dados do bloco não. Dois Baús são uma entrada de paleta, porque são o mesmo estado de bloco — mas cada um mantém seu próprio inventário em seu próprio nbt. Mude o estado do bloco e você toca na paleta; mude o que está dentro dele e você toca em uma entrada na lista de blocos.

Lendo uma camada por vez

O visualizador aqui é deliberadamente 2D. Para desenhar a camada y, ele percorre a lista de blocos, mantém as entradas cujo pos[1] é igual a y, e procura o state de cada uma na paleta. Esse é o algoritmo inteiro, e vale a pena saber porque é também como você inspecionaria um desses arquivos: não há índice espacial para construir e nenhuma descompressão além do wrapper gzip. O formato é uma lista plana que você filtra.

O que também significa que um arquivo de estrutura não diz nada sobre onde ele pertence em um mundo. size é uma caixa delimitadora e os valores pos são relativos ao seu canto. O posicionamento é responsabilidade do Gerador de Estruturas, não do arquivo.

Ferramentas de estrutura e componentes NBT →

More guides

Browse all →

Procurando mais ferramentas de Minecraft?

Um conjunto de geradores, visualizadores e conversores que rodam no navegador — tudo grátis.