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

Spielstand-Speicherung/Alpha Level 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 dritte Datenformat zur Spielstand-Speicherung wird Alpha Level Format genannt, weil es hauptsächlich in der Alpha-Entwicklungsphase des Spiels zum Einsatz kam.

Eingeführt wurde dieses Format aber schon am ersten Tag der Infdev-Phase mit Infdev 27. Februar 2010, als die Beschränkung der bisherigen Spielweltgröße aufgehoben wurde. Nun konnten sich die Welten durch die Erkundung des Spielers immer weiter vergrößern. Dadurch war es unmöglich geworden, alle Blöcke einer Welt im Hauptspeicher zu halten oder in einer einzigen Datei zu speichern. Daher teilte Notch das Gelände in 16×16 Block große Bereiche (chunks) auf. Im Hauptspeicher wurden nur noch die Chunks um den Spieler herum behalten, alle anderen wurden auf der Festplatte gespeichert. Sobald sich der Spieler auf den Horizont zubewegte, wurden die Chunks hinter ihm aus dem Hauptspeicher entfernt und die Chunks vor ihm nachgeladen. Zusätzlich wurde neues Gelände erst dann erzeugt, wenn sich ein Spieler auf Sichtweite näherte, was den Gesamtspeicherplatzbedarf drastisch reduzierte, da die meisten Spieler nur einen sehr kleinen Teil der möglichen Welt erkundeten. Um den etwas holprigen Spielfluss zu beschleunigen, wurde das Alpha Level Format in Beta 1.3 durch ein schnelleres Format ersetzt.

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

Welt-Ordner[Bearbeiten]

Sämtliche Daten einer Welt werden in einem Ordner gespeichert, der den Namen der Welt trägt:


  • Welt-Ordner
    mit dem Namen, der beim Generieren der Welt vergeben wurde.

    • level.dat:
      Datei im komprimierten NBT-Format mit den Weltdaten und die Spielerdaten im Einzelspielermodus.

    • session.lock:
      Sperrdatei, die sicherstellt, dass zu jeder Zeit immer nur ein Minecraft-Programm auf die Welt zugreifen kann.

    • 0 bis 1r:
      Maximal 64 X-Index-Verzeichnisse für die Chunkdateien. Der Name ist im 36er-System codiert.

      • 0 bis 1r:
        Maximal 64 Z-Index-Verzeichnisse für die Chunkdateien. Der Name ist im 36er-System codiert.

        • Chunkdateien im komprimierten NBT-Format mit den Chunkdaten. Eine Chunkdatei enthält die Blöcke und Objekte eines 16×16 Block großen Bereiches der Welt in gesamter Höhe von Y = 0 bis 127. In einem bestimmten Verzeichnis stehen alle Chunkdateien, deren X/Z-Index geteilt durch 64 denselben Rest ergibt (Modulo-Funktion). Beispielsweise stehen die Chunkdateien mit dem X/Z-Index 0/3, 0/67, 0/131, 64/3, 64/67, 64/131 etc. alle im Verzeichnis "0/3/".

    • DIM-1:
      Als mit Alpha 1.2.0 der Nether als neue Dimension eingeführt wurde, wurden seine Chunkdateien als getrennte Welt im Unterverzeichnis "DIM-1" gespeichert.

      • 0 bis 1r:
        Maximal 64 X-Index-Verzeichnisse für die Chunkdateien des Nethers.

        • 0 bis 1r:
          Maximal 64 Z-Index-Verzeichnisse für die Chunkdateien des Nethers.

          • Chunkdateien des Nethers.

    • players:
      Im Mehrspielermodus gibt es für jeden Spieler eine eigene Datei Spielername.dat mit denselben Spielerdaten, die im Einzelspielermodus in der Datei level.dat enthalten sind.

Berechnung des Chunkdateinamens[Bearbeiten]

Jeder Chunk enthält eine Fläche von 16×16 Blöcken und hat einen X- und Z-Index innerhalb der Welt. Das Zentrum der Welt ist der Block mit der Koordinate 0/0. Er liegt in der nordwestlichen Ecke des Chunks 0/0. Um den Chunkdateinamen zu einer beliebigen Koordinate zu ermitteln, ist jeweils getrennt für X und Z wie folgt zu rechnen:

