(この記事は一連の解説記事の一つになります)
先頭記事:入門編
前の記事:6. レシピの追加
次の記事:8. 鉱石の追加と生成
進捗の追加
ここまでアイテム関連を広く浅く触れてきましたが、今度は少し趣向を変えて、進捗(advancements)の追加を行ってみます。
このようなツリー構造のいわゆるトロフィーのようなものです。
進捗の追加は比較的簡単で、1.14.4ではjsonベースで管理されています。
\src\main\resources
├ assets
└ data
└ example_mod
├ advancements
│ └ root.json
├ loot_tables
└ recipes
\src\main\resources\data\example_mod\advancements
フォルダを作り、この中に配置していきます。
まずツリーの根にあたる進捗が1つ必要になりますので、これを作ります。
参考ページに詳しいので、これを参考にしながら書きましょう。
{
"display": {
"icon": {
"item": "example_mod:example_ingot"
},
"title": {
"translate": "advancements.root.title"
},
"description": {
"translate": "advancements.root.description"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false,
"background": "minecraft:textures/block/stone.png"
},
"criteria": {
"get_example_ingot": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "example_mod:example_ingot"
}
]
}
}
}
}
これはexample_ingot
を入手した際に達成される進捗の例です。
重ねてになりますが、参考ページに十分な説明がありますので、詳しくはそちらを確認してください。一部かいつまんで説明します。
frame
は進捗のタイルのフレームの指定です。challenge、goal、taskの3つから適当なものを設定しましょう。デフォルトtask。
show_toast
announce_to_chat
はそれぞれ「達成時に右上にメッセージを出すかどうか」「チャット欄にメッセージを出すかどうか」で、true/falseを与えます。デフォルトtrue。
hidden
は「一つ達成されるまでタブを表示しないかどうか」…と書かれていますが、falseを指定してもなぜか表示されないのでよくわかりません。デフォルトfalse。
criteria
は進捗の条件を定める項です。任意のuniqueな名前をタグ名とし(get_example_ingot
の部分)、trigger
に各種トリガー、conditions
にトリガーに対応した詳細な条件を記述します。
タイトルと説明のtranslate
について、langファイルに追記をします。
{
"advancements.root.title": "Example Title",
"advancements.root.description": "Example description."
}
{
"advancements.root.title": "例タイトル",
"advancements.root.description": "説明の例。"
}
もう一つくらい例を見てみましょう。
{
"parent": "example_mod:root",
"display": {
"icon": {
"item": "example_mod:example_chestplate"
},
"title": {
"translate": "advancements.obtain_armor.title"
},
"description": {
"translate": "advancements.obtain_armor.description"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false
},
"criteria": {
"example_helmet": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "example_mod:example_helmet"
}
]
}
},
"example_chestplate": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "example_mod:example_chestplate"
}
]
}
},
"example_leggings": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "example_mod:example_leggings"
}
]
}
},
"example_boots": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "example_mod:example_boots"
}
]
}
}
},
"requirements": [
[
"example_helmet",
"example_chestplate",
"example_leggings",
"example_boots"
]
],
"rewards": {
"experience": 100
}
}
いずれかの防具を入手で達成される進捗の例です。
特に注目してほしいのは、前項でなかったparent
の要素が増えていることです。ここに先ほど定義したexample_mod:root
を指定することで、子の要素とすることができます。なお、進捗では親が子の前提条件とはならない(順不同で達成可能)ですが、親を達成した場合子の子まで(つまり2段先まで)がすべて表示されるようになるようです(逆に子を達成した場合最短の経路で根までの親が表示されます)。また、1つの親に対して子は複数作ることができます。
他に異なるのは、criteria
の要素が複数記述されていること、requirements``rewards
が増えていることです。この例のように、criteria
の要素は複数記述でき、requirements
ではこれらを用いてどのように達成判定を行うか記述します。[A,B]
はAまたはB、[A],[B]
はAかつBを示します。reward
には進捗達成時の報酬を設定できます。ここでは経験値を付与していますが、レシピの開放・アイテム付与・任意関数の実行が可能です。
きちんと経験値が取得できています。
進捗は自分の作るModがどう楽しめるか伝える良い手段ですので、効果的に活用しましょう。
追記
1.12より前は進捗ではなく実績という異なるものが存在したので、情報を探す際に混同しないように注意が必要です。
参考
進捗 - Minecraft Japan Wiki【8/4更新】 - アットウィキ