[Java]MinecraftのModを作成しよう 1.14.4【1. アイテムの追加】

（この記事は一連の解説記事の一つになります）

先頭記事：[入門編](https://qiita.com/koteko/items/7afadf8261eac49bacad)
前の記事：[0. 基本ファイル](https://qiita.com/koteko/items/0022f3819302aaa46b7d)
次の記事：[2. ブロックの追加](https://qiita.com/koteko/items/c904b3bfdd90f0b9a98a)

# アイテムの追加
まずはマイクラのModdingにおける「Hello, World!」である、無機能アイテムの追加をしてみましょう。
メインのファイルに書いても勿論いいのですが、増えていくと後々ごちゃごちゃするので、アイテムを管理するクラスを作ってそちらに書いていきます。

```
\src\main\java\jp\koteko\example_mod\
   ├ ExampleMod.java
   └ lists
      └ ItemList.java
```

```java:ItemList.java
package jp.koteko.example_mod.lists;

import jp.koteko.example_mod.ExampleMod;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

@Mod.EventBusSubscriber(modid = ExampleMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ItemList {
    public static Item ExampleIngot = new Item(new Item.Properties().group(ItemGroup.MISC))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_ingot"));

    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().registerAll(
                ExampleIngot
        );
    }
}

```
また、メインファイルにも少し変更を加えます。

```java:ExampleMod.java
//...
@Mod(ExampleMod.MOD_ID) // 変更
public class ExampleMod
{
    public static final String MOD_ID = "example_mod"; // 追記
    //...
}
```
さてゲームを起動してみましょう。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/d4ec57a1-cbde-704e-65e7-aecfc9ef6592.png)
クリエイティブでアイテムを確認するとなにやら怪しげな黒と紫の`item.example_mod.example_ingot`なるアイテムが増えているのが確認できると思います。**これから嫌というほど見ることになるこの黒紫**は、対応するテクスチャが見つからなかった時の表示です。

<details><summary>コードの簡単な説明</summary><div>

```java:アイテムの登録を行う部分
// @で始まる行(アノテーション) 書いておくといい感じに色々してくれるらしい
@Mod.EventBusSubscriber(modid = ExampleMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ItemList {
    // メンバ変数としてアイテムを宣言、初期化しておく
    // group()でクリエイティブタブの設定 ItemGroup.MISCはMiscellaneous(その他)
    // setRegistryNameで登録するアイテムIDの設定をしている
    // "example_ingot"の部分が登録されるアイテムID　小文字
    public static Item ExampleIngot = new Item(new Item.Properties().group(ItemGroup.MISC))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_ingot"));

    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event) {
        // registerAll()で引数に渡されたItemクラスのインスタンスを登録する
        // 引数はカンマ区切りで複数渡せる
        event.getRegistry().registerAll(
                ExampleIngot
        );
    }
}
```
</div></details>
___
さて、黒紫を直し、正しいアイテム名を表示するために設定をしましょう。先に追加するファイルとツリー構造を示します。単数・複数形に注意してください。

```
\src\main\resources
   └ assets
      └ example_mod
         ├ lang
         │  └ en_us.json
         │  └ ja_jp.json
         ├ models
         │  └ item
         │     └ example_ingot.json
         └ textures
            └ items
               └ example_ingot.png
```

`lang`以下のjsonファイルでは、各言語における表示を定めます。プログラム中ではIDで管理し、ディスプレイネームはこちらで記述する形です。
`models`以下のjsonファイルは、テクスチャをどう適用するかを定めます。ファイル名は[対応するアイテムID].jsonとします。
`textures`以下にはテクスチャファイルを配置します。

次に中身を書いていきましょう。

```json:en_us.json
{
  "item.example_mod.example_ingot": "Example Ingot"
}
```
```json:en_us.json
{
  "item.example_mod.example_ingot": "例インゴット"
}
```
`"item.MOD_ID.アイテムID": "表示名"`

```json:example_ingot.json
{
  "parent": "item/generated",
  "textures": {
    "layer0": "example_mod:items/example_ingot"
  }
}
```
`MOD_ID:items/[テクスチャファイル名]`
表示の細かい設定にはモデルファイルが重要になりますが、ここでは省略します。
`example_ingot.png`を適当に用意して配置したら再度ゲームを起動してみます。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/d50036d0-3851-7da8-5f99-e35e01117512.png)
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256627/ceb68965-0e9b-2e20-1341-7ee0f62f17d7.png)

**アイテムの追加ができました！**

# 発展
Q. ツールを作りたい
A. [4. ツールの追加](https://qiita.com/koteko/items/0c3a73d1ed299cfbde02)で解説します。

Q. 対応したレシピを作りたい
A. [6. レシピの追加](https://qiita.com/koteko/items/4e6f4e25db43907770d9)で解説します。

Q. 食べ物を作りたい
A. 未定です(どこかで書きたい)。

# 参考
[Minecraft 1.14.4 Forge Modの作成 その3 【無機能アイテムの追加】](https://qiita.com/Hiroya_W/items/4fec2d799e499c4cd7c2)

# 次の記事
[2. ブロックの追加](https://qiita.com/koteko/items/c904b3bfdd90f0b9a98a)