これはMinecraft Command Advent Calendar 2025 10日目の記事です。
はじめに
これを読んでいる人の中にはデータパック、リソースパックを作ったことがあるという人も多いでしょう。これらのパックを作る上でどのバージョンまで対応するかというのは、人それぞれあると思います。1
データパックなどの開発においてバージョンアップによる変更との戦いは避けられないものです。本記事はそういったバージョンアップの影響に逆らってなんとか対応バージョンを増やしていこう、という半分私のこだわりのような所から生まれたものです。
なお、私はリソースパックに関する知識が薄いので内容はデータパック中心となります。ご了承を
pack.mcmeta
パックに関する主な情報の記入場所。今回話すことの八割はここです。
詳しいことはMinecraft Wikiに書いているので、ここでは複数バージョン対応で使う部分だけ簡単に書いておきます。
実際に書いたものを中心として話していくこととします。以下は私のデータパックで実際に使っているpack.mcmetaです。
{
"pack": {
"pack_format": 6,
"supported_formats":{
"max_inclusive": 81,
"min_inclusive": 6
},
"min_format": 82,
"max_format": 88
},
"overlays": {
"entries": [
{
"directory": "1.20.3",
"formats":{
"max_inclusive": 47,
"min_inclusive": 26
}
},
{
"directory": "1.21",
"formats":{
"max_inclusive": 60,
"min_inclusive": 48
}
},
{
"directory": "1.21.4",
"formats":{
"max_inclusive": 81,
"min_inclusive": 61
}
},
{
"directory": "1.21.9",
"formats":{
"max_inclusive": 88,
"min_inclusive": 82
},
"min_format": 82,
"max_format": 88
}
]
}
}
それでは、各項目について簡単目にまとめていきます。
pack_format
データパックを導入するワールドのパックバージョンと一致しないとデータパックの選択画面で以下のように表示され、導入しようとすると確認画面が表示されます。2


私の知る限りこの部分以外に影響する場所はありません。特に動作自体に影響を与えるものではないので、対応バージョンのうち一番古いものに合わせるなどで良いでしょう。
supported_formats
max_inclusiveで対応バージョンの最大値、min_inclusiveで最低値を指定します。
pack_formatの範囲選択版だと思ってもらえれば大丈夫です。これを書いてもpack_formatは省略できず、範囲にはpack_formatで指定したバージョンを含む必要があることに注意。
min_format, max_format
概ねsupported_formatsと同じですがこちらはエラーの条件が多く、
- min_formatが15未満
- supported_formatsのmin/max_inclusiveと一致しない3
- min_formatが82以上かつsupported_formatsが存在する
などが主に該当します。
エラーが発生してもパック全体が読み込まれなくなることはないですが、エラーを減らす目的であれば意識して設定する必要があります。
overlays
dataフォルダの中身をdirectoryで指定したフォルダの中身で上書きできる機能です。directoryはバージョンごとに複数指定できます。
バージョン1.21でのディレクトリ名変更など大きい変更に対して対応できる機能で、イメージとしては複数のパックを一つにまとめてバージョンごとに切り替えているといった感じです。
バージョンの指定方法はsupported_formatsと同様で、パックバージョン82からは追加でmin_format, max_formatも必要となります。
タグ
タグは一個でも存在しない要素を指定するとエラーを出力し、ファイルが丸ごと無視されてしまうという仕様があります。
例えば以下のような全ての頭ブロックを含むタグファイルを作成したとします。
{
"values": [
"minecraft:player_head",
"minecraft:zombie_head",
"minecraft:skeleton_skull",
"minecraft:wither_skeleton_skull",
"minecraft:creeper_head",
"minecraft:dragon_head",
"minecraft:piglin_head"
]
}
しかしpiglin_headはバージョン1.20で追加されたブロックなため、それ以前のバージョンで同じファイルを読み込むとエラーとなってしまいます。
overlaysを使った分岐でも対処できますが、タグファイルにはもっと良い手段があります。
"文字列"の代わりに{"id":"文字列","required":false}を用いることで、その要素だけ読み込みを任意にできます。要するに、中身が存在しなければその行だけを無視して読み込んでくれます。
先ほどの例で行くと、以下のように変更すれば1.20以前で読み込んだ時もpiglin_headだけを無視しそれ以外を読み込んでくれます。
{
"values": [
"minecraft:player_head",
"minecraft:zombie_head",
"minecraft:skeleton_skull",
"minecraft:wither_skeleton_skull",
"minecraft:creeper_head",
"minecraft:dragon_head",
- "minecraft:piglin_head"
+ {"id":"minecraft:piglin_head","required":false}
]
}
もちろん1.20以降ではしっかりとpiglin_headも読み込んでくれます。
おわりに
以上がデータパックを複数バージョン対応させるときの話でした。
データパック内の要素が多くなるほど対応箇所も増えるので、なかなか複数バージョン対応しようとしても難しいということが大半だと思います。
それでもいつかバージョンをまたいで動作するデータパックを作りたいと思ったとき、こんなことを書いた記事があったな、と思い出してもらえると幸いです。
こういった記事を書くのは初めてのことなので至らない所もあったと思われます。ここまで読んでくださり、ありがとうございました。