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

Spielstand-Speicherung

Aus Minecraft Wiki
(Weitergeleitet von Speicherkonzept)
Wechseln zu: Navigation, Suche

Die Spielstand-Speicherung einer Welt erfolgt in Dateien, deren Inhalt in einer übersichtlichen Baum-Struktur aufgebaut ist. Dabei handelt es sich nicht um Textdateien, sondern sie sind im sogenannten NBT-Format (Named Binary Tag) gespeichert, daher kann man den Inhalt nur mit speziellen Programmen ansehen. Es gibt Programme, die die Daten graphisch darstellen, sodass man eine Welt außerhalb von Minecraft sehen und verändern kann (z.B. "MCEdit") oder Programme, die die Baumstruktur der Daten darstellen (z.B. "NBT-Explorer").

Speicherzeitpunkte[Bearbeiten]

Die Speicherung des Spielstandes erfolgt zu unterschiedlichen Zeitpunkten:

  • Wenn eine neue Welt generiert ist, wird sie zum ersten Mal gespeichert.
  • Während man spielt, werden laufend Daten hinzugefügt und geändert.
  • Sobald man die Pause-Taste Esc drückt, wird der Spielstand gespeichert. Im "Game Output" des Launchers wird protokolliert: "[Server thread/INFO]: Saving and pausing game..." - Man kann danach das Spiel fortsetzen oder über den Menüpunkt "Speichern und zurück zum Hauptmenü" beenden.
  • Werden Chunks entladen, etwa weil sich der Spieler zu sehr von ihnen entfernt, werden diese vorher gespeichert.
  • In regelmäßigen Zeitabständen wird automatisch gespeichert.

Speicherkonzepte[Bearbeiten]

Im Laufe der Entwicklung des Spiels wurde das Speicherkonzept mehrfach geändert:

  • Zuerst wurden sämtliche Daten einer Welt vom Java-Programm in einem level-Objekt gehalten, das beim Speichern als serialisiertes Java-Objekt in eine komprimierte Datei geschrieben wurde (Classic Level Format).
  • Von dem Konzept der Datenserialisierung durch Java hat sich Notch in der Indev-Phase verabschiedet und ein eigenes Speicherformat entwickelt (das NBT-Format). Die in der Indev-Phase mit diesem Format gespeicherten Weltdaten werden Indev Level Format genannt. Die Welten hatten immer noch eine feste Größe und alle Daten inklusive aller Blöcke und Objekte wurden in einer gemeinsamen Datei gespeichert.
  • In der Infdev-Phase wurde mit Entwicklung der unbegrenzten Welt das Konzept der Chunk-Speicherung eingeführt. Die globalen Weltdaten wurden nun in der Datei "level.dat" gespeichert, die Landschaft und Objekte dagegen in Chunkdateien. Eine Chunkdatei fasste jeweils eine Fläche von 16×16 Blöcken zusammen. Dieses Konzept wird Alpha Level Format genannt.
  • Mit Beta 1.3 wurde zum neuen Region Format gewechselt, bei dem die Chunks nicht mehr einzeln gespeichert, sondern zu einer Region zusammengefasst wurden. Eine Region enthält 32×32 Chunks, d. h. sie bildet eine Fläche von 512×512 Blöcken ab. Diese Zusammenfassung hat das Speichern der Chunks deutlich beschleunigt.
  • Mit Vollversion 1.2 (12w07a) wurde zum neuen Anvil Format gewechselt. Das Konzept der Regionen wurde beibehalten, aber die Chunks konnten nun statt 128 eine Bauhöhe von 256 Blöcken speichern. Die Chunks wurden in 16×16×16 Block große, würfelförmige Sektionen eingeteilt. Luftleere Sektionen wurden nicht mehr gespeichert und nicht mehr geladen. Es gab noch weitere Änderungen am Speicherkonzept, um das Laden und Speichern von Chunks zu beschleunigen.

Konvertierung[Bearbeiten]

Mit jeder neue Minecraft-Version gibt es kleine oder größere Änderungen an den Spielstand-Speicherdaten. Wurde eine Welt mit einer alten Version erzeugt, könnte die neuen Version sie dadurch nicht mehr einlesen. Um das trotzdem zu ermöglichen, müssen die Daten vor oder beim Einlesen konvertiert, d. h. in das neue Format umgewandelt werden.

Beispiel: Mit Vollversion 1.11 haben sich die Objekt-IDs geändert. Eine Welt, die zuletzt mit 1.10 gespielt wurde, hat die Objekte mit den alten IDs gespeichert. Wird die Welt danach mit 1.11 betreten, erkennt das Spiel den Versionswechsel und konvertiert die alten Objekt-IDs automatisch.

Die Erkennung einer alten Version geschieht durch die mit Vollversion 1.9 (15w32a) eingeführte Version-ID, die seither als DataVersion-Eigenschaft in den Weltdaten, den Spielerdaten und den Chunkdaten steht[1]. Da die Blöcke, Blockobjekte, Objekte, Kreaturen und seit Vollversion 1.13 auch die Bauwerke Teil der Chunkdaten und die Gegenstände Teil der Chunk- und Spielerdaten sind, kann jede Änderungen an diesen Daten beim Einlesen eines Chunks oder Spielers erkannt werden. Mit Vollversion 1.13 haben auch die restlichen Spielstand-Speicherdaten die Version-ID als DataVersion-Eigenschaft erhalten: Anzeigetafeldaten, Dorfdaten, Kartendaten und Statistikdaten.