(positive Koordinate / 16) ohne Nachkommastellen
((negative Koordinate + 1) / 16 ) ohne Nachkommastellen - 1
Umrechnung in das 36er-System (36 verschiedene Ziffern und Buchstaben von 0 bis z)
Der Dateiname hat ein "c." als Präfix

Beispiel:

  • Koordinate X = 1475320, Z = -2150
    • X-Index = (1475320 / 16) ohne Nachkommastellen = 92207
      • Dateinamenteil = 92207 = 1×363 + 35×362 + 5×361 + 11×360 = 1z5b
    • Z-Index = ((-2150 + 1) / 16) ohne Nachkommastellen - 1 = -135
      • Dateinamenteil = -135 = -(3×361 + 27×360) = -3r

Der Dateiname lautet: "c.1z5b.-3r.dat"

Berechnung der Verzeichnisse[Bearbeiten]

Es gibt maximal 64 Verzeichnisse für den X-Index. In jedem X-Index-Verzeichnis gibt es maximal 64 Verzeichnisse für den Z-Index. Die Verzeichnisnamen sind im 36er-System codiert, also von "0" bis "1r" (denn "1r" = 1×361 + 27×360 = 63). Die Verzeichnisnamen berechnet man wie folgt:

X-Index-Verzeichnis = Rest von (X-Index / 64) 
Z-Index-Verzeichnis = Rest von (Z-Index / 64) 
Jeweils Umrechnung in das 36er-System

Beispiel:

  • Chunk mit [X,Z]-Index [92207,-135]
    • X dezimal = Rest von (92207 / 64) = 47, weil 1440×64+47 = 92207
      • X-Index-Verzeichnis = 47 = 1×361 + 11×360 = 1b
    • Z dezimal = Rest von (-135 / 64) = 57, weil -3×64+57 = -135
      • Z-Index-Verzeichnis = 57 = 1×361 + 21×360 = 1l

Die Chunkdateiname "c.1z5b.-3r.dat" steht also im Verzeichnis "1b/1l/".

Berechnung der Koordinaten[Bearbeiten]

Aus dem Chunkdateinamen kann man wie folgt die Koordinaten der Fläche berechnen, die der Chunk enthält:

Umrechnung des X- und Z-Index vom 36er-System ins Dezimalsystem
Multiplikation mit 16
Bei positiven Zahlen ist das Ergebnis die Untergrenze und +15 ist die Obergrenze
Bei negativen Zahlen ist das Ergebnis die Obergrenze und -15 ist die Untergrenze

Beispiel:

  • Dateiname "c.1z5b.-3r.dat"
    • X-Index = 1×363 + 35×362 + 5×361 + 11×360 = 92207
      • X-Koordinate = 92207×16 = 1475312 => X von 1475312 bis 1475327
    • Z-Index = -(3×361 + 27×360) = -135
      • Z-Koordinate = -135×16 = -2160 => Z von -2145 bis -2160

Datei session.lock[Bearbeiten]

Die Datei session.lock enthält den Zeitstempel des letzten Zugriffs auf die Welt. In der unkomprimierten Datei sind die Millisekunden seit 01.01.1970 (UTC) als 64-Bit Integer-Zahl im Big-Endian-Format gespeichert.

Anders als herkömmliche Lock-Dateien stellt diese Datei sicher, dass nicht das erste, sondern das letzte Minecraft-Programm, das auf die Welt zugreifen möchte, Lese- und Schreibrechte bekommt:

  1. Minecraft öffnet die session.lock.
  2. Minecraft schreibt Zeitstempel in session.lock.
  3. Minecraft überwacht session.lock auf Änderungen.
  4. Wenn der Inhalt von session.lock geändert wurde (weil ein anderes Minecraft-Programm den Zeitstempel verändert hat), bricht das Spiel ab. Das andere Minecraft-Programm kann dagegen weiter spielen.

