MC Toolkit

Guides / Commandes et données

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 suffisent à contenir une construction entière : size, palette et blocks. Chaque bloc est un entier pointant dans la palette, donc un volume de roche de 32³ coûte une chaîne et 32 768 petites entrées — une position et un index chacune, jamais un nom.

Un fichier de structure .nbt — ce qu'enregistre un bloc de structure et ce que livre un datapack — est un format bien plus simple qu'il n'y paraît de l'extérieur. Tout ce dont une construction a besoin tient dans une poignée de clés de premier niveau, et un seul choix de conception explique pourquoi ces fichiers sont aussi petits.

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 facultatif contenant son blockstate, tel que facing: north et half: bottom.

blocks ne répète jamais un nom. Chaque entrée porte un pos de trois entiers et un state, et state est un index dans la palette, pas un identifiant de bloc. Un escalier en chêne orienté au nord, c'est des données de ficelle une fois, et chacun des suivants n'est plus qu'un petit entier.

Toute l'astuce est là. Un volume de 32 × 32 × 32 de roche simple, c'est une entrée de palette et 32 768 entrées de bloc composées d'une position plus un index — et non 32 768 copies du mot minecraft:stone. La palette grandit avec le nombre de choses différentes que vous avez utilisées, et la liste de blocs grandit avec la taille de ce que vous avez construit. Ce sont deux nombres très différents, et un seul d'entre eux est généralement élevé.

Deux conséquences à garder en tête à la conception

Les blockstates multiplient votre palette, pas votre liste de blocs. Un escalier en chêne n'est pas une seule entrée de palette — il y en a une par orientation que vous avez réellement utilisée. Quatre orientations, moitié haute et moitié basse, tout droit et les deux coins intérieurs et extérieurs : un même bloc peut occuper une douzaine d'emplacements de palette. Ainsi, une construction riche en détails a une grande palette et une construction simple n'en a pas, quelle que soit sa taille.

Seules les positions enregistrées obtiennent une entrée. La liste de blocs est une liste, pas un tableau 3D dense, et une entrée absente est simplement absente — la visionneuse de cette page remplit sa grille avec -1 et traite une coordonnée manquante comme rien de placé. Mais un bloc de structure enregistre l'air comme n'importe quel autre bloc ; seul le vide de structure est omis. Une construction creuse coûte moins cher à stocker uniquement si vous remplissez son intérieur de vide de structure avant d'enregistrer.

nbt est propre à chaque bloc et facultatif

Chaque entrée de blocks peut porter son propre composé nbt, et la plupart ne le font pas. C'est là que vivent le contenu d'un coffre, le texte d'un panneau, le mob d'un générateur et les motifs d'une bannière — attachés au bloc individuel plutôt qu'à la palette.

La distinction compte : les données de palette sont partagées et les données de bloc ne le sont pas. Deux coffres forment une seule entrée de palette, parce qu'ils ont le même état de bloc — mais chacun conserve son propre inventaire dans son propre nbt. Modifiez l'état du bloc et vous touchez la palette ; modifiez ce qu'il contient et vous touchez une entrée de la liste de blocs.

Lire une couche à la fois

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

Ce qui signifie aussi qu'un fichier de structure ne vous dit rien sur l'endroit où il doit aller 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 celle du fichier.

Outils de structure et de composants NBT →

Plus de guides

Tout voir →