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: End of Week.

Spielstand-Speicherung/Region Format

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche
Dieser Artikel oder Abschnitt enthält Informationen über Funktionen, die entweder veraltet sind oder aus dem Spiel entfernt wurden.
Sie existieren daher nur in älteren Versionen von Minecraft.

Das vierte Datenformat zur Spielstand-Speicherung ist das Region Format. Seine wesentliche Neuerung war die Zusammenfassung der bisher einzeln existierenden Chunkdateien zu größeren Regiondateien.

Das Region Format wurde in Beta 1.3 eingeführt. Erstmalig wurden Gruppen von 32×32 Chunks in einer gemeinsamen Datei gepeichert. Das System basiert auf der McRegion-Mod von Ryan Hitchman (aka Scaevolus)[1], der diese Minecraft-Modifikation entwickelt hatte, weil das ständige Aktualisieren der Chunkdateien unschöne Verzögerungen im Spielfluss verursachte. Mojang hat verschiedene Alternativen zur Speicherung getestet und sich dann für das das McRegion-Format entschieden. Notch übernahm es nahezu unverändert und fügte nur noch eine Tabelle mit den Zeitstempeln der Chunk-Updates hinzu. Das neue Format erzeugte 500 bis 1000 mal weniger Dateien und war bis zu sieben mal schneller bei der Speicherung[2][3]. Als mit Vollversion 1.2 (12w07a) die Bauhöhe von 128 auf 256 Blöcke erhöht wurde, wurde das Region Format durch ein neues Format ersetzt.

Entwicklung: Alpha Level Format Pfeil34.png Region Format Pfeil34.png Anvil Format

Regiondateien[Bearbeiten | Quelltext bearbeiten]

Die im bisherigen Alpha Level Format verwendeten maximal 64×64 Verzeichnisse zur Speicherung der Chunkdateien werden durch ein einziges Verzeichnis namens region ersetzt, in dem alle Regiondateien ihren Platz finden. Eine Regiondatei fasst maximal 32×32 = 1024 Chunks zusammen, es können aber auch weniger sein, je nachdem wie weit die Welt in dieser Region erforscht ist.

Berechnung des Regiondateinamens[Bearbeiten | Quelltext bearbeiten]

Eine Regiondatei hat die Endung .mcr (für Minecraft Region) und enthält in ihrem Dateinamen den X- und Z-Index der Region. Das Zentrum der Welt ist der Block mit der Koordinate 0/0. Er liegt in der nordwestlichen Ecke des Chunks 0/0, welcher wiederum in der nordwestlichen Ecke der Region 0/0 liegt (Datei "r.0.0.mcr"). Um den Regiondateinamen zu einer beliebigen Koordinate zu ermitteln, ist jeweils getrennt für X und Z wie folgt zu rechnen:

(positive Koordinate / 512) ohne Nachkommastellen
((negative Koordinate + 1) / 512 ) ohne Nachkommastellen - 1
Der Dateiname hat ein "r." als Präfix

Beispiel:

  • Koordinate X = 2083, Z = -177
    • X-Regionindex = (2083 / 512) ohne Nachkommastellen = 4
    • Z-Regionindex = ((-177 + 1) / 512) ohne Nachkommastellen - 1 = -1

Der Dateiname lautet: "r.4.-1.mcr"

Berechnung des Chunkindex[Bearbeiten | Quelltext bearbeiten]

Jeder Chunk hat innerhalb der Region einen stets positiven X- und Z-Index zwischen 0 und 31, der so berechnet wird:

(Koordinate - Regionindex×512) / 16 ohne Nachkommastellen

Beispiel:

  • Koordinate X = 2083, Z = -177
    • X-Chunkindex = (2083 - 4×512) / 16 ohne Nachkommastellen = 2
    • Z-Chunkindex = (-177 - (-1)×512) / 16 ohne Nachkommastellen = 20

Der Chunkindex innerhalb der Region ist [2,20].

Interner Aufbau[Bearbeiten | Quelltext bearbeiten]

Die Kenntnis des internen Aufbaus einer Regiondatei wird benötigt, wenn man ein Tool zur Anzeige von Regiondateien programmieren möchte[4][5].

Bytebereich Beschreibung
0 - 4095 Die ersten 4 Kilobyte der Regiondatei enthalten für jeden der 32×32 = 1024 Chunks in XZ-Sortierung eine vier Byte große Information, wo die jeweiligen Chunkdaten beginnen. Ist ein Chunk nicht in der Regiondatei vorhanden (z. B. weil er noch nicht generiert wurde), sind alle vier Bytes Null.
Aufteilung Inhalt
1 - 3 Die ersten drei Bytes (Big-Endian) dieser Information sind ein Offset in 4 Kilobyte-Sektoren ausgehend vom Anfang der Regiondatei. Ein Chunk mit dem Offset 2 beginnt also unmittelbar hinter der Zeitstempel-Tabelle.
4 Das vierte Byte (0 bis 256) ist die aufgerundete Größe des Chunks in 4 Kilobyte-Sektoren. Die komprimierte Datenmenge für einen Chunk mit seinen Block- und Objektdaten darf also nicht größer als ein Megabyte sein (= 256 4 Kilobyte-Sektoren).
4096 - 8191 Die zweiten 4 Kilobyte enthalten für jeden der 32×32 = 1024 Chunks einen vier Byte (Big-Endian) großen Zeitstempel in Millisekunden seit dem 1.1.1970, wann die jeweiligen Chunkdaten zuletzt geändert wurden.
ab 8192 Jeder Chunk beginnt mit einer Größeninformation, gefolgt von den komprimierten eigentlichen Chunkdaten.
Aufteilung Inhalt
1 - 4 Die ersten vier Bytes (Big-Endian) bezeichnen die Länge der Chunkdaten in Bytes.
5 Das fünfte Byte beschreibt das Kompressionsverfahren der Chunkdaten: 1 = gzip, 2 = zlib. Gzip wurde für das Alpha Level Format verwendet, wird aber im Region Format nicht mehr benutzt. Dort werden die Chunkdaten immer mit zlib komprimiert.
ab 6 Die folgenden (Länge-1) Bytes sind die komprimierten Chunkdaten im NBT-Format, d.h. jeweils mit Name und Wert.

Konvertierung[Bearbeiten | Quelltext bearbeiten]

Minecraft bei der Konvertierung in das Region-Format.

Die Datei level.dat mit den Weltdaten, die Sperrdatei session.lock und der Unterordner DIM-1 für die Netherdaten bleiben unverändert. Geändert wird nur die Speicherung der Chunkdaten für Oberwelt und Nether. Als mit Vollversion 1.0 das Ende als weitere Dimension hinzukam, wurde der Unterordner DIM1 hinzugefügt, der die Ende-Chunkdaten enthielt.

Die Konvertierung der Chunkdaten vom Alpha Level Format zum Region Format wird von Minecraft Beta 1.3 automatisch vorgenommen. Dies geschieht einmalig beim Laden der Welt für alle bisher existierenden Chunks dieser Welt. Nach der Konvertierung werden in den Weltdaten die neuen Eigenschaften version mit dem Wert 19132 und LevelName mit leerem Wert hinzugefügt, wodurch die Welt zukünftig als konvertiert erkannt wird.

Falls man statt der automatischen Konvertierung durch das Minecraft-Programm lieber ein eigenes Konvertierungsprogramm schreiben möchte, hat Mojang dazu einige Programmiertipps gegeben[2]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

Geschichte[Bearbeiten | Quelltext bearbeiten]