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

We have begun migration of most wikis to our new host, Amazon Web Services. All but the top 100 wikis are in read-only mode until the migration is complete. Estimated completion: End of Week.

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 | Quelltext bearbeiten]

Der Parser erhält eine Zeichenkette, zum Beispiel den Befehl /summon pig ~ ~2 ~ {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:

/summon
pig
~
~2
~
{NoAI : true}

Die erste Teilkette muss ein existierender Befehl sein, ansonsten gibt der Parser die Meldung aus: "Unbekannter Befehl. Gib /help ein, um eine Liste von Befehlen zu erhalten". Bei einigen Befehlsquellen (siehe unten) kann der führende Schrägstrich wegfallen.

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>]

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. Findet der Parser die Teilkette nicht in seiner internen Liste der Objekt-IDs, meldet er: "Kann Objekt nicht erzeugen".

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: "'a' ist keine gültige Zahl". Beim Erkennen des ersten Fehlers bricht der Parser ab und schaut sich die weiteren Teilketten gar nicht erst an.

Die Teilkette {NoAI : true} übergibt der Parser 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, die jeweils eine eigene semantische Bedeutung haben. In diesem Fall sind es die zwei Teilketten mit der Bedeutung "Eigenschaftsname" und "Eigenschaftswert":

NoAI
true

Die NBT-Eigenschaft mit dem Namen "NoAI" soll also den Wert "true" haben.

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 Liste von NBT-Daten. 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 | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext bearbeiten]

Funktionen müssen nach einem ganz bestimmten Schema geschrieben sein. Der Befehlsparser ist dabei sehr strikt. Sobald sich ein kleiner Fehler eingeschlichen hat - wenn beispielsweise der erste Befehl mit einem / beginnt - so kann man den Befehl nicht einmal mit dem Befehl /function durch Tab ↹ finden.

Geschichte[Bearbeiten | Quelltext bearbeiten]