Close
    Search Search

    Formato NBT

    I Tag binario con nome (NBT) viene utilizzato da Minecraft per i vari file in cui salva i dati. Il formato è progettato per memorizzare i dati in una struttura ad albero composta da vari tag. Tutti i tag hanno un ID e un nome.

    Un altro formato più intuitivo di NBT è in stringa semplice, come usato nei comandi. Questo formato è indicato come SNBT, abbreviazione di NBT . stringato.


    Contenuti

    Formato SNBT

    Formato NBT Questa funzione è esclusiva di Java Edition. 

    SNBT, conosciuto anche come tag di dati, è spesso usato come comando in Java Edition. Può essere descritto a partire da coppie attributo-valore racchiuse tra parentesi graffe. Un uso comune dei tag di dati in Java Edition è nei comandi, utilizzati per specificare dati complessi per qualsiasi entità.




    Un tag di dati è costituito da zero o più coppie attributo-valore delimitate da virgole e racchiuse tra parentesi graffe. Ogni coppia attributo-valore è costituita da un nome di tag e dal valore del tag, separati da due punti. Alcuni valori, tuttavia, possono essere un tag composto e contengono essi stessi coppie attributo-valore, consentendo a un tag di dati di descrivere una struttura di dati gerarchica.

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

    Il nome del tag può essere racchiuso tra virgolette se necessario.

    È diverso dal formato JSON; quindi, qualsiasi JSON utilizzato in NBT, come il testo JSON non elaborato, deve essere racchiuso all'interno di un tag di stringa.

    Formato di ogni tipo

    Le strutture dati definite prevedono anche che i valori siano del tipo corretto.

    Tipi di valori dei tag di dati
    Tipologia Descrizione Formato Esempio
     Byte Un intero a 8 bit con segno, compreso tra -128 e 127 (inclusi). b o B 34B, -20b
     Corti Un intero a 16 bit con segno, compreso tra -32,768 e 32,767 (inclusi). s o S 31415s, -27183s
     Int Un intero con segno a 32 bit, compreso tra -2,147,483,648 e 2,147,483,647 (inclusi). 31415926
     Lunghi Un intero a 64 bit con segno, compreso tra -9,223,372,036,854,775,808 e 9,223,372,036,854,775,807 (inclusi). io l 31415926l
     galleggiante Un numero a virgola mobile a precisione singola a 32 bit, compreso tra -3.4E+38 e +3.4E+38.

    Vedere IEEE in virgola mobile per i dettagli.



    per F 3.1415926f
     Doppio A 64 bit, virgola mobile a doppia precisione, che va da -1.7E+308 a +1.7E+308.

    Vedere IEEE in virgola mobile per i dettagli.

    , d o D 3.1415926
     Corda Una sequenza di caratteri, racchiusa tra virgolette. Per le stringhe senza virgole, parentesi quadre, parentesi graffe o spazi, l'inclusione delle virgolette è facoltativa. Le virgolette possono essere virgolette singole ' o doppie ". Le virgolette annidate possono essere incluse all'interno di una stringa eseguendo l'escape del carattere con un carattere di escape. , " " ("in deve essere sfuggito a"), o ' ' (' all'interno deve essere sfuggito a ')

    "Chiamami "Ismaele""

    'Chiamami "Ismaele"'

    'Chiamami 'Ismaele''

    "Chiamami 'Ismaele'"

     Lista Un elenco ordinato di tag, racchiuso tra parentesi quadre e delimitato da virgole. I tag devono essere dello stesso tipo, determinato dal primo tag nell'elenco. [ , ,...] [3.2,64.5,129.5]
     Compound Un elenco ordinato di coppie attributo-valore, racchiuso tra parentesi graffe e delimitato da virgole.

    Ogni tag può essere di qualsiasi tipo.

    { : , : ,...} {X: 3, Y: 64, Z: 129}
     Array di byte B; seguito da un elenco ordinato di numeri interi a 8 bit, delimitati da virgole. Il tag è racchiuso tra parentesi quadre. [B; B, B,...] [B; 1b, 2b, 3b]
     Array interno IO; seguito da un elenco ordinato di numeri interi a 32 bit, delimitati da virgole. Il tag è racchiuso tra parentesi quadre. [IO; , ,...] [Io;1,2,3]
     Matrice lunga l; seguito da un elenco ordinato di numeri interi a 64 bit, delimitati da virgole. Il tag è racchiuso tra parentesi quadre. [L; io, L,...] [L;1l,2l,3l]
     Booleano Un valore, espresso come vero, falso. Viene risolto dal gioco in un tag Byte come 0b (per falso) e 1b (per vero). vero, falso o 0b, 1b {doFoo:vero}

    Oggetto NBT

    Quando il gioco è in esecuzione, le entità e le entità di blocco nei blocchi di caricamento vengono archiviate nella memoria. Non sono memorizzati con NBT, invece, sono solo oggetti programmatici.



    Durante l'elaborazione delle operazioni NBT, il gioco deve generare oggetti NBT programmatici da entità/entità blocco, analizzare SNBT in oggetti NBT, modificare entità/blocchi in base all'oggetto NBT fornito o convertire oggetti NBT in SNBT.

    Generazione di oggetti NBT

    Quando si genera NBT da un'entità/blocco, le proprietà dell'entità/blocco vengono aggiunte all'oggetto NBT programmatico.

    Notare che non tutte le proprietà vengono aggiunte. Ad esempio, il valore se un giocatore sta aprendo una cassa non verrà aggiunto all'oggetto NBT.

    Viene aggiunto un valore con un determinato tipo di dati. Ad esempio, una posizione di risorsa verrà convertita in un valore stringa.

    Questi oggetti NBT verranno anche archiviati nei file di salvataggio del gioco come file NBT quando il gioco si chiude o viene salvato automaticamente. Quindi le strutture di dati descritte dai tag NBT e il tipo di dati per ciascun tag sono fondamentalmente gli stessi utilizzati nei file di salvataggio del gioco. Queste strutture di dati sono descritte in altri articoli e i comandi prevedono che i tag di dati utilizzino gli stessi nomi di attributi (che fanno distinzione tra maiuscole e minuscole):

    Collegamenti alle specifiche della struttura dei dati
    Oggetti Esempi
    Blocca entità forzieri, fornaci, blocchi di comando, generatori di mob, insegne, ecc.
    articoli articoli negli inventari (include specifiche per incantesimi, tradizioni, nomi personalizzati, ecc.)
    Entità articolo oggetti a terra
    mobs rampicanti, mucche, paesani, ecc.
    Proiettili frecce, palle di fuoco, pozioni lanciate, ecc.
    Veicoli barche, carrelli da miniera, ecc.
    Tessere dinamiche TNT innescato, caduta di sabbia/ghiaia/cemento polvere/incudini
    Altre entità razzi pirotecnici, dipinti e cornici di oggetti

    Conversione in SNBT

    Formato NBT Questa funzione è esclusiva di Java Edition. 

    Un oggetto NBT programmatico verrebbe convertito in un SNBT quando si tenta di ottenerlo con / data get ecc.

    Dopo la conversione, un numero è sempre seguito da una lettera (minuscola per b, s, f, d e maiuscola per L) tranne Intero. Ad esempio, 3s per uno short, 3.2f per un float, ecc.

    E una stringa è sempre racchiusa tra virgolette doppie o singole.

    Altri tipi di dati sono espressi come #Format di ogni tabella dei tipi sopra.

    Conversione da SNBT

    Formato NBT Questa funzione è esclusiva di Java Edition. 

    Un SNBT verrà convertito in un oggetto NBT programmatico quando viene analizzato dal gioco.

    Un numero seguito da una lettera (B, S, L, F, D o le loro minuscole) viene risolto nel tipo di dati corrispondente. Ad esempio, 3s per un breve, 3.2f per un float, ecc. La lettera può essere maiuscola o minuscola. Quando non viene utilizzata alcuna lettera, assume double se c'è un punto decimale, int se non c'è un punto decimale e la dimensione si adatta a 32 bit, o stringa se nessuno dei due è vero.

    Si presume che un letterale tra parentesi quadre sia un elenco a meno che non venga utilizzato un identificatore: [I;1,2,3] per un array int e [L;1L,2L,3L] per un array lungo.

    vero e falso vengono convertiti rispettivamente come 1b e 0b.

    Modifica entità/blocco in base all'oggetto NBT

    Formato NBT Questa funzione è esclusiva di Java Edition. 

    Modificare entità/blocco in base a un oggetto NBT programmatico non è un semplice progresso. Tutti i tag devono essere risolti prima di modificare le proprietà di un blocco/entità. Tieni presente che solo alcune proprietà possono essere modificate. Ad esempio, quando si utilizza il comando /data per modificare un'entità di blocco, le sue coordinate non possono essere modificate.

    Se una proprietà richiede un valore di ubicazione della risorsa e ottiene un tag di stringa, la stringa verrà convertita in un'ubicazione di risorsa.

    Se una proprietà richiede un valore di testo JSON e ottiene un tag di stringa, la stringa verrà analizzata nell'oggetto di testo JSON.

    Se una proprietà necessita di un valore numerico di un certo tipo e ottiene un tag numerico di tipo errato, il numero otterrà un'operazione di arrotondamento e verrà convertito nel tipo richiesto.

    Se una proprietà necessita di un valore numerico e ottiene un tag non numerico, il numero diventerà 0.

    Se una proprietà necessita di un valore stringa e ottiene un tag non stringa, la stringa diventerà una stringa vuota.

    Se una proprietà necessita di un elenco o di un array di un certo tipo e ottiene un tag di tipo errato, verrà ottenuto un elenco/array vuoto.

    Se una proprietà necessita di un tag composto e ottiene un tag non composto, verrà ottenuto un tag composto vuoto.

    Test dei tag NBT

    Formato NBT Questa funzione è esclusiva di Java Edition. 

    Quando comandi come /clear, /execute se i dati vengono utilizzati per abbinare i tag di dati, o l'argomento nbt nel selettore di destinazione tenta di mirare all'entità, il gioco converte SNBT in oggetto NBT programmatico e ottiene l'oggetto NBT programmatico da blocco/entità/archiviazione, quindi confronta i due oggetti NBT.

    Controllano solo la presenza dei tag forniti nell'entità/blocco/memoria di destinazione. Ciò significa che l'entità/blocco/memoria può avere tag aggiuntivi e continuare a corrispondere. Questo vale anche per le liste: l'ordine e il numero di elementi in una lista una lista non è considerata, e finché ogni elemento richiesto è nella lista, corrisponde anche se ci sono elementi aggiuntivi. Ad esempio, un'entità con dati {Pos:[1d,2d,3d],Tags:["a","b"]} può essere presa di mira da @e[nbt={Pos:[3d,2d,1d]} ] o anche solo @e[nbt={Pos:[2d]}] anche se la prima rappresenta una posizione totalmente diversa e la seconda non è affatto una posizione valida. Nota che @e[nbt={Tags:}] non può corrispondere ad esso, perché un elenco vuoto può corrispondere solo a un elenco vuoto.

    Tuttavia, l'ordine e il numero di elementi in un array byte/long/int is riconosciuto.

    I tag di dati richiesti nell'entità/blocco/memoria di destinazione devono corrispondere esattamente affinché i tag forniti possano passare, incluso il tipo di dati (ad esempio 1, un int, non corrisponderà a 1d, un doppio). Anche gli spazi dei nomi non possono essere omessi perché nell'oggetto NBT è solo una stringa semplice che non verrà risolta in una posizione di risorsa (ad esempio @e[nbt={Item:{id:"stone"}}] non corrisponderà a una pietra entità oggetto, deve essere @e[nbt={Item:{id:"minecraft:stone"}}]). Lo stesso vale per la stringa di testo JSON, che deve essere esattamente la stessa per corrispondere al tag fornito (ad es. @e[nbt={CustomName:'"a"'}] non corrisponderà ad alcuna entità, deve essere @e[ nbt={CustomName:"{"text":"a"}"}] o @e[nbt={CustomName:'{"text":"a"}'}]).

    File NBT

    Un file NBT è un tag composto compresso, con il nome e l'ID del tag inclusi. Il file nello zip deve contenere il tag Compound che è come primi byte. Alcuni dei file utilizzati da Minecraft potrebbero non essere compressi, ma nella maggior parte dei casi i file seguono le specifiche originali di Notch e sono compressi con GZip.

    Definizione di TAG

    Un tag è una singola parte dell'albero dei dati. Il primo byte in un tag è il tipo di tag (ID), seguito da un numero intero senza segno big-endian di due byte per la lunghezza del nome, quindi il nome come stringa in formato UTF-8 (Nota TAG_Fine non è nominato e non contiene i 2 byte aggiuntivi; si presume che il nome sia vuoto). Infine, a seconda del tipo di tag, i byte che seguono fanno parte del payload di quel tag. Questa tabella descrive ciascuno dei 13 tag conosciuti nella versione 19133 del formato NBT:

    ID Icona Tipo di tag Carico utile Descrizione Capacità di memoria
    0 ETICHETTA_Fine - Utilizzato per contrassegnare la fine dei tag composti. Questo tag non ha un nome, quindi è sempre e solo un singolo byte 0. Può anche essere il tipo di tag List vuoti. N/A
    1 ETICHETTA_Byte 1 byte / 8 bit, con segno Un tipo integrale con segno. A volte usato per booleani. Gamma completa da -(27) a (27 - 1)
    (Da -128 a 127)
    2 ETICHETTA_Corti 2 byte / 16 bit, con segno, big endian Un tipo integrale con segno. Gamma completa da -(215) a (215 - 1)
    (Da -32,768 a 32,767)
    3 ETICHETTA_Int 4 byte / 32 bit, con segno, big endian Un tipo integrale con segno. Gamma completa da -(231) a (231 - 1)
    (Da -2,147,483,648 a 2,147,483,647)
    4 ETICHETTA_Lunghi 8 byte / 64 bit, con segno, big endian Un tipo integrale con segno. Gamma completa da -(263) a (263 - 1)
    (Da -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807)
    5 ETICHETTA_galleggiante 4 byte / 32 bit, con segno, big endian, IEEE 754-2008, binary32 Un tipo a virgola mobile con segno. La precisione varia lungo la linea dei numeri;
    Vedere Formato a virgola mobile a precisione singola. Valore massimo circa 3.4*1038
    6 ETICHETTA_Doppio 8 byte / 64 bit, con segno, big endian, IEEE 754-2008, binary64 Un tipo a virgola mobile con segno. La precisione varia lungo la linea dei numeri;
    Vedere Formato a virgola mobile a precisione doppia. Valore massimo circa 1.8*10308
    7 ETICHETTA_Byte_Italia La dimensione del payload di TAG_Int, quindi la dimensione del payload di TAG_Byte. Un array di byte. Il numero massimo di elementi varia tra (231 - 9) e (231 - 1) (2,147,483,639 e 2,147,483,647), a seconda della JVM specifica.
    8 ETICHETTA_Corda Una lunghezza del payload simile a TAG_Short, ma senza segno[1], quindi una stringa UTF-8 simile a byte di lunghezza. Una stringa UTF-8. Ha una dimensione, invece di essere null terminato. 65,535 byte interpretabili come UTF-8 (vedi formato UTF-8 modificato; i caratteri più comunemente usati sono un singolo byte).
    9 ETICHETTA_Lista Il tagId del payload di TAG_Byte, quindi la dimensione del payload di TAG_Int, quindi i payload dei tag di dimensione, tutti di tipo tagId. Un elenco di payload di tag, senza ID tag ripetuti o nomi di tag. A causa delle limitazioni della JVM e dell'implementazione di ArrayList, il numero massimo di elementi dell'elenco è (231 - 9) o 2,147,483,639. Si noti inoltre che i tag List e Compound non possono essere nidificati oltre una profondità di 512.
    10 ETICHETTA_Compound Tag completamente formati, seguiti da TAG_End. Un elenco di tag completamente formati, inclusi i relativi ID, nomi e payload. Non ci possono essere due tag con lo stesso nome. A differenza delle liste, non c'è un limite rigido al numero di tag all'interno di un Compound (ovviamente c'è sempre il limite implicito della memoria virtuale). Si noti, tuttavia, che i tag Composto e Elenco non possono essere nidificati oltre una profondità di 512.
    11 ETICHETTA_Int_Italia La dimensione del payload di TAG_Int, quindi la dimensione del payload di TAG_Int. Un array di payload di TAG_Int. Il numero massimo di elementi varia tra (231 - 9) e (231 - 1) (2,147,483,639 e 2,147,483,647), a seconda della JVM specifica.
    12 ETICHETTA_Lunghi_Italia La dimensione del payload di TAG_Int, quindi la dimensione del payload di TAG_Long. Una serie di payload di TAG_Long. Il numero massimo di elementi varia tra (231 - 9) e (231 - 1) (2,147,483,639 e 2,147,483,647), a seconda della JVM specifica.

    I tag List e Compound possono essere e spesso sono annidati in modo ricorsivo. Va inoltre notato che, in una lista di liste, ciascuna delle sottoliste può elencare un diverso tipo di tag.

    Impiego

    Minecraft a volte utilizza il formato NBT in modo incoerente; in alcuni casi, gli elenchi vuoti possono essere rappresentati come un elenco di tag Byte piuttosto che un elenco del tipo corretto o come un elenco di tag End nelle versioni più recenti di Minecraft, che possono danneggiare alcuni strumenti NBT precedenti. Inoltre, quasi ogni tag radice ha una stringa del nome vuota e incapsula solo un tag composto con i dati effettivi e un nome. Ad esempio:

    • Il tag radice per la maggior parte delle strutture NBT di Minecraft.
      •  SomeName: l'unico tag contenuto nel tag radice: ha un nome e contiene tutti i dati effettivi.

    Inoltre, c'è anche un uso incoerente delle lettere maiuscole, per lo più camelCase o PascalCase, ma a volte anche tutte minuscole.

    si utilizza

    In questa sezione mancano informazioni sugli NBT Bedrock Edition.  Espandi la sezione per includere queste informazioni. Ulteriori dettagli possono esistere nella pagina di discussione.
    • level.dat è memorizzato in formato NBT compresso.
    • I file .dat sono archiviati in formato NBT compresso.
    • idcounts.dat è memorizzato in formato NBT compresso.
    • village.dat è memorizzato in formato NBT compresso.
    • raids.dat è memorizzato in formato NBT compresso.
    • I file map_<#>.dat sono archiviati in formato NBT compresso.
    • server.dat, che viene utilizzato per memorizzare l'elenco dei server multiplayer salvati come NBT non compresso.
    • hotbar.nbt, che viene utilizzato per salvare le hotbar come formato NBT non compresso.
    • I blocchi vengono archiviati in formato NBT compresso all'interno dei file Region.
    • scoreboard.dat è memorizzato in formato NBT compresso.
    • Le strutture generate vengono archiviate in formato NBT compresso.
    • Le strutture salvate vengono archiviate in formato NBT compresso.

    Software ufficiale

    : Tutorial/Esecuzione del generatore di dati

    Mojang ha fornito classi Java NBT di esempio che gli sviluppatori possono utilizzare e fare riferimento come parte del codice sorgente per il convertitore di formati file da MCRegion a Anvil.[2] Dalla Java Edition 1.13, Minecraft include un convertitore integrato tra il formato SNBT e il formato NBT compresso, fornito sia con il client che con il server ufficiale.[3]

    Il generatore di dati di Minecraft è in grado di convertire file NBT Stringified non compressi con estensione .snbt in una cartella di input in file in formato NBT compresso GZip con estensione .nbt in una cartella di output e viceversa.

    Il generatore di dati vanilla può convertire qualsiasi formato NBT compresso GZip in formato SNBT. L'estensione del file di un file può essere semplicemente modificata, come level.dat in level.nbt e messa nella cartella di input, e il generatore quindi decodifica i dati NBT compressi GZip.

    Profilo Aziendale

    Il formato del file NBT è stato descritto da Notch in una breve specifica.[4]

    La versione originale conosciuta era 19132 come introdotta nella Beta 1.3, e da allora è stata aggiornata a 19133 con il formato di file Anvil, che aggiunge il tag Int Array. Il formato NBT risale a Indev con i tag da 0 a 10 in uso.

    Edizione Java
    1.0.028 settembre 2011Notch funziona sul "salvataggio di dati arbitrari con istanze di elementi".
    1.814w03aI dati NBT ora supportano l'utilizzo di ID stringa anziché ID numerici.
    1.12?Aggiunti tag di array lunghi.
    1.1318w01aAggiunto un generatore di dati sia al client Minecraft che al software multiplayer predefinito.
    1.1419w08a I tag stringa in SNBT ora possono essere racchiusi tra virgolette singole "oltre alle virgolette doppie".[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://pagina web.vg/Data_Generators#NBT_converters
    4. ↑ http://web.archive.org/web/20110723210920/http://www.minecraft.net/docs/NBT.txt specifica
    5. ↑ "Consenti virgolette singole nelle stringhe di boq · Pull Request #52" – Mojang/brigadiere – GitHub.

    Collegamenti esterni

    • nbt, una libreria Java per lavorare con il formato NBT.
    • NBT sulla pagina web.vg
    • NBTExplorer, uno strumento per visualizzare e modificare i file NBT.
    • NBT Studio, successore di NBTExplorer che include funzionalità aggiuntive come il supporto Bedrock e SNBT.
    • webNBT, uno strumento online per visualizzare e modificare i file NBT.
    Formato NBT Edizione Java
    versioni
    • Dimo
      • Sedi
    • Demo del giocatore per PC (Beta 1.3)
    Sviluppo
    Cronologia delle versioni
    • Pre-Classico
    • Classico
      • Primo Classico Creativo
      • Test multigiocatore
      • Formato NBT Prova di sopravvivenza
      • Tardo Classico Creativo
    • Indev
    • Formato NBT Infdev
    • Alpha
    • beta
    • Pieno di uscita
    • Versioni di sviluppo
    • Funzionalità rimosse
      • Blocchi
      • articoli
    • Funzionalità inutilizzate
    • Funzionalità esclusive
    • Caratteristiche menzionate
      • Dimensione del cielo
    • Versioni pianificate
    Tecnici
    • Bugs noti
      • Lanciatore di Minecraft
    • Requisiti hardware
    • al_version
    • Blocca entità
    • Comandi
      • funzioni
    • Crashes
    • Valori dei dati
      • Classico
      • Indev
      • Pre-appiattimento
    • Versione dati
    • Schermata di debug
    • Codici di formattazione
    • Codici chiave
    • Lanciatore di Minecraft
    • Versione del protocollo
    • Posizione delle risorse
    • Immagine dello schermo
    • Seme
    • Statistiche
    • Spuntare
    • Spawn pezzo
    • Coordinate
    .Minecraft
    • cliente.jar
    • client.json
    • launcher_profiles.json
    • opzioni.txt
    Risorse di sviluppo
    • Formato file incudine
    • Formato Chunk
    • Formato di memorizzazione dei comandi
    • Formato strutture generate
    • Formato livello
    • Tabelle del bottino
    • Formato elemento mappa
    • Modello
    • Formato NBT
    • Mappa di offuscamento
    • Formato del lettore
    • formato raids.dat
    • Formato di testo JSON grezzo
    • Formato file regionale
    • Formato file blocco struttura
      • Formato file schematico
    • Formato del tabellone segnapunti
    • Formato elenco server
    • suoni.json
    • Sottotitoli
    • formato villaggi.dat
    Risorse di sviluppo legacy
    • Formato di livello classico
    • Protocollo server classico
    • Formato a livello di sviluppo
    • Formato livello alfa
    • server_level.dat
    Multigiocatore
    • server
    • Minecraft Realms
    • Elenco dei server
    • server.proprietà
    • requisiti del server
    Personalizzazione del gioco
    • Skins
    • Capes
    • Pacchetti di risorse
    • Pacchetti di dati
    Aggiungi un commento di Formato NBT
    Commento inviato con successo! Lo esamineremo nelle prossime ore.