【マイクラ】データパックのコマンド構成|function・tag・predicate・loot tableの関係【Java版】

この記事はJava版のデータパック初心者〜中級者向けです
function・tag・predicate・loot tableの関係を、実際に組む順番で整理します
Java版1.21以降はフォルダ名が大きく変わっているので、古い解説を見ている方は特に注意です

こんにちは。ゆずかきです。

マイクラJava版でデータパックを触り始めると、最初にぶつかるのが、

「functionって何?」
「tagってどこに置くの?」
「predicateとloot tableって何が違うの?」
「結局、どのファイルがどのファイルを呼んでいるの?」

というところだと思います。

筆者も最初、ここでかなり混乱しました。
コマンド単体ならまだ分かるんですが、データパックになると急に、フォルダ名・名前空間・JSON・mcfunction・タグが同時に出てくるんですよね。

ただ、仕組みを分けて見るとかなりシンプルです。

  • function:コマンドをまとめて実行するファイル
  • tag:ブロック・アイテム・functionなどをグループ化するファイル
  • predicate:条件判定をまとめるファイル
  • loot table:ドロップやチェスト中身を決めるファイル

この4つの関係が分かると、データパック作りは一気に見通しが良くなります。

この記事では、マイクラJava版のデータパックのコマンド構成を、function・tag・predicate・loot tableの順番で整理していきますね。

※本記事はJava版データパック向けです。統合版のビヘイビアーパックとは構成が異なります。
※Java版1.21以降のフォルダ構成を中心に解説しています。
※執筆時点ではJava版26.1.2が最新安定版、26.2はスナップショット段階です。


目次

1. データパックのコマンド構成とは
2. まず知っておくべきフォルダ構成
3. functionとは|コマンドをまとめる本体部分
4. tagとは|functionやアイテムをまとめる名簿
5. predicateとは|条件判定を外に出す仕組み
6. loot tableとは|ドロップやチェスト中身を決める仕組み
7. function・tag・predicate・loot tableの関係
8. 実例:ゾンビに条件付き追加ドロップを作る
9. Java版1.21以降で特に注意する変更点
10. よくあるエラーとチェックポイント
11. まとめ
12. 引用・参考文献

この記事で分かること
・Java版データパックの基本構成
・function / tag / predicate / loot tableの役割
・1.21以降の単数フォルダ名の注意点
・「Unknown function」「データパックが読み込まれない」時の見直しポイント


1. データパックのコマンド構成とは

マイクラJava版のデータパックは、簡単に言うと、ワールドに追加できるカスタム処理のまとまりです。

Modのようにゲーム本体へプログラムを追加するわけではありません。
マイクラに元から用意されている、

  • コマンド
  • 進捗
  • レシピ
  • ルートテーブル
  • タグ
  • 条件判定
  • ワールド生成データ

などを、フォルダとJSONファイルで上書き・追加していく仕組みです。

このうち、コマンド系のデータパックで中心になるのが、今回扱う4つです。

要素 役割 主な使い道
function コマンドをまとめる 定期処理・初期化・装置処理
tag 対象をまとめる tick/load実行、アイテム分類、ブロック分類
predicate 条件を判定する ランダム確率、天候、位置、エンティティ条件
loot table ドロップを決める モブドロップ、ブロックドロップ、チェスト戦利品


最初に結論を言うと、functionだけでもデータパックは作れます

ですが、少し凝った処理を作ろうとすると、すぐに、

  • 自動でfunctionを実行したい
  • アイテムをまとめて判定したい
  • 条件分岐を外部ファイルに分けたい
  • モブのドロップを変えたい

という話になります。
その時に出てくるのが、tag・predicate・loot tableです。

体験談
筆者は最初、全部functionに書けば良いと思っていました。
でも、ドロップ変更や条件分岐までfunctionに寄せると、ファイルが一気に読みにくくなります。
👉役割ごとにファイルを分ける方が、後から修正しやすいです。

ここから、1つずつ見ていきましょう。


2. まず知っておくべきフォルダ構成

データパックは、ワールドフォルダ内のdatapacksフォルダに入れます。

基本の場所は、シングルプレイなら次の通りです。

.minecraft/saves/ワールド名/datapacks/

サーバーなら、基本的にはワールドフォルダの中です。

server_folder/world/datapacks/

そして、データパック本体はこんな形になります。

