Minecraft統合版のアイテムカタログ(item catalog)について

※まったく同じ文面の記事をクラフターズコロニーにも投稿しております。

こんにちは。前回までの記事では完全に頭から抜けていましたが、挨拶くらいはしておいたほうが良かったかと思いこちらを書いております。このような記事を書くのは二回目なので、少し慣れてきたようなそうでもないような気がしますね。
今回はMinecraft統合版のアイテムカタログという機能について紹介します。

# はじめに
まずはこちらをご覧ください。

https://minecraft-mcworld.com/123831/

こちらは、七虎なる氏がクラフターズコロニーに投稿されたアイテムカタログの記事です。私のアイテムカタログの知識の約7.5割はこちらの記事からの物でした。
今回の記事は、こちらの七虎氏の記事の内容を踏まえつつ、間違っているところやわからなかったところを補足しつつ説明していく記事になっています。
かなり備忘録に近い形だと思うので、今回の記事だけではわかりづらい部分も多いと思います。｢いや大事な部分がないんだが｣と思った場合は七虎氏の記事や、公式のドキュメント(英語のみ)をご覧になるといいでしょう。
公式ドキュメント:

https://learn.microsoft.com/en-us/minecraft/creator/documents/craftingitemcatalogdocumentation?view=minecraft-bedrock-stable

# アイテムカタログって何
こちらは統合版ver.1.21.60にて正式実装された新機能です。
なんだか初心者向けっぽい名前をしていますね。もしかすると名前につられてそのような方が迷い込まれてしまった可能性もありますので説明すると、この機能はアドオンを作るときに使うものです。
アドオンはJava版で言うmodのようなもので、統合版ではmodが使えない代わりにアドオンが使えます。~~本当に代わりになってるかはさておき。~~
はい。アドオンが作れる方以外はここでブラウザバックをしてお帰りください。
マイクラのアイテムが一覧になっていて入手方法が書いてあって~みたいなことはないです。ざんねん

というわけで、アドオンが分かる方向けに説明すると、ビヘイビアパックに記述する、クリエイティブインベントリ内でのアイテムの並びを制御するものです。
この機能を使えば、例えばコマンドブロックをクリエイティブインベントリに表示させたり、自分で新しい木材を作った場合にクリエイティブインベントリの木材グループ(木材のところに+が付いてるあれのこと)に仲間入りさせてあげたりできるほか、
アドオンごとに追加されたアイテムをグループにまとめることができます。
地味に見えるかもしれませんが、痒い所に手が届く神機能ですね。
なお、**カテゴリの新設や既存のアイテムの順序の変更はできません**。
｢言葉だけじゃわからねぇよ｣って方は、この後の使い方でスクショを交えつつ説明しているので、どういうことかわかりやすいのではと思います。

# 使い方
というわけで、ここからは適当に作ったお試しアドオンを使って使い方を説明していきます。
こちらに、適当に作ったアイテム達を用意しました。
```json:items/tst1.json
{
	"format_version": "1.21.10",
	"minecraft:item": {
	  "description": {
		"identifier": "aaaasf_catalogtest:tst1"
	  },
  
	  "components": {
		"minecraft:icon": "tst1",
		"minecraft:display_name": {
			"value": "test1"
		}
	  }
	}
}
```
このコードを番号(test1の"1"の部分)以外全部コピペ、テクスチャも色違いにしただけのものを4つ。本当にお試しって感じですね。

### アイテムカタログを使わずにできること
先ほどのコードのように何も指定しなかった場合、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/ac4a195c-e8ce-4e4c-b6f7-47a138c92cd6.png)
アイテムはこのように"アイテム"のカテゴリ(言語を英語にしているので、"Items"になっていますね)の最後に増えます。~~なんて紛らわしい名前。~~
続いて、アイテムのjsonファイルに記述を増やしてみましょう。
```json:items/tst1.json
//略
    "description": {
        "identifier": "aaaasf_catalogtest:tst1",
    	"menu_category": {
    		"category": "equipment"
    	}
    }, 
//略
```
menu_category、categoryという項目を増やしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/ad3a2a60-6ca8-49d6-99f1-109bcfcb9fd7.png)
すると、先ほどまであったtest1君(赤いアイテム)は"アイテム"カテゴリからは消え、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/daf21f5f-32ba-4e8a-b097-9a9bad02d575.png)
"所持品"カテゴリに移動していました。(なんか見慣れないグループがあるのは気にしないでください...)
こちらは今までも使えた機能ですね。ここまでの詳細はこちらを参考にしています。

https://minecraft-mcworld.com/tutorial/addon-additem/

続いて、こちらのアイテムをグループに入れてみましょう。
今回はtest1君を木材に仲間入りさせます。
```json:items/tst1.json
{
	"format_version": "1.21.60",
	"minecraft:item": {
	  "description": {
		"identifier": "aaaasf_catalogtest:tst1",
		"menu_category": {
			"category": "construction",
			"group": "minecraft:itemGroup.name.planks"
		}
	  },
//略
```
このように、menu_category内にgroupも増やして見に行ってみると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/fc650c92-bff3-406c-8ace-151f5e6f03d9.png)

test1君が我が物顔で木材グループ内に入っていますね。
こちらも今までも出来ましたが、今回の1.21.60アップデートでグループに名前空間IDが必要になりました。それに伴って、**format_versionも1.21.60にしないとうまくいきません**。
一度試したとき、ここを間違えていたせいか何も起きず(カテゴリは反映されてる(? itemsだったからされてない可能性も)けどグループには入っていない)、しかもエラーも出ないという中途半端な状態になったので、このやり方をする場合は気を付けてください。
ここまではアイテムカタログを使わずにやりくりしてきましたが、ここからはそれを使ったやり方を見ていきましょう。

### アイテムカタログを使ってできること
まずはフォルダーというかディレクトリというかフォルダーを作りましょう。~~どっちの呼び方が正しいんですか。~~
manifest.jsonと同じところに、item_catalogを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/0a045ed5-508b-4bec-9f4e-e53ca9dd81c3.png)

この中に**crafting_item_catalog.json**を作成。名前が長いので注意。
このjsonファイルに記述していきます。
```json:item_catalog/crafting_item_catalog.json
{
	"format_version": "1.21.60",
	"minecraft:crafting_items_catalog": {
	   "categories": [
		  {
			 "category_name": "items",
			 "groups": [
				{
					"items": [
						"aaaasf_catalogtest:tst1",
						"aaaasf_catalogtest:tst2",
						"aaaasf_catalogtest:tst3",
						"aaaasf_catalogtest:tst4"
					]
				}
			 ]
		  }
	   ]
	}
 }
```
とりあえずこのように記述してみましょう。
この記事を見てるってことはある程度この手のものに慣れていると思いますので、説明が無くても何とかなると思います(投げやり)(最悪)。括弧が{}だったり[]だったりするのでそこに注意してください。
このようにすると何も指定しない状態と全く同じになります。~~写真は面積取るので再掲しません。~~
ここで注意ですが、アイテムを定義しているitems内のjsonで指定したカテゴリとカタログで指定したカテゴリが一致しない場合は、カタログのほうが優先されて問題なく動く
ように見えますが、一応コンテンツログ(設定>(一般の括り内>)クリエイター)でwarningが吐かれます。
条件を満たすとクラッシュ、みたいなことになると怖いので、一応ここは一致させましょう。
また、すでにクリエイティブインベントリに存在するアイテム(該当**しない**例: コマンドブロックなどのクリエイティブインベントリに無いコマンド限定アイテム、アドオンで追加したアイテム)を指定すると、こちらはerrorが吐かれて何も起きません。

では続いて、test1君を木材に仲間入りさせてみましょう。
```json:item_catalog/crafting_item_cataog.json
{
	"format_version": "1.21.60",
	"minecraft:crafting_items_catalog": {
		"categories": [
			{
				"category_name": "construction",
				"groups": [
					{
						"group_identifier": {
							"name": "minecraft:itemGroup.name.planks"
						},
						"items": [
							"aaaasf_catalogtest:tst1"
						]
					}
				]
			},
			{
				"category_name": "items",
				"groups": [
					{
						"items": [
							"aaaasf_catalogtest:tst2",
							"aaaasf_catalogtest:tst3",
							"aaaasf_catalogtest:tst4"
						]
					}
				]
			}
		]
	}
}
```
test1を下の部分から消し、上にいろいろ足しました。この状態でワールドに入って見てみると、itemsのほうを~~サボって~~変えていないためwarningが出ましたが、しっかりtest1君が我が物顔で木材グループ内に入っていました。~~写真は再掲(ry。~~
カテゴリを指定した後それに含まれる既存のグループの名前を指定してあげると、このように既存のグループに新しくアイテムを入れることができます。
使用可能な既存のグループ一覧はこちら。(公式ドキュメントより、1.21.60時点)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/a0ad503b-4039-4602-8471-6fe978346a9c.png)

公式ドキュメントからコピペして作ったはずなんですが、ja_JP.langを見ながら日本語表示を書いていると抜けが多いように見えますね... ~~これを補完するのは勘弁してください...~~

また、今回はあくまでお試しなのでwarningを放置してしまいましたが、warningに追われたくない方は上のほうのカタログを使わないやり方も視野に入れてみてはいかがでしょうか。

### アイテムカタログが"必須"な機能
ここからがこのアイテムカタログの~~存在意義~~真骨頂、新たなグループの作成のやり方です。
テストアイテム達をすべて、新設したグループにまとめてみましょう。
```json:item_catalog/crafting_item_catalog.json
{
	"format_version": "1.21.60",
	"minecraft:crafting_items_catalog": {
		"categories": [
			{
				"category_name": "items",
				"groups": [
					{
						"group_identifier": {
							"name": "aaaasf_catalogtest:group_test",
							"icon": "aaaasf_catalogtest:tst1"
						},
						"items": [
							"aaaasf_catalogtest:tst1",
							"aaaasf_catalogtest:tst2",
							"aaaasf_catalogtest:tst3",
							"aaaasf_catalogtest:tst4"
						]
					}
				]
			}
		]
	}
}
```
先ほど既存のグループ(木材)を指定していた時と比べると、group_identifierのnameがオリジナルになっているほか、新しくiconという項目が増えていますね。この部分でグループのアイコンを設定しています。
この状態で見に行ってみると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/eca8e6da-794e-4d52-a47e-389d413eee9e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/badf5998-2855-44e4-9625-319bd789fc50.png)

しっかりテストアイテム達が、test1がアイコンになっているグループにまとまっていますね。
ですが、名前が上手く表示されていない(1枚目)ので、langファイルで設定してあげましょう。langファイルについての詳しい話は割愛させてください。
```lang:texts/en_US.lang
aaaasf_catalogtest:group_test=Test Group
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009694/3f1bd550-a48e-4a14-973e-24ee4a1a3820.png)

これでばっちりですね。
また、一つのカタログファイルで複数のグループを設定することもできます。というかカタログファイルを複数に分けること自体できない可能性があるので、そうせざるを得ないと思われます。

ちなみに、七虎氏の記事では"グループ内の最初のアイテムをアイコンにしないとバグる"と書かれていましたが、そのようなことは全くありません。
先程のカタログファイルのコードのiconの部分でtest3を指定しても、何ならグループに入っていないネザライトの剣でもしっかり動作することを確認しました。

# まとめ
以上、アイテムカタログについてでした。
前回紹介した入力グリフと共にver.1.21.60で追加された神機能ですが、どちらも新しいがゆえに知名度はあまりないような気がします。全然そんなことはない可能性も大いにあります。((
アイテムカタログのほうは公式ドキュメントが出ていたので、実際に確認、スクショを撮りつつそれをまとめればよく、前回と比べてかなり簡単でしたね。
入力グリフは検索してもいまだに[私の記事](https://qiita.com/aaaasf/items/516b18d14de49f9c6cda "Minecraft統合版の入力グリフ置換(input glyph replacement)について #minecraft - Qiita")しかヒットしませんので。マジで何?なんでこんな資料無いの

1人でも多くの人にこの機能を知っていただけると嬉しいです。
最後まで読んでいただきありがとうございました。

不明なこと等がございましたら、きがるにこめんとしてください。
他にもMinecraftの役立つ記事やアドオンを公開しています。

https://minecraft-mcworld.com/author/9ab0c12fa7407f07f6a8a72340eac32f2ba745e6/