MC Toolkit

Guias / Comandos e dados

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.

Ferramentas de estrutura e componentes NBT →

Mais guias

Ver todos →