マルチプレイなら『シン・VPS』がおすすめ!

【マイクラ】進捗でアイテム検知を行う方法!【解説】

【マイクラ】進捗でアイテム検知を行う方法!【解説】

この記事では、Minecraft Java Edition(バージョン1.20.4)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。

こんにちは!
マインクラフターのなつめ(@natsume_717b)です。

なつめ

2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!

この記事では、こんな疑問を解決します!

本記事の内容
  • inventory_changedでインベントリをチェックする

進捗を用いてインベントリのアイテムをチェックしようと思った場合、inventory_changedという項目を設定する必要があります。

このinventory_changedはその名前の通り、インベントリの変化を検知することが可能です。
要はアイテムの入手を確認するなどといったことに適しています。

さっそく見ていきましょう!

inventory_changedでインベントリをチェックする

インベントリのアイテムを進捗で検知するには、inventory_changedという項目を使います。

この項目を指示することで、指定しておいたアイテムがインベントリに入ったことを検知することが可能です。

単純にアイテムを指示するほか、NBTを詳しく指示することもできるので、様々な場面に対応しています。

実際の例

それでは、実際にどのように記述するのか見ていきましょう。

まずは進捗を作成する必要があるので、データパックを作ります。
以下のようにファイル(フォルダ)を作成します。

  • datapack
    • data
      • フォルダ
        • advancements
          • jsonファイル
    • pack.mcmeta

pack.mcmetaとjsonファイル以外は全てフォルダです。
また、pack.mcmetaの中身は以下の通り。

{
    "pack": {
      "pack_format": 26,
      "description": "説明文"
    }
}

本題である進捗そのものとなるjsonファイルは以下の通り。
あくまで一例になります。

{
  "display": {
    "icon": {
      "item": "minecraft:stone"
    },
    "title": "タイトル",
    "description": "説明文",
    "show_toast": true,
    "announce_to_chat": true,
    "hidden": false
  },
  "parent": "minecraft:story/root",
  "criteria": {
    "test": {
      "trigger": "minecraft:inventory_changed",
      "conditions": {
        "items": [
          {
            "items": [
              "minecraft:emerald"
            ]
          }
        ]
      }
    }
  }
}

特に重要な部分は橙文字にしています。
trigger部分でinventory_changedを指示し、conditions(items)の部分でどのアイテムを検知するのかを指示しています。

conditionsの部分ではどのようなエンティティが手に入れたのか、どのようなアイテムを手に入れたのかなどを細かく設定できます。
様々な項目があるため、進捗生成サイトを活用することをおすすめします。

以下はNBTタグを指示してみたものです。
エンチャントされたエメラルドを手に入れると、解除されるようになっています。

{
    "display": {
      "icon": {
        "item": "minecraft:stone"
      },
      "title": "タイトル",
      "description": "説明文",
      "show_toast": true,
      "announce_to_chat": true,
      "hidden": false
    },
    "parent": "minecraft:story/root",
    "criteria": {
      "test": {
        "trigger": "minecraft:inventory_changed",
        "conditions": {
          "items": [
            {
              "items": [
                "minecraft:emerald"
              ],
              "nbt": "{Enchantments:[{}]}"
            }
          ]
        }
      }
    }
  }
  

nbt”: “{Enchantments:[{}]}が追記されており、空のエンチャントがされているエメラルドを指示しています。

今回はエンチャントの指示でしたが、本に書かれている内容(NBT)を指示すれば特定の本を手に入れた時に解除するなんてこともできますので、非常に優秀です。

まとめ

というわけで、今回のまとめです。

ポイント
  • 進捗でインベントリのアイテムを検知したい場合には、inventory_changedを指示する。
  • NBTなどを指示することで、より細かく指定することができる。

この記事は以上になります。

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】