Datei level.dat[Bearbeiten]

Die Datei level.dat ist eine gzip-komprimierte Datei im NBT-Format, in der globale Welt-Informationen und die Daten des Einzelspielermodus-Spielers gespeichert werden.


  • Die namenlose Haupteigenschaft.

    • Data:
      Alle globalen Daten einer Welt.

      • LastPlayed:
        Die Unix-Zeit des letzten Ladens der Welt (Sekunden seit 1.1.1970).

      • SizeOnDisk:
        Ungefähre Größe der Welt in Bytes.

      • RandomSeed:
        Der Startwert mit dem die Welt erzeugt wurde.

      • SpawnX:
        Die X-Koordinate des globalen Spawnpunkts.

      • SpawnY:
        Die Y-Koordinate des globalen Spawnpunkts.

      • SpawnZ:
        Die Z-Koordinate des globalen Spawnpunkts.

      • Time:
        Anzahl der Ticks seit Start der Welt.

      • Player:
        Daten des Einzelspielers der Welt.

        • Dimension:
          Die ID der Dimension, in der sich der Spieler aufhält: 0=Oberwelt, -1=Nether.

        • Pos:
          Liste mit 3 Double-Werten, die die aktuelle X,Y,Z-Position des Spielers bestimmen.

        • Rotation:
          Liste mit 2 Float-Werten, die die Rotation des Spieler in Grad bestimmen (Rotation um die Y-Achse, Blick nach Westen = 0, sowie Neigung gegen den Horizont. Genau horizontal ist gleich 0, nach unten ist die Neigung positiv, nach oben negativ).

        • Motion:
          Liste mit 3 Double-Werten, die die aktuelle Geschwindigkeit des Spieler in X, Y und Z-Richtung bestimmen in Blöcken pro Tick.

        • OnGround:
          1 oder 0 (true/false) - true, wenn der Spieler den Boden berührt.

        • FallDistance:
          Wenn der Spieler gerade fällt, die Distanz die er schon zurückgelegt hat. Größere Werte fügen mehr Schaden zu, wenn er landet.

        • Health:
          Gesundheit des Spielers (in halben Herzen).

        • AttackTime:
          Zeit in Ticks, die der Spieler unverwundbar bleibt, bis er zum nächsten Mal Schaden nimmt. 0, wenn er nicht kürzlich getroffen wurde.

        • HurtTime:
          Zeit in Ticks, die der Spieler rot gezeichnet wird, nachdem er getroffen wurde. 0, wenn er nicht kürzlich getroffen wurde.

        • DeathTime:
          Zeit in Ticks, die seit dem Tod des Spielers vergangen ist. Kontrolliert die Sterbe-Animation. 0 wenn er lebt.

        • Air:
          Zeit in Ticks, wieviel Luft der Spieler noch zur Verfügung hat. Das Maximum sind 300 Ticks, wenn der Spieler an der Luft ist. Unter Wasser sinkt der Wert innerhalb von 15 Sekunden auf 0.

        • Fire:
          Zeit in Ticks, bis das Feuer des brennenden Spielers erlischt. Negative Werte sagen aus, wie lange der Spieler im Feuer stehen kann, ohne zu brennen. Standard ist -1 wenn er nicht brennt.

        • Score:
          Die Erfahrungspunkte des Spielers. Dieser Wert wurde allerdings erst in Beta 1.8 vom Spiel verwendet, da gab es das Alpha Level Format schon nicht mehr.

        • Inventory:
          Liste mit dem Inventar des Spielers.

          • Ein Gegenstand im Inventar.

            • Slot:
              Der Slot, in dem sich der Gegenstand befindet.

            • id:
              Die ID des Gegenstands.

            • Damage:
              Der Metadaten-Wert des Gegenstands, oder bei Werkzeug und Waffen die Abnutzung.

            • Count:
              Stapelgröße des Gegenstands. Werte von -128 bis 127 sind erlaubt. Mengen kleiner 2 werden im Spiel nicht angezeigt.

Chunkdateien[Bearbeiten]