yuzukaki_datapack/
├─ pack.mcmeta
└─ data/
   ├─ minecraft/
   │  └─ tags/
   │     └─ function/
   │        ├─ load.json
   │        └─ tick.json
   └─ yuzukaki/
      ├─ function/
      │  ├─ load.mcfunction
      │  ├─ tick.mcfunction
      │  └─ sample.mcfunction
      ├─ predicate/
      │  ├─ random_bonus.json
      │  └─ player_bonus.json
      ├─ loot_table/
      │  └─ gameplay/
      │     └─ sample_bonus.json
      └─ tags/
         └─ item/
            └─ bonus_items.json

ここで大事なのは、Java版1.21以降は、多くのフォルダ名が単数形になっていることです。

昔の解説だと、

functions
loot_tables
predicates
recipes
advancements

のように複数形で書かれていることがあります。
ですが、Java版1.21以降では、基本的に次のように書きます。

function
loot_table
predicate
recipe
advancement

これ、かなり重要です。

筆者も昔の情報を見ながら組んで、functionsフォルダに.mcfunctionを入れて、ずっと読み込まれない…という状態になりました。
1.21以降でfunctionが動かない時は、まずフォルダ名を確認してください。

pack.mcmetaの例

Java版1.21.9以降は、パック形式にマイナーバージョンが入るようになりました。
そのため、現在の形式ではmin_formatmax_formatを書く形が基本になります。

例:Java版26.1〜26.1.2向け

{
  "pack": {
    "min_format": [101, 1],
    "max_format": [101, 1],
    "description": "Yuzukaki sample datapack"
  }
}

例:Java版1.21.11向け

{
  "pack": {
    "min_format": [94, 1],
    "max_format": [94, 1],
    "description": "Yuzukaki sample datapack"
  }
}

94.1101.1のように小数っぽく見えますが、実際にはメジャー番号とマイナー番号の組み合わせとして扱うのが安全です。

[94, 1]

このように、配列で書くイメージですね。

※古いバージョン向けのデータパックではpack_formatを使う解説もあります。作りたい対象バージョンに合わせて書き方を変えてください。
※1.21.8以前の解説と、1.21.9以降の解説が混ざると混乱しやすいので注意です。


3. functionとは|コマンドをまとめる本体部分

functionは、データパックの中でコマンドをまとめて実行するファイルです。

ファイルの拡張子は、.mcfunctionです。

data/yuzukaki/function/sample.mcfunction

この場所に置いた場合、ゲーム内では次のように呼び出せます。

/function yuzukaki:sample

実際の.mcfunctionファイルの中身は、こんな感じです。

say データパックのfunctionが動きました
give @p minecraft:diamond 1

通常のチャット欄でコマンドを打つ時は、先頭に/を付けますよね。
でも、.mcfunctionファイル内では、先頭のスラッシュは不要です。

# OK
say こんにちは

# NG
/say こんにちは

これも初心者さんがかなりやりがちなミスです。

functionの使いどころ

functionは、次のような処理に向いています。

  • ワールド読み込み時に初期設定をする
  • 毎tick、または一定時間ごとに処理する
  • スコアボードを使ってタイマーを作る
  • 特定条件のプレイヤーに効果を付ける
  • コマンドブロックの処理をファイル化する

例えば、読み込み時にスコアボードを作るなら、こんな感じです。

scoreboard objectives add yuzu_timer dummy
tellraw @a {"text":"データパックを読み込みました","color":"green"}

このような初期化処理をload.mcfunctionにまとめておくと、管理しやすいです。

functionは自動では動かない

ここが大事です。

data/yuzukaki/function/load.mcfunctionを作っただけでは、自動実行されません

自動で動かすには、次の章で説明するfunction tagを使います。

重要
.mcfunctionは「実行されるコマンドの中身」です。
ただし、勝手に実行されるわけではありません。
👉自動実行したい場合は、minecraft:loadminecraft:tickのタグに登録します。


4. tagとは|functionやアイテムをまとめる名簿

tagは、マイクラ内の要素をまとめるための仕組みです。

ブロックタグ、アイテムタグ、エンティティタイプタグ、functionタグなどがあります。

イメージとしては、名簿です。

例えば、

  • このアイテムたちは全部「ボーナス対象」
  • このブロックたちは全部「特定ツールで壊せる対象」
  • このfunctionたちは毎tick実行する

というように、複数の対象を1つの名前でまとめられます。

function tagの基本

データパックで特によく使うのが、function tagです。

