Minecraft Wiki
Advertisement

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

Dateien

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

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ünftig 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:

.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

  • 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.
  • 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 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.
  • 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.
  • Trägt man eine oder mehrere Funktionen in den Funktions-Alias minecraft:load ein, werden sie automatisch 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

  • 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.

Einschränkungen

Mit Funktionen lassen sich mit nur einem Aufruf mehr Befehle ausführen als mit den größten Befehlsblocktechniken. Allerdings gibt es auch ein paar Einschränkungen gegenüber Befehlsblöcken:

  • In Funktionen lässt sich die Syntax und Semantik nur umständlich bis gar nicht prüfen.
  • Sie lassen sich nur von außen bearbeiten, ein Operator im Spiel kann sie nicht beeinflussen.
  • Um den Erfolg oder Misserfolg eines Vorgängerbefehls zu prüfen, benötigt man einiges an Vorwissen (execute). Im Befehlsblock kann man einfach auf die Schaltfläche "Bedingt" klicken um das zu prüfen.

Geschichte

Versionsgeschichte der Java Edition
Vollversion 1.12
17w17a
  • Die neue commands-Eigenschaft in den Fortschrittsdaten ermöglicht die Eingabe einer Liste von Befehlen, die beim Erreichen des Fortschritts ausgeführt werden
1.12-pre1
  • Funktionen hinzugefügt, sie ersetzen die Liste der Befehle in den Fortschrittsdaten
  • In den Fortschrittsdaten wird die commands-Eigenschaft durch die function-Eigenschaft ersetzt
  • Funktionen können auch unabhängig vom Erreichen eines Fortschritts über den neuen Befehl /function ausgeführt werden
1.12-pre3
  • Man kann Zeilen in Funktionen nicht mehr durch // auskommentieren, sondern nur noch durch #
  • Der Schrägstrich vor Befehlen muss in der Funktionsdatei nun weggelassen werden
1.12-pre4
  • Funktionen können nun durch den Befehl /function bedingt aufgerufen werden
1.12-pre6
  • Wird eine bedingte Funktion übersprungen, zählt das nun als Fehler
Vollversion 1.13
17w43a
  • Eigene Funktionen werden jetzt pro Welt in Datenpaketen gespeichert
17w45a
17w49a
  • Funktionen können zu Aliasen zusammengefasst werden
  • Der Funktions-Alias minecraft:tick führt die enthaltenen Funktionen mit jedem Tick aus
18w01a
  • Der Funktions-Alias minecraft:load führt die enthaltenen Funktionen bei jedem Laden der Datenpakete aus

Advertisement