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

Funktion

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche

Funktionen sind Textdateien, die Befehlen enthalten. Beim Aufruf mit dem Befehl /function werden die Befehle ausgeführt.

Dateien[Bearbeiten | Quelltext bearbeiten]

Funktionen müssen selbst angelegt werden, das Spiel hat keine Funktionen, die man als Vorbild nutzen könnte.

Entfällt mit Version 1.13: Funktionen werden im Weltordner unter /data/functions/Namensraum gespeichert. Neu mit Version 1.13: Funktionen werden in einem Datenpaket gespeichert. Idealerweise hinterlegt man Funktionen in einem eigenen Namensraum. Es kann auch der minecraft-Namensraum verwendet werden. Das hat den Vorteil, dass man ihn beim Aufrufen der Funktion weglassen kann, stört aber, wenn zuküntig eine Minecraft-Funktion mit diesem Namen hinzugefügt wird.

Funktionen sind vom Dateityp .mcfunction und können mit einem normalen Texteditor angesehen und geändert werden. Beispiele:

Entfällt mit Version 1.13:
.minecraft/saves/Name des Weltordners/data/functions/eigener-namensraum/eigene-funktion.mcfunction

.minecraft/saves/Name des Weltordners/data/functions/minecraft/eigene-funktion.mcfunction

Neu mit Version 1.13:
.minecraft/saves/Name des Weltordners/datapacks/Name des Datenpakets/data/eigener-namensraum/functions/eigene-funktion.mcfunction

.minecraft/saves/Name des Weltordners/datapacks/Name des Datenpakets/data/minecraft/functions/eigene-funktion.mcfunction

Nach dem nächsten Spielstart oder nach dem Befehl /reload können die Funktionen verwendet werden. Für die Beispiele sieht das so aus:

Eigenschaften[Bearbeiten | Quelltext bearbeiten]

  • Jede Zeile in der Funktion steht für einen Befehl.
  • Dabei muss der Schrägstrich, der bei Eingabe eines Befehls im Chat benötigt wird, weggelassen werden.
  • Im Gegensatz zu Befehlsblöcken gibt es in Funktionen keine Begrenzung für die Länge von Befehlen.
  • Kommentare beginnen mit einer Raute #. Diese Zeilen werden bei der Ausführung der Funktion nicht beachtet. Mit Kommentaren kann und sollte man beschreiben, was die Funktion oder einzelne Befehle tun. Das Kommentarzeichen ist außerdem nützlich, um Befehle in der Testphase zu deaktivieren.
  • Leerzeilen werden ignoriert.
  • Funktionen mit unbekannten Befehlen oder Syntaxfehlern werden vom Befehl /reload nicht geladen. Die Ursache kann im Fehlerprotokoll nachgesehen werden, das beim Start des Spiels angezeigt wird, wenn man in den Launcher-Einstellungen "Ausgabeprotokoll öffnen" aktiviert hat.
  • Neu mit Version 1.13: Mehrere Funktionen können zu Funktions-Aliasen zusammengefasst werden. Die Funktionen in einer Aliasgruppe werden innerhalb eines Ticks nacheinander ausgeführt.
  • Funktionen können über den Befehl /function weitere Funktionen Neu mit Version 1.13: oder Funktions-Aliase aufrufen.
  • Alle Befehle einer Funktion werden in einem einzelnen Tick ausgeführt, auch wenn innerhalb der Funktion weitere Funktionen aufgerufen werden.
  • Beim Aufruf einer Funktion werden maximal 65536 Befehle ausgeführt. Dieser Wert kann durch den Befehl /gamerule maxCommandChainLength geändert werden.
  • Entfällt mit Version 1.13: Mit dem Befehl /gamerule gameLoopFunction kann eine Funktion festgelegt werden, die automatisch mit jedem Tick ausgeführt wird. Möchte man mehrere Funktionen mit jedem Tick ausführen, muss man sie mit der in dieser Spielregel festgelegten Funktion aufrufen.
  • Neu mit Version 1.13: Trägt man eine oder mehrere Funktionen in den Funktions-Alias minecraft:tick ein, werden sie automatisch mit jedem Tick an den Koordinaten (0,0,0) ausgeführt.
  • Beim Aufruf über den Befehl /function werden alle Befehle in der Funktion durch das Objekt oder den Befehlsblock ausgeführt, die die Funktion gestartet haben.
  • Eine Funktion kann aber auch über die rewards-Eigenschaft in den Fortschrittsdaten gestartet werden. Dann werden die Befehle in der Funktion durch den Spieler ausgeführt, der den Fortschritt erreicht hat.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Entfällt mit Version 1.13: Die Prüfung, ob ein vorausgegangener Befehl in einer Funktion erfolgreich war oder nicht, ist möglich, aber nur umständlich über den Befehl /stats oder den Befehl /scoreboard.

Neu mit Version 1.13:

  • Bedingungen werden mit dem Befehl /execute geprüft.
  • Wiederholungen sind möglich, indem sich eine Funktion selbst aufruft. Damit dies nicht endlos geschieht, muss es eine Abbruchbedingung geben. Ansonsten beendet das Spiel einen Funktionsaufruf nach der Anzahl ausgeführter Befehle, die in der Spielregel maxCommandChainLength hinterlegt ist (standardmäßig 65536).

Im Beispiel werden folgende Befehle im Chat eingegeben:

/scoreboard objectives add durchlauf dummy
/scoreboard objectives add ende dummy
/scoreboard players set #test durchlauf 0 
/scoreboard players set #test ende 10
/function schleife

Die Befehle legen das Ziel "durchlauf" an, das jeden Schleifendurchlauf zählt und das Ziel "ende", das das Ende der Schleife bestimmt. Danach wird der Zähler "#test" initialisiert: Die Testschleife soll bei 0 beginnen und bei 10 enden. Schließlich wird die Funktion schleife.mcfunction aufgerufen, die so aussieht:

scoreboard players add #test durchlauf 1
tellraw @a { "score":{ "name":"#test", "objective":"durchlauf" } }
execute if score #test durchlauf < #test ende run function schleife

Die Funktion erhöht zuerst den Durchlauf der Testschleife um 1 und gibt die Zahl dann im Chat aus. Zum Schluss wird die Schleifenfunktion erneut aufgerufen, wenn der Durchlaufwert kleiner als der Endewert ist. Dadurch erscheinen die Zahlen 1 bis 10 im Chat. Es empfiehlt sich, nach dem execute-if-Befehl keine weiteren Befehle in der Funktion zu haben, denn diese werden mit jedem Funktionsaufruf ausgeführt, also in diesem Beispiel zehn Mal.

Geschichte[Bearbeiten | Quelltext bearbeiten]