The Best Resource for Minecraft
The Best Resource for Minecraft

Una struttura .nbt memorizza indici della palette, non nomi di blocchi — ecco perché è così piccola

Una struttura .nbt memorizza indici della palette, non nomi di blocchi — ecco perché è così piccola

Tre chiavi contengono un'intera costruzione: size, palette e blocks. Ogni blocco è un intero che punta alla palette, quindi un volume di pietra di 32³ costa una stringa e 32.768 numeri.

A .nbt structure file — the thing a structure block saves and a datapack ships — is a much simpler format than it looks from the outside. Everything a build needs sits in a handful of top-level keys, and one design decision explains why the files are as small as they are.

Le tre chiavi che compongono la costruzione

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 holds each distinct block state exactly once. Una voce è un Name — the block id, like minecraft:oak_stairs — plus an optional Properties compound holding its blockstate, such as facing: north and half: bottom.

blocks never repeats a name. Ogni voce contiene un pos of three integers and a state, and state is an indice nella palette, non un id di blocco. Delle scale di quercia rivolte a nord sono dati stringa una sola volta, e ognuna di esse successiva è un piccolo intero.

Questo è l'intero trucco. Un volume 32 × 32 × 32 di semplice pietra è una voce della palette e 32.768 numeri di indice — non 32.768 copie della parola minecraft:stone. The palette grows with how many diverse cose con cui hai costruito, e l'elenco dei blocchi cresce in base a quanto è grande ciò che hai costruito. Sono numeri molto diversi, e di solito solo uno di essi è grande.

Due conseguenze di cui tenere conto nella progettazione

I blockstate moltiplicano la tua palette, non il tuo elenco di blocchi. Le scale di quercia non sono una sola voce della palette — ce n'è una per ogni orientamento effettivamente utilizzato. Rivolte in quattro direzioni, metà superiore e inferiore, dritte e con angoli interni ed esterni: lo stesso blocco può occupare una dozzina di slot della palette. Quindi una costruzione ricca di dettagli ha una palette grande e una semplice no, indipendentemente dalle dimensioni.

Solo i blocchi piazzati ottengono una voce. L'elenco dei blocchi è una lista, non un array 3D denso, e una voce che non c'è semplicemente non è presente — il visualizzatore in questa pagina riempie la sua griglia con -1 and treats a missing coordinate as nothing placed. A hollow build is genuinely cheaper to store than a solid one of the same dimensions.

nbt is per-block and optional

Ogni voce in blocks may carry its own nbt compound, and most do not. This is where a chest's contents, a sign's text, a spawner's mob and a banner's patterns live — attached to the individual block rather than to the palette.

La distinzione è importante: i dati della palette sono condivisi e i dati dei blocchi no. Due bauli sono un'unica voce della palette, poiché sono lo stesso stato di blocco — ma ciascuno conserva il proprio inventario nel proprio nbt. Change the block state and you touch the palette; change what is inside it and you touch one entry in the block list.

Leggere uno strato alla volta

Il visualizzatore qui è volutamente in 2D. Per disegnare lo strato y scorre l'elenco dei blocchi, mantiene le voci il cui pos[1] equals y, e cerca per ciascuna il suo state up in the palette. That is the entire algorithm, and it is worth knowing because it is also how you would inspect one of these files yourself: there is no spatial index to build and no decompression beyond the gzip wrapper. The format is a flat list you filter.

Il che significa anche che un file di struttura non ti dice nulla su dove esso vada collocato in un mondo. size is a bounding box and pos values are relative to its corner. The placement is the structure block's business, not the file's.

Prova lo strumento: Structure & NBT Component Tools →