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

Befehle-Parser

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche

Der Befehle-Parser analysiert einen eingegebenen Befehl, damit ihn das Spiel ausführen kann. Im Zuge dieser Analyse erkennt der Parser falsch eingegebene Befehle und führt sie nicht aus. Stattdessen erhält der Spieler eine Rückmeldung mit der Angabe seines Eingabefehlers.

Funktionsweise[Bearbeiten]

Der Parser erhält eine Zeichenkette, zum Beispiel den Befehl /summon pig ~ ~ ~ {NoAI : true}. Er zerlegt die Zeichenkette in Teilketten, die durch Leerzeichen voneinander getrennt sind (wozu auch Zeilenumbrüche oder Tabulatorzeichen gehören). Alles, was zwischen geschweiften Klammern steht, ist eine eigene Teilkette (Stringified NBT oder SNBT genannt):

/summon
pig
~
~
~
{NoAI : true}

Die erste Teilkette muss ein existierender Befehl sein. Neu mit Version 1.13: Der Parser überprüft bereits die laufende Eingabe und zeigt sie solange rot an, bis sie korrekt ist. Zusätzlich gibt der Parser nach der Eingabe bei einem Fehler die Meldung aus: "Unknown command" ("Unbekannter Befehl"). Bei einigen Befehlsquellen (siehe unten) kann der führende Schrägstrich wegfallen.

Entfällt mit Version 1.13: Alle weiteren Teilketten sind die Argumente oder Parameter des Befehls. Ihre Reihenfolge und Schreibweise legt die Befehlssyntax fest, die man meistens erhält, wenn man den Befehl ohne Parameter eingibt. Alternativ dazu kann man auch den Befehl /help verwenden. Für den summon-Befehl lautet die Syntax:

/summon <Objekt> [<x> <y> <z>] [<NBT-Daten>]

Neu mit Version 1.13: Alle weiteren Teilketten sind die Argumente oder Parameter des Befehls. Ihre Reihenfolge und Schreibweise legt die Befehlssyntax fest, die man erhält, wenn man den Befehl /help verwendet. Für den summon-Befehl lautet die Syntax:

/summon <entity> [<pos>] [<nbt>]

Die spitzen Klammern bezeichnen einen Parameter, die eckigen Klammern bedeuten, dass der Parameter optional ist, also weggelassen werden kann. Der Summon-Befehl hat also drei Parameter, die letzten beiden sind optional.

Parser1.png

Der Parser arbeitet die Teilketten stur nach der vorgegebenen Syntax des erkannten Befehls ab und prüft dabei auch die Semantik, d. h. die korrekte Bedeutung der Teilkette. Beim summon-Befehl muss die zweite Teilkette ein Objekt sein. Neu mit Version 1.13: Der Parser erkennt ein existierendes Objekt bereits während der Eingabe und zeigt es mit dem Namensraum "Minecraft" an. Findet der Parser die Teilkette dagegen nicht in seiner internen Liste der Objekt-IDs, meldet er nach der Eingabe: "Unknown entity" ("Unbekanntes Objekt").

Parser2.png

Als nächstes kann beim summon-Befehl eine Position folgen. Wenn es also nach der Objekt-Teilkette noch drei weitere Teilketten gibt, müssen das drei Zahlen (oder Tilde-Zeichen) sein, die zusammen eine Positionsangabe ergeben. Gibt man den Befehl /summon pig a b c ein, meldet der Parser: "Expected double" ("Double-Zahl erwartet"). Beim Erkennen des ersten Fehlers bricht der Parser ab und schaut sich die weiteren Teilketten gar nicht erst an.

Parser3.png

Die Teilkette {NoAI : true} ist Stringified NBT, d. h. NBT-Daten in Textform. Der Parser übergibt die Teilkette an eine Unterfunktion, einen speziellen Parser für NBT-Daten. Dieser erkennt Leerzeichen, geschweifte und eckige Klammern, Doppelpunkte und Kommas als Trennzeichen und erzeugt neue Teilketten mit der Bedeutung "Eigenschaftsname" und "Eigenschaftswert":

NoAI
true

Die NBT-Eigenschaft mit dem Namen "NoAI" soll also den Wert "true" haben. Der Parser prüft bei den NBT-Daten nur die Syntax, nicht die Semantik. Ob ein Eigenschaftsname richtig geschrieben oder der Wert gültig ist, wird vom Parser weder beim Eintippen, noch beim Abschicken der Eingabe geprüft. Vielmehr werden unbekannte NBT-Daten akzeptiert, aber vom Spiel einfach ignoriert.

Parser4.png

Parser5.png

Parser6.png

Parser7.png

Wenn der Parser alle Teilketten abgearbeitet hat, übergibt er das Ergebnis an die interne Befehlsklasse, in diesem Fall an die Klasse des summon-Befehls. Sie erhält eine Objekt-ID, eine Position und eine SNBT-Textkette. Die Klasse nimmt keine Prüfung der übergebenen Daten vor, das hat der Parser erledigt. Sie führt den Befehl nur noch aus.

Um zu verstehen, wie eine Befehlsklasse die Daten verarbeitet (beispielweise wie die Abarbeitung von zwei Positionsangaben aussieht), kann man sich den Quellcode der Befehle in der minecraft.jar mit Forge, MCP oder Spigot anschauen.

Server-Konsole[Bearbeiten]

Wird ein Befehl falsch eingetragen, so wird eine kurze Beschreibung des Fehlers angezeigt. Der Befehl darf sowohl mit / (Schrägstrich) als auch ohne eingetragen werden.

Chat[Bearbeiten]

Ein falsch eingetippter Befehl wird nicht ausgeführt und gibt eine Fehlermeldung im Chat aus. Der eingetippte Befehl muss immer mit einem Schrägstrich / beginnen.

Befehlsblock[Bearbeiten]

Wenn ein Befehl falsch eingetragen wurde, wird wie beim Chat-Fenster eine Fehlermeldung ausgegeben, die im Befehlsblock steht. Zusätzlich werden bedingte Befehlsblöcke, die an diesen Befehlsblock angeschlossen sind, nicht ausgeführt. Der eingetragene Befehl kann optional einen / besitzen, muss aber nicht. In beiden Fällen wird er ausgeführt.

Funktion[Bearbeiten]

Ein Befehl darf nicht mit einem Schrägstrich / beginnen. Der Parser prüft die Syntax aller Funktionen beim Laden (Spielstart oder Befehl /reload). Fehler werden im Fehlerprotokoll gemeldet, das beim Start des Spiels angezeigt wird, wenn man in den Launcher-Einstellungen "Ausgabeprotokoll öffnen" aktiviert hat. Fehlerhafte Funktionen werden bei Eingabe vom Befehl /function nicht in der Auswahlliste angezeigt.

Geschichte[Bearbeiten]

Einzelnachweise[Bearbeiten]

Promotional Content