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]

Im Chat reagiert der Befehle-Parser auf einen Schrägstrich an erster Stelle und analysiert die folgende Eingabe noch während sie getätigt wird. Dazu vergleicht er die Eingabe mit einem intern vorhandenen Befehlsbaum. Das ist eine Baumstruktur aller Minecraft-Befehle mit ihren Parametern (statt Parameter kann man auch Argument sagen). Der Befehlsbaum legt aber nicht nur die Reihenfolge fest, sondern enthält auch Informationen zum jeweiligen Datentyp, den der Parser somit auch überprüfen kann. Mit dem Datengenerator kann man sich den Befehlsbaum in Listenform ausgeben lassen. Eine grafische Darstellung gibt es hier im Minecraft Modern-Wiki.

Sobald die Eingabe mit dem ersten Knoten des Befehlsbaumes übereinstimmt, hat der Parser den Befehl erfolgreich identifiziert, denn der Befehl muss immer am Anfang stehen. Aus dem Befehlsbaum nimmt der Parser dann den ersten Parameter des Befehls und zeigt ihn zur Unterstützung im Chat an. Hat der Spieler auch diese Eingabe fehlerfrei getätigt, zeigt der Parser den nächsten Parameter an usw., bis es keinen Parameter mehr gibt.

Die Programmfunktionen des Befehle-Parsers sind in die Programmbibliothek brigadier.jar ausgelagert, deren Quellcode öffentlich zugänglich ist (siehe Open-Source-Bibliotheken).

Beispiel[Bearbeiten]

/summon pig ~ ~ ~ {NoAI:true}

Ist die Chateinstellung Befehlsvorschläge aktiviert, reagiert der Parser bereits auf den allerersten Buchstaben nach dem Schrägstrich und zeigt alle Befehle aus dem Befehlsbaum an, die mit diesem Buchstaben beginnen.

Solange die Eingabe nicht mit dem entsprechenden Knoten im Befehlsbaum übereinstimmt, wird sie rot angezeigt. Beendet man die Eingabe an dieser Stelle vorzeitig, gibt der Parser die Meldung aus: "Unbekannter oder unvollständiger Befehl". Bei einigen Befehlsquellen (siehe unten) kann der führende Schrägstrich wegfallen.

Parser help.png

Die Reihenfolge und Schreibweise der Parameter eines Befehls legt die Befehlssyntax fest. Der Befehlsbaum enthält sämtliche Syntaxen aller Minecraft-Befehle.

Der Befehl /help liefert jeweils den ersten Teil einer Befehlssyntax: /summon <entity> [<pos>]. Dies entspricht den ersten Knoten im Befehlsbaum zu diesem Befehl.

Parser0.png

Beim Eingeben des Befehls wird die Syntax vom Parser nach und nach vervollständigt. Die vollständige Syntax für den Summon-Befehl lautet: /summon <entity> [<pos>] [<nbt>]. Dabei bezeichnen die spitzen Klammern 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 Eingaben stur nach dem Befehlsbaum ab und prüft dabei auch die Semantik, d. h. den Datentyp einer Eingabe. Beim summon-Befehl muss der erste Parameter ein Objekt sein. Daher vergleicht der Parser die Eingabe mit seiner internen Liste der Objekt-IDs und zeigt die passenden Objekt-IDs mit dem Namensraum "minecraft" über der Eingabe als Vorschlag an. Findet der Parser die Eingabe nicht in seiner internen Liste der Objekt-IDs, meldet er nach dem Abschicken der Eingabe: "Unbekanntes Objekt".

Parser2.png

Als nächstes kann beim summon-Befehl eine Position folgen. Die Eingabe wird an eine Unterfunktion übergeben, die prüft, ob es drei Kommazahlen oder Tilde-Zeichen sind, die zusammen eine gültige Positionsangabe ergeben. Gibt man den Befehl /summon pig a 2 3 ein, meldet der Parser: "Kommazahl erwartet". Beim Erkennen des ersten Fehlers bricht der Parser ab und schaut sich die weiteren Eingaben gar nicht erst an.

Parser3.png

Die Eingabe {NoAI:true} ist Stringified NBT, d. h. NBT-Daten in Textform. Auch diese Eingabe wird von einer Unterfunktion abgearbeitet. Diese erkennt Leerzeichen, geschweifte und eckige Klammern, Doppelpunkte und Kommas als Trennzeichen und erwartet Eingaben mit den Bedeutungen "Eigenschaftsname" und "Eigenschaftswert". Die NBT-Eigenschaft mit dem Namen "NoAI" soll hier 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 Eingaben 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