Guides / Commands & Data

Un fichier de structure .nbt stocke des index de palette, pas des noms de blocs — c'est pourquoi il est si petit

Trois clés contiennent une construction entière : la taille, la palette et les blocs. Chaque bloc est un entier pointant vers la palette, donc un volume de pierre de 32³ coûte une chaîne de caractères et 32 768 nombres.

Un fichier de structure .nbt — ce qu'un bloc de structure sauvegarde et ce qu'un datapack contient — est un format beaucoup plus simple qu'il n'y paraît de l'extérieur. Tout ce dont une construction a besoin se trouve dans une poignée de clés de niveau supérieur, et une décision de conception explique pourquoi les fichiers sont aussi petits qu'ils le sont.

Les trois clés qui portent la construction

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 contient chaque état de bloc distinct exactement une fois. Une entrée est un Name — l'identifiant du bloc, comme minecraft:oak_stairs — plus un composé Properties optionnel contenant son état de bloc (blockstate), tel que facing: north et half: bottom.

blocks ne répète jamais un nom. Chaque entrée contient un pos de trois entiers et un state, et state est un index dans la palette, pas un identifiant de bloc. Les escaliers en chêne (Oak Stairs) orientés vers le nord sont des données de chaîne de caractères une seule fois, et chacun d'eux après cela est un petit entier.

C'est toute l'astuce. Un volume de pierre (Stone) simple de 32 × 32 × 32 est une entrée de palette et 32 768 nombres d'index — pas 32 768 copies du mot minecraft:stone. La palette grandit avec le nombre de choses différentes que vous avez construites, et la liste de blocs grandit avec la taille de votre construction. Ce sont des nombres très différents, et un seul d'entre eux est généralement grand.

Deux conséquences à prendre en compte lors de la conception

Les états de bloc (blockstates) multiplient votre palette, pas votre liste de blocs. Les escaliers en chêne ne sont pas une seule entrée de palette — ils en sont une par orientation que vous avez réellement utilisée. Orientés de quatre façons, demi-haut et demi-bas, droits et avec les deux coins intérieurs et extérieurs : le même bloc peut occuper une douzaine d'emplacements de palette. Ainsi, une construction très détaillée a une grande palette et une construction simple n'en a pas, quelle que soit sa taille.

Seuls les blocs placés obtiennent une entrée. La liste de blocs est une liste, pas un tableau 3D dense, et une entrée qui n'est pas là n'est tout simplement pas là — la visionneuse sur cette page remplit sa grille avec -1 et traite une coordonnée manquante comme rien de placé. Une construction creuse est réellement moins chère à stocker qu'une construction solide des mêmes dimensions.

nbt est par bloc et optionnel

Chaque entrée dans blocks peut contenir son propre composé nbt, et la plupart ne le font pas. C'est là que résident le contenu d'un coffre (Chest), le texte d'un panneau, le mob d'un spawner et les motifs d'une bannière — attachés au bloc individuel plutôt qu'à la palette.

La distinction est importante : les données de palette sont partagées et les données de bloc ne le sont pas. Deux coffres sont une entrée de palette, car ils ont le même état de bloc — mais chacun conserve son propre inventaire dans son propre nbt. Changez l'état du bloc et vous touchez la palette ; changez ce qu'il y a à l'intérieur et vous touchez une entrée dans la liste de blocs.

Lecture couche par couche

La visionneuse ici est délibérément en 2D. Pour dessiner la couche y, elle parcourt la liste de blocs, conserve les entrées dont le pos[1] est égal à y, et recherche le state de chacune dans la palette. C'est tout l'algorithme, et il est utile de le connaître car c'est aussi ainsi que vous inspecteriez vous-même l'un de ces fichiers : il n'y a pas d'index spatial à construire et pas de décompression au-delà de l'enveloppe gzip. Le format est une liste plate que vous filtrez.

Ce qui signifie également qu'un fichier de structure ne vous dit rien sur il doit être placé dans un monde. size est une boîte englobante et les valeurs pos sont relatives à son coin. Le placement est l'affaire du bloc de structure, pas du fichier.

Outils de structure et de composants NBT →

More guides

Browse all →

Vous cherchez d'autres outils Minecraft ?

Une collection de générateurs, visionneuses et convertisseurs qui tournent dans le navigateur — tous gratuits.