Java版1.21以降では、次の場所に置きます。

data/minecraft/tags/function/load.json

中身はこうです。

{
  "values": [
    "yuzukaki:load"
  ]
}

これで、yuzukaki:load/reload時やワールド読み込み時に実行されます。

毎tick実行したい場合は、こちらです。

data/minecraft/tags/function/tick.json
{
  "values": [
    "yuzukaki:tick"
  ]
}

これで、yuzukaki:tickが毎tick実行されます。
マイクラは通常1秒20tickなので、毎秒20回です。

tickに重い処理を書きすぎない

tickは便利ですが、使いすぎるとワールドが重くなります。

例えば、毎tickすべてのプレイヤー・すべてのエンティティに対して重いexecuteを走らせると、サーバー負荷が上がります。

初心者さん向けには、まずタイマーを挟むのがおすすめです。

scoreboard players add yuzu.timer yuzu_timer 1
execute if score yuzu.timer yuzu_timer matches 1200.. run function yuzukaki:minute
scoreboard players set yuzu.timer yuzu_timer 0
say 1分ごとの処理です

1200tickは約60秒です。
毎tick動かす必要がない処理は、こうやって間隔を空けると安定しやすいです。

アイテムタグの例

アイテムタグは、複数アイテムをまとめて扱いたい時に使います。

data/yuzukaki/tags/item/bonus_items.json
{
  "replace": false,
  "values": [
    "minecraft:diamond",
    "minecraft:emerald",
    "minecraft:gold_ingot"
  ]
}

このタグは、#yuzukaki:bonus_itemsとして参照できます。

覚え方
functionは「実行する中身」
tagは「まとめる名簿」
こう覚えると分かりやすいです。


5. predicateとは|条件判定を外に出す仕組み

predicateは、条件判定をJSONファイルにまとめる仕組みです。

例えば、

  • ランダムで5%だけ成功する
  • プレイヤーが倒した時だけ成功する
  • 雨が降っている時だけ成功する
  • 特定の場所にいる時だけ成功する

という条件を書けます。

functionの中にexecute ifをたくさん書いても条件分岐はできます。
ですが、条件が複雑になってくると、functionファイルがどんどん読みにくくなります。

そこで、条件部分だけをpredicateに分けると管理しやすくなります。

predicateファイルの例

data/yuzukaki/predicate/player_bonus.json
{
  "condition": "minecraft:all_of",
  "terms": [
    {
      "condition": "minecraft:killed_by_player"
    },
    {
      "condition": "minecraft:random_chance",
      "chance": 0.05
    }
  ]
}

これは、

  • プレイヤーが倒した
  • さらに5%の確率に当選した

この両方を満たした時だけ成功するpredicateです。

ただし、minecraft:killed_by_playerは、ルートテーブルのようにキル時の情報が渡される場面向けです。
execute if predicateから使う場合は、その実行文脈だけで判定できる条件にしておくと安全です。

functionからpredicateを使う例

functionからは、execute if predicateで使えます。

例えば、ランダム判定だけをfunction側で使うなら、次のようなpredicateにします。

data/yuzukaki/predicate/random_bonus.json
{
  "condition": "minecraft:random_chance",
  "chance": 0.05
}

function側では、次のように呼び出せます。

execute if predicate yuzukaki:random_bonus run say 条件に成功しました

これで、条件に成功した時だけsayが実行されます。

loot tableからpredicateを使う例

loot table内では、minecraft:referenceを使ってpredicateを呼べます。

{
  "condition": "minecraft:reference",
  "name": "yuzukaki:player_bonus"
}

つまり、predicateはfunctionとloot tableの両方から使える、共通の条件ファイルとして扱えます。
ただし、killed_by_playermatch_toolのように、その場面の情報が必要な条件もあるので、どこから呼ぶかは少し注意しましょう。

体験談
筆者は最初、loot tableの中に条件を直接書き続けていました。
ただ、条件が増えるとJSONが長くなって、どこで何を判定しているか分からなくなります。
👉何度も使う条件はpredicateに分けるのがおすすめです。


6. loot tableとは|ドロップやチェスト中身を決める仕組み

loot tableは、モブやブロック、チェストなどから出るアイテムを決めるJSONファイルです。

代表的な使い道は、次の通りです。

  • ゾンビのドロップを変更する
  • ブロックを壊した時のドロップを変更する
  • ダンジョンチェストの中身を変更する
  • 釣りで出るアイテムを変更する
  • コマンドの/lootで独自テーブルを呼ぶ

