Das offizielle Minecraft Wiki twittert hier: Wiki-Twitter   Noch keinen Server gefunden? Es gibt einen Wiki-Server

We have begun migration of most wikis to our new host, Amazon Web Services. All but the top 100 wikis are in read-only mode until the migration is complete. Estimated completion: TBD -- Update: Fri 10/20 11pm UTC - We have encountered some unexpected issues. Our staff is working around the clock to complete this process as quickly as possible. Thank you for your patience.

NBT-Format

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche

Das Named Binary Tag-Format wird von Minecraft in den verschiedenen Dateien zum Speichern der Welten verwendet. 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.

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[Bearbeiten | Quelltext bearbeiten]

Bei einigen Befehlen kann man NBT-Daten als zusätzliche Informationen übergeben. Die dafür verwendete Notation ist JSON. Beispiele siehe Befehl#NBT-Daten.

Datentypen[Bearbeiten | Quelltext bearbeiten]

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 12 bekannten Datentypen des NBT-Formates in der Version 19133. Bei der Eingabe von Zahlen in Befehlen mit NBT-Daten ist es manchmal (aber nicht immer) notwendig, den Datentyp mit einem Buchstaben zu markieren.

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 Bits) Vorzeichenbehaftete Ganzzahl.
Manchmal für Booleans benutzt (0=false, 1=true), siehe auch "String".
Wertebereich: -128 bis 127.
2
Short s 2 Bytes (= 16 Bits) Vorzeichenbehaftete Ganzzahl im Big-Endian-Format.
Wertebereich: -32768 bis 32767.
3
Int Keine Markierung 4 Bytes (= 32 Bits) Vorzeichenbehaftete Ganzzahl im Big-Endian-Format.
Wertebereich: -2.147.483.648 bis 2.147.483.647. Beispiele:
  • C2 1A 00 00 = 194×2560+26×2561+0×2562+0×2563 = 6850
  • 0E FB FF FF = 00 00 00 00 - F1 04 00 00 =
    - (241×2560+4×2561+0×2562+0×2563) = -1265
4
Long l 8 Bytes (= 64 Bits) 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 Bits) Fließkommazahl im Big-Endian-Format nach der Norm IEEE 754-2008.
6
Double d 8 Bytes (= 64 Bits) Fließkommazahl im Big-Endian-Format nach der Norm IEEE 754-2008.
7
Byte-Array 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 oder Objekt. Ein Objekt 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 Objekt wird nicht gespeichert, vielmehr wird das Ende des Objektes am End-Datentyp erkannt.
11
Int-Array Zuerst die Arraylänge als Integer-Zahl gefolgt vom Array aus Integer-Zahlen Ein Array (indizierte Liste) von Integer-Zahlen.

Array-Sortierung[Bearbeiten | Quelltext bearbeiten]

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 4×16+7 = 71.

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 7×16+4 = 116.

Chunk-Sektionen werden in einem Array in YZX-Sortierung abgelegt. Das bedeutet, dass erst alle ZX-Flächen für Y=0 aufgeführt sind, gefolgt von allen ZX-Flächen für Y=1 etc. Beispiel: die Position X=4 / Y=5 / Z=7 befindet sich in einem 16×16×16-YZX-Array an Position 5×256+7×16+4 = 1396.

Dateiformat[Bearbeiten | Quelltext bearbeiten]

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ätztlich 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

    • EinName
      : 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 NBT-Daten 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[Bearbeiten | Quelltext bearbeiten]

Beispiel[Bearbeiten | Quelltext bearbeiten]

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 eingetragen: Alle Daten, die auf gleicher Höhe liegen, können jetzt direkt als Angaben eingebunden werden. Stehen Angaben an zweiter Stelle wie bei "Items:", muss nun 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:stone, Count:1 }
   ],
   SaddleItem:{ id:saddle, Count:1 },
   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[Bearbeiten | Quelltext bearbeiten]

Im November 2009 kündigte Notch eine neue Entwicklungsphase für das Spiel an, die auch ein neues Speicherformat beinhalten würde[1]. Ende Januar 2010 war es soweit: Notch hatte verschiedene Formate getestet, aber weil sie entweder zu komplex waren oder Notchs Anforderungen nicht erfüllten, hatte er ein eigenes Named Binary Tag-Format entwickelt[2], das er am 21. Januar 2010 in dieser Spezifikation kurz beschrieb. Am 22. Januar 2010 wurde es erstmals im Spiel eingesetzt.

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]