0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JAVAの勉強のためにマイクラMODを作ってみる(3)

Last updated at Posted at 2025-11-12

前回からの続き

前回は、MODの情報を変えたところまででしたが、今回は、実際にアイテムを追加したりしていきます。その前に……

0.前回忘れてた事前準備(?)Clientクラスの作成

クライアントクラスは、クライアント専用処理を書く場所らしいので、必要なのか必要でないのかが、あんまりよくわからなかったのですが、例えば、
食べ物アイテムだけ追加
→ クライアントクラスは不要(らしい?)
3Dモデルで椅子作って、レシピ設定して椅子を作れるようにする
→ クライアントクラスが必要

みたいです。ってか、初回のジェネレーターでクライアントと共通ソースの分割にしとけばよかったな、と思いつつ。作成する場所は、MOD本体と同じ階層に作成します。クライアントクラスを作成したら、エントリーポイントを設定するために「src/main/resources/fabric.mod.json」を開き、設定を書き足します。("Client"のところ)

fabric.mod.json
"entrypoints": {
		"main": [
			"Mod本体の場所"
		],
		"fabric-datagen": [
			"ModDataGeneratorの場所"
		],
        "Client": [
			"クライアントクラスの場所を書き足す"
		]
	},

作ったものの、今回は使っていません。

今回の作業後画面

image.png

開発

今回、カスタムアイテムを作成するにあたって、作業する内容が下記になります。
①リソースファイル作成(JSON関連:モデル・テクスチャ・言語ファイル)
②アイテム登録クラス作成
③メインModクラス修正(ModInitializerを実装)

1.リソースファイル作成(テクスチャ・モデル・言語ファイル)

① 画像

とりあえず、おにぎりのpng画像を用意します。作るアイテムはおにぎり。記念すべき(?)初回アイテムなのでシンプルにおにぎりを作ることにします。
image.png
実際のアイテムのテクスチャ画像を赤字のフォルダを作成し、その中に入れます。
assets/自分のmodid/textures/item/〇〇.png

② モデル

次にjsonファイルを作成します。場所は下記の通り。ここで、どの画像を使うかとかを指定しています。
assets自分のmodid/models/item/〇〇.json

モデルID.json
{
  "parent": "item/generated",
  "textures": {
    "layer0": "自分のmodid:item/アイテム名"
  }
}

③ 言語ファイル

言語ファイルも作成します。同じく赤字のフォルダを作成し、その中に、「en_us.json」と「ja_jp.json」を作成。英語バージョンと日本語バージョンですね。
assets/自分のmodid/lang

en_us.json
{
  "item.自分のmodid.アイテムid": "表示したいアイテム名"
}

2.アイテム登録クラス作成

いよいよ本格的に(エラーとの闘い)コード書くところに来ました。アイテムを登録するためのクラスを作ります。クラス名は「ModItems」としておきます。
src/main/java/パッケージ/自分のmodid/item/ModItems.java
ここでは、アイテム登録(Registry登録)します。
Registry.register()を使ってゲームにアイテムを登録します。

ModItems.java
public class ModItems {

    // アイテムを追加
    public static final Item ONIGIRI = register("onigiri", Item::new, new Item.Settings());

    // Item オブジェクトを返す register メソッド
    public static Item register(String name, Function<Item.Settings, Item> itemFactory, Item.Settings settings) {
    
        // アイテムキーを作成
        RegistryKey<Item> itemKey = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(自分MODクラス.MOD_ID, name));
        
        // アイテムインスタンスを作成
        Item item = itemFactory.apply(settings.registryKey(itemKey));
        
        // アイテムを登録
        Registry.register(Registries.ITEM, itemKey, item);
        return item;
    }
    
    public static void initialize() {
        
        // ログに出力して、Modが正しく初期化されたことを確認する
        自分MODクラス.LOGGER.info("MODアイテムの登録 " + 自分MODクラス.MOD_ID);
        
        // クリエイティブタブに追加(FOOD_AND_DRINKが「食べ物を飲み物」のタブ)
        ItemGroupEvents.modifyEntriesEvent(ItemGroups.FOOD_AND_DRINK)
                .register(entries -> {
                    entries.add(ONIGIRI); // ONIGIRIを追加します
                });
    }
    
}

3.メインModクラス修正(ModInitializerを実装)

2で作成したアイテム登録クラスをマイクラ起動時に呼び出します。

自分MODクラス.java
public class 自分のMODクラス名 implements ModInitializer {
    public static final String MOD_ID = "自分のmodid";

    // ログを出力し、MODが動いてるか確認する
    public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);


    @Override
    public void onInitialize() {
        ModItems.initialize(); // ← これを呼ぶことで、ModItemsクラスをロード
    }
}

ここまで来たので、マイクラを起動して確認してみました。
image.png
あれ!?テクスチャがバグっとるがな~~~!!!
image.png
このあたりで半日を費やしました……なぜなの。心が折れそうよ。

一晩寝て、もう一度fabricのドキュメントとにらめっこ。見落としていたけどよく読んでみると、アイテムモデルのjsonが必要とのこと。ふむふむ。なるほど……
image.png
赤字のフォルダを作成し、アイテムidでjsonを作成します
assets/自分のmodid/items/〇〇.jsonというファイルを作成します。

アイテムid.json
{
  "model": {
    "type" : "minecraft:model",
    "model": "自分のmodid:item/アイテムid"
  }
}

これで、テクスチャちゃんと出ました。おにぎり持ってるぅ~
image.png

とりあえず、本日はここまで。

ソースコード、そっと公開します
シリーズの最初

参考URL

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?