Das Spiel erkennt beim Einlesen der Speicherdaten, mit welcher Version-ID sie zuletzt gespeichert wurden. Weicht diese von der aktuellen Version-ID ab, wird die Konvertierung durchgeführt. Das findet immer vor der ersten Benutzung der Daten statt, d. h. das Spielprogramm selbst arbeitet nur mit dem aktuellen Format. Die Weltdaten werden bei jedem Betreten der Welt geladen, andere Daten aber nur, wenn sie benötigt werden. Wenn man beispielsweise einen weit entfernten Chunk seiner Welt seit sechs Jahren nicht betreten hat, hat er noch immer das alte Datenformat aus dieser Zeit, was erst beim erneuten Einlesen erkannt wird.

Für die Konvertierung gibt es zwei Möglichkeiten:

  • Chunkweise nebenbei: Jeder Chunk wird erst konvertiert, wenn er geladen wird. Vorteil: Durch die automatische Nebenbei-Konvertierung kann man die Welt sofort betreten. Nachteil: Jeder einzelne Chunk verursacht beim Laden eine Zeitverzögerung, die je nach Konvertierungsdauer das Spielerlebnis mindern kann. Außerdem bleiben alte Chunkdaten übrig, sofern man nicht die ganze Welt einmal komplett abwandert. Im Laufe der Zeit besteht die Welt aus einer bunten Mischung von Chunks der verschiedensten Minecraft-Versionen. Dadurch hat man auch Monate nach einem Versionswechsel noch Konvertierungsverzögerungen, wenn man die entsprechenden alten Chunks dann zum ersten Mal wieder betritt.
  • Komplett vorab: Die Welt wird vor dem ersten Betreten durch Aufruf eines Menüpunktes komplett konvertiert. Vorteil: Flüssiges Spiel, weil die Welt beim Betreten bereits komplett im aktuellen Format vorliegt. Nachteil: Je nach Größe der Welt kann die Komplett-Konvertierung sehr lange dauern.
    • Client: Die Komplett-Konvertierung wird im Menü/Welt bearbeiten über den Menüpunkt "Welt optimieren" durchgeführt (Details siehe dort).
    • Server: Die Komplett-Konvertierung wird durch das Starten des Servers mit dem Zusatz --forceUpgrade durchgeführt. Das kann nicht rückgängig gemacht werden, daher sollte man vorher eine Sicherungskopie der Welt anlegen.

Die Programmfunktionen für die Konvertierung sind in die Programmbibliothek datafixerupper.jar ausgelagert, deren Quellcode öffentlich zugänglich ist (siehe Open-Source-Bibliotheken).

Weltordner[Bearbeiten]

Ausgangspunkt für das Speichern der Spielstände aller Welten ist der Ordner .minecraft/saves. In diesem Ordner gibt es für jede Welt, die man generiert hat, einen Weltordner. Jeder Weltordner trägt den Namen der Welt, so wie man ihn bei der Generierung gewählt hat. Bei einer späteren Umbenennung einer Welt im Spiel behält der Weltordner stets den ursprünglichen Namen. Dieser wird im Einzelspielermodus immer unter dem Namen einer Welt mit angezeigt.


  • .minecraft:
    Minecraft-Ordner

    • saves:
      Alle Minecraft-Welten.

      • Name des Weltordners:
        Alle Daten einer Welt. Der Weltordner kann über das Menü/Welt bearbeiten bequem direkt geöffnet werden.

        • advancements:
          Für jeden Spieler in dieser Welt die erreichten Rezepte und Fortschritte mit jeweiliger Bedingung und Zeitstempel. Die Dateinamen bestehen aus den UUIDs der Spieler. Siehe Rezeptdaten und Fortschrittsdaten. Die erreichten Rezepte werden zusätzlich für das Rezeptbuch in den Spielerdaten unter recipeBook gespeichert.

        • data:
          Bauwerke und andere Daten der Welt.

          • chunks.dat:
            Optional Informationen über dauerhafte Chunks der Oberwelt. Siehe Chunkladedaten.

          • idcounts.dat:
            Optional die ID der zuletzt hergestellten Landkarte der Welt, unabhängig von welchem Spieler sie hergestellt wurde. Siehe Kartendaten.

          • map_ID.dat:
            Optional Informationen über eine bestimmte Landkarte. Der Dateiname enthält die ID der Karte. Siehe Kartendaten.

          • scoreboard.dat:
            Optional Informationen über die Anzeigetafel der Welt. Siehe Anzeigetafeldaten.

          • villages.dat:
            Informationen über die Bewohner der Dörfer der Oberwelt. Diese Datei wird immer erzeugt, auch wenn noch kein Dorf generiert wurde. Siehe Dorfdaten.

          • villages_end.dat:
            Informationen über die Bewohner der Dörfer im Ende. Ein solches Dorf wird vom Spiel nicht generiert, kann aber vom Spieler gebaut werden. Diese Datei wird immer erzeugt. Siehe Dorfdaten.

          • villages_nether.dat:
            Informationen über die Bewohner der Dörfer im Nether. Ein solches Dorf wird vom Spiel nicht generiert, kann aber vom Spieler gebaut werden. Diese Datei wird immer erzeugt. Siehe Dorfdaten.

        • datapacks:
          Datenpakete für diese Welt.

        • DIM-1:
          Dateien des Nethers (Dimension "Minus 1").

          • data:
            Daten dieser Dimension.

          • players:
            Für DIM-1 wird analog zur Oberwelt ein Ordner "players" angelegt, der hier bedeutungslos ist.

          • region:
            Alle Regiondateien des Nethers.

            • r.X.Z.mca:
              X und Z sind die Koordinaten der Region (32×32 Chunks). Siehe Chunkdaten.

        • DIM1:
          Dateien des Endes (Dimension "Plus 1").

          • data:
            Daten dieser Dimension.

          • players:
            Für DIM1 wird analog zur Oberwelt ein Ordner "players" angelegt, der hier bedeutungslos ist.

          • region:
            Alle Regiondateien des Endes.

            • r.X.Z.mca:
              X und Z sind die Koordinaten der Region (32×32 Chunks). Siehe Chunkdaten.

        • generated:
          In der Welt gespeicherte Konstruktionen.

          • minecraft:
            Die Minecraft-Konstruktionen.

            • structures:
              Durch einen Konstruktionsblock gespeicherte Konstruktionen.

              • eigene-konstruktion.nbt:
                Der Dateiname enthält den Namen, den man im Konstruktionsblock angegeben hat. Siehe Konstruktionsvorlagen.

        • playerdata:
          Alle Spieler, die diese Welt betreten haben.

        • players:
          Für Welten vor der Vollversion 1.7.6 die Spielerdaten. Auch für neuere Welten wird der players-Ordner manchmal angelegt, hat dann aber keine Bedeutung.

          • Spielername.dat:
            Der Dateiname enthält den Namen des Spielers. Siehe Spielerdaten.

        • region:
          Alle Regiondateien der Oberwelt (Dimension 0).

          • r.X.Z.mca:
            X und Z sind die Koordinaten der Region (32×32 Chunks). Siehe Chunkdaten.

        • stats:
          Für jeden Spieler, der in dieser Welt spielt, die Erfolge und Statistiken.

        • icon.png:
          Das Icon der Welt, das im Menü/Einzelspieler angezeigt wird und im Menü Menü/Welt bearbeiten zurückgesetzt werden kann.

        • level.dat:
          Globale Informationen der Welt. Siehe Weltdaten.

        • level.dat_old:
          Bei Beginn der Alpha-Phase wurde eine neue Datei "level.dat" angelegt und die alte in "level.dat_old" umbenannt. Aber auch danach noch wird "level.dat_old" beim Generieren einer Welt erzeugt und beim Speichern der Welt beschrieben. Siehe Weltdaten.

        • resources.zip:
          Optional ein Welt-Ressourcenpaket, das beim Laden der Welt automatisch mit geladen wird. Siehe Ressourcenpaket.

        • session.lock:
          Sperre, sobald die Welt mit Minecraft bespielt wird. Siehe Alpha Level Format.

Geschichte[Bearbeiten]

Speichern Classic 0.30.png Ab Classic 0.0.13a_02 konnte man bis zu fünf Spielstände online speichern. In der später entstandenen Survival Test-Variante konnte man das ebenfalls, aber zusätzlich konnte man über den Menüpunkt "Save file..." Spielstände erstmals auch lokal speichern. Dazu wurde das Windows-Speicherfenster angezeigt, das einen beliebigen Speicherort ermöglichte. Mit Classic 0.30 wurde dieses lokale Speichern auch der Classic-Variante hinzugefügt.
Speichern Alpha 1.0.17.png In der Indev-Variante konnte man Spielstände anfangs gar nicht speichern. Ab Indev 22. Januar 2010 war es dann möglich. Die Spielstände wurden jedoch ab sofort nicht mehr online, sondern nur noch lokal gespeichert. Das Windows-Speicherfenster, das in der Vergangenheit mehrfach Probleme bereitet hatte, wurde weggelassen. Stattdessen wurden die fünf bereits von Survival Test bekannten Speicherslots für das lokale Speichern verwendet. Dieses Konzept wurde während der restliche Alpha-Phase beibehalten.
Speichern Beta 1.3.png Mit Beta 1.3 wurde nicht nur das Speicherformat verbessert, sondern man konnte jetzt beliebig viele Spielstände speichern. Sie wurden automatisch unter .minecraft/saves gespeichert.
Speichern 1.9.png Mit Vollversion 1.9 wurde die Auswahlliste um Icons erweitert, die bei ersten Betreten einer Welt im jeweiligen Welt-Ordner gespeichert werden.

Einzelnachweise[Bearbeiten]