Named Binary Tag ist ein Format, das von Minecraft in den verschiedenen Dateien zum Speichern der Welten verwendet wird. Es wurde von Notch entwickelt, um Eigenschaften in einer Baumstruktur abzulegen. Die Bezeichnung Named Binary Tag beschreibt die Tatsache, dass die Dateien keine lesbaren Texte enthalten, sondern binär (binary) gespeichert sind und dass die Eigenschaften (tags) jeweils einen bestimmten Namen haben (named).
Alle Eigenschaften sind von einem bestimmten Datentyp, der im Wiki als Icon dargestellt wird. Wenn man mit der Maus über das Icon fährt, sieht man zusätzlich einen Text. Beispiel:
- Eine unsortierte Liste (Compound)
- ID Die ID als String
- Pos Die XYZ-Koordinaten als sortierte Liste von Integer-Zahlen
- Die X-Koordinate als Integer-Zahl
- Die Y-Koordinate als Integer-Zahl
- Die Z-Koordinate als Integer-Zahl
- visible Die Sichtbarkeit als Byte mit 1 = true und 0 = false
Vom NBT-Format existieren mittlerweile mehrere Versionen:
- Das NBT-Format wurde erstmalig in Minecraft Indev mit den Datentyp-IDs 0 bis 10 benutzt (siehe Indev Level Format).
- Version 19132: die erste bekannte Versionsnummer für das NBT-Format. Sie wurde in Minecraft Beta 1.3 verwendet.
- Version 19133: Erweiterung des NBT-Formates um das Int-Array für das Anvil Format.
- Bei der Erweiterung des NBT-Formates um das Long-Array in Vollversion 1.13 blieb die Versionsnummer unverändert.
Da das Datenformat Binary ist, können die Dateien nicht mit einem Texteditor gelesen werden. Es gibt aber einige spezielle Programme, mit denen man Dateien im NBT-Format ansehen kann. Einige stellen die Daten graphisch dar, sodass man eine Welt außerhalb von Minecraft sehen und verändern kann (z.B. "MCEdit"), andere stellen die Daten in ihrer Baumstruktur dar (z.B. "NBT-Explorer").
Verwendung in Befehlen[]
Bei einigen Befehlen kann man NBT-Daten als zusätzliche Informationen übergeben. Dies wird Stringified NBT (SNBT) genannt und bedeutet, dass NBT-Daten als Text (String) eingegeben werden. Die dafür verwendete Notation ist hier beschrieben. Beispiele siehe Befehl#NBT-Daten.
Der in Minecraft integrierte Datengenerator wandelt NBT-Dateien in SNBT um, so dass man ihren Inhalt ohne Fremdprogramm sehen kann.
SNBT wird auch vom Befehl /data
angezeigt. Beispiel für die NBT-Daten eines Schafes:
Datentypen[]
In einer gespeicherten Datei hat eine Eigenschaft als erstes Byte eine Datentyp-ID. Dann folgen zwei Bytes, die die Länge des Eigenschaftsnamens angeben, gefolgt von dem Eigenschaftsnamen als UTF-8-String. Der Name kann Leerzeichen enthalten, obwohl Minecraft nie Eigenschaften mit Leerzeichen im Namen speichert. Schließlich - abhängig vom Datentyp - folgen die Nutzdaten der Eigenschaft.
Diese Tabelle beschreibt die 13 bekannten Datentypen des NBT-Formates in der Version 19133. Bei der Eingabe von Zahlen in Befehlen mit SNBT ist es manchmal (aber nicht immer) notwendig, den Datentyp mit einem Buchstaben zu markieren. Auch bei Arrays ist das notwendig.
Datentyp-ID | Icon | Datentyp | Zahl-Markierung | Nutzdaten | Beschreibung |
---|---|---|---|---|---|
0 | End | Keine | Markiert das Ende einer Compound-Eigenschaft. Dieser Datentyp hat keinen Namen, damit reduziert er sich auf eine einzelne 0. | ||
1 | Byte | b | 1 Byte (= 8 Bit) | Vorzeichenbehaftete Ganzzahl. Manchmal für Booleans benutzt (0=false, 1=true), siehe auch "String". Wertebereich: -128 bis 127. | |
2 | Short | s | 2 Bytes (= 16 Bit) | Vorzeichenbehaftete Ganzzahl im Big-Endian-Format. Wertebereich: -32768 bis 32767. | |
3 | Int | Keine Markierung | 4 Bytes (= 32 Bit) | Vorzeichenbehaftete Ganzzahl im Big-Endian-Format. Wertebereich: -2.147.483.648 bis 2.147.483.647. Beispiele:
| |
4 | Long | l | 8 Bytes (= 64 Bit) | Vorzeichenbehaftete Ganzzahl im Big-Endian-Format. Wertebereich: -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807. | |
5 | Float | f | 4 Bytes (= 32 Bit) | Fließkommazahl im Big-Endian-Format nach der Norm IEEE 754-2008. | |
6 | Double | d | 8 Bytes (= 64 Bit) | Fließkommazahl im Big-Endian-Format nach der Norm IEEE 754-2008. | |
7 | Byte-Array | B; | Zuerst die Arraylänge als Integer-Zahl gefolgt vom Array aus Bytes | Ein Array (indizierte Liste) aus Bytes. | |
8 | String | Zuerst die Stringlänge als Short-Zahl gefolgt von dem String | Ein String im UTF-8 Format ohne weitere Ende-Kennzeichnung (nicht Null-terminiert). Manchmal für Booleans benutzt, indem die Worte false oder true verwendet werden, siehe auch "Byte". | ||
9 | List | Zuerst einmalig die Datentyp-ID der Listenelemente (alle sind immer vom selben Datentyp) als Byte, dann die Anzahl der Listenelemente als Integer-Zahl gefolgt von den Listenelementen ohne Namen | Eine Liste von Eigenschaften, ohne Wiederholung von Datentyp-ID und Eigenschaft-Name. | ||
10 | Compound | Liste von Eigenschaften mit einem abschließenden End-Datentyp | Datenverbund. Ein Verbund kann beliebig viele Eigenschaften (mit Datentyp-ID, Eigenschaft-Name und Nutzdaten) enthalten, darunter auch wiederum Compound-Datentypen, woraus sich die Baumstruktur ergibt. Die Anzahl der Eigenschaften in einem Verbund wird nicht gespeichert, vielmehr wird das Ende des Verbundes am End-Datentyp erkannt. | ||
11 | Int-Array | I; | Zuerst die Arraylänge als Integer-Zahl gefolgt vom Array aus Integer-Zahlen | Ein Array (indizierte Liste) von Integer-Zahlen. | |
12 | Long-Array | L; | Zuerst die Arraylänge als Integer-Zahl gefolgt vom Array aus Long-Zahlen | Ein Array (indizierte Liste) von Long-Zahlen. |
Array-Sortierung[]
Oft enthält ein Array die Werte einer Fläche oder eines Raumes der Minecraft-Welt. Die Angabe zur Sortierung der Array-Daten ist entscheidend, um die korrekte Position eines Blockes im Array zu finden. Bei Flächen ist die Sortierung meistens XZ. Das bedeutet, dass erst alle X-Werte für Z=0 aufgeführt sind, gefolgt von allen X-Werten für Z=1 etc. Beispiel: die Position X=4 / Z=7 befindet sich in einem 16×16-XZ-Array an Position 7×16+4 = 116.
Die seltenere ZX-Sortierung bedeutet, dass erst alle Z-Werte für X=0 aufgeführt sind, gefolgt von allen Z-Werten für X=1 etc. Beispiel: die Position X=4 / Z=7 befindet sich in einem 16×16-ZX-Array an Position 4×16+7 = 71.
Chunk-Sektionen werden in einem Array in XZY-Sortierung abgelegt. Das bedeutet, dass erst alle XZ-Flächen für Y=0 aufgeführt sind, gefolgt von allen XZ-Flächen für Y=1 etc. Beispiel: die Position X=4 / Y=5 / Z=7 befindet sich in einem 16×16×16-XZY-Array an Position 5×256+7×16+4 = 1396.
Dateiformat[]
Eine NBT-Datei ist eine per GZip komprimierte Compound-Eigenschaft inklusive Name und Datentyp-ID. Manche der von Minecraft benutzten Dateien sind unkomprimiert. In den meisten Fällen folgen die Dateien jedoch der Original-Spezifikation von Notch und sind mit GZip komprimiert. Bei Verwendung von zlib muss die Kompressionsstufe Z_BEST_SPEED
verwendet werden. Es gibt keinen Header der die Version angibt, nur in den Weltdaten steht eine Versionsangabe.
Die Benutzung des NBT-Formats von Minecraft ist manchmal merkwürdig. In manchen Fällen werden leere Listen als leere Liste von Bytes anstellen einer leeren Liste des korrekten Datentyps dargestellt. Zusätzlich hat fast jede Haupt-Eigenschaft einen leeren Namen und beinhaltet nur eine Compound-Eigenschaft mit dem tatsächlichen Namen und den Daten. Zum Beispiel:
- Die namenlose Haupt-Eigenschaft in den meisten Minecraft NBT-Strukturen
- Name: Die einzige Eigenschaft innerhalb der Haupt-Eigenschaft. Diese hat einen Namen und hält alle Daten.
Eine andere Merkwürdigkeit ist, dass obwohl die originale Spezifikation Leerzeichen in Eigenschaftsnamen erlaubt, in Minecraft keine Datei bekannt ist, die Leerzeichen in den Eigenschaftsnamen enthält. Auch ist die Groß-/Kleinschreibung inkonsistent. Meistens werden einzelne Worte in den Eigenschaftsnamen durch einen Großbuchstaben markiert, wobei der Eigenschaftsname manchmal mit einem Kleinbuchstaben beginnt, manchmal mit einem Großbuchstaben. Manchmal wird der Eigenschaftsname aber auch komplett in Kleinbuchstaben geschrieben. Beispiele: "BlockLight", "carriedData", "mayfly".
Bei der Eingabe von Zahlen in Befehlen mit SNBT ist es meist nicht notwendig, den Datentyp mit einem Buchstaben zu markieren. Manchmal funktioniert der Befehl aber ohne Buchstabe nicht, sondern nur, wenn der korrekte Buchstabe hinzugefügt wird.
Dateien[]
- EndCity.dat enthält die Daten aller Endsiedlungen einer Welt.
- Fortress.dat enthält die Daten aller Netherfestungen einer Welt.
- hotbar.nbt enthält die gespeicherten Schnellzugriffsleisten.
- idcounts.dat enthält die ID des zuletzt hergestellten Karten-Gegenstands.
- Konstruktionsvorlage.nbt enthält Blockbereiche, die mit dem Konstruktionsblock gespeichert wurden.
- level.dat enthält die Daten einer Welt.
- map_ID.dat enthält die Daten eines Karten-Gegenstände.
- Mineshaft.dat enthält die Daten aller Minen einer Welt.
- Monument.dat enthält die Daten aller Ozeanmonumente einer Welt.
- r.RegionX.RegionZ.mca enthält die Chunks einer Region der Welt.
- scoreboard.dat enthält die Daten der Anzeigetafel einer Welt.
- servers.dat enthält die IP-Adressen der Server, die im Mehrspielermodus zur Auswahl stehen.
- Spieler.dat enthält die Daten eines Spielers.
- Stronghold.dat enthält die Daten aller Festungen einer Welt.
- Temple.dat enthält die Daten aller Dschungeltempel, Wüstentempel und Sumpfhütten einer Welt.
- Village.dat enthält die Bauwerke aller Dörfer einer Welt.
- villages.dat, villages_nether.dat, villages_end.dat enthält die Informationen über alle Dörfer einer Welt.
Beispiel[]
Hier wird kurz anhand eines Beispiels gezeigt, wie man die NBT-Daten aus den Wiki-Artikeln, die alle Informationen zu den Daten besitzen, ausliest und überträgt:
Das Ziel ist es, einen gezähmten und gesattelten Esel, der eine Truhe trägt, mit dem Befehl /summon
zu erschaffen. In der Truhe soll sich ein Stein befinden. Zuerst muss unter Kreaturdaten der Esel gefunden werden, dann sucht man sich alle NBT-Daten, die man für die Ziel-Vorgaben benötigt:
- Esel hat die Objekt-ID "donkey"
- ChestedHorse: true oder false - true wenn die Kreatur Truhen trägt.
- Items: Nur für Esel, Maultiere und Lamas und nur wenn ChestedHorse true ist: Liste der Gegenstandsdaten, die die Kreatur trägt mit Slot. Die Slots haben die Nummern 2 bis 16.
- Ein Gegenstand in der Satteltasche der Kreatur.
- SaddleItem: Optional und nur für Pferde, Esel und Maultiere. Die Gegenstandsdaten des Sattels, den die Kreatur trägt, ohne Slot.
- Tame: true oder false - true wenn die Kreatur gezähmt ist.
Die Objekt-ID des Esels lautet "donkey", diese wird für den Befehl /summon
verwendet. Jetzt werden die NBT-Daten in Form von SNBT eingetragen: Alle Daten, die auf gleicher Ebene liegen, können jetzt direkt als Angaben eingebunden werden. Stehen Angaben in zweiter Ebene, wie bei "Items:", muss herausgefunden werden, welche Klammer hier verwendet wird. Bei "compound" sind das geschwungene Klammern {}
, bei "list" eckige []
. Dort trägt man dann alle Werte ein.
/summon minecraft:donkey ~ ~ ~ { ChestedHorse:true, Items: [ { Slot:2b, id:"minecraft:stone", Count:1b } ], SaddleItem:{ id:"minecraft:saddle", Count:1b }, Tame:true }
Eine ausführliche Anleitung zur Verwendung von NBT-Daten in Befehlen steht im Artikel Befehl#NBT-Daten. Weitere Beispiele mit NBT-Daten siehe: Anleitungen/Befehle mit NBT |
Geschichte[]
Versionsgeschichte der Java Edition | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Einzelnachweise[]
- ↑ http://notch.tumblr.com/post/232767907/code-split-going-good-so-far
- ↑ http://notch.tumblr.com/post/341845705/tigjam-uk-2-is-over-cant-wait-until-the-next-one
- ↑ http://notch.tumblr.com/post/295879830/oh-ok-here-play-with-the-latest-version
- ↑ http://notch.tumblr.com/post/346401360/the-level-file-format-has-been-specified
Standard-Ressourcen |
| ||||
---|---|---|---|---|---|
Standard-Weltdaten |
| ||||
Spielwelt | |||||
Software | |||||
Speicherformate | |||||
Einstellungen | |||||
Mehrspieler | |||||
Historisch |