提供: Minecraft Modding Wiki
2015年3月24日 (火) 16:42時点におけるModderKina (トーク | 投稿記録)による版 (ModelLoader.setCustomModelResourceLocationを利用するように変更)
この記事は"Minecraft Forge Universal 11.14.0.xxx~"を前提MODとしています。 |
アイテムの追加
簡単なアイテムの追加方法
注意:一度入れたMODを外すと、再び入れてもテクスチャが反映されなくなります。デバッグ時にご注意を。
ソースコード
SampleMod.java
package com.example.examplemod; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.registry.GameRegistry; @Mod(modid = "SampleMod", name = "SampleMod", version = "1.0", dependencies = "required-after:Forge@[1.8-11.14.0.1239,)", useMetadata = true) public class SampleMod { public static final String MOD_ID = "SampleMod"; @Mod.Instance("SampleMod") public static SampleMod INSTANCE; public static Item sampleItem; @EventHandler public void preInit(FMLPreInitializationEvent event) { sampleItem = new Item() .setCreativeTab(CreativeTabs.tabMaterials)/*クリエイティブのタブ*/ .setUnlocalizedName("SampleItem")/*システム名の登録*/ /*.setHasSubtypes(true)*//*ダメージ値等で複数の種類のアイテムを分けているかどうか。デフォルトfalse*/ /*.setMaxDamage(256)*//*耐久値の設定。デフォルト0*/ /*.setFull3D()*//*3D表示で描画させる。ツールや骨、棒等。*/ /*.setContainerItem(Items.stick)*//*クラフト時にアイテムを返却できるようにしている際の返却アイテムの指定。*/ /*.setPotionEffect(PotionHelper.ghastTearEffect)*//*指定文字列に対応した素材として醸造台で使える。PotionHelper参照のこと。*/ /*.setNoRepair()*//*修理レシピを削除し、金床での修繕を出来なくする*/ .setMaxStackSize(64);/*スタックできる量。デフォルト64*/ //アイテムの登録。登録文字列はMOD内で被らなければ何でも良い。 GameRegistry.registerItem(sampleItem, "sampleitem"); //テクスチャ・モデル指定JSONファイル名の登録。 if (event.getSide().isClient()) { //1IDで複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。 ModelLoader.setCustomModelResourceLocation(sampleItem, 0, new ModelResourceLocation(MOD_ID + ":" + "sampleitem", "inventory")); } } @EventHandler public void init(FMLInitializationEvent event) { } }
sampleitem.json
{ "parent": "builtin/generated", "textures": { "layer0": "items/apple" }, "display": { "thirdperson": { "rotation": [ 0, 90, -35 ], "translation": [ 0, 1.25, -3.5 ], "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], "translation": [ 0, 4, 2 ], "scale": [ 1.7, 1.7, 1.7 ] } } }
解説
SampleMod.java
//テクスチャ・モデル指定JSONファイル名の登録。 if (event.getSide() == Side.CLIENT) { //ItemStackのmetadataで種類を分けて描画させたい場合。登録名を予め登録する。今回は使ってない。 //ModelBakery.addVariantName(sampleItem, MOD_ID + ":" + "sampleItem0", MOD_ID + ":" + "sampleItem1"); //モデルJSONファイルのファイル名を登録。1IDで1つだけなら、登録名はGameRegistryでの登録名と同じものにする。 //1IDでmetadata別複数モデルを登録するなら、上のメソッドで登録した登録名を指定する。 Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(sampleItem, 0, new ModelResourceLocation(MOD_ID + ":" + "sampleItem", "inventory")); }
アイテムのテクスチャ・モデルのJSONファイルのファイル名を登録している。 ModelBakery#addVariantNameメソッドは、染料のような、1IDで複数種類のアイテムのモデルを登録する際の登録名を予め指定しておくメソッドである。 meta別のモデルがない場合は必要ない。 ItemModelMesher#registerメソッドでテクスチャ・モデルのJSONファイルを登録している。 ここで登録されるのは手持ちやドロップアイテム時の描画についてである。 1.7と同様の処理については1.7のアイテム追加を参照のこと。
sampleitem.json
{ "parent": "builtin/generated", "textures": { "layer0": "items/apple" }, "display": { "thirdperson": { "rotation": [ 0, 90, -35 ], "translation": [ 0, 1.25, -3.5 ], "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], "translation": [ 0, 4, 2 ], "scale": [ 1.7, 1.7, 1.7 ] } } }
アイテムモデル用JSONファイルである。このファイルは、
assets\<modid>\models\item
ディレクトリに配置する。
parent:親のモデルJSONファイルを指定。"builtin/generated"で通常のアイテムのモデルを指定。
texture:テクスチャのファイルパスを指定。"layer0"と"layer1"を指定できる。マルチパスレンダリングしないなら、"layer0"のみで良い。
display:描画時の回転、平行移動、拡大縮小の係数を指定する。コピペ安定。
"thirdperson"は三人称視点、"firstperson"は一人称視点