1日目 アイテムの追加
今日はアイテムやブロックの追加にチャレンジします。
まず、フォルダを作ります。
forge-1.12.2-14.23.5.2768-mdkを展開するとたくさんフォルダが出てきて、その中のsrc/main/javaにcom.example.examplemodというパッケージがあると思います。これは例みたいなものなので削除してしまいます。
削除したらsrc/main/javaに新しいパッケージとクラスファイルを作ります。
こんな感じになりました。このtestmod.classの中でアイテムの追加などを行ってそれに必要なクラスファイルをその都度つくる感じで行きます。
では、すこしtestmodの中身を書いていきます。
package testmod; import net.minecraftforge.fml.common.Mod; @Mod(modid = testmod.MOD_ID, name = testmod.MOD_NAME, version = testmod.MOD_VERSION) public class testmod { public static final String MOD_ID = "testmod"; public static final String MOD_NAME = "testmod"; public static final String MOD_VERSION = "1.0.0"; }
これでIDと名前、バージョンを指定しました。
続いて、新しいアイテムを作成します。
新しくItemTomatoという名前のクラスを作成します。
ItemTomatoの中身を書いていきます。
package testmod; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; public class ItemTomato extends Item { public ItemTomato() { this.setRegistryName("tomato"); this.setCreativeTab(CreativeTabs.MATERIALS); this.setUnlocalizedName("tomato"); } }
RegistryName、UnlocalizedNameはそれぞれ小文字のみで名前をつけなければならないようです。
続いて作成したアイテムの登録を行います。なのでそのためのコードをtestmodに書き加えていきます。
package testmod; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.registry.ForgeRegistries; @Mod(modid = testmod.MOD_ID, name = testmod.MOD_NAME, version = testmod.MOD_VERSION) public class testmod { public static final String MOD_ID = "testmod"; public static final String MOD_NAME = "testmod"; public static final String MOD_VERSION = "1.0.0"; public static final Item Tomato = new ItemTomato(); @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { ForgeRegistries.ITEMS.register(Tomato); if(event.getSide().isClient()) { ModelLoader.setCustomModelResourceLocation(Tomato, 0, new ModelResourceLocation(new ResourceLocation("testmod", "tomato"), "inventory")); } } }
ForgeRegistriesでnewしたアイテムの登録をModelLoderでそのテクスチャ等を設定しました。
この状態で一旦起動してみます。クリエイティブモードでワールドを新規作成してアイテム欄の一番うしろを見るとピンクと黒の変なアイテムが追加されてます。
モデルとなるjsonファイルおよびテクスチャーの画像を設定していないからですね。
まずjsonファイルを作ります。
src/main/resourcesの中に assets.testmod.models.itemというパッケージを作成します。
このパッケージの中にtomato.jsonという名前のファイルを作成します。
中身を書いていきます。
{ "parent": "item/handheld", "textures": { "layer0": "testmod:items/tomato" } }
次にテクスチャの画像を追加します。
今回はこんな感じの適当なトマトの画像をペイントで描いて、web上で透過処理をかけました。
今回はこのサイトを使っています。
WEBブラウザ上で簡単に透過PNG画像を作成できるツール | 無料で画像を加工できるサイト PEKO STEP
ちなみに画像はこんな感じです。
tomato.png
この画像をいれるパッケージを作成します。
src/main/resourcesの中にassets.testmod.textures.items
というパッケージを作成します。
そしたら、eclipse上のこのパッケージに先ほどの画像をドラック&ドロップでコピーするとここに画像が入ります。
パッケージ名やjsonファイルの中身は1文字でも間違えるとうまく参照できなくなって読み込まれないので、誤字に気をつけなければいけません。
ここまで設定したらもう一度マイクラを起動してみます。
画像が登録され、うまく表示されています。
最後にアイテムの名前が
item.tomato.nameになっているのでちゃんとした名前になるように設定します。
langファイルを作成します。
先ほどまでと同様にassets.testmodの中にlangというパッケージを作成します。
langの中に英語用と日本語用のlangファイルを作ります。それぞれ
en_us.lang
ja_jp.lang
という名前のファイルをつくります。
中身は
en_us.lang
item.tomato.name=tomato
ja_jp.lang
item.tomato.name=トマト
とします。
最後にこれで起動しえみると、画像も名前もうまく表示されました!!
最終手的なパッケージエクスプローラーの様子はこんな感じです。
次はブロックの追加に挑戦したいと思っています。
最後に、今回の最終的なclassファイルをアップロードしておきます。
testmod.java
ItemTomato.java