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

Datengenerator

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche

Der Datengenerator ist ein Programm, das verschiedene Daten aus Minecraft extrahiert und als JSON-Dateien zur Verfügung stellt.

Aufruf[Bearbeiten]

Der Datengenerator ist im Minecraft-Server integriert. Diesen lädt man sich in einen Ordner seiner Wahl herunter, Download-Links findet man im Wiki in der Versionsgeschichte der gewünschten Minecraft-Version. Den Datengenerator startet man mit folgendem Befehl im Serverordner:

java -classpath minecraft_server.VERSION.jar net.minecraft.data.Main --help

Diesen Befehl kann man in der Windows-Eingabeaufforderung eingeben oder als Batch-Datei abspeichern. Das Ergebnis bei Angabe des --help-Parameters ist folgendes:

Option             Description
------             -----------
--all              Include all generators
--client           Include client generators
--dev              Include development tools
--help             Show the help menu
--input <String>   Input folder
--output <String>  Output folder (default: generated)
--reports          Include data reports
--server           Include server generators

Parameter[Bearbeiten]

Die Parameter haben folgende Bedeutung:

Parameter Bedeutung
--all Ruft alle Generatoren nacheinander auf: --client, --dev und --server.
--client Konvertierung von Stringified NBT (SNBT) zu NBT. Alle Dateien im mit --input festgelegten Eingabeordner, die vom Dateityp .snbt sind, werden im Ausgabeordner in .nbt-Dateien konvertiert. So kann man NBT-Daten ändern, ohne ein Zusatzprogramm, wie z.B. den NBTExplorer, benutzen zu müssen. Dazu konvertiert man zuerst die Datei mit den gewünschten NBT-Daten zu SNBT, ändert die Daten mit einem Texteditor und konvertiert sie zurück zu NBT.

Achtung: Vor jeder Konvertierung werden im Ausgabeordner automatisch alle Dateien (aber nicht Unterordner) gelöscht. Daher wird bei mehreren Eingabeordnern nur der Inhalt von einem zu finden sein.

--dev Konvertierung von NBT zu SNBT. Alle Dateien im mit --input festgelegten Eingabeordner, die vom Dateityp .nbt sind, werden im Ausgabeordner in .snbt-Dateien konvertiert, die man mit einem Texteditor öffnen kann. Möchte man z. B. die NBT-Datei level.dat konvertieren, muss man sie zuerst in level.nbt umbenennen.

Achtung: Vor jeder Konvertierung werden im Ausgabeordner automatisch alle Dateien (aber nicht Unterordner) gelöscht. Daher wird bei mehreren Eingabeordnern nur der Inhalt von einem zu finden sein.

--help Gibt den Hilfetext aus.
--input <String> Legt den Eingabeordner für --dev fest. Zwar kann der Parameter auch mehrfach angegeben werden und es werden auch alle Dateien in allen Eingabeordnern konvertiert, aber es wird nur den Inhalt eines einzigen Eingabeordners im Ausgabeordner zu finden sein.
--output <String> Legt den Ausgabeordner fest. Standardmäßig wird der Ordner "generated" im Serverordner erzeugt und gefüllt. Für --dev muss ein Ausgabeordner explizit angegeben werden.
--reports Erzeugt im Ausgabeordner den Ordner reports mit drei Listen (Aufbau der Listen siehe unten):
--server Erzeugt im Ausgabeordner den data-Ordner eines Datenpakets für den Namensraum minecraft. Enthalten sind alle Fortschrittsdaten, Rezeptdaten und Aliasdaten. Alternativ kann man diese auch manuell aus der minecraft.jar extrahieren.

Außerdem wird auch eine Konvertierung von SNBT zu NBT durchgeführt, die der Parameter --client separat macht.

Ausgabeordner[Bearbeiten]


  • Name des Serverordners:
    Der Serverordner.

    • generated:
      Der Standard-Ausgabeordner des Datengenerators. Mit dem Parameter --output kann man einen anderen Ausgabeordner angeben.

      • .cache:
        Dieser Ordner wird vom Datengenerator automatisch erzeugt und dient als Zwischenspeicher.

        • cache:
          Diese Textdatei wird vom Datengenerator als Zwischenspeicher erzeugt und enthält die Hashwerte und Namen aller Daten.

      • data:
        Dieser Datenpaket-Ordner wird vom Datengenerator mit dem Parameter --server erzeugt.

      • reports:
        Dieser Ordner wird vom Datengenerator mit dem Parameter --reports erzeugt und enthält die generierten Listen.

      • tmp:
        Ein temporärer Ordner, der vom Datengenerator zwar automatisch erzeugt, aber nicht benutzt wird und leer bleibt.

Generierte Listen[Bearbeiten]

Mit dem --reports-Parameter erzeugt der Datengenerator Listen, die folgenden Aufbau haben:

Blockliste[Bearbeiten]


  • Die namenlose Haupteigenschaft.

    • ID-Name:
      Der ID-Name des Blockes.

      • properties:
        Optional die Blockzustände des Blockes.

        • Name des Blockzustandes:
          Liste aller Werte, die dieser Zustand annehmen kann.

          • Ein Wert des Blockzustandes.

      • states:
        Die Varianten des Blockes.

        • Eine Variante.

          • properties:
            Optional ein bestimmter Blockzustand, falls der Block welche hat.

            • Name des Blockzustandes:
              Wert des Blockzustandes.

          • id:
            Jede Variante hat eine eindeutige Nummer, beginnend bei 0 für Luft. Die Varianten sind fortlaufend durchnummeriert, sodass sich die ID für eine bestimmte Variante mit jeder Minecraft-Version ändern kann.

          • default:
            Mit "true" wird die Standardvariante beschrieben, die z. B. im Inventar zu sehen ist. Alle anderen Varianten des Blockes haben den Wert "false", aber dieser muss nicht angegeben werden.

