Minecraft Wiki
(Übersetzung Teil 2. fertig)
Zeile 5: Zeile 5:
 
== Region-Dateien ==
 
== Region-Dateien ==
   
=== Region-Date-Zuordnung ===
+
=== Region-Datei-Zuordnung ===
   
 
Region-Dateien werden in einem Unterverzeichnis der Welt Namens "region" gespeichert, die Dateinamen lauten <tt>r.''x''.''z''.mcr</tt>, mit x und z als Region-Koordinaten. Die Koordinaten einer Region für einen spezifischen Chunk kann durch die Abrundung der Chunk-Koordinaten geteilt durch 32 ermittelt werden:
 
Region-Dateien werden in einem Unterverzeichnis der Welt Namens "region" gespeichert, die Dateinamen lauten <tt>r.''x''.''z''.mcr</tt>, mit x und z als Region-Koordinaten. Die Koordinaten einer Region für einen spezifischen Chunk kann durch die Abrundung der Chunk-Koordinaten geteilt durch 32 ermittelt werden:

Version vom 22. August 2012, 22:26 Uhr

Das Region Format ist ein in Minecraft Beta 1.3 eingeführtes Speicherformat für die Chunks, es werden Gruppen von 32x32 Chunks in einer Datei anstatt individuell gepeichert. Das System basiert auf McRegion,[1], einer Mod von Scaevolus, auch bekannt für die Entwicklung des Optimine-Projekts. Das McRegion-Format wurd nahezu unverändert übernommen, hinzugefügt wurde eine Tabelle mit den Zeitstempeln der Chunk-Updates. JahKob gibt an, dass dieses Format bis zu sieben mal Schneller als das bisherige System ist.[2]

Seit Minecraft 1.2 wurde das Region Format durch das Anvil Format abgelöst, wobei das Anvil Format nur Änderungen am Chunk Format implementiert und die Dateiwerweiterung von ".mcr" auf ".mca" ändert.

Region-Dateien

Region-Datei-Zuordnung

Region-Dateien werden in einem Unterverzeichnis der Welt Namens "region" gespeichert, die Dateinamen lauten r.x.z.mcr, mit x und z als Region-Koordinaten. Die Koordinaten einer Region für einen spezifischen Chunk kann durch die Abrundung der Chunk-Koordinaten geteilt durch 32 ermittelt werden:

In Java:

   int localX = (int)floor(chunkX / 32.0);
   int localZ = (int)floor(chunkZ / 32.0);

Bit-Shift:

   int localX = chunkX >> 5
   int localZ = chunkZ >> 5

Zum Beispiel ein Chunk bei (30, -3) ist in Region (0, -1), ein Chunk bei (70, -30) ist in Region (2, -1).

Struktur

Region-Dateien starten mit einem 8kiB Header über die beinhalteten Chunks, wann diese zuletzt geupdated wurden und wo diese gefunden werden können. Der Zeiger eines Chunks mit Koordinaten (x, z) in der Regon-Datei ist 4 * ((x mod 32) + (z mod 32) * 32). Wenn x oder z negativ sind, muss die absolute Chunk-Adresse von 31 subtrahiert werden nach der Bildung des Modulo. Der Zeitstempel des Chunks ist 4096 bytes weiter in der Datei. Der Rest der Datei ist mit Chunks oder Leerräumen belegt.

Byte 0 - 4095 4096 - 8191 8192...
Beschreibung Zeiger (1024 Einträge) Zeitstempel (1024 Einträge) Chunks und Leerraum

Chunk-Zeiger

Der Zeiger auf einen Chunk besteht aus vier Bytes in zwei Teilen: Die ersten drei Bytes sind ein (Big-Endian) Offset in 4KiB Sektoren ausgehend vom Anfang der Region-Datei, das vierte Byte ist die aufgerundete Größe des Chunks in 4KiB Sektoren. Chunks sind immer kleiner als 1MiB. Ist ein Chunk nicht in der Region-Datei vorhanden (z.B. weil noch nicht generiert) sind beide Einträge Null.

Byte 0 1 2 3
Beschreibung Offset in Sektoren Größe in Sekoren

Ein Chunk mit dem Offset 2 beginnt unmittelbar hinter der Zeitstempel-Tabelle.

Zeitstempel der Chunks

Die Zeitstempel der Chunks sind vier Byte Big-Endian Integer, diese geben die letzte Änderungszeit eines Chunks an.

Byte 0 1 2 3
Beschreibung Zeitstempel

Daten der Chunks

Die Chunk-Daten starten mit einer vier Byte (Big-Endian) großen Längenangabe der Chunkdaten in Bytes. Das folgende Byte beschreibt das Kompressionsverfahren und die folgenden (Länge-1) Bytes sind die komprimierten Chunk-Daten.

Byte 0 1 2 3 4 5...
Beschreibung Länge in Byte Kompressionsverfahren Komprimierte Daten (Länge-1 Bytes)

Momentan sind zwei Kompressionsverfahren definiert:

Wert Verfahren
1 GZip (RFC1952) (Nicht benutzt)
2 Zlib (RFC1950)

Wenn Zlib-Komprimierte Daten mit Deflate (RFC1951) gelesen werden sollen, müssen vor dem Dekomprimieren die ersten beiden Bytes übersprungen und die letzten 4 Bytes ausgelassen werden.

Die unkomprimierten Daten sind im NBT-Format und sind im Artikel Chunk Format beschrieben. Die mit GZip komprimierten Daten sind identisch mit dem Speicherformat einer Alpha-Chunk-Datei. Chunks werden von Minecraft immer mit Zlib komprimiert geschrieben.

Migration und level.dat

Convert

Minecraft bei der Konvertierung in das Region-Format.

Beta 1.3 konvertiert alle "alten" Chunks in Region-Dateien vor dem Laden der Welt (und nicht inkrementell beim Laden der Chunks während des Spielens) Bei der Konvertierung wird level.dat mit einem TAG_Int("version") (Kleinschreibung!) mit Inhalt 19132 versehen. Beta 1.3 fügt auch ein neues Weltname-Feld TAG_String("LevelName") hinzu. Weiterhin wird ein neues TAG_Byte("Sleeping") in Spieler-TAG_Compounds in level.dat bzw. in <spielername>.dat für Multplayer hinzugefügt, diese zeigt an, ob der Spieler sich gerade im Bett befindet (= 1 / true). Beta 1.8 fügt TAG_Int("GameType") hinzu, Beta 1.9 fügt TAG_byte("hardcore") hinzu.

Das Format von level.dat bleibt ansonsten unverändert.

Siehe auch

Weblinks

Einzelnachweise

Vorlage:Minecraft