前回からの続き
前回は、MODの情報を変えたところまででしたが、今回は、実際にアイテムを追加したりしていきます。その前に……
0.前回忘れてた事前準備(?)Clientクラスの作成
クライアントクラスは、クライアント専用処理を書く場所らしいので、必要なのか必要でないのかが、あんまりよくわからなかったのですが、例えば、
食べ物アイテムだけ追加
→ クライアントクラスは不要(らしい?)
3Dモデルで椅子作って、レシピ設定して椅子を作れるようにする
→ クライアントクラスが必要
みたいです。ってか、初回のジェネレーターでクライアントと共通ソースの分割にしとけばよかったな、と思いつつ。作成する場所は、MOD本体と同じ階層に作成します。クライアントクラスを作成したら、エントリーポイントを設定するために「src/main/resources/fabric.mod.json」を開き、設定を書き足します。("Client"のところ)
"entrypoints": {
"main": [
"Mod本体の場所"
],
"fabric-datagen": [
"ModDataGeneratorの場所"
],
"Client": [
"クライアントクラスの場所を書き足す"
]
},
作ったものの、今回は使っていません。
今回の作業後画面
開発
今回、カスタムアイテムを作成するにあたって、作業する内容が下記になります。
①リソースファイル作成(JSON関連:モデル・テクスチャ・言語ファイル)
②アイテム登録クラス作成
③メインModクラス修正(ModInitializerを実装)
1.リソースファイル作成(テクスチャ・モデル・言語ファイル)
① 画像
とりあえず、おにぎりのpng画像を用意します。作るアイテムはおにぎり。記念すべき(?)初回アイテムなのでシンプルにおにぎりを作ることにします。

実際のアイテムのテクスチャ画像を赤字のフォルダを作成し、その中に入れます。
assets/自分のmodid/textures/item/〇〇.png
② モデル
次にjsonファイルを作成します。場所は下記の通り。ここで、どの画像を使うかとかを指定しています。
assets自分のmodid/models/item/〇〇.json
{
"parent": "item/generated",
"textures": {
"layer0": "自分のmodid:item/アイテム名"
}
}
③ 言語ファイル
言語ファイルも作成します。同じく赤字のフォルダを作成し、その中に、「en_us.json」と「ja_jp.json」を作成。英語バージョンと日本語バージョンですね。
assets/自分のmodid/lang
{
"item.自分のmodid.アイテムid": "表示したいアイテム名"
}
2.アイテム登録クラス作成
いよいよ本格的に(エラーとの闘い)コード書くところに来ました。アイテムを登録するためのクラスを作ります。クラス名は「ModItems」としておきます。
src/main/java/パッケージ/自分のmodid/item/ModItems.java
ここでは、アイテム登録(Registry登録)します。
Registry.register()を使ってゲームにアイテムを登録します。
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で作成したアイテム登録クラスをマイクラ起動時に呼び出します。
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クラスをロード
}
}
ここまで来たので、マイクラを起動して確認してみました。

あれ!?テクスチャがバグっとるがな~~~!!!

このあたりで半日を費やしました……なぜなの。心が折れそうよ。
一晩寝て、もう一度fabricのドキュメントとにらめっこ。見落としていたけどよく読んでみると、アイテムモデルのjsonが必要とのこと。ふむふむ。なるほど……

赤字のフォルダを作成し、アイテムidでjsonを作成します
assets/自分のmodid/items/〇〇.jsonというファイルを作成します。
{
"model": {
"type" : "minecraft:model",
"model": "自分のmodid:item/アイテムid"
}
}
とりあえず、本日はここまで。
参考URL

