このコマンドの実行文脈(実行者、実行地点、視方向など)をそのまま適用して関数を実行する。
Java Editionでは、データパックから単一の関数、あるいは関数タグに含まれるタグすべてを実行する。
Bedrock Editionでは、ビヘイビアーパックから単一の関数を実行する。
構文[]
- Java Edition
function <name> [<arguments>|with <data_source> <path>]- 関数を実行する。関数がマクロを含む場合には、引数に代入する値を提供するコンパウンドを指定することができる。コンパウンドを指定しておきながら非マクロ関数を実行したり、あるいはコンパウンド内にマクロで使用しないキー・値の組があっても構わない。
... <arguments>を使用する場合は、コンパウンドを直接記述する。... with <data_source> <path>を使用する場合は、/data getのようにワールド内に存在するブロックエンティティ、エンティティ、NBTストレージから取得する形式で指定することができる。
- Bedrock Edition
function <name: filepath>
引数[]
JE:<name>:関数
BE:name: filepath:ファイルのパス
- Java Editionでは,名前空間IDで特定の関数を指定するか、
#から始まる関数のタグを指定する。 Bedrock Editionでは,path/to/function/fileの形式で[behavior_pack]/functions/path/to/function/file.mcfunctionに位置する関数を指定する。
<arguments>:NBTタグ
- マクロ関数が使用する引数に対して、代入値を与えるためのコンパウンド。
{<引数名>: <代入値>}, ...の形式によって、マクロ関数が使用する引数名をキー、そこに代入する値を値とする値・キーの組を列挙する。 - SNBTフォーマットでのNBTタグで指定する。
<data_source>
- 代入値を与えるためのコンパウンドの取得元となる対象を指定する。以下の構造を取る。
block <sourcePos>: ブロックエンティティから取得する。<sourcePos>:ブロック座標 ... ブロックエンティティの座標。
entity <source>: エンティティから取得する。<source>:エンティティ ... エンティティを指定する。プレイヤー名、ターゲットセレクターまたはUUIDで指定する。また、ターゲットセレクターは単一のものである必要がある。
storage <source>: NBTストレージから取得する。
<path>:NBTパス
- 代入値を与えるコンパウンドのNBTパス。この際、マクロが使用する引数にはすべて代入値が与えられていなければならないが、コンパウンド内にマクロが使用しない値とキーの組が存在しても良い。
- NBTパスで指定する。
結果[]
| コマンド | トリガー | Java Edition | Bedrock Edition |
|---|---|---|---|
| 任意 | 引数が正しく指定されていない | 構文解析不能 | 構文解析不能 |
| 指定した関数及び関数タグが存在しない | 失敗 | 失敗 | |
| マクロ関数が指定されているが、コンパウンドが指定されていない | 失敗 | N/A | |
| コンパウンドで指定されていない引数がある | 失敗 | N/A | |
sourcePosが読み込み範囲外、またはワールド範囲外である | 失敗 | N/A | |
sourcePosのブロックがブロックエンティティでない | 失敗 | N/A | |
sourceに該当するエンティティがいない | 失敗 | N/A | |
pathに相当するNBTタグが存在しない | 失敗 | N/A | |
pathで指定されたタグがコンパウンドでない | 失敗 | N/A | |
| マクロ関数に代入値を代入した結果コマンドでコマンドエラーが発生した | 失敗 | N/A | |
| 成功時 | |||
出力[]
| コマンド | エディション | 状況 | 成功回数 | /execute store success ... | /execute store result ... |
|---|---|---|---|---|---|
| 任意 | Java Edition | 失敗時 | 0 | 0 | 0 |
| 関数以外の方法で実行され、成功した時 | 関数によって実行されたコマンド+1(このコマンド自身) | - | - | ||
/returnによらず関数が終了した場合 | 同上 | 0 | 0 | ||
関数内に組み込まれた/returnによって終了した場合 | 同上 | /returnの与える成功回数。 | /returnの戻り値。こちらを参照 | ||
| 関数内で実行された場合 | - | 1 | 0 | ||
| Bedrock Edition | 失敗時 | 0 | N/A | N/A | |
| 成功時 | 1 | N/A | N/A |
/return runコマンドを含む関数を複数実行しようとした場合は、全関数の中で最初に出現した/returnコマンドの時点で関数の実行が停止し、これが与える戻り値が採用される。
- 成功数は、関数により実行されたすべてのコマンドの数+1になる。
- 例えば、次の関数(括弧内はその内容)が存在するとき、
- foo:bar1(
function foo:bar2) - foo:bar2(
function foo:bar3) - foo:bar3(
say hi) /function foo:bar3の成功数は1(foo:bar3内のコマンドが1つ)+1(functionコマンド自身)= 2/function foo:bar2の成功数は2(/function foo:bar3の成功数)+1(functionコマンド自身)= 3/function foo:bar1の成功数は3(/function foo:bar2の成功数)+1(functionコマンド自身)= 4となる。
- foo:bar1(
- チャットに表示される出力メッセージは、実行されたコマンドの数(成否を問わない)+関数によって呼び出された関数の数である。
/function foo:bar3の出力数は1(foo:bar3内のコマンドが1つ)/function foo:bar2の出力数は1(foo:bar2内のコマンドが1つ)+1(foo:bar3内のコマンドが1つ)+1(組み込まれた関数が1つ)= 3./function foo:bar1の出力数は1(foo:bar1内のコマンドが1つ)(foo:bar2内のコマンドが1つ)+1(foo:bar3内のコマンドが1つ)+1(組み込まれた関数が2つ)= 5となる。
- 成功時は、
/execute store successの値は1、失敗時は0になる。 - 成功時は、
/execute store resultの値は出力数と同じで、失敗時は0になる。
使用例[]
- Java Editionでは:
- 'data/functions/custom/example/test.mcfunction'の関数を実行する:
function custom:example/test - 半径2ブロック以内に羊がいる場合に関数を実行する:
execute if entity @e[type=sheep,distance=..2] run function custom:example/test - 実行者がプレイヤーでない場合に関数を実行する:
execute unless entity @s[type=player] run function custom:example/test
歴史[]
| Java Edition | |||||
|---|---|---|---|---|---|
| 1.12 | pre1 | /functionが追加された。 | |||
| 1.13 | 17w49b | 引数にタグが使えるようになった。 | |||
/execute [if/unless]の存在により、[if/unless]がこのコマンドの引数から削除された。 | |||||
| 1.20 | 23w16a | /returnで戻り値を設定できるようになった。 | |||
| 1.20.2 | 23w31a | /return run ...で戻り値を設定できるようになった。 | |||
| マクロ関数の追加に伴い、マクロ関数の要求する引数を与えるコンパウンドを指定することができる新しい構文に切り替わった。 | |||||
| 1.20.3 | 23w41a | /returnを使用しない場合、および実行の際にエラーが生じた場合一切戻り値を返さなくなった。 | |||
| 23w44a | /return runコマンドを含む関数を複数実行しようとした場合は、全関数の中で最初に出現した/returnコマンドの時点で関数の実行が停止するようになった。
| ||||
/return runコマンドで実行された場合にはコマンドが失敗しても常に戻り値を持つようになった。 | |||||
| Bedrock Edition | |||||
| 1.8.0 | beta 1.8.0.8 | /function が追加された。 | |||
関連項目[]
- タグ – 関数を毎tick実行する方法を解説している。