Beispiel Grasblock:

 "minecraft:grass_block": {
   "properties": {
     "snowy": [
       "true",
       "false"
     ]
   },
   "states": [
     {
       "properties": {
         "snowy": "true"
       },
       "id": 8
     },
     {
       "properties": {
         "snowy": "false"
       },
       "id": 9,
       "default": true
     }
   ]
 },

Gegenstandsliste[Bearbeiten]


  • Die namenlose Haupteigenschaft.

    • ID-Name:
      Der ID-Name des Gegenstandes.

      • protocol_id:
        Jeder Gegenstand hat eine eindeutige Nummer, beginnend bei 0 für Luft. Zu den Gegenständen gehören auch die Blöcke, die im Inventar sein können. Die Gegenstände sind fortlaufend durchnummeriert, sodass sich die ID für einen bestimmten Gegenstand mit jeder Minecraft-Version ändern kann.

Beispiel Eimer:

 "minecraft:bucket": {
   "protocol_id": 486
 },

Befehlsliste[Bearbeiten]

Die Befehlsliste enthält die Logik des Befehle-Parser Brigadier. Der prüft einen Befehl bereits bei der Eingabe, daher geht seine Prüfung strikt von links nach rechts: Das erste Element muss ein Befehl sein. Danach folgt bei vielen Befehlen ein Parameter, ggf. gefolgt von einem weiteren Parameter etc. Jede mögliche Parameterkette ist in der Liste enthalten. Eine einzelne Parameterkette ist so aufgebaut:

  • Die Eigenschaften des ersten Parameters werden beschrieben, die restlichen Parameter dieser Kette stecken in der children-Eigenschaft des ersten Parameters.
  • In der children-Eigenschaft geht es genauso weiter: Das Eigenschaften des nächsten Parameters werden beschrieben, die restlichen Parameter dieser Kette stecken wieder in einer children-Eigenschaft.
  • Das geht immer so weiter bis zum letzten Parameter dieser Kette.
  • Sobald ein Teil der Parameterkette ausführbar ist, wird das mit der executable-Eigenschaft gekennzeichnet.
  • Danach kann die Parameterkette weitergehen (children), was einer optionalen Eingabe entspricht.

  • Die namenlose Haupteigenschaft.

    • type:
      "root" für die Befehlsliste.

    • children:
      Alle Befehle.

      • Name des Befehls:
        Die Eigenschaften dieses Befehls.

        • type:
          Immer "literal", weil ein Befehl vom Befehle-Parser wörtlich genommen wird.

        • executable:
          Optional "true", wenn der Befehl an diesem Punkt (also ohne Parameter) ausführbar ist. Ohne Angabe gilt "false", d. h. der Befehl ist alleine nicht ausführbar.

        • redirect:
          Optional, wenn der Befehl ein Alias für einen anderen Befehl ist. Ein Array, allerdings immer nur mit einem Element.

          • Der Name des anderen Befehls.

        • children:
          Optional, wenn der Befehl Parameter hat.

          • Name des Parameters:
            Der erste Parameters der Parameterkette.

            • type:
              Entweder "literal", wenn der Parameter eine Textkonstante ist oder "argument", wenn er eine andere Art von Befehlsparameter ist, die durch die parser und ggf. properties genauer beschrieben wird.

            • parser:
              Der Datentyp des Parameters (sofern er nicht "literal" ist). Es gibt zahlreiche Minecraft-Datentypen (z. B. "minecraft:block_pos" für die Eingabe von drei Koordinaten, "minecraft:block_state" für die Eingabe eines ID-Namens (ggf. mit Blockzustand), "minecraft:entity" für ein Objekt etc.) sowie einige Grund-Datentypen, die im Befehle-Parser Brigadier definiert sind (z. B. "brigadier:bool", "brigadier:integer", "brigadier:string"). Eine ausführliche Dokumentation steht hier.

            • properties:
              Optional die Eigenschaften des Parameters (sofern er nicht "literal" ist).

              • type:
                Der Typ der Parametereigenschaft: "players" oder "entities" für Spieler oder Objekte (wobei amount die Menge genauer festlegt), "word", "phrase" und "greedy" für verschiedene Arten von Texteingaben.

              • amount:
                Die Menge der Spieler oder Objekte: "single" für genau ein , "multiple" wenn mehrere möglich sind (z.B. beim /give-Befehl).

              • min:
                Minimum bei einer Zahleneingabe. Eine Kommazahl (float).

              • max:
                Maximum bei einer Zahleneingabe. Eine Kommazahl (float).

            • executable:
              "true", wenn der Befehl an diesem Punkt der Parameterkette ausführbar ist.

            • redirect:
              Optional, wenn der Befehl einen Unterbefehl ausführen kann, wie z. B. /execute.

              • Der Unterbefehl.

            • children:
              Optional die weiteren Parameter dieser Parameterkette, siehe oben unter children. Die Parameterkette endet damit, dass der letzte Parameter keine children hat.

Beispiel Befehl /help:

   "help": {
     "type": "literal",
     "children": {
       "command": {
         "type": "argument",
         "parser": "brigadier:string",
         "properties": {
           "type": "greedy"
         },
         "executable": true
       }
     },
     "executable": true
   },

Geschichte[Bearbeiten]