Eine Chunkdatei ist eine gzip-komprimierte Datei im NBT-Format, mit allen Blöcke einer 16×16 Block großen Fläche in gesamter Höhe von Y = 0 bis 127 sowie allen Objekten in diesem Bereich.


  • Die namenlose Haupteigenschaft.

    • Level:
      Die Weltdaten des Chunks.

      • xPos:
        Der X-Index des Chunks in der Welt.

      • zPos:
        Der Z-Index des Chunks in der Welt.

      • TerrainPopulated:
        1 oder 0 (true/false) - true, wenn das Spiel bereits Besonderheiten wie Verliese oder Höhlensysteme in diesem Chunk erzeugt hat. Das passiert nicht bei der Generierung des Chunks, sondern erst, wenn der Spieler sich wirklich nähert.

      • LastUpdate:
        Der Tick, an dem der Chunk das letzte Mal aktualisiert wurde.

      • Blocks:
        Alle Blöcke des Chunks in einem 32768 Byte großen Array für 16×16×128 Blöcke im Chunk. Jedes Byte enthält eine Block-ID.

      • Data:
        In einem 16384 Byte großen Array werden für jeden Block die Metadaten gehalten, wobei ein Metadatenwert zwischen 0 und 15 liegen kann und daher nur ein Halbbyte (4 Bit) einnimmt.

      • BlockLight:
        In einem 16384 Byte großen Array für jeden Block die Block-Lichtwerte (Halbbytes mit Werten zwischen 0 und 15).

      • SkyLight:
        In einem 16384 Byte großen Array für jeden Block die Himmels-Lichtwerte (Halbbytes mit Werten zwischen 0 und 15).

      • HeightMap:
        256 Byte für Höheninformationen (Y-Werte der 16×16 obersten nicht-Luft-Blöcke). Diese Höhenangaben werden zur schnellleren Berechnung der Himmels-Lichtwerte benötigt.

      • Entities:
        Liste aller Objekte im Chunk.

      • TileEntities:
        Liste aller Blockobjekte im Chunk.

        • Die Blockobjektdaten - nicht alle Informationen dort gelten schon für Minecraft Alpha.

Konvertierung[Bearbeiten]

Die Entwicklung von unbegrenzt großen Welten (Infdev-Phase) erfolgte getrennt von der bisherigen Spielentwicklung. Notch hat dazu eine Kopie des bisherigen Indev-Programms erzeugt und diese massiv verändert[1]. Das neue Infdev-Programm hat komplett neue Welten erzeugt, eine Konvertierung von Indev- zu Infdev-Welten war nicht vorgesehen.

Die ersten Infdev-Welten konnte man am 27. Februar 2010 testen[2]. In den nächsten Monaten wurde das Spiel in allen Funktionen weiter an das Konzept der grenzenlose Welten angepasst. Ca. vier Monate später, am 14. Juni 2010 kündigte Notch ein neues Speicherformat an, denn das Alpha Level Format hatte entscheidende Nachteile: Die Chunkdateien hatten durchschnittlich nur 1 Kilobyte Inhalt, aber das Windows-Betriebssystem erzeugte als minimale Dateigröße jeweils 4 Kilobyte (ein Sektor), was bei einer normalen Datenmenge von mehreren Tausend Chunkdateien das Speichern und Laden verlangsamte[3]. Eine Woche später wurde das neue Format veröffentlicht[4]: Es gab nun unkomprimierte Zonendateien mit Links zu den eigentlichen Chunkdateien, was den Zugriff auf die Chunkdateien beschleunigte. Die Speicherdaten von bisherige Infdev-Welten wurden mit der neuen Version während des Spielens automatisch chunkweise konvertiert, wenn man sich in der Welt bewegte[5]. Doch das neue Format hatte zu viele Fehler und Notch entfernte es bereits wenige Stunden später mit der nächsten Infdev-Version wieder[6]. Es blieb also bei dem Alpha Level Format.

Einzelnachweise[Bearbeiten]

Geschichte[Bearbeiten]

Promotional Content