はじめに
- 本記事では、前回までで扱ったMODの環境構築を完了させていることを前提とします。詳細は上部の前回の記事をご覧ください
さて、前回までで環境構築を完了させました。今回から、具体的なMOD制作に入っていきます。その1回目はアイテム制作です。
今回からは具体的にコードを書いていくことになります。とはいえ、後述するようにアイテムを制作するだけなら複雑な手順は不要です。特に、Javaのコード自体は数行で書けるため、複雑な知識は不要だと思います。
そもそも
今回はオリジナルのアイテムを作るといいましたが、実際のところ、公式のMDK(1.20.1)を使っている限りは既にカスタムアイテムが実装されています。本当です。
実際に環境構築の部分でやったように、Intellij上部にある「runClinent」を押して実行し、一度Minecraftを起動してみましょう。その後、適当なクリエイティブワールドを起動させてみましょう。
すると、「item.(MODのID).example_item」のような名前で、既にアイテムが存在するはずです。下の画像のように、黒と紫のアイテムが存在することが分かります(なお、これとは別にブロックのほうも存在します)。

見つからない場合は、以下のコマンドを実行してみましょう(MODのIDは各自変えてください。何も弄っていない場合はexamplemod:example_itemです):
give @s 【MODのID】:example_item
さて、これはどういうことでしょうか?まだ何もコードを書いていないですよね?
これは、既にアイテムを定義するスクリプトが既に存在することに他なりません。
アイテムの定義
さて、ここでMODのメインクラス.javaを開いてみましょう。デフォルトだとsrc/main/java/com/example/examplemod内にある、ExampleMOD.javaです(名前を変えている場合はこの限りではありません)。

すると、上記画像のようにアイテムexample_itemを定義するスクリプトが見つかるはずです。このスクリプトですね:
public static final RegistryObject<Item> EXAMPLE_ITEM = ITEMS.register("example_item", () -> new Item(new Item.Properties().food(new FoodProperties.Builder()
.alwaysEat().nutrition(1).saturationMod(2f).build())));
見ての通りの食べ物が既に定義されていました。この設定を変えることでアイテムの挙動などを変更できます。例えば、以下のようにすると食べ物ではない、単純なアイテムが出来上がりますね。
public static final RegistryObject<Item> EXAMPLE_ITEM = ITEMS.register("example_item", () -> new Item(new Item.Properties()));
さて、アイテムの定義については良いと思います。問題は見た目の部分ですね。黒と紫のテクスチャーでは実用に値しません。
テクスチャーの設定
まず、src/mainの中にあるresourcesを右クリックし、ディレクトリを作成します。

入力するためのモーダルが出てくるので、以下のように入力しましょう(※modidは、このMODのIDです。デフォルトでexamplemodです):
assets/【modid】/textures/item
その後、できたitemフォルダ内に、アイテム用の画像ファイル(PNG)を入れましょう。ドラッグアンドドロップで入れることができるほか、直接エクスプローラーで操作することも可能です。この画像ファイルはアイテム名と同じにしておくと分かりやすいと思います。(後で使います)

続いて、同じくresourcesを右クリックして新たにディレクトリを作成します。以下を入力しましょう:
assets/【modid】/models/item
以下のようにフォルダが作成されればOKです。

新規に作成したほうのフォルダを右クリックして、ファイルを作成します:

このファイルの名前は「(アイテム名).json」としておきましょう。example_item.jsonを作成した場合は以下のようになりますね:

さて、このjsonファイルを選択し、以下のように記述しましょう。ただし、MODのIDとアイテム名は変えてください。
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "【MODのID】:item/【アイテム名】"
}
}
一例としては以下のようになるかと思います:
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "examplemod:item/example_item"
}
}
これらを終えてもう一度ゲームを起動すると、以下のように正常にテクスチャーが反映されていることが分かると思います:

翻訳
デフォルトだと「item.examplemod.example_item」のように表記されていて、少々見栄えが悪いです。これは、翻訳を定義することで解決できます。
まずは、resources/assets/【MODのID】フォルダ直下に、右クリックして「lang」というフォルダを新規に作成しましょう:

そして、そのlangフォルダ内に「ja_jp.json」というjsonファイルを新規作成します:

その内容ですが、例えば以下のようにアイテム名と翻訳名をセットで定義します。MODのIDや名前は各自変えてください:
{
"item.examplemod.example_item": "テスト用アイテム"
}
これを行ってゲームを起動し、言語を日本語にしてアイテム名を確認すると、以下のように正常に表記されていることが分かると思います:

おしまい
このようにして、オリジナルのアイテムを定義することができます。
なお、複数のアイテムを定義するのも簡単です。メインクラス.javaにおいて、元のスクリプトの付近に以下のように同じようなスクリプトを書くことで定義可能です:
public static final RegistryObject<Item> EXAMPLE_ITEM_2 = ITEMS.register("example_item_2", () -> new Item(new Item.Properties()));
オリジナルのアイテムが作れるとMOD制作もいよいよ佳境です。結構楽しいので、皆さんも試してみてはいかがでしょうか?
次回は、作ったオリジナルのアイテムを元にカスタムレシピを定義する方法を説明します!