Um arquivo de estrutura .nbt guarda índices da paleta, não nomes de blocos — e é por isso que ele é tão pequeno
Três chaves carregam uma construção inteira: size, palette e blocks. Cada bloco é um número inteiro que aponta para a paleta, então um volume de 32³ de pedra custa uma string e 32.768 entradas pequenas — uma posição e um índice cada, nunca um nome.
Um arquivo de estrutura .nbt — aquilo que um Gerador de Estruturas salva e um datapack distribui — é um formato bem mais simples do que parece visto de fora. Tudo o que uma construção precisa cabe em um punhado de chaves de nível superior, e uma única decisão de projeto explica por que esses arquivos são tão pequenos.
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 guarda 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 que guarda seu estado de bloco, como facing: north e half: bottom.
blocks nunca repete um nome. Cada entrada carrega um pos de três números inteiros e um state, e state é um índice dentro da paleta, não um id de bloco. Escadas de Carvalho voltadas para o norte são dados de string uma vez, e cada uma delas depois disso é um número inteiro pequeno.
É esse o truque inteiro. Um volume de 32 × 32 × 32 de Pedra lisa é uma entrada de paleta e 32.768 entradas de bloco com uma posição mais um índice — não 32.768 cópias da palavra minecraft:stone. A paleta cresce conforme quantas coisas diferentes você usou na construção, e a lista de blocos cresce conforme o quão grande você construiu. Esses são números bem diferentes, e normalmente só um deles é grande.
Duas consequências que vale a pena considerar no projeto
Estados de bloco multiplicam sua paleta, não sua lista de blocos. Escadas de Carvalho não são uma entrada de paleta — são uma por orientação que você realmente usou. Voltadas para quatro direções, metade superior e inferior, retas e com cantos internos e externos: o mesmo bloco pode ocupar uma dúzia de espaços na paleta. Por isso, uma construção cheia de detalhes tem uma paleta grande e uma construção simples não tem, independentemente do tamanho.
Só posições salvas ganham 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 desta página preenche sua grade com -1 e trata uma coordenada ausente como nada colocado. Mas um Gerador de Estruturas salva ar como qualquer outro bloco; só o Vazio Estrutural fica de fora. Uma construção oca só é mais barata de armazenar se você preencher o interior com Vazio Estrutural antes de salvar.
nbt é por bloco e opcional
Cada entrada em blocks pode carregar seu próprio composto nbt, e a maioria não carrega. É aqui que ficam o conteúdo de um Baú, o texto de uma placa, a criatura de um gerador e os padrões de um estandarte — presos ao bloco individual, e não à paleta.
A distinção importa: os dados da paleta são compartilhados e os dados de bloco não sã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 de bloco e você mexe na paleta; mude o que há dentro dele e você mexe em uma entrada da 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 conhecê-lo porque é também assim que você inspecionaria um desses arquivos por conta própria: não há índice espacial para montar nem descompressão além do invólucro gzip. O formato é uma lista simples 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 de pos são relativos ao seu canto. O posicionamento é assunto do Gerador de Estruturas, não do arquivo.