Markierung: Visuelle Bearbeitung |
(Java: 1.14.3-pre2;) |
||
Zeile 49: | Zeile 49: | ||
tellraw @a { "score":{ "name":"#test", "objective":"durchlauf" } } |
tellraw @a { "score":{ "name":"#test", "objective":"durchlauf" } } |
||
execute if score #test durchlauf < #test ende run function schleife |
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 |
+ | 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 Endwert 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. |
== Positionsübertragung == |
== Positionsübertragung == |
||
Zeile 58: | Zeile 58: | ||
Der Befehl führt von der Position der Augen aus einen if-block-Test aus um festzustellen ob sich etwas im Weg befindet, wenn nur Luft erfolgreich getestet wurde, wird die Funktion ''test/position.mcfunction'' vom [[Blickwinkel]] des Spielers zwei Blöcke vor ihm ausgeführt, welche so aussieht: |
Der Befehl führt von der Position der Augen aus einen if-block-Test aus um festzustellen ob sich etwas im Weg befindet, wenn nur Luft erfolgreich getestet wurde, wird die Funktion ''test/position.mcfunction'' vom [[Blickwinkel]] des Spielers zwei Blöcke vor ihm ausgeführt, welche so aussieht: |
||
particle minecraft:barrier ~ ~ ~ 0 0 0 1 1 |
particle minecraft:barrier ~ ~ ~ 0 0 0 1 1 |
||
− | execute if block ~ ~ ~ air positioned ^ ^ ^1 run function test:position |
+ | execute if block ~ ~ ~ minecraft:air positioned ^ ^ ^1 run function test:position |
− | Zur Visualisierung wurde ein Barrieren-Partikel verwendet, das dem Spieler anzeigt wo die Funktion überall schon gewesen ist. Dann erfolgt die Prüfbedingung, bei der wie beim Chat-Aufruf getestet wird ob, an der aktuellen relativen Position Luft ist. Wenn das der Fall ist, wird in Blickrichtung um einen Block nach vorne die selbe Funktion erneut aufgerufen. Diesen Selbstaufruf nennt man "Rekursion". Die Funktion wird aufhören, sobald sie die Prüfbedingung fehl schlägt oder sie bis zu den |
+ | Zur Visualisierung wurde ein Barrieren-Partikel verwendet, das dem Spieler anzeigt wo die Funktion überall schon gewesen ist. Dann erfolgt die Prüfbedingung, bei der wie beim Chat-Aufruf getestet wird ob, an der aktuellen relativen Position Luft ist. Wenn das der Fall ist, wird in Blickrichtung um einen Block nach vorne die selbe Funktion erneut aufgerufen. Diesen Selbstaufruf nennt man "Rekursion". Die Funktion wird aufhören, sobald sie die Prüfbedingung fehl schlägt oder sie bis zu den Chunk-Grenzen gelangt. |
== Einschränkungen == |
== Einschränkungen == |
||
Mit Funktionen lassen sich mit nur einem Aufruf mehr Befehle ausführen als mit den größten {{tw|Technik/Befehle|Befehlsblocktechniken}}. Allerdings gibt es auch ein paar Einschränkungen gegenüber Befehlsblöcken: |
Mit Funktionen lassen sich mit nur einem Aufruf mehr Befehle ausführen als mit den größten {{tw|Technik/Befehle|Befehlsblocktechniken}}. Allerdings gibt es auch ein paar Einschränkungen gegenüber Befehlsblöcken: |
||
− | * Funktionen lassen sich, außerhalb von Minecraft selbst, ausschließlich mit |
+ | * Funktionen lassen sich, außerhalb von Minecraft selbst, ausschließlich nur mit externen Programmen direkt prüfen. |
* Sie lassen sich nur von außen erstellen und bearbeiten, ein [[Operator]] im Spiel kann sie nicht beeinflussen. |
* Sie lassen sich nur von außen erstellen und 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 (<code>[[Befehl/execute|/execute]]</code>). Im Befehlsblock kann man einfach auf die Schaltfläche "Bedingt" klicken um das zu prüfen. |
+ | * Um den Erfolg oder Misserfolg eines Vorgängerbefehls zu prüfen, benötigt man einiges an Vorwissen (<code>[[Befehl/execute|/execute store]]</code>). Im Befehlsblock kann man einfach auf die Schaltfläche "Bedingt" klicken um das zu prüfen. |
== Geschichte == |
== Geschichte == |
||
Zeile 105: | Zeile 105: | ||
|list3= *Das Fehlerprotokoll zählt die Zeilen einer Funktion beginnend bei Zeile <code>1</code> und nicht mehr bei <code>0</code> |
|list3= *Das Fehlerprotokoll zählt die Zeilen einer Funktion beginnend bei Zeile <code>1</code> und nicht mehr bei <code>0</code> |
||
|group4= {{ver|1.14|18w43a}} |
|group4= {{ver|1.14|18w43a}} |
||
− | |list4= *Mit dem {{b|/schedule}} |
+ | |list4= *Mit dem {{b|/schedule}} ist es erstmalig möglich, Funktionen mit einer [[Tick]]-Verzögerung aufzurufen |
+ | |group5= {{ver|1.14.3|1.14.3-pre2}} |
||
+ | |list5= *Funktionen sind jetzt auf dem [[Server.properties#ops.json|Operator-Level-4]] und können sämtliche Operator-Befehle ausführen, unter anderem so auch den {{b|/forceload}} |
||
}} |
}} |
||
Version vom 9. Juli 2019, 17:20 Uhr
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:
- Befehl
/function eigener-namensraum:eigene-funktion
- Befehl
/function minecraft:eigene-funktion
oder einfacher mit dem Befehl/function eigene-funktion
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. - Beim Aufruf über den Befehl
/function
werden alle Befehle in der Funktion durch die Befehlsquelle ausgeführt, die die Funktion gestartet hat. - 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.
Spezielle Funktions-Aliasse:
- Trägt man eine oder mehrere Funktionen in den Funktions-Alias minecraft:tick ein, werden sie automatisch mit jedem Tick an den Koordinaten (0,4,1) ausgeführt.
- Trägt man eine oder mehrere Funktionen in den Funktions-Alias minecraft:load ein, werden sie automatisch beim Laden der Welt, beim disable/enable eines Datenpaketes mit Befehl
/datapack
, beim Befehl/reload
und beim drücken der Tastenkombination F3+T ausgeführt. - Ausführliche Informationen und ein Beispiel stehen unter Aliasdaten#tick.json und load.json
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 test: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 test/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 Endwert 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.
Positionsübertragung
Die Möglichkeit der Positionsübertragung (engl. Ray Casting direkt übersetzt für Strahlenumsetzung) ermöglicht es einem, ohne Bezugsobjekt von der aktuellen relativen Position, einen weiteren Schritt zu gehen.
Für das Beispiel wird nachfolgender Befehl eingetippt:
/execute anchored eyes if block ~ ~ ~ minecraft:air positioned ^ ^ ^2 run function test:position
Der Befehl führt von der Position der Augen aus einen if-block-Test aus um festzustellen ob sich etwas im Weg befindet, wenn nur Luft erfolgreich getestet wurde, wird die Funktion test/position.mcfunction vom Blickwinkel des Spielers zwei Blöcke vor ihm ausgeführt, welche so aussieht:
particle minecraft:barrier ~ ~ ~ 0 0 0 1 1 execute if block ~ ~ ~ minecraft:air positioned ^ ^ ^1 run function test:position
Zur Visualisierung wurde ein Barrieren-Partikel verwendet, das dem Spieler anzeigt wo die Funktion überall schon gewesen ist. Dann erfolgt die Prüfbedingung, bei der wie beim Chat-Aufruf getestet wird ob, an der aktuellen relativen Position Luft ist. Wenn das der Fall ist, wird in Blickrichtung um einen Block nach vorne die selbe Funktion erneut aufgerufen. Diesen Selbstaufruf nennt man "Rekursion". Die Funktion wird aufhören, sobald sie die Prüfbedingung fehl schlägt oder sie bis zu den Chunk-Grenzen gelangt.
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:
- Funktionen lassen sich, außerhalb von Minecraft selbst, ausschließlich nur mit externen Programmen direkt prüfen.
- Sie lassen sich nur von außen erstellen und 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 store
). Im Befehlsblock kann man einfach auf die Schaltfläche "Bedingt" klicken um das zu prüfen.
Geschichte
Versionsgeschichte der Java Edition | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Überblick |
| ||||||
---|---|---|---|---|---|---|---|
Befehle für Objekte |
| ||||||
Befehle für Welten |
| ||||||
Befehle für Server | |||||||
Historisch | |||||||
Bedrock Edition |
|
Standard-Ressourcen |
| ||||
---|---|---|---|---|---|
Standard-Weltdaten |
| ||||
Spielwelt | |||||
Software | |||||
Speicherformate | |||||
Einstellungen | |||||
Mehrspieler | |||||
Historisch |