Le format NBT (Named Binary Tag) est un système de stockage de données hiérarchisé employé par Minecraft pour conserver des informations dans ses fichiers de sauvegarde. Il repose sur une organisation en balises, chacune étant définie par un identifiant numérique, un nom et un contenu (payload). Ce format existe aussi sous une forme textuelle, le Stringified Named Binary Tag (SNBT), qui permet de lire et modifier ces données sous forme de texte.

Ce qu’il faut retenir :

  • Le NBT est un format hiérarchisé utilisé par Minecraft pour stocker les données des entités, blocs et fichiers de sauvegarde.
  • Le SNBT est la version textuelle du NBT, principalement utilisée dans les commandes de la Java Edition.
  • Chaque tag du NBT possède un identifiant numérique, un nom et un contenu appelé payload.
  • Le format SNBT prend en charge différents types de données, comme les entiers, flottants, chaînes, listes, tableaux et compounds.
  • La conversion entre NBT et SNBT conserve la structure des données et respecte les types et formats définis.
Qu'est-ce que le format NBT dans Minecraft ?
Tout savoir sur le format NBT dans Minecraft.

Le format SNBT

Le SNBT, aussi appelé data tag, reprend la structure du NBT mais sous forme de texte. Il est généralement écrit entre accolades { } sous forme de paires clé:valeur séparées par des virgules. Ces valeurs peuvent elles-mêmes contenir d’autres paires, permettant de décrire une structure arborescente complexe.

Exemple :

{name1:123,name2:"sometext1",name3:{subname1:456,subname2:"sometext2"}}

Les noms de tags peuvent être entourés de guillemets doubles s’ils contiennent des caractères spéciaux.

Types de données du SNBT

TypeDescriptionFormat SNBTExemple
ByteEntier signé sur 8 bits (–128 à 127).<nombre>b ou <nombre>B34B, -20b
BooleanPas de type booléen natif ; représenté par un byte (0 ou 1).true ou falsetrue
ShortEntier signé sur 16 bits (–32 768 à 32 767).<nombre>s ou <nombre>S31415s
IntEntier signé sur 32 bits.<nombre>, <nombre>i ou <nombre>I31415926
LongEntier signé sur 64 bits.<nombre>l ou <nombre>L31415926l
FloatNombre flottant simple précision (32 bits).<nombre>f ou <nombre>F3.1415926f
DoubleNombre flottant double précision (64 bits).<nombre>, <nombre>d ou <nombre>D3.1415926
StringChaîne de caractères. Peut être entre guillemets simples ou doubles, ou sans guillemets si elle respecte certaines règles."texte", 'texte'"Hello \"World!\""
ListListe ordonnée de valeurs du même type.[valeur,valeur,...][3.2,64.5,129.5]
CompoundEnsemble non ordonné de paires clé/valeur.{clé:valeur,...}{X:3,Y:64,Z:129}
Byte ArrayTableau d’octets.[B;1b,2b,3b][B;1b,2b,3b]
Int ArrayTableau d’entiers 32 bits.[I;1,2,3][I;1,2,3]
Long ArrayTableau d’entiers 64 bits.[L;1l,2l,3l][L;1l,2l,3l]

Formats numériques et suffixes

  • Les nombres peuvent être en notation scientifique (1.2e3), hexadécimale (0xCAFE) ou binaire (0b101).
  • Les caractères _ peuvent séparer les chiffres pour améliorer la lisibilité (1_000).
  • Les suffixes indiquent le type (b, s, l, f, d) et éventuellement le signe (u ou s).

Séquences d’échappement

Le SNBT prend en charge 13 séquences d’échappement, par exemple :

SéquenceCaractère
\nSaut de ligne
\tTabulation
\\Antislash
\"Guillemets doubles
\u2604Caractère Unicode (ex. U+2604)

Conversion entre NBT et SNBT

  • Vers SNBT : un objet NBT est converti en texte lors de l’exécution de /data get. Les nombres sont suffixés selon leur type, les chaînes sont entre guillemets.
  • Depuis SNBT : le texte est analysé et converti en NBT en tenant compte des types. Les listes hétérogènes sont normalisées.

Test de tags NBT

Certains contextes (comme /execute if data) permettent de tester si un objet NBT contient certains tags. La comparaison est partielle : la structure peut contenir d’autres tags et tout de même correspondre. Pour les tableaux d’octets, d’entiers ou de longs, l’ordre et la taille sont strictement vérifiés.

Format binaire du NBT

Un fichier NBT est généralement un TAG_Compound compressé en GZip. Chaque tag contient :

  1. Un identifiant de type.
  2. La taille de son nom (2 octets, big-endian).
  3. Son nom (UTF-8).
  4. Le payload.

Liste des tags NBT

IDTagDescriptionCapacité
0TAG_EndMarque la fin d’un compound.N/A
1TAG_ByteEntier signé 8 bits.–128 à 127
2TAG_ShortEntier signé 16 bits.–32 768 à 32 767
3TAG_IntEntier signé 32 bits.–2 147 483 648 à 2 147 483 647
4TAG_LongEntier signé 64 bits.±9,22 × 10¹⁸
5TAG_FloatFlottant 32 bits.~±3,4 × 10³⁸
6TAG_DoubleFlottant 64 bits.~±1,79 × 10³⁰⁸
7TAG_Byte_ArrayTableau d’octets.2 147 483 647 max
8TAG_StringChaîne UTF-8.65 535 octets
9TAG_ListListe de tags du même type.2 147 483 639 max
10TAG_CompoundEnsemble de tags nommés.Limité par la mémoire
11TAG_Int_ArrayTableau d’entiers 32 bits.2 147 483 647 max
12TAG_Long_ArrayTableau d’entiers 64 bits.2 147 483 647 max

Fichiers utilisant le NBT

  • level.dat
  • <nom>.dat (joueurs, villages, raids…)
  • servers.dat (serveurs multijoueurs)
  • hotbar.nbt (barres d’outils rapides)
  • Données de chunks, structures générées ou sauvegardées, scoreboards…

Différences avec JSON

  • NBT gère plusieurs types numériques, pas de null ni de booléen natif.
  • Les tableaux NBT doivent être homogènes.
  • Les clés peuvent être non citées en SNBT, mais doivent l’être en JSON.

Historique

Le format NBT remonte à la phase Indev de Minecraft, avec initialement les tags 0 à 10. Il a été spécifié par Notch et est toujours utilisé, bien que des optimisations aient été ajoutées au fil des versions.

5 / 5 - (1 vote)