関数、ファンクション(英:Function)は、拡張子 .mcfunction
のテキストファイルを使用することで、プレイヤーが簡単にコマンドのリストをスクリプト化して実行できる機能である。問題点を回避するために、関数ファイルに UTF-8(BOM なし)をエンコーディングすることを推奨する。
使用法[]
関数を使用するには、まず、関数のファイルとするテキストファイルを、関数ファイルにおける最上位フォルダとなる [ワールド名]/datapacks/[データパック名]/data/functions
フォルダ内に配置する必要がある[1]。この functions
最上位フォルダの下位の階層構造の名前は、このフォルダ内の関数を実行するときに使用される名前空間となる。関数は、最上位フォルダ下位のフォルダの、更に下位となるサブフォルダに配置することもできる。
たとえば、関数 custom:example/test
を実行すると、data/custom/functions/example/test.mcfunction
フォルダ内の関数が参照される。名前空間を省略して関数を実行すると、自動的にデフォルトの minecraft:
の名前空間となる。今後の、デフォルトの minecraft:
の名前空間への要素の追加時に意図しない振る舞いを防ぐために、オリジナルの名前空間の使用を推奨する[2]。
テキストファイルである関数は、容易に変更可能であり、また、大量に使用されたとしても遅延を誘発する可能性はコマンドブロックよりも低い。関数が変更または追加された場合、そのままではその変化が反映されないが、 /reload
コマンドを使用することで記憶領域から関数ファイルが再読み込みされ、変化が反映される。これにより、Minecraftのゲームを再起動する必要なく、関数ファイルの変更を認識することができる。
/function
によって関数を実行した場合、チャットに関数「[関数ファイルのディレクトリ]」からコマンドを [数] つ実行しましたというメッセージが表示される。埋め込み関数の場合はチャットメッセージは表示されない。関数内のコマンドの成功数をコンパレーターで測定することはできないが、/execute store
コマンドを使用すれば成功数を測定すること自体は可能である。
コマンドブロックのように、オペレーター権限の範囲内であれば関数は任意のコマンドを実行できる。コマンドブロックで実行できないコマンドは実行できない。
関数ファイルの構文規則[]

関数のシステムのテスト。 3つの /tellraw
メッセージと1つの /give
コマンドがこのシンプルな関数で使用された。
.mcfunction
関数ファイル内では、通常のスラッシュ (/
) を使用せずに1行に1つの有効なコマンドが配置される。プレイヤーは、関数テキストファイル内で #
を付けてコメントを追加することができる。
関数内の個々のコマンドは、コマンドブロックでの32500文字の文字制限より長く記述することができる。関数内で実行されるコマンドの総数は、/gamerule maxCommandChainLength
に従う。これは、デフォルトで65536個である。この制限を超えるコマンドは関数から無視される。
関数の実行[]
関数はまた、すべてのコマンドを1回のティックで実行する。他の関数の中から呼び出された関数は、親と同じティックでコマンドを実行する。関数内のコマンドは、関数の呼び出された環境(コマンド実行者、座標、方角、など)に基づいてコマンドを実行する。
関数内でのコマンド実行環境は、コマンドの順序に関係なく次の繰り返しまでその関数(または関数内で呼び出される他の関数)内で変化しない。例外として、/execute
コマンドで関数を呼び出すことによりコマンド実行環境を変更できる。
例えば、
execute as @a at @s run function foo:bar
foo:bar
teleport @s ~ ~5 ~ setblock ~ ~-1 ~ emerald_block execute at @s run setblock ~ ~-1 ~ diamond_block
これはプレイヤーを5ブロック上にテレポートさせ、エメラルドブロックをテレポート前の足下座標に設置し、ダイヤモンドブロックをテレポート後の足下座標に設置する関数である。この振る舞いはターゲットセレクター引数には影響しない。
ゲーム内で関数ファイルを実行する方法はいくつか存在する。
コマンド[]
- 1つの関数、または、1つの関数タグに紐付く全ての関数を実行できる。
/function
コマンドが実行されたコマンド実行環境に基づいて関数を実行する。- コマンド実行環境は
/execute
コマンドによって変更できる。 - 使用法:
/function <name>
進捗[]
進捗は、その達成報酬として一度関数を実行することができる。関数のコマンドは、進捗を達成したプレイヤーを介して実行される。
報酬の関数は、次の形式を使用して進捗のJSONファイルから使用することができる。
{ "rewards": { "function": "namespace:path/to/function/file" } }
タグ[]
データパック 内のタグを使用することで、関数をグループ化することができる。これらのタグは、/function #(名前空間):(タグ)
でタグ内のすべての関数を実行するために呼び出すことができる。
minecraft:tick
でタグ付けされた関数は、毎ティック開始時に関数を実行するようになり、minecraft:load
でタグ付けされた関数は、読み込まれた時(もしくは再読み込みされた時)に一度関数を実行するようになる。
歴史[]
Java Edition | |||||
---|---|---|---|---|---|
1.12 | 1.12-pre1 | 関数が追加された。 | |||
1.12-pre3 | コマンドが /(スラッシュ)から始められなくなった。 | ||||
コメントの前には # しか付けられなくなり、// が使えなくなった。 | |||||
1.12-pre4 | /function コマンドに新しい引数が追加された: [if|unless] [対象] | ||||
1.12-pre6 | スキップされた関数(条件が失敗した場合)がコマンドで使用されると、失敗と見なされるようになった。 | ||||
1.13 | 17w43a | オリジナルの関数がデータパックへ移動された。 | |||
17w45a | ロード時に関数がすべて読み込みおよびキャッシュされるようになった。 | ||||
17w49b | 関数をタグ付けできるようになった。 | ||||
minecraft:tick でタグ付けされた関数が、ティックごとに関数を実行するようになった。 | |||||
18w01a | load のファンクションタグが、データパックの追跡を(リ)ロードするようになった。 | ||||
1.14.4 | pre4 | server.propertiesに function-permission-level が追加された。 |
問題点[]
「関数」に関する問題点は、バグトラッカーにて管理されている。問題点の報告はそちらで行ってほしい。
脚注[]
- ↑ シングルプレイの場合、ワールドのフォルダの位置は
.minecraft/saves/[ワールド名]
となる。マルチプレイの場合、それを使用した全てのワールドのフォルダに関数を配置する必要がある。 - ↑ “Until vanilla adds something with the same name, then it won't work for you! Or if someone else has to work with your stuff, then confusing!
(訳:バニラに同じ名前のものが追加されるまでは、それはあなたが期待するように動作しないよ!または他の誰かがあなたのものを扱わなければならない時に、混乱を招いてしまうよ!)” – @Dinnerbone、2017年6月21日
バージョン |
| ||||||
---|---|---|---|---|---|---|---|
開発 |
| ||||||
技術的 |
| ||||||
マルチプレイ | |||||||
ゲームのカスタマイズ |
要素 | |
---|---|
チュートリアル |