Help us understand the problem. What is going on with this article?

[Java]MinecraftのModを作成しよう 1.14.4【7. 進捗の追加】

(この記事は一連の解説記事の一つになります)

先頭記事:入門編
前の記事:6. レシピの追加
次の記事:8. 鉱石の追加と生成

進捗の追加

ここまでアイテム関連を広く浅く触れてきましたが、今度は少し趣向を変えて、進捗(advancements)の追加を行ってみます。
advancement_Minecraft.png
このようなツリー構造のいわゆるトロフィーのようなものです。

進捗の追加は比較的簡単で、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つ必要になりますので、これを作ります。
参考ページに詳しいので、これを参考にしながら書きましょう。

root.json
{
  "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ファイルに追記をします。

en_us.json
{
  "advancements.root.title": "Example Title",
  "advancements.root.description": "Example description."
}
ja_jp.json
{
  "advancements.root.title": "例タイトル",
  "advancements.root.description": "説明の例。"
}

キャプチャ.PNG
このように進捗が追加できました。


もう一つくらい例を見てみましょう。

obtail_armor.json
{
  "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の要素が複数記述されていること、requirementsrewardsが増えていることです。この例のように、criteriaの要素は複数記述でき、requirementsではこれらを用いてどのように達成判定を行うか記述します。[A,B]はAまたはB、[A],[B]はAかつBを示します。rewardには進捗達成時の報酬を設定できます。ここでは経験値を付与していますが、レシピの開放・アイテム付与・任意関数の実行が可能です。
キャプチャ.PNG
きちんと経験値が取得できています。


進捗は自分の作るModがどう楽しめるか伝える良い手段ですので、効果的に活用しましょう。

追記

1.12より前は進捗ではなく実績という異なるものが存在したので、情報を探す際に混同しないように注意が必要です。

参考

進捗 - Minecraft Japan Wiki【8/4更新】 - アットウィキ

次の記事

8. 鉱石の追加と生成

koteko
Rubyかわいい。twitter(@Number13_koteko)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away