例えば、ゾンビのドロップを上書きしたい場合は、Java版1.21以降なら次の場所に置きます。

data/minecraft/loot_table/entities/zombie.json

minecraft名前空間に置くのは、バニラのゾンビのルートテーブルを上書きするためです。

逆に、独自のルートテーブルを作るだけなら、次のように自分の名前空間でOKです。

data/yuzukaki/loot_table/gameplay/sample_bonus.json

loot tableの基本例

下の例は、5%の確率でダイヤを追加ドロップするイメージです。

{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:rotten_flesh",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "type": "minecraft:uniform",
                "min": 0,
                "max": 2
              }
            }
          ]
        }
      ]
    },
    {
      "rolls": 1,
      "conditions": [
        {
          "condition": "minecraft:killed_by_player"
        },
        {
          "condition": "minecraft:random_chance",
          "chance": 0.05
        }
      ],
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:diamond"
        }
      ]
    }
  ]
}

構造だけ見ると難しく見えますが、分解すると、

  • type:どんな場面のルートテーブルか
  • pools:抽選グループ
  • rolls:抽選回数
  • conditions:抽選する条件
  • entries:候補アイテム
  • functions:個数や名前などの加工

という形です。

loot functionとfunctionは別物です

ここ、名前が紛らわしいです。

.mcfunctionのfunctionは、コマンドを実行するファイルです。
一方で、loot table内のfunctionsは、生成されたアイテムを加工する処理です。

例えば、minecraft:set_countはアイテム数を変えるloot functionです。
これは、data/yuzukaki/function/sample.mcfunctionのfunctionとは別物です。

注意
loot tableはアイテムドロップを決める仕組みです。
通常のコマンド処理を動かしたい場合は、.mcfunction側で組みます。
名前が似ているので、ここは混同しないようにしましょう。


7. function・tag・predicate・loot tableの関係

ここまでの話を、関係図っぽく文字でまとめるとこうです。

データパック
├─ function
│  └─ コマンドをまとめて実行する
│
├─ tag
│  ├─ functionを自動実行に登録する
│  ├─ item/block/entity_typeなどをまとめる
│  └─ #タグ名で参照できる
│
├─ predicate
│  ├─ 条件判定をまとめる
│  ├─ functionから execute if predicate で使える
│  └─ loot tableから reference で使える
│
└─ loot_table
   ├─ モブ・ブロック・チェストなどのドロップを決める
   ├─ conditionsでpredicate的な条件を使える
   └─ tagを使ってアイテムグループを参照できる

大事なのは、全部が同じ役割ではないということです。

例えば、

  • 毎tick処理したい → function + function tag
  • 条件を分けたい → predicate
  • ドロップを変えたい → loot table
  • アイテムをまとめて参照したい → item tag

という感じで、目的によって使うファイルが変わります。

predicateは便利ですが、条件によってはloot tableのキル情報や採掘ツール情報など、呼び出し元の文脈が必要になるものもあります。
同じpredicateファイルでも、functionから呼ぶのか、loot tableから呼ぶのかは確認しておくと安心です。

実用的な組み合わせ

よく使う組み合わせを表にすると、こんな感じです。

やりたいこと 使うもの 考え方
ワールド読み込み時に初期化 function + tag loadタグにfunctionを登録
毎tick処理 function + tag tickタグにfunctionを登録
確率処理 predicate random_chanceで判定
モブドロップ変更 loot table バニラのルートテーブルを上書き
条件付きドロップ loot table + predicate conditionsで条件を付ける
複数アイテムをまとめる tag #タグ名で呼び出す


まずは、functionとtagで自動実行を作るところから始めるのが一番分かりやすいです。
その後、条件が欲しくなったらpredicate。
ドロップを触りたくなったらloot table。
こういう順番で覚えると迷子になりにくいです。


8. 実例:ゾンビに条件付き追加ドロップを作る

ここでは、実際に、

ゾンビをプレイヤーが倒した時、5%の確率でダイヤを追加ドロップする

という構成を作るイメージで見ていきます。

※分かりやすさ優先のサンプルです。実際のワールドに入れる前に、必ずバックアップを取ってくださいね。

1. データパックのフォルダを作る

まず、ワールドのdatapacks内にフォルダを作ります。

yuzukaki_zombie_bonus/
├─ pack.mcmeta
└─ data/
   ├─ minecraft/
   │  └─ loot_table/
   │     └─ entities/
   │        └─ zombie.json
   └─ yuzukaki/
      └─ predicate/
         └─ player_bonus.json

今回はゾンビのドロップを上書きするので、zombie.jsondata/minecraft/loot_table/entities/に置きます。

2. predicateを作る

data/yuzukaki/predicate/player_bonus.json
{
  "condition": "minecraft:all_of",
  "terms": [
    {
      "condition": "minecraft:killed_by_player"
    },
    {
      "condition": "minecraft:random_chance",
      "chance": 0.05
    }
  ]
}

これで、

  • プレイヤーが倒した
  • 5%抽選に当たった

という条件を1つにまとめられました。

3. ゾンビのloot tableを作る

data/minecraft/loot_table/entities/zombie.json
{
  "type": "minecraft:entity",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:rotten_flesh",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "type": "minecraft:uniform",
                "min": 0,
                "max": 2
              }
            }
          ]
        }
      ]
    },
    {
      "rolls": 1,
      "conditions": [
        {
          "condition": "minecraft:reference",
          "name": "yuzukaki:player_bonus"
        }
      ],
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:diamond"
        }
      ]
    }
  ]
}

この例では、2つ目のpoolに条件を付けています。

{
  "condition": "minecraft:reference",
  "name": "yuzukaki:player_bonus"
}

ここで、さっき作ったpredicateを呼んでいます。
つまり、loot tableがpredicateを参照して、条件に成功した時だけダイヤを候補に入れるという形です。

4. /reloadで読み込む

データパックを入れたら、ゲーム内で次を実行します。

/reload

読み込みに失敗した場合は、チャットやログにエラーが出ることがあります。
特にJSONのカンマ抜けや、フォルダ名のミスはかなり多いです。

5. 動作確認する

クリエイティブの検証用ワールドで、ゾンビを倒して確認します。

/summon minecraft:zombie ~ ~ ~

5%なので、数体倒しただけでは出ないことがあります。
検証時は一時的にchance1.0にして、必ず出る状態で確認すると楽です。

{
  "condition": "minecraft:random_chance",
  "chance": 1.0
}

動作確認が終わったら、0.05に戻しましょう。

検証のコツ
最初から低確率で試すと、動いていないのか、単に当たっていないのか分かりません。
👉まず100%で動作確認、その後に確率を戻すのがおすすめです。


9. Java版1.21以降で特に注意する変更点

データパック解説で一番混乱しやすいのが、バージョン差分です。

特にJava版1.21以降は、古い記事と新しい記事でフォルダ名が違うことがあります。

1. フォルダ名が単数形になった

Java版1.21以降では、次のように単数形を使います。

用途 1.20以前でよく見る表記 1.21以降の表記
function functions function
loot table loot_tables loot_table
predicate predicates predicate
recipe recipes recipe
advancement advancements advancement
function tag tags/functions tags/function


ここを間違えると、データパック自体は認識されているのに、functionだけ見つからない…という状態になります。

2. pack.mcmetaの書き方が変わった

Java版1.21.9以降、データパック形式にマイナーバージョンが入るようになりました。

例えば、Java版1.21.11ではデータパック形式が94.1です。
Java版26.1系では101.1です。

この場合、pack.mcmetaでは次のように配列で指定すると分かりやすいです。

{
  "pack": {
    "min_format": [94, 1],
    "max_format": [94, 1],
    "description": "1.21.11 datapack"
  }
}
{
  "pack": {
    "min_format": [101, 1],
    "max_format": [101, 1],
    "description": "26.1 datapack"
  }
}

3. 古いsupported_formatsは注意

古い解説では、supported_formatsを使っている例もあります。
ただし、新しい形式では扱いが変わっているため、1.21.9以降向けに作る場合は、まずmin_formatmax_formatを確認してください。

特に、

  • 古い記事のpack_formatだけを更新した
  • 94.1を小数として書いた
  • 古いfunctionsフォルダをそのまま使った

このあたりは、動かない原因になりやすいです。

4. 26.2はスナップショット段階なので注意

執筆時点では、Java版26.2はSnapshot 8まで公開されています。
スナップショット版はデータパック形式も変わりやすく、途中で仕様変更が入ることがあります。

サバイバル本ワールドで使うデータパックは、基本的には安定版に合わせるのが安心です。

筆者の考え
スナップショットで新機能を触るのは楽しいですが、配布用・長期ワールド用のデータパックは安定版基準がおすすめです。
👉本ワールドに入れる前に、必ず検証用ワールドで確認しましょう。


10. よくあるエラーとチェックポイント

データパックが動かない時は、原因の多くがかなり基本的なところにあります。
筆者がよく確認するポイントをまとめますね。

データパック自体が認識されない

  • [ ] pack.mcmetaがデータパック直下にあるか?
  • [ ] pack.mcmeta.txtになっていないか?
  • [ ] JSONのカンマや波括弧が壊れていないか?
  • [ ] datapacksフォルダの中に、データパック本体フォルダを入れているか?
  • [ ] zip化している場合、zipの中にさらにフォルダが二重で入っていないか?

functionが見つからない

  • [ ] Java版1.21以降なのにfunctionsフォルダに入れていないか?
  • [ ] 正しくはdata/名前空間/function/になっているか?
  • [ ] ファイル名が.mcfunctionになっているか?
  • [ ] function内のコマンド先頭に/を付けていないか?
  • [ ] 名前空間やファイル名に大文字・スペースを使っていないか?

load / tickが動かない

  • [ ] data/minecraft/tags/function/load.jsonに置いているか?
  • [ ] data/minecraft/tags/function/tick.jsonに置いているか?
  • [ ] valuesに書いたfunction名が実在しているか?
  • [ ] /reloadを実行したか?
  • [ ] load.jsontick.jsonのJSON構文が壊れていないか?

predicateが効かない

  • [ ] data/名前空間/predicate/に置いているか?
  • [ ] condition名が正しいか?
  • [ ] minecraft:referenceで呼ぶ名前が合っているか?
  • [ ] 呼び出し元の文脈に合わない条件を使っていないか?
  • [ ] 低確率のまま検証していないか?
  • [ ] まずchance: 1.0で試したか?

loot tableが反映されない

  • [ ] 上書きしたい対象の名前空間が合っているか?
  • [ ] ゾンビ上書きならdata/minecraft/loot_table/entities/zombie.jsonになっているか?
  • [ ] Java版1.21以降なのにloot_tablesになっていないか?
  • [ ] typepoolsのJSON構造が壊れていないか?
  • [ ] 他のデータパックと上書きが競合していないか?

まず試すコマンド

データパックが読み込まれているか確認するなら、次を使います。

/datapack list

functionが候補に出るか確認するなら、途中まで入力して補完を見るのも有効です。

/function yuzukaki:

ここで候補に出ない場合、たいていはフォルダ名・名前空間・ファイル名のどこかが違います。

トラブル時のコツ
いきなり複雑な処理を作らず、まずsay testだけのfunctionを作って読み込み確認しましょう。
それが動いてから、predicateやloot tableを足す方が原因を切り分けやすいです。


11. まとめ

今回は、マイクラJava版データパックのコマンド構成として、function・tag・predicate・loot tableの関係を整理しました。

要点をまとめると、

  • functionは、コマンドをまとめて実行するファイル
  • tagは、functionやアイテムなどをまとめる名簿
  • predicateは、条件判定を外部ファイル化する仕組み
  • loot tableは、モブ・ブロック・チェストなどのドロップを決める仕組み
  • Java版1.21以降は、functionloot_tablepredicateなど単数形フォルダ名に注意
  • Java版1.21.9以降は、pack.mcmetamin_formatmax_formatも確認する

という感じです。

最初は専門用語が多くて難しく感じますが、実際は、

function = コマンド本体
tag = 名簿
predicate = 条件
loot table = ドロップ表

と分けて考えるとかなり理解しやすいです。

特に、データパック初心者さんは、まずこの順番がおすすめです。

  1. say testだけのfunctionを作る
  2. load.jsonで自動実行する
  3. tick.jsonで毎tick処理を作る
  4. predicateで条件を分ける
  5. loot tableでドロップを変更する

この流れで慣れていけば、コマンドブロックでは作りにくかった処理も、データパックとしてかなり整理して組めるようになります。

では、本日はここまでで終わります。
最後までご覧いただき、ありがとうございました。

柚子クラでは、他にもマイクラJava版の便利装置・コマンド・データパック系の解説をまとめていくので、ぜひ他の記事もご覧くださいね(^^♪


12. 引用・参考文献

この記事を書くにあたり、以下の公式リリースノート・Minecraft Wiki・データパック関連資料を参考にしています。