関数(Function、ファンクションと呼ばれることもある)は、拡張子 .mcfunction のテキストファイルを使用することで、プレイヤーが簡単にコマンドのリストをスクリプト化して実行できる機能である。問題点を回避するために、関数ファイルに UTF-8(BOM なし)をエンコーディングすることを推奨する。
使用法
関数を使用するには、まずテキストファイルを [WORLD_NAME]/data/functions 内の一番上のフォルダに配置する必要がある。シングルプレイの場合、ワールドのフォルダの位置は .minecraft/saves となる。マルチプレイの場合、それを使用した全てのワールドのフォルダに関数を配置する必要がある。この一番上のフォルダの名前は、このフォルダー内の関数を実行するときに使用されるネームスペースとなる。関数は、フォルダ内のサブフォルダに配置することもできる。
たとえば、関数 custom:example/test を実行すると、functions/custom/example/test.mcfunction フォルダ内の関数が参照される。関数を実行しようとしているときに名前空間が存在していれば、デフォルトで minecraft: の名前空間となる。今後の、デフォルトでの名前空間への要素の追加時に意図しない振る舞いを防ぐために、オリジナルの名前空間の使用を推奨する[1]。
テキストファイルである関数は、容易に変更可能であり、大量に使用されたとしてもコマンドブロックのように遅延を誘発する可能性は低い。関数が変更または追加された場合、/reload コマンドを使用することでディスクから関数ファイルがリロードされる。これにより、Minecraft のゲームを終了しても再入力する必要なく、関数ファイルの変更を認識することができる。
関数が正常に実行されると、チャットに関数「[関数ファイルのディレクトリ]」からコマンドを [数] つ実行しましたというメッセージが表示される。関数の正常な出力は(複雑なスコアボードコマンドを使用せずに)コンパレーターでは測定できず、関数には「条件付き」引数が存在しない。
関数のシステム
関数のシステムのテスト。 3つの /tellraw メッセージと1つの /give コマンドがこのシンプルな関数で使用された。
.mcfunction 関数ファイル内では、通常のスラッシュ (/) を使用せずに1行に1つの有効なコマンドが配置される。プレイヤーは、関数テキストファイル内で # を付けてコメントを追加することができる。
関数内の個々のコマンドは、コマンドブロックでの32500文字の文字制限より長く記述することができる。関数内で実行されるコマンドの総数は、/gamerule maxCommandChainLength に従う。これは、デフォルトで65536個である。この制限を超えるコマンドは関数から無視される。
関数の実行
関数はまた、すべてのコマンドを1回のティックで実行する。他の関数の中から呼び出された関数は、親と同じティックでコマンドを実行する。
関数内で起こる位置の変化は、コマンドの順序に関係なく次の繰り返しまでその関数(または関数内で呼び出される他の関数)内の他のコマンドで使用される相対座標には影響しない。/execute コマンドでこれを回避することができる。
例えば、
tp @a ~ ~5 ~ setblock ~ ~-1 ~ emerald_block execute @a ~ ~ ~ setblock ~ ~-1 ~ diamond_block
のこれらの3つのコマンドは、5ブロック上のすべてのプレイヤーをテレポートし、エメラルドブロックへのテレポートの前の元の位置よりも1ブロック下にあり、テレポート後の新しい位置よりも1ブロック低い位置にダイヤモンドブロックを設置する。この動作は、セレクター内の位置引数には影響しない。セレクターは、実行時に常に現在の位置をテストする。
現在、ゲーム内で関数ファイルを実行する方法はいくつか存在する。
コマンド
- プレイヤーが一回関数を実行することができるようになる。
- 関数内のコマンドは、
/functionコマンドを実行したエンティティまたはコマンドブロックを介して実行される - オプションの引数
ifとunlessは、selectorが見つかったとき、またはワールドに見つからなかったときにのみ関数を実行する。 - 使用法:
/function <namespace:path/to/function/file> [if|unless] [対象]
/gamerule gameLoopFunction
- ティック毎に関数を実行するようになる。
- 関数内のコマンドは、サーバーを介して実行される。
- 「サーバー」がコマンドを実行する座標は (0, 0, 0) である
- 複数の関数をループさせる必要がある場合、そのループ関数ファイルにfunctionコマンドを挿入したり、その関数に function コマンドを挿入することができる。
- 使用法:
/gamerule gameLoopFunction <namespace:path/to/function/file>
進捗
進捗は、それらを達成するための報酬として一度関数を実行することができる。関数のコマンドは、進捗を達成したプレイヤーを介して実行される。
報酬の関数は、次の形式を使用して進捗のJSONファイルから使用することができる。
{
"rewards": {
"function": "namespace:path/to/function/file"
}
}
歴史
| Java Edition | |||||
|---|---|---|---|---|---|
| 1.12 | 1.12-pre1 | 関数が追加された。 | |||
| 1.12-pre3 | コマンドが /(スラッシュ)から始められなくなった。 | ||||
| コメントの前には # しか付けられなくなり、// が使えなくなった。 | |||||
| 1.12-pre4 | /function コマンドに新しい引数が追加された: [if|unless] [対象] | ||||
| 1.12-pre6 | スキップされた関数(条件が失敗した場合)がコマンドで使用されると、失敗と見なされるようになった。 | ||||
問題点
「Function」に関する問題点は、バグトラッカーにて管理されている。問題点の報告はそちらで行ってほしい。
脚注
| ヘルプ | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| メニュー画面 |
| ||||||||||||||||
| 開発元 | |||||||||||||||||
| ゲームのカスタマイズ | |||||||||||||||||
| エディション |
| ||||||||||||||||
| ゲーム |
| ||||||||||||||||
| 映画 |
| ||||||||||||||||
| 書籍 |
| ||||||||||||||||
| その他メディア |
| ||||||||||||||||
| イベント |
| ||||||||||||||||
| 公式商品 |
| ||||||||||||||||
| その他 | |||||||||||||||||