このチュートリアルではデータパックの作り方を説明する。
はじめに[]
データパックは、関数、ルートテーブル、ワールドの構造物、進捗、レシピ、タグを追加/変更するために用いられる。
禁止事項[]
データパックを作成する前に、いくつか「してはいけないこと」が存在する:
- MojangによるMinecraftの利用規約を犯してはならない。
- MojangからMinecraftを購入せずにプレイできるような変更を施したり、そのようなものを配布してはならない。
- Minecraftを逆コンパイルしたソースコードを配布してはならない。
データパックを作る[]
データパックを作成するには、まずワールドフォルダ内の datapacks
フォルダに移動する。
ワールドフォルダは、ゲームディレクトリ(デフォルトでは.minecraft)内の saves
フォルダに存在する。
- シングルプレイでは、ワールドを選択し、「編集」をクリックし、「ワールドフォルダーを開く」をクリックする。
- サーバーでは、ルートディレクトリ(server.propertiesの置かれている所)に移動し、
world
フォルダに入る。
datapacks
フォルダに入ったら、好きな名前のフォルダを作る。それがこれから作るデータパックの名前となる。フォルダを作ったらその中に入る。
フォルダに入ってまずすべきなのは、pack.mcmeta
ファイルを作成することである。これはMinecraftにこれから作るデータパックを認識させるのに必要となるファイルである。
MCMETAファイルを作る[]
MCMETAファイルを作るには、データパックフォルダの中で右クリックして新規テキストドキュメントを作成し、そのファイル名を pack.mcmeta
にする。
- 注意
ファイルの拡張子が .txt
ではなく .mcmeta
であるのを確認すること。ファイルが使えなくなるという旨の警告を受けるだろうが、これはファイル名を pack.mcmeta
に正しく変更できた証拠ともいえる。
もしあなたがMicrosoft Windowsユーザーであり、ファイル拡張子が見えない状態なら、エクスプローラーの「表示」メニューからファイル名拡張子のチェックボックスにチェックを入れれば、ファイル拡張子が見えるようになる。
テキストエディタ[]
どのテキストエディタを使っても良いのだが、ここではNotepad++をおすすめしたい。無料で、mcmeta
ほかデータパック内の多くのファイルで使われるJSONをはじめとした多くのプログラミング言語のシンタックスハイライトに対応しているからだ。
Notepad++はここからダウンロードできる。
注意: ほとんどのテキストエディタでは拡張子 mcmeta
をJSONファイルと認識しない。よって、手動でエディタの設定を変更する必要がある。
pack.mcmeta
の内容[]
pack.mcmeta
を開き、以下の内容をコピー&ペーストすること:
{
"pack": {
"pack_format": 4,
"description": "Tutorial Data Pack"
}
}
pack_format は現時点では特に制限が無いので何の数字でもよいが、ver.1.16.3の場合は6にしておけば無難。 description は任意の文字列もしくは生のJSONテキストである。これは /datapack list
の出力にマウスをホバーしたときに表示される内容である。
- 注意
このファイルはJSONで書かれている。このチュートリアルではJSONフォーマットに関する詳細には触れないが、レイアウトの仕方については注意すること。特に、引用符、コロン、中括弧、角括弧を忘れないように注意。これらが欠けていると、データパックが正しく機能しない可能性がある。ファイルをチェックするには、JSONLintといったJSONバリデータを使うとよい。
データパックをテストする[]
pack.mcmeta
を作ったらゲーム内でテストしてみよう。ワールドを開くか、もしくは既にワールド内にいるのであれば /reload
を実行し、その後 /datapack list
を実行しよう。そこには [vanilla]
と [file/(your data pack's name)]
の2つのエントリが表示されるはずだ。ここで (your data pack's name)
はデータパックフォルダの名前である。自分のデータパックのエントリにマウスをホバーすると、pack.mcmeta
の description に書いた説明が表示されるはずだ。
ここまで確認できたら、次の手順に進もう。
うまくいかなかった場合[]
自分のデータパックが表示されなかった場合、pack.mcmeta
ファイルに誤りがないかチェックしよう。波括弧 {}
、コンマ ,
、コロン :
、引用符、もしくは角括弧 []
が欠落していないか。括弧や引用符は開いたら閉じる必要があるのだ。
名前付け[]
データパックフォルダの中の、pack.mcmeta
と同じ階層に data
フォルダを作成しよう。この data
フォルダの中に、さらに名前空間となるフォルダを作成することになる。
データパック内のエンティティは namespace:path
の形式の名前空間IDを持つ。これに対応するファイルは data/namespace/(data_type)/path.(suffix)
に置かれる。ここで、ファイルパス中の /
はフォルダの区切り文字に変換される。
例:
- IDが
dummy:foo_proof/bar
のアイテムタグはdata/dummy/tags/item/foo_proof/bar.json
に置かれる - IDが
foo:handler/bar_call
の関数はdata/foo/functions/handler/bar_call.mcfunction
に置かれる
使用できる文字[]
データパック内の、名前空間、ファイルパス、フォルダ名、ファイル名に使用できるのは以下の文字である:
• 0123456789
数字
• abcdefghijklmnopqrstuvwxyz
英小文字
• _
下線
• -
ハイフン/マイナス
• /
スラッシュ/フォルダ区切り文字(名前空間では使用できない)
• .
ピリオド(名前空間では使用できない)
名付け方法として推奨されるのは、lower_case_with_underscores
のような英小文字を下線で連結したもので、小文字スネークケースと呼ばれる。
名前空間[]
衝突を避け予期しない上書きを防ぐため、ゲーム内のほとんどのオブジェクトは名前空間IDを持つ。
例えば、2つのデータパックが2つのミニゲームをMinecraftに追加する — いずれも start
という名前の関数を持つ — とき、名前空間が無いと、これら2つの関数はクラッシュし、ミニゲームも壊れてしまうだろう。それぞれ異なる名前空間 minigame_one
と minigame_two
を指定していれば、これらの関数はそれぞれ minigame_one:start
および minigame_two:start
となり、競合は起こらない。
ほとんどの場合、Minecraftが /function
などのためにIDを必要とする時は名前空間も指定する必要がある。名前空間を指定しないと、minecraft
が指定されたものとして扱われる。
新しく追加するものには必ず自分の名前空間を使用すること。他の名前空間は、明示的に上書きする場合、またはタグに追加したい場合にのみ使用すること。
たとえば、Minecraftは minecraft
名前空間を使用する。この名前空間は、データパックで既存のMinecraftデータを上書きしたり既存のMinecraftタグにエントリを追加する必要がある場合にのみ使用すること。
関数[]
関数はコマンドを順番に並べたものである。
関数を追加するには、まず名前空間フォルダの中に functions
フォルダを作成する。次に、このフォルダかそのサブフォルダに (function_name).mcfunction
というファイルを作成する。これが関数ファイルとなる。これはゲーム中で (namespace):(name)
のように参照できる。サブフォルダに置いた場合は (namespace):(subfolder1)/(subfolder2)/.../(name)
となる。
ルートテーブル[]
ルートテーブルは、Mobが死んだときに何をドロップするか、またはチェストのようなコンテナが最初に開かれた時に何を生成するかを決めるものである。
ルートテーブルを追加するには、まず名前空間フォルダの中に loot_tables
フォルダを作成する。次に、このフォルダかそのサブフォルダに (loot_table_name).json
というファイルを作成する。これがルートテーブルファイルとなる。これはゲーム中で (namespace):(name)
のように参照できる。サブフォルダに置いた場合は (namespace):(subfolder1)/(subfolder2)/.../(name)
となる。
以下に牛のルートテーブルの例を示す:
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:leather",
"weight": 1,
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 2
}
},
{
"function": "looting_enchant",
"count": {
"min": 0,
"max": 1
}
}
]
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:beef",
"weight": 1,
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 3
}
},
{
"function": "furnace_smelt",
"conditions": [
{
"condition": "entity_properties",
"entity": "this",
"properties": {
"on_fire": true
}
}
]
},
{
"function": "looting_enchant",
"count": {
"min": 0,
"max": 1
}
}
]
}
]
}
]
}
それぞれのタグが何を意味するかはルートテーブルを参照。ここにはバニラのルートテーブルのリストも載っている。
構造物[]
構造物はストラクチャーブロックやジグソーブロックと一緒に使用したり、バニラのMinecraftの構造物の見た目を上書きしたりするのに用いられる。NBTフォーマットで保存されるので、ストラクチャーブロックでNBTファイルを作ったり、MCEditのようなサードパーティープログラムの出力を利用したりできる。
構造物を追加するには、まず名前空間フォルダの中に structures
フォルダを作成する。次に、このフォルダかそのサブフォルダにストラクチャーファイルを作成する。このストラクチャーファイルはゲーム中で (namespace):(name)
のように参照できる。サブフォルダに置いた場合は (namespace):(subfolder1)/(subfolder2)/.../(name)
となる。
進捗[]
進捗は、プレイヤーがコンプリートし様々な報奨が与えられるものである。
進捗を追加するには、まず名前空間フォルダの中に advancements
フォルダを作成する。次に、このフォルダかそのサブフォルダに (advancement_name).json
というファイルを作成する(ファイル名に空白を含めてはならない)。これが進捗ファイルとなる。これはゲーム中で (namespace):(name)
のように参照できる。サブフォルダに置いた場合は (namespace):(subfolder1)/(subfolder2)/.../(name)
となる。
レシピ[]
レシピはプレイヤーがアイテムをクラフトできるようにするものである。
レシピを追加するには、まず名前空間フォルダの中に recipes
フォルダを作成する。次に、このフォルダかそのサブフォルダに (recipe_name).json
というファイルを作成する。これがレシピファイルとなる。これはゲーム中で (namespace):(name)
のように参照できる。サブフォルダに置いた場合は (namespace):(subfolder1)/(subfolder2)/.../(name)
となる。
固定レシピ[]
クラフトの中でも一般的なのが固定レシピである。
{
"type": "crafting_shaped",
"pattern": [
"123",
"231",
"312"
],
"key": {
"1": {
"item": "<item ID>"
},
"2": {
"item": "<item ID>"
},
"3": {
"item": "<item ID>"
}
},
"result": {
"item": "<item ID>",
"count": 5
}
}
これは固定レシピの簡単な例であり、type
に crafting_shaped
が指定されている。pattern
はクラフトレシピの形を指定するためのリストである。最大で3つの文字列が含まれ、それぞれの文字列がクラフトグリッドの1行を表している。これら文字列は最大3文字で、各々の文字がクラフトグリッドの1マスを表している。3行3文字全てを指定する必要はないが、各文字列の文字数は等しくなければならない。空のマスを指定するには空白を使う。
key
は、pattern
のどの文字にどの項目を使用するかを指定するCompound型の値である。これは、item
でアイテムIDを指定するか、tag
でデータパックのタグを指定するかのいずれかで記述する。
result
はその名が示す通り、クラフト結果として得られるアイテムを指定する。count
は得られるアイテムの個数を指定する。
以下にピストンのレシピを示す:
{
"type": "crafting_shaped",
"pattern": [
"TTT",
"#X#",
"#R#"
],
"key": {
"R": {
"item": "minecraft:redstone"
},
"#": {
"item": "minecraft:cobblestone"
},
"T": {
"tag": "minecraft:planks"
},
"X": {
"item": "minecraft:iron_ingot"
}
},
"result": {
"item": "minecraft:piston"
}
}
不定形レシピ[]
レシピのもう一つのタイプが、不定形レシピである。
{
"type": "crafting_shapeless",
"ingredients": [
{
"item": "<item ID>"
},
{
"item": "<item ID>"
},
[
{
"item": "<item ID>"
},
{
"item": "<item ID>"
}
]
],
"result": {
"item": "<item ID>",
"count": 5
}
}
typeに crafting_shapeless
を指定すると、pattern
のないレシピになる。ingredients
で指定した材料がどのような形で置かれてもクラフトできる。上の例の ingredients
にはリストが含まれているが、これはリスト中のアイテムはどれを使ってもクラフトできるということを意味する。
以下にファイヤーチャージのレシピを示す:
{
"type": "crafting_shapeless",
"ingredients": [
{
"item": "minecraft:gunpowder"
},
{
"item": "minecraft:blaze_powder"
},
[
{
"item": "minecraft:coal"
},
{
"item": "minecraft:charcoal"
}
]
],
"result": {
"item": "minecraft:fire_charge",
"count": 3
}
}
タグ[]
タグはブロックやアイテムや関数をグループ分けするために使われる。加えて、minecraft:tick
関数タグは関数を毎tick実行するのに使われ、minecraft:load
関数タグはワールドがロード/リロードされた時に関数を実行するのに使われる。
タグを追加するには、まず名前空間フォルダの中に tags
フォルダを作成し、その中に blocks
、items
、functions
フォルダを作成する。次に、これらのフォルダかそのサブフォルダに (tag_name).json
というファイルを作成する。これがタグファイルとなる。これはゲーム中で (namespace):(name)
のように参照できる。サブフォルダに置いた場合は (namespace):(subfolder1)/(subfolder2)/.../(name)
となる。
関連項目[]
要素 |
| ||
---|---|---|---|
データパック |
| ||
チュートリアル |
|
新人向け |
| ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
全般 | |||||||||||||
チャレンジ |
| ||||||||||||
建築 | |||||||||||||
生産 |
| ||||||||||||
エンチャントと製錬 | |||||||||||||
ブロック破壊 |
| ||||||||||||
メカニズム |
| ||||||||||||
サーバー |
| ||||||||||||
技術的なチュートリアル |
| ||||||||||||
古いチュートリアル |
|