更新日:
完成形のフォルダ構成
mypack/
├─ pack.mcmeta
└─ data/
├─ mypack/
│ └─ function/
│ ├─ hello.mcfunction
│ ├─ load.mcfunction
│ └─ tick.mcfunction
└─ minecraft/
└─ tags/
└─ function/
├─ load.json
└─ tick.json
mypack の部分(名前空間)は自分で決めます。半角の小文字・数字・_ などだけを使い、大文字や日本語は使いません。
1. pack.mcmeta を作る
いちばん上のフォルダに pack.mcmeta というファイルを作り、次のように書きます。
{
"pack": {
"pack_format": 48,
"description": "はじめてのデータパック"
}
}
pack_format は、対応するゲームのバージョンを表す番号です。上の48はJava版1.21〜1.21.1の番号で、1.21.4は61です。番号はバージョンごとに変わり、新しい版では書き方そのものが変わったものもあります。合っていないと一覧で「互換性がない」と表示されることがあるので、遊んでいる版の番号を確認してください。
拡張子が pack.mcmeta.txt になっていないか注意します。Windowsでは「ファイル名拡張子」を表示する設定にしておくと確認しやすくなります。
2. 関数ファイル(mcfunction)を作る
data/ を作り、実行したいコマンドを1行に1つずつ書きます。
say データパックが動きました
give @s minecraft:diamond 1
関数ファイルでは、コマンドの先頭の / を付けません。# で始まる行はメモ(コメント)として無視されます。
3. ワールドに入れる
- シングルプレイの場合、
.minecraft/saves/ワールド名/datapacks/にmypackフォルダごと入れます。 - ワールドに入って
/reloadを実行します。 /datapack listで、有効なデータパックの一覧に入っているか確認します。/function mypack:helloで実行します。
関数ファイルを書き換えたあとも、/reload で読み込み直せます。zipにまとめて配布する場合は、zipを開いたすぐの場所に pack.mcmeta がある形にします。
4. ワールドを開いたとき・毎ティック動かす
data/ に書いた関数は、ワールドを開いたときと /reload のときに1回動きます。tick.json に書いた関数は、毎ティック(1秒に20回)動き続けます。
{
"values": ["mypack:load"]
}
tick.json は値を "mypack:tick" にします。load.mcfunction にはスコアボードの準備など最初に1回だけ必要な処理を、tick.mcfunction には常に確認したい処理を書きます。tickに重い処理を書くとゲームが重くなるので、必要なものだけにします。
動かないときの確認ポイント
- フォルダ名が違う:Java版1.21で、フォルダ名が
functionsからfunctionに変わりました(tagsの中も同じです)。古い解説の通りに作ると読み込まれません。 - フォルダが1段深い:
datapacks/のように二重になっていると認識されません。mypack/ mypack/ pack.mcmeta - 大文字や日本語のファイル名:名前空間や関数のファイル名に使えるのは半角の小文字・数字・
_ - .などです。 - 一部の行だけ間違っている:関数の中に1行でも書き間違いがあると、その関数全体が読み込まれないことがあります。1行ずつチャットで試してから関数に書くと安全です。
- 統合版で使いたい:データパックはJava版の仕組みです。統合版ではビヘイビアパックを使います。
よくある質問
データパックを入れると実績は解除されなくなりますか?
データパックを入れるだけでは、実績(進捗)は止まりません。ただし内容によってはゲームの遊び方が変わるので、配布するときは説明を書いておきます。
サーバーで使えますか?
使えます。サーバーのワールドフォルダの中の datapacks フォルダに入れて、/reload を実行します。
functionの中からほかのfunctionを呼べますか?
呼べます。関数ファイルの中に function mypack:other のように書くと、別の関数を実行できます。