関数(英:Function)は、複数のコマンドを一纏めにして簡単に実行するための機能である。データパック内にテキストファイルとして保存することで/functionを介して実行することができる。
関数はコマンドブロックよりもラグを引き起こしにくく、またテキストファイルであるために極めて簡単に編集することができる。さらに関数ではコマンドの中に変数を挿入し、実行の際に値を取得しそこへ代入することができるマクロ機能も存在し、高い機能性を持つ[JE 1.20.2で追加予定]。
定義方法
格納位置
関数はデータパック内のdata/<名前空間名>/functions下に拡張子.mcfunctionのテキストファイルで保存する。エンコード方式にはBOM無しのUTF-8が推奨される。
functionsフォルダ下には他のデータパックのディレクトリ同様下位フォルダを設けることができ、この下位フォルダ下に格納した関数ファイルも正しく関数として認識される。ここで、下位フォルダ下に格納した関数のIDは<名前空間名>:<下位フォルダ名>/.../<ファイル名>となる。
フォーマット
関数ファイルには、実行したいコマンドを実行したい順に、一行に一コマンドずつ記述していく。この際、コマンドの前に/を前置する必要はない。
#から始まる行はコメントとして見なされ、実際の実行の際には無視される。関数内のコマンドに補足を付す際に利用できる。
\(バックスラッシュ)をコマンド中の単語(スペース以外の文字が連なったもの)の最後に付すと、そのコマンドの続きを次の行に記述することができる[JE 1.20.2で追加予定]。これを用いずに改行した場合は、改行より先は別のコマンドとして認識されてしまう。
$を行の初めに付すとその行はマクロ行として認識されるようになる[JE 1.20.2で追加予定]。マクロ行ではコマンドの構文中に$(<変数名>)と記述することで、関数の実行にあたって構文を解釈する際にそこに任意の文字列を代入するように設定することができる。代入する値は/functionのコマンドを介して指定するのだが、この際代入値を手動で入力することも、/data get ...コマンドのようにしてワールド内のブロックエンティティ、エンティティ、NBTストレージのNBT内にある コンパウンドからデータを取得することもできる。
コマンドの引数と引数の間にスペースを複数挿入することはできないが、各行の先頭と末尾にある空白およびインデントはコマンドの解釈時に無視される。
コマンドの制限
関数内では、コマンドブロックと違ってコマンド一つ当たりの文字数制限(32500字)は存在しない。ただし一つの関数内に指定できるコマンドの個数には制限が存在しており、ゲームルールmaxCommandChainLength(コマンドの最大チェーン数)で規定されている以上のコマンドは無視される。この値のデフォルト値は65536である。
シングルプレイおよびLANに公開したワールドでは、関数の権限レベルはコマンドブロックと同等の2であり、これ以上の高権限が必要なコマンドを実行することはできない。
マルチプレイでは、関数の権限レベルはserver.propertiesで定義されたfunction-permission-levelになる。
呼び出し方
コマンド
- 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 が追加された。 | |||
問題点
「関数」に関する問題点は、バグトラッカーにて管理されている。問題点の報告はそちらで行ってほしい。
脚注
| デモ版 | |||||||
|---|---|---|---|---|---|---|---|
| 開発 |
| ||||||
| 技術的情報 |
| ||||||
| マルチプレイ | |||||||
| ゲームのカスタマイズ | |||||||
| 要素 |
| ||
|---|---|---|---|
| データパック |
| ||
| チュートリアル | |||