NeoForge 1.21.4で始めるマイクラMOD開発 ②アイテム追加

に公開

前回はNeoForgeの開発環境を構築しました。
今回は、MODにオリジナルアイテムを追加する方法を紹介します。

フォルダの追加

必要なフォルダを追加してください。

src/
├── main/
│   ├── java/com/example/examplemod/
│   │   │   ExampleMod.java
│   │   └── item                 ← 追加
│   └── resources/
│       └── assets/examplemod/
│           ├── lang/
│           │   └── en_us.json
│           ├── items            ← 追加
│           ├── models/item/     ← 追加
│           └── textures/item/   ← 追加

次に、必要なファイルを追加してください。assetsに追加するファイル名は追加したいアイテム名称と同じものにしてください。
ここでは、新しい鉱石を追加することをイメージしてstellarにしています。

src/
├── main/
│   ├── java/com/example/examplemod/
│   │   │   ExampleMod.java
│   │   └── item/ModItems.java   ← 追加
│   └── resources/
│       └── assets/examplemod/
│           ├── lang/
│           │   └── en_us.json
│           ├── items/stellar.json          ← 追加
│           ├── models/item/stellar.json    ← 追加
│           └── textures/item/stellar.png   ← 追加

アイテムクラスを追加

ModItems.java を編集して、アイテムを登録します。

package com.example.examplemod.item;

import com.example.examplemod.ExampleMod;
import net.minecraft.world.item.Item;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredRegister;

public class ModItem {
    public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(ExampleMod.MODID);

    public static final DeferredItem<Item> STELLAR = ITEMS.registerSimpleItem("stellar",
            new Item.Properties());

    public static void register(IEventBus eventBus) {
        ITEMS.register(eventBus);
    }
}

そして、ExampleMod.java の public ExampleMod(IEventBus modEventBus, ModContainer modContainer) に以下を追加します。

ModItems.ITEMS.register(modEventBus);

NeoForge.EVENT_BUS.register(this);という行があるので、その下に追加します。

言語ファイルで名前を定義

resources/assets/examplemod/lang/en_us.json に次を追加します。
これは、ゲーム内でのアイテム名称になります。
(すでにサンプルが書かれている場合は、消していいです)

{
  "item.examplemod.stellar": "Stellar"
}

モデルファイルを作成

resources/assets/examplemod/models/item/stellar.json に次を追加します。

{
  "parent": "minecraft:item/generated",
  "textures": {
    "layer0": "examplemod:item/stellar"
  }
}

resources/assets/examplemod/item/stellar.json に次を追加します。

{
  "model": {
    "type": "minecraft:model",
    "model": "examplemod:item/stellar"
  }
}

テクスチャ画像を追加

resources/assets/examplemod/textures/item/stellar.png に、16x16 PNG画像を配置します。
画像がない場合は、デフォルトの黒と紫の画像で表示されます。
今回はサンプルとして以下のような画像を追加しました。

クリエイティブタブに追加

カスタムアイテムをクリエイティブメニューに表示するために、以下を ExampleMod.java の addCreative() に追加します。

if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
   event.accept(ModItems.STELLAR);
}

(EXAMPLE_BLOCK_ITEMのコードがすでに書かれているのでみつけやすいはずです)

起動して確認

起動してアイテムが追加されているか確認します。
GradleのrunClientを選択してもいいですし、コマンドでも実行できます。

./gradlew runClient

クリエイティブモードでワールドを生成し、Eキーでインベントリを開いて、素材の中に追加したアイテムがあるか見てみます。

これでアイテムの追加は完了です!

Discussion