Minecraft Wiki
Delphi42 (Diskussion | Beiträge)
(Beschreibung der Funktionsweise überarbeitet)
Markierung: Überarbeitung
Delphi42 (Diskussion | Beiträge)
K (→‎Datenstruktur: Typo korrigiert)
Zeile 40: Zeile 40:
 
<div class="treeview">
 
<div class="treeview">
 
*{{JSON|Datei|command_storage_''<namensraum>''.dat}}: Diese Datei enthält die durch Befehle gespeicherten NBT-Daten im Namensraum ''<namensraum>''.
 
*{{JSON|Datei|command_storage_''<namensraum>''.dat}}: Diese Datei enthält die durch Befehle gespeicherten NBT-Daten im Namensraum ''<namensraum>''.
** {{NBT|compound}}: die namenslose Haupteigenschaft
+
** {{NBT|compound}} die namenslose Haupteigenschaft
 
*** {{NBT|int|DataVersion}}: die [[Versionen#Version-IDs|Datenversion]], in der die Datei zuletzt gespeichert wurde
 
*** {{NBT|int|DataVersion}}: die [[Versionen#Version-IDs|Datenversion]], in der die Datei zuletzt gespeichert wurde
 
*** {{NBT|compound|data}}
 
*** {{NBT|compound|data}}
 
**** {{NBT|compound|contents}}: enthält einen Eintrag für jeden ''Wertspeicher'' in diesem Namensraum
 
**** {{NBT|compound|contents}}: enthält einen Eintrag für jeden ''Wertspeicher'' in diesem Namensraum
***** {{NBT|compound|''<name>''}}: die im ''Wertspeicher'' <code>''<namensraum>'':''<name>''</code> gespeicherten NBT-Daten
+
***** {{NBT|compound|''<name>''}}: die im Wertspeicher <code>''<namensraum>'':''<name>''</code> gespeicherten NBT-Daten
 
****** Daten, die durch die Befehle gespeichert wurden
 
****** Daten, die durch die Befehle gespeichert wurden
 
</div>
 
</div>

Version vom 22. Juni 2021, 17:48 Uhr

Der NBT-Datenspeicher bietet für Befehle eine effiziente Möglichkeit, NBT-Daten für die spätere Verwendung zwischenzuspeichern.

Funktionsweise

Der NBT-Datenspeicher ist in einzelne Wertspeicher gegliedert, die unabhängig voneinander sind und jeweils durch einen eigenen ID-Namen angesprochen werden können. Es können beliebige ID-Namen als Bezeichnung für einen Wertspeicher verwendet werden.

Wird beim Speichern von Daten ein ID-Name eines noch nicht vorhandenen Wertspeichers angegeben, so wird ein Wertspeicher mit diesem ID-Namen angelegt und die Daten werden dort gespeichert. Wird beim Lesen von Daten ein ID-Name eines noch nicht vorhandenen Wertspeichers angegeben, so wird als Inhalt {} geliefert (Befehl /data get storage nicht_da). Ist dabei ein Pfad innerhalb des Wertspeichers angegeben, so gibt dies einen Fehler, da der Pfad nicht existiert.

Der ID-Name des Wertspeichers erlaubt die Verwendung von Namensräumen. Wird kein Namensraum explizit angegeben, so wird der Namensraum minecraft verwendet. Insbesondere in Datenpaketen ist die Verwendung eines eigenen Namensraums zu empfehlen, damit die Daten nicht durch andere Datenpakete überschrieben werden.

Der Inhalt des NBT-Datenspeichers wird mit der Minecraft-Welt gespeichert und bleibt so auch beim Verlassen des Spiels gespeichert.

Verwendung in Befehlen

In die Befehlen /data und /execute store sowie /execute if data erlauben den Zugriff auf den NBT-Datenspeicher durch Angabe von storage <wertspeicher>, wobei <wertspeicher> der ID-Name des zu verwendenden Wertspeichers ist. Wie bei Objekt- oder Blockdaten folgt auf die Angabe dieses Wertspeichers ein NBT-Pfad, um auf einzelne Untereinträge der NBT-Daten zuzugreifen.

Der Befehl /data ermöglicht das kopieren und zusammenfügen beliebiger NBT-Datenstrukturen zwischen dem NBT-Datenspeicher und Objekten und Blöcken sowie das Zusammenfügen (merge) von Daten. Der Befehl /execute store dagegen kann nur Zahlenwerte in den NBT-Datenspeicher schreiben.

Durch den Befehl /execute store ... run data get storage <wertspeicher> <pfad> können Zahlenwerte aus dem NBT-Datenspeicher auch in die Anzeigetafel oder in Bossleisten übertragen werden.

Unterschiede zur Datenspeicherung in Markierern

Während Markierer es ebenfalls ermöglichen, beliebige NBT-Daten zu speichern, gibt es einige Unterschiede zwischen der Speicherung im NBT-Datenspeicher und in Markieren:

  • Markierer sind Objekte und enthalten daher allgemeine Objektdaten zusätzlich zu den beliebigen gespeicherten Daten. Daher müssen die beliebigen Daten dort in der Eigenschaft data der NBT-Daten gespeichert werden.
    Im NBT-Datenspeicher können die Daten dagegen in beliebigen NBT-Pfaden gespeichert werden.
  • Da keine zusätzlichen Objektdaten gespeichert werden müssen, ist die Speicherung im NBT-Datenspeicher in der Regel effizienter.
  • Markierer befinden sich an einer bestimmten Position in der Welt. Ist der Chunk, in dem sich ein Markierer befindet, nicht geladen, so können die dort gespeicherten Daten nicht abgerufen werden.
    Im NBT-Datenspeicher hinterlegte Daten sind dagegen immer abrufbar.
  • Da sich Markierer an einer bestimmten Position befinden, ist es zum Beispiel möglich mit einer Zielauswahl wie @e[type=minecraft:marker,tag=meineDaten,sort=nearest,limit=1] von mehreren Markierern (hier mit dem Etikett meineDaten) den auszuwählen, der sich am nächsten an der Position befindet, wo der Befehl ausgeführt wird, und die dort gespeicherten Daten zu verwenden. Dies lässt sich mit dem NBT-Datenspeicher nicht so einfach erreichen.
  • Markierer müssen zuerst mit dem Befehl /summon erstellt werden, um Daten speichern zu können. Wertspeicher werden dagegen automatisch angelegt, sobald dort zum ersten Mal Daten gespeichert werden.

Datenquelle

  • .minecraft: Der im Launcher-Profil eingestellte Spielordner (Standard: .minecraft).
    • saves: Speicherordner für alle Minecraft-Welten
      • Name des Weltordners: Der Weltordner enthält alle Daten einer Welt.
        • data: Ordner mit verschiedene Dateien mit Daten dieser Welt
          • command_storage_<namensraum>.dat: Diese Datei enthält die durch Befehle gespeicherten NBT-Daten im Namensraum <namensraum>. Es handelt sich um eine GZip-komprimierte NBT-Datei. Für jeden Namensraum, der einen Wertspeicher enthält, wird eine solche Datei angelegt.

Datenstruktur

  • command_storage_<namensraum>.dat: Diese Datei enthält die durch Befehle gespeicherten NBT-Daten im Namensraum <namensraum>.
    • die namenslose Haupteigenschaft
      • DataVersion: die Datenversion, in der die Datei zuletzt gespeichert wurde
      • data
        • contents: enthält einen Eintrag für jeden Wertspeicher in diesem Namensraum
          • <name>: die im Wertspeicher <namensraum>:<name> gespeicherten NBT-Daten
            • Daten, die durch die Befehle gespeichert wurden

Geschichte

Versionsgeschichte der Java Edition
Vollversion 1.15 (19w38a)