Close
    Search Search

    Format NBT

    Le Balise binaire nommée (NBT) est utilisé par Minecraft pour les différents fichiers dans lesquels il enregistre les données. Le format est conçu pour stocker des données dans une structure arborescente composée de différentes balises. Toutes les balises ont un identifiant et un nom.

    Un autre format plus convivial de NBT est la chaîne simple, telle qu'elle est utilisée dans les commandes. Ce format est appelé SNBT, court pour NBT stringifié.


    Format SNBT

    Format NBT Cette fonctionnalité est exclusive à Java Edition. 

    SNBT, aussi connu sous le nom balise de données, est souvent utilisé en commande dans Java Edition. Il peut être décrit en commençant par des paires attribut-valeur entourées d'accolades. Une utilisation courante des balises de données dans Java Edition est dans les commandes, utilisées pour spécifier des données complexes pour n'importe quelle entité.




    Une balise de données se compose de zéro ou plusieurs paires attribut-valeur délimitées par des virgules et entourées d'accolades. Chaque paire attribut-valeur se compose d'un nom de balise et de la valeur de la balise, séparés par deux points. Certaines valeurs, cependant, peuvent être une balise composée et elles-mêmes contiennent des paires attribut-valeur, permettant à une balise de données de décrire une structure de données hiérarchique.

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

    Le nom de la balise peut être entouré de guillemets doubles si nécessaire.

    Il est différent du format JSON ; par conséquent, tout JSON utilisé dans NBT, tel que le texte JSON brut, doit être inclus dans une balise de chaîne.

    Format de chaque type

    Les structures de données définies s'attendent également à ce que les valeurs soient du type correct.

    Types de valeur des balises de données
    Type Détails Format Exemple
     Octet Un entier signé de 8 bits, allant de -128 à 127 (inclus). b ou B 34B, -20b
     Court Un entier signé de 16 bits, allant de -32,768 à 32,767 (inclus). s ou S 31415s, -27183s
     Int Un entier signé de 32 bits, compris entre -2,147,483,648 2,147,483,647 XNUMX XNUMX et XNUMX XNUMX XNUMX XNUMX (inclus). 31415926
     longs Un entier signé de 64 bits, allant de -9,223,372,036,854,775,808 à 9,223,372,036,854,775,807 (inclus). l ou L 31415926l
     flotteur Un nombre à virgule flottante simple précision de 32 bits, allant de -3.4E+38 à +3.4E+38.

    Voir virgule flottante IEEE pour plus de détails.



    pour F 3.1415926f
     Double Une virgule flottante double précision 64 bits, allant de -1.7E+308 à +1.7E+308.

    Voir virgule flottante IEEE pour plus de détails.

    , d ou ré 3.1415926
     Chaîne Une séquence de caractères, entre guillemets. Pour les chaînes sans virgules, crochets, accolades ou espaces, la clôture des guillemets est facultative. Les guillemets peuvent être des guillemets simples ' ou doubles ". Les guillemets imbriqués peuvent être inclus dans une chaîne en échappant le caractère avec un échappement. , " " (" dans doit être échappé à "), ou ' ' (' dans doit être échappé à ')

    "Appelle-moi "Ismaël""

    'Appelle-moi "Ismaël"'

    'Appelle-moi 'Ismaël''

    "Appelle-moi 'Ismaël'"

     Liste Une liste ordonnée de balises, entre crochets et délimitée par des virgules. Les balises doivent être du même type, déterminé par la première balise de la liste. [ , ,...] (3.2,64.5,129.5)
     Composé Une liste ordonnée de paires attribut-valeur, entourées d'accolades et délimitées par des virgules.

    Chaque balise peut être de n'importe quel type.

    { : , : ,...} {X : 3, Y : 64, Z : 129}
     Tableau d'octets B ; suivi d'une liste ordonnée d'entiers de 8 bits, délimités par des virgules. La balise est placée entre crochets. [B; b, B,...] [B;1b,2b,3b]
     Tableau Int JE; suivi d'une liste ordonnée d'entiers 32 bits, délimités par des virgules. La balise est placée entre crochets. [JE; , , ...] [I;1,2,3]
     Tableau long L ; suivi d'une liste ordonnée d'entiers 64 bits, délimités par des virgules. La balise est placée entre crochets. [L; moi, L,...] [L;1l,2l,3l]
     Boolean Une valeur, exprimée comme vrai, faux. Il est résolu par le jeu en une balise Byte comme 0b (pour faux) et 1b (pour vrai). vrai, faux ou 0b, 1b {doFoo:true}

    Objet NBT

    Lorsque le jeu est en cours d'exécution, les entités et les entités de bloc dans les morceaux de chargement sont stockées dans la mémoire. Ils ne sont pas stockés avec NBT, ce ne sont que des objets de programmation.



    Lors du traitement des opérations NBT, le jeu doit générer un objet NBT programmatique à partir d'entités/entités de bloc, analyser SNBT en objet NBT, modifier des entités/blocs en fonction de l'objet NBT fourni ou convertir un objet NBT en SNBT.

    Génération de l'objet NBT

    Lors de la génération de NBT à partir d'une entité/bloc, les propriétés de l'entité/bloc sont ajoutées dans l'objet NBT programmatique.

    Notez que toutes les propriétés ne sont pas ajoutées. Par exemple, la valeur indiquant si un joueur ouvre un coffre ne sera pas ajoutée à l'objet NBT.

    Une valeur est ajoutée avec un certain type de données. Par exemple, un ID avec espace de noms sera converti en une valeur de chaîne.

    Ces objets NBT seront également stockés dans les fichiers de sauvegarde du jeu en tant que fichiers NBT lorsque le jeu se ferme ou s'enregistre automatiquement. Ainsi, les structures de données décrites par les balises NBT et le type de données de chaque balise sont fondamentalement les mêmes que ceux utilisés dans les fichiers de sauvegarde du jeu. Ces structures de données sont décrites dans d'autres articles et les commandes s'attendent à ce que les balises de données utilisent les mêmes noms d'attribut (qui sont sensibles à la casse) :

    Liens de spécification de structure de données
    Objets Exemples
    Bloquer les entités coffres, fours, blocs de commande, générateurs de monstres, panneaux, etc.
    Articles objets dans les inventaires (comprend les spécifications pour les enchantements, les traditions, les noms personnalisés, etc.)
    Entités d'article objets au sol
    Monstre lianes, vaches, villageois, etc.
    Projectiles flèches, boules de feu, potions lancées, etc.
    Véhicules bateaux, wagonnets, etc.
    Tuiles dynamiques TNT apprêté, chute de sable/gravier/poudre de béton/enclumes
    Autres entités fusées de feux d'artifice, peintures et cadres d'objets

    Conversion à la SNBT

    Format NBT Cette fonctionnalité est exclusive à Java Edition. 

    Un objet NBT programmatique serait converti en un SNBT en essayant de l'obtenir avec /data get etc.

    Une fois converti, un nombre est toujours suivi d'une lettre (minuscule pour b, s, f, d et majuscule pour L) sauf Integer. Par exemple, 3s pour un short, 3.2f pour un float, etc.

    Et une chaîne est toujours entourée de guillemets simples ou doubles.

    Les autres types de données sont exprimés en tant que #Format de chaque tableau de types ci-dessus.

    Conversion de la SNBT

    Format NBT Cette fonctionnalité est exclusive à Java Edition. 

    Un SNBT sera converti en un objet NBT programmatique lorsqu'il sera analysé par le jeu.

    Un nombre suivi d'une lettre (B, S, L, F, D ou leur minuscule) est résolu en type de données correspondant. Par exemple, 3s pour un court, 3.2f pour un flottant, etc. La lettre peut être majuscule ou minuscule. Lorsqu'aucune lettre n'est utilisée, il suppose double s'il y a une virgule décimale, int s'il n'y a pas de virgule décimale et que la taille s'inscrit dans les 32 bits, ou un magnifique si ni l'un ni l'autre n'est vrai.

    Un littéral entre crochets est supposé être une liste à moins qu'un identifiant ne soit utilisé : [I;1,2,3] pour un tableau entier et [L;1L,2L,3L] pour un tableau long.

    vrai et faux sont convertis en 1b et 0b respectivement.

    Modification de l'entité/bloc en fonction de l'objet NBT

    Format NBT Cette fonctionnalité est exclusive à Java Edition. 

    Modifier l'entité/le bloc en fonction d'un objet NBT programmatique n'est pas un simple progrès. Toutes certaines balises doivent être résolues avant de modifier les propriétés d'un bloc/d'une entité. Notez que seules certaines propriétés peuvent être modifiées. Par exemple, lors de l'utilisation de la commande /data pour modifier une entité de bloc, ses coordonnées ne peuvent pas être modifiées.

    Si une propriété a besoin d'une valeur d'ID avec espace de noms et obtient une balise de chaîne, la chaîne sera convertie en un ID.

    Si une propriété a besoin d'une valeur de texte JSON et obtient une balise de chaîne, la chaîne sera analysée dans l'objet texte JSON.

    Si une propriété a besoin d'une valeur numérique d'un certain type et obtient une balise numérique de type incorrect, le nombre sera arrondi et converti dans le type requis.

    Si une propriété a besoin d'une valeur numérique et obtient une balise non numérique, le nombre deviendra 0.

    Si une propriété a besoin d'une valeur de chaîne et obtient une balise non-chaîne, la chaîne deviendra une chaîne vide.

    Si une propriété a besoin d'une liste ou d'un tableau d'un certain type et obtient une balise de type incorrect, une liste/un tableau vide sera obtenu.

    Si une propriété a besoin d'une balise de composant et obtient une balise de non-composant, une balise de composant vide sera obtenue.

    Test des balises NBT

    Format NBT Cette fonctionnalité est exclusive à Java Edition. 

    Lorsque des commandes telles que /clear, /execute si les données sont utilisées pour faire correspondre les balises de données, ou l'argument nbt dans le sélecteur de cible essaie de cibler l'entité, le jeu convertit SNBT en objet NBT programmatique et obtient l'objet NBT programmatique du bloc/entité/stockage, puis compare les deux objets NBT.

    Ils vérifient uniquement la présence des balises fournies dans l'entité/le bloc/le stockage cible. Cela signifie que l'entité/le bloc/le stockage peut avoir des balises supplémentaires et toujours correspondre. Cela est vrai même pour les listes : l'ordre et le nombre d'éléments dans une liste n'est pas pris en compte, et tant que chaque élément demandé est dans la liste, il correspond même s'il y a des éléments supplémentaires. Par exemple, une entité avec des données {Pos:[1d,2d,3d],Tags:["a","b"]} peut être ciblée par @e[nbt={Pos:[3d,2d,1d]} ] ou même simplement @e[nbt={Pos:[2d]}] même si le premier représente une position totalement différente et la seconde n'est pas du tout une position valide. Notez que @e[nbt={Tags:}] ne peut pas y correspondre, car une liste vide ne peut correspondre qu'à une liste vide.

    Cependant, l'ordre et le nombre d'éléments dans un tableau byte/long/int is reconnu.

    Les balises de données demandées dans l'entité/le bloc/le stockage cible doivent correspondre exactement pour que les balises fournies passent, y compris le type de données (par exemple 1, un int, ne correspondra pas à 1d, un double). Les espaces de noms ne peuvent pas non plus être omis car dans l'objet NBT, il s'agit simplement d'une chaîne simple qui ne sera pas résolue en un identifiant avec espace de noms (par exemple, @e[nbt={Item:{id:"stone"}}] ne correspondra pas à une pierre entité item, il doit être @e[nbt={Item:{id:"minecraft:stone"}}]). La même chose est vraie pour la chaîne de texte JSON, qui doit être exactement la même pour correspondre à la balise fournie (par exemple @e[nbt={CustomName:'"a"'}] ne correspondra à aucune entité, elle doit être @e[ nbt={CustomName:"{"text":"a"}"}] ou @e[nbt={CustomName:'{"text":"a"}'}]).

    fichier NBT

    Un fichier NBT est une étiquette composée zippée, avec le nom et l'ID de l'étiquette inclus. Le fichier dans le zip doit contenir la balise Compound qu'il s'agit des premiers octets. Certains des fichiers utilisés par Minecraft peuvent être non compressés, mais dans la plupart des cas, les fichiers suivent les spécifications d'origine de Notch et sont compressés avec GZip.

    Définition du TAG

    Une balise est une partie individuelle de l'arbre de données. Le premier octet d'une balise est le type de balise (ID), suivi d'un entier non signé big-endian de deux octets pour la longueur du nom, puis le nom sous forme de chaîne au format UTF-8 (Remarque TAG_Fin n'est pas nommé et ne contient pas les 2 octets supplémentaires ; le nom est supposé être vide). Enfin, selon le type de balise, les octets qui suivent font partie de la charge utile de cette balise. Ce tableau décrit chacune des 13 balises connues dans la version 19133 du format NBT :

    ID Icône Type d'étiquette Charge utile Détails Capacité de stockage
    0 ÉTIQUETER_Fin - Utilisé pour marquer la fin des balises composées. Cette balise n'a pas de nom, il ne s'agit donc que d'un seul octet 0. Il peut également s'agir du type de balises List vides. S. O.
    1 ÉTIQUETER_Octet 1 octet / 8 bits, signé Un type intégral signé. Parfois utilisé pour les booléens. Gamme complète de -(27) à (27 - 1)
    (-128 à 127)
    2 ÉTIQUETER_Court 2 octets / 16 bits, signé, gros boutien Un type intégral signé. Gamme complète de -(215) à (215 - 1)
    (-32,768 à 32,767)
    3 ÉTIQUETER_Int 4 octets / 32 bits, signé, gros boutien Un type intégral signé. Gamme complète de -(231) à (231 - 1)
    (-2,147,483,648 à 2,147,483,647)
    4 ÉTIQUETER_longs 8 octets / 64 bits, signé, gros boutien Un type intégral signé. Gamme complète de -(263) à (263 - 1)
    (-9,223,372,036,854,775,808 à 9,223,372,036,854,775,807)
    5 ÉTIQUETER_flotteur 4 octets / 32 bits, signé, gros boutien, IEEE 754-2008, binaire32 Un type à virgule flottante signé. La précision varie tout au long de la ligne numérique ;
    Voir Format à virgule flottante simple précision. Valeur maximale environ 3.4*1038
    6 ÉTIQUETER_Double 8 octets / 64 bits, signé, gros boutien, IEEE 754-2008, binaire64 Un type à virgule flottante signé. La précision varie tout au long de la ligne numérique ;
    Voir Format à virgule flottante double précision. Valeur maximale environ 1.8 * 10308
    7 ÉTIQUETER_Octet_tableau La taille de la charge utile de TAG_Int, puis la taille des charges utiles de TAG_Byte. Un tableau d'octets. Le nombre maximal d'éléments est compris entre (231 - 9) et (231 - 1) (2,147,483,639 2,147,483,647 XNUMX XNUMX et XNUMX XNUMX XNUMX XNUMX), en fonction de la JVM spécifique.
    8 ÉTIQUETER_Chaîne Une longueur de charge utile semblable à TAG_Short, mais non signée[1], puis une chaîne UTF-8 ressemblant à des octets de longueur. Une chaîne UTF-8. Il a une taille, plutôt que d'être terminé par null. 65,535 8 octets interprétables en UTF-8 (voir le format UTF-XNUMX modifié ; les caractères les plus couramment utilisés sont un seul octet).
    9 ÉTIQUETER_Liste TagId de la charge utile de TAG_Byte, puis la taille de la charge utile de TAG_Int, puis les charges utiles des balises de taille, tous de type tagId. Une liste de charges utiles de balises, sans identifiants de balises répétés ni noms de balises. En raison des limitations de la JVM et de l'implémentation d'ArrayList, le nombre maximum d'éléments de liste est (231 - 9), soit 2,147,483,639 512 XNUMX XNUMX. Notez également que les balises List et Compound ne peuvent pas être imbriquées au-delà d'une profondeur de XNUMX.
    10 ÉTIQUETER_Composé Balises entièrement formées, suivies d'un TAG_End. Une liste de balises entièrement formées, y compris leurs identifiants, noms et charges utiles. Deux balises ne peuvent pas avoir le même nom. Contrairement aux listes, il n'y a pas de limite stricte au nombre de balises dans un composé (bien sûr, il y a toujours la limite implicite de la mémoire virtuelle). Notez, cependant, que les balises Compound et List ne peuvent pas être imbriquées au-delà d'une profondeur de 512.
    11 ÉTIQUETER_Int_tableau La taille de la charge utile de TAG_Int, puis la taille des charges utiles de TAG_Int. Un tableau des charges utiles de TAG_Int. Le nombre maximal d'éléments est compris entre (231 - 9) et (231 - 1) (2,147,483,639 2,147,483,647 XNUMX XNUMX et XNUMX XNUMX XNUMX XNUMX), en fonction de la JVM spécifique.
    12 ÉTIQUETER_longs_tableau La taille de la charge utile de TAG_Int, puis la taille des charges utiles de TAG_Long. Un tableau des charges utiles de TAG_Long. Le nombre maximal d'éléments est compris entre (231 - 9) et (231 - 1) (2,147,483,639 2,147,483,647 XNUMX XNUMX et XNUMX XNUMX XNUMX XNUMX), en fonction de la JVM spécifique.

    Les balises List et Compound peuvent être et sont souvent imbriquées de manière récursive. Il est également à noter que, dans une liste de listes, chacune des sous-listes peut lister un type de balise différent.

    Utilisation

    Minecraft utilise parfois le format NBT de manière incohérente ; dans certains cas, les listes vides peuvent être représentées comme une liste de balises Byte plutôt que comme une liste du type correct, ou comme une liste de balises de fin dans les nouvelles versions de Minecraft, ce qui peut casser certains outils NBT plus anciens. De plus, presque chaque balise racine a une chaîne de nom vide et encapsule une seule balise composée avec les données réelles et un nom. Par exemple:

    • La balise racine pour la plupart des structures Minecraft NBT.
      •  SomeName : la seule balise contenue dans la balise racine - elle a un nom et contient toutes les données réelles.

    De plus, il existe également une utilisation incohérente de la casse des lettres, principalement en camelCase ou en PascalCase, mais parfois même en minuscules.

    Les usages

    Il manque des informations sur les NBT Bedrock Edition dans cette section.  Veuillez étendre la section pour inclure ces informations. De plus amples détails peuvent exister sur la page de discussion.
    • level.dat est stocké au format NBT compressé.
    • Les fichiers .dat sont stockés au format NBT compressé.
    • idcounts.dat est stocké au format NBT compressé.
    • villages.dat est stocké au format NBT compressé.
    • raids.dat est stocké au format NBT compressé.
    • Les fichiers map_<#>.dat sont stockés au format NBT compressé.
    • servers.dat, qui est utilisé pour stocker la liste des serveurs multijoueurs enregistrés sous forme de NBT non compressé.
    • hotbar.nbt, qui est utilisé pour enregistrer les barres de raccourcis au format NBT non compressé.
    • Les morceaux sont stockés au format NBT compressé dans les fichiers de région.
    • scoreboard.dat est stocké au format NBT compressé.
    • Les structures générées sont stockées au format NBT compressé.
    • Les structures enregistrées sont stockées au format NBT compressé.

    Logiciel officiel

    : Tutoriels/Exécution du générateur de données

    Mojang a fourni des exemples de classes Java NBT que les développeurs peuvent utiliser et référencer dans le cadre du code source du convertisseur de format de fichier MCRegion vers Anvil.[2] Depuis Java Edition 1.13, Minecraft inclut un convertisseur intégré entre le format SNBT et le format NBT compressé, fourni avec le client et le serveur officiel.[3]

    Le générateur de données de Minecraft est capable de convertir des fichiers NBT Stringified non compressés avec l'extension .snbt dans un dossier d'entrée en fichiers au format NBT compressés GZip avec l'extension .nbt dans un dossier de sortie, et vice versa.

    Le générateur de données vanilla peut convertir n'importe quel format NBT compressé GZip au format SNBT. L'extension de fichier d'un fichier peut simplement être modifiée, telle que level.dat en level.nbt et placée dans le dossier d'entrée, et le générateur décode ensuite les données NBT compressées GZip.

    Histoire

    Le format de fichier NBT a été décrit par Notch dans une brève spécification.[4]

    La version originale connue était 19132 telle qu'introduite dans la version bêta 1.3, et depuis lors a été mise à jour vers 19133 avec le format de fichier Anvil, qui ajoute la balise Int Array. Le format NBT remonte à Indev avec les balises 0 à 10 utilisées.

    Édition Java
    1.0.028 Septembre 2011Notch fonctionne sur "l'enregistrement de données arbitraires avec des instances d'élément".
    1.814w03aLes données NBT prennent désormais en charge l'utilisation d'ID de chaîne plutôt que d'ID numériques.
    1.12?Ajout de balises de tableau long.
    1.1318w01aAjout d'un générateur de données au client Minecraft et au logiciel multijoueur par défaut.
    1.1419w08a Les balises de chaîne dans SNBT peuvent désormais être entre guillemets simples ' en plus des guillemets doubles ".[5]

    1. ↑ https://docs.oracle.com/javase/8/docs/api/java/io/DataOutput.html#writeUTF-java.lang.String-
    2. ↑ http://www.mojang.com/2012/02/new-minecraft-map-format-anvil/
    3. ↑ https://page.vg/Data_Generators#NBT_converters
    4. ↑ http://web.archive.org/web/20110723210920/http://www.minecraft.net/docs/NBT.txt spécification
    5. ↑ "Autoriser les guillemets simples dans les chaînes par boq · Pull Request # 52" – Mojang/brigadier – GitHub.

    Liens externes

    • nbt, une bibliothèque Java pour travailler avec le format NBT.
    • NBT sur la page Web.vg
    • NBTExplorer, un outil pour visualiser et éditer des fichiers NBT.
    • NBT Studio, successeur de NBTExplorer qui inclut des fonctionnalités supplémentaires telles que la prise en charge de Bedrock et SNBT.
    • webNBT, un outil en ligne pour visualiser et éditer des fichiers NBT.
    Format NBT Édition Java
    versions
    • Démo
      • Lieux
    • Démo sur PC Gamer (Bêta 1.3)
    DÉVELOPPEMENT
    Historique de la version
    • Pré-Classique
    • Classique
      • Début Classique Créatif
      • Test multijoueur
      • Format NBT Test de survie
      • Créatif classique tardif
    • Indév
    • Format NBT Infdev
    • Alpha
    • bêta
    • Version complète
    • Versions de développement
    • Fonctionnalités supprimées
      • Blocs
      • Articles
    • Fonctionnalités inutilisées
    • Fonctionnalités exclusives
    • Caractéristiques mentionnées
      • Dimension du ciel
    • Versions prévues
    Fiche
    • Bugs connus
      • Lanceur Minecraft
    • Configuration matérielle
    • al_version
    • Bloquer l'entité
    • Commandes
      • Les fonctions
    • Crashes
    • Valeurs de données
      • Classique
      • Indév
      • Pré-aplatissement
    • Version des données
    • Écran de débogage
    • Codes de formatage
    • Codes clés
    • Lanceur Minecraft
    • Version du protocole
    • Emplacement de la ressource
    • Capture d'écran
    • graine
    • Données statistiques
    • tique
    • Morceau d'apparition
    • Coordonnées
    .Minecraft
    • client.jar
    • client.json
    • launcher_profiles.json
    • options.txt
    Ressources de développement
    • Format de fichier d'enclume
    • Format de bloc
    • Format de stockage des commandes
    • Format des structures générées
    • Format de niveau
    • Tables de butin
    • Format d'élément de carte
    • Modèle
    • Format NBT
    • Carte d'obscurcissement
    • Format du lecteur
    • format raids.dat
    • Format de texte JSON brut
    • Format de fichier de région
    • Format de fichier de bloc de structure
      • Format de fichier schématique
    • Format de tableau de bord
    • Format de liste de serveurs
    • sons.json
    • Sous-titres
    • format villages.dat
    Ressources de développement héritées
    • Format de niveau classique
    • Protocole de serveur classique
    • Format de niveau Indev
    • Format de niveau alpha
    • niveau_serveur.dat
    Multijoueur
    • Serveur
    • Minecraft Realms
    • Liste des serveurs
    • server.properties
    • Configuration requise pour le serveur
    Personnalisation du jeu
    • Skins
    • capes
    • Packs de ressources
    • Packs de données


    ajouter un commentaire de Format NBT
    Commentaire envoyé avec succès ! Nous l'examinerons dans les prochaines heures.