Mod制作日記 - 簡単なアイテムを追加する

アップロード:2023/01/01 最終更新:2023/01/01

目次 (折りたたみ可)

ModIdやメインクラスのjavaファイル名などの各自で異なる部分はいちいち説明しないのでご注意を。

アイテムのクラス

左のPackage Explorerから「src/main/java > com.masec.new_mod」を右クリック、「New > Package」を押します。
Name:の「com.masec.new_mod」の右に「.item」を書き足して「Finish」

「New Java Package」ウィンドウからパッケージを作成します。

作った「com.masec.new_mod.item」を右クリックして「New > Class」を押します。
クラス名はアイテム名と揃えます。今回はTestIngotにしました。

「New Java Class」ウィンドウからクラスを作成します。

クラスのコード

作られたファイルを編集して、こうなります。

TestIngot.java
各自で変える部分
package com.masec.newmod.item; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; public class TestIngot extends Item { public TestIngot() { super(new Properties().tab(ItemGroup.TAB_MISC)); } } package com.masec.newmod.item; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; public class TestIngot extends Item { public TestIngot() { super(new Properties().tab(ItemGroup.TAB_MISC)); } }
package com.~#M(83ffd9)masec.newmodM#~.item; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; public class ~#M(83ffd9)TestIngotM#~ extends Item { public ~#M(83ffd9)TestIngotM#~() { super(new Properties().tab(ItemGroup.~#M(ffc8f1)TAB_MISCM#~)); } }

桃色でマーカーしたところはクリエイティブインベントリのカテゴリタブを指定する部分です。以下から選んでください。

変数概要
TAB_BUILDING_BLOCKS建築ブロック
TAB_DECORATIONS装飾ブロック
TAB_REDSTONEレッドストーン
TAB_MISCその他
TAB_TRANSPORTATION運送
TAB_COMBAT戦闘
TAB_TOOLS道具
TAB_FOOD食料
TAB_BREWING醸造

アイテムを登録

アイテムのパッケージを追加したときと同様に、 左のPackage Explorerから「src/main/java > com.masec.new_mod」を右クリック、「New > Package」を押します。
Name:の「com.masec.new_mod」の右に「.init」を書き足して「Finish」

そしてまた「com.masec.new_mod.init」を右クリックしてクラスを新規作成します。クラス名はItemInitです。

クラスのコード

これもまた、作られたファイルを編集してこうなります。

ItemInit.java
各自で変えるところ
package com.masec.newmod.init; import com.masec.newmod.NewMod; import com.masec.newmod.item.TestIngot; import net.minecraft.item.Item; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public class ItemInit { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, NewMod.MOD_ID); public static final RegistryObject<Item> TEST_INGOT = ITEMS.register("test_ingot", () -> new TestIngot()); } package com.masec.newmod.init; import com.masec.newmod.NewMod; import com.masec.newmod.item.TestIngot; import net.minecraft.item.Item; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public class ItemInit { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, NewMod.MOD_ID); public static final RegistryObject<Item> TEST_INGOT = ITEMS.register("test_ingot", () -> new TestIngot()); }
package com.~#M(83ffd9)masec.newmodM#~.init; import com.~#M(83ffd9)masec.newmod.NewModM#~; import com.~#M(83ffd9)masec.newmod.item.TestIngotM#~; import net.minecraft.item.Item; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public class ItemInit { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ~#M(83ffd9)NewModM#~.MOD_ID); public static final RegistryObject<Item> ~#M(ffc8f1)TEST_INGOTM#~ = ITEMS.register(~#M(ffc8f1)"test_ingot"M#~, () -> new ~#M(83ffd9)TestIngotM#~()); }

桃色でマーカーしたところはこのファイルで初めて定義しています。雰囲気を合わせて自分のものに置き換えてください(大文字とか) "test_ingot"のほうはコマンドなどで使われる、アイテムのidとなります。

イベントバス

これがないと追加されないらしいです。メインクラスのファイルに少し書き加えます。
各自で名前が違うと思いますが「NewMod.java」を開きます。

NewMod.java
package com.masec.newmod; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.masec.newmod.init.ItemInit; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; // The value here should match an entry in the META-INF/mods.toml file @Mod(NewMod.MOD_ID) public class NewMod { // Directly reference a log4j logger. public static final Logger LOGGER = LogManager.getLogger(); public static final String MOD_ID = "new_mod"; public NewMod() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); bus.addListener(this::setup); ItemInit.ITEMS.register(bus); // Register ourselves for server and other game events we are interested in MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event) { // some preinit code } }
package com.masec.newmod; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; ~#M(83ffd9)import com.masec.newmod.init.ItemInit;M#~ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; // The value here should match an entry in the META-INF/mods.toml file @Mod(NewMod.MOD_ID) public class NewMod { // Directly reference a log4j logger. public static final Logger LOGGER = LogManager.getLogger(); public static final String MOD_ID = "new_mod"; public NewMod() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); bus.addListener(this::setup); ~#M(83ffd9)ItemInit.ITEMS.register(bus);M#~ // Register ourselves for server and other game events we are interested in MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event) { // some preinit code } }

これを書き加えて終わりです。上のほうは各自で書き換える部分がありますね。

リソース

Package Explorerから「src/main/resources」を右クリックしてパッケージを作ります。名前は「assets.new_mod.lang」のようにします。
同様に、modelsとtexuresも追加します。

エクスプローラで「src/main/resources」を確認したときに「assets.new_mod.lang」「assets.new_mod.models」「assets.new_mod.textures」があるはずです。

テキスト

「assets.new_mod.lang」を右クリックして「New > File」を選択して「en_us.json」ファイルを作成します

Eclipse内でファイルを作成します。

別のエディタで開いてEclipseの画面に以下のウィンドウが出てきたら下にチェック入れてOKするかそもそもCancelするといいと思います。
Eclipse内でJSONが使えるように拡張機能入れますかと聞いてます。わたしはVSCodeでよかったのでいらないってしました。

マーケットプレイスにエディターがある旨のダイアログが表示されます。

そして、JSONの中身はこんな感じです。

en_us.json
{ "item.new_mod.test_ingot": "Test Ingot" }

new_modのところがModId、test_ingotがアイテムのID、Test Ingotが表示する名前(英語)です。 日本語は同じところに「ja_jp.json」という名前でファイルを使って、表示する名前の欄だけ変えて同じJSONを書きます。

モデル/テクスチャ

「assets.new_mod.models」を右クリックして「assets.new_mod.models.item」という名前のパッケージを作ります。
そこに「test_ingot.json」を作ります。ファイル名はアイテムのIDです。

{ "parent": "item/generated", "textures": { "layer0":"new_mod:items/test_ingot" } }

Eclipseからちょっと出て、はじめに作ったフォルダの「src/main/resources/assets/new_mod/textures」に 「items」フォルダを作り、テクスチャを入れます。テクスチャの名前は「test_ingot.png」のようにします。

最後はEclipseに戻り、「src/main/resources」を右クリックして「Refresh」します。

マイクラを起動して確認

このように、きれいなインゴットが追加できました。

青と水色のグラデーションがかかったインゴットを額縁に設置しています。

参考サイト