Minecraft Wiki
Delphi42 (Diskussion | Beiträge)
(Unterschiede zur Datenspeicherung in Markierern hinzugefügt)
Delphi42 (Diskussion | Beiträge)
(Beschreibung der Funktionsweise überarbeitet)
Markierung: Überarbeitung
Zeile 1: Zeile 1:
 
Der '''NBT-Datenspeicher''' bietet für [[Befehl]]e eine effiziente Möglichkeit, [[NBT]]-Daten für die spätere Verwendung zwischenzuspeichern.
{{Baustelle|70|Delphi42}}
 
Der '''NBT-Datenspeicher''' bietet für [[Befehl]]e eine Möglichkeit, [[NBT]]-Daten für die spätere Verwendung zwischenzuspeichern.
 
   
 
== Funktionsweise ==
 
== 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.
In die Befehlen [[Befehl/data|/data]] und <code>[[Befehl/execute#store|/execute]] store</code> sowie <code>[[Befehl/execute#if data|/execute]] if data</code> erlauben den Zugriff auf den NBT-Datenspeicher durch Angabe von <code>storage ''<wertspeicher>''</code>, wobei ''<wertspeicher>'' ein beliebiger ID-Name ist. Dieser ID-Name bezeichnet einen ''Wertspeicher'', in dem die Daten gespeichert werden sollen. Ein solcher Wertspeicher wird angelegt, sobald dort zum ersten Mal Daten gespeichert werden. Mehrere Wertspeicher mit unterschiedlichen ID-Namen können gleichzeitig verwendet werden, um voneinander unabhängige Daten zu speichern.
 
  +
Wie bei Objekt- oder Blockdaten folgt auf die Angabe dieses Wertspeichers ein [[Befehl#NBT-Pfad|NBT-Pfad]], um auf einzelne Untereinträge der NBT-Daten zuzugreifen.
 
  +
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 <code>{}</code> 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 [[Namensraum|Namensräumen]]. Wird kein Namensraum explizit angegeben, so wird der Namensraum <code>minecraft</code> verwendet. Insbesondere in [[Datenpaket]]en ist die Verwendung eines eigenen Namensraums zu empfehlen, damit die Daten nicht durch andere Datenpakete überschrieben werden.
 
Der ID-Name des Wertspeichers erlaubt die Verwendung von [[Namensraum|Namensräumen]]. Wird kein Namensraum explizit angegeben, so wird der Namensraum <code>minecraft</code> verwendet. Insbesondere in [[Datenpaket]]en 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.
 
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 [[Befehl/data|/data]] und <code>[[Befehl/execute#store|/execute]] store</code> sowie <code>[[Befehl/execute#if data|/execute]] if data</code> erlauben den Zugriff auf den NBT-Datenspeicher durch Angabe von <code>storage ''<wertspeicher>''</code>, wobei ''<wertspeicher>'' der ID-Name des zu verwendenden Wertspeichers ist.
 
Wie bei Objekt- oder Blockdaten folgt auf die Angabe dieses Wertspeichers ein [[Befehl#NBT-Pfad|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 (<code>merge</code>) von Daten.
  +
Der Befehl <code>[[Befehl/execute#store|/execute]] store</code> 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 [[Befehl/bossbar|Bossleisten]] übertragen werden.
   
 
=== Unterschiede zur Datenspeicherung in Markierern ===
 
=== 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:
 
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 [[Objekt]]e und enthalten daher allgemeine Objektdaten zusätzlich zu den beliebigen gespeicherten Daten. Daher müssen die beliebigen Daten dort in der Eigenschaft <code>data</code> der NBT-Daten gespeichert werden.<br/>Im NBT-Datenspeicher können die Daten dagegen in beliebigen NBT-Pfaden gespeichert werden.
 
* [[Markierer]] sind [[Objekt]]e und enthalten daher allgemeine Objektdaten zusätzlich zu den beliebigen gespeicherten Daten. Daher müssen die beliebigen Daten dort in der Eigenschaft <code>data</code> der NBT-Daten gespeichert werden.<br/>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.<br/>Im NBT-Datenspeicher hinterlegte Daten sind dagegen immer abrufbar.
 
* 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.<br/>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 [[Befehl#Zielauswahl|Zielauswahl]] wie <code>@e[type=minecraft:marker,tag=meineDaten,sort=nearest,limit=1]</code> 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.
 
* Da sich Markierer an einer bestimmten Position befinden, ist es zum Beispiel möglich mit einer [[Befehl#Zielauswahl|Zielauswahl]] wie <code>@e[type=minecraft:marker,tag=meineDaten,sort=nearest,limit=1]</code> 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.

Version vom 22. Juni 2021, 17:46 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)