提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal 9.11.1.965"を前提MODとしています。 |
防具の追加
鉄と同じ耐久度を持ち、ダイヤと同じ耐久力を持つ防具を追加します。
金床での修復にはエメラルドを使います。
ちなみにレイヤーというのはプレイヤーが防具をつけたときにそのプレイヤーが着るものです。
ソースコード
- SampleArmorCore.java
package mods.armorsample; import net.minecraft.item.EnumArmorMaterial; import net.minecraft.item.Item; import net.minecraftforge.common.EnumHelper; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; @Mod(modid="sampleArmor", name="sampleArmor", version="1.0.0") public class SampleArmorCore { //modid名を登録。texturePathを指定する際に用います。 public static final String modid ="samplearmor"; public static Item sampleHelmet; public static int sampleHelmetID = 28524; public static Item sampleChestplate; public static int sampleChestplateID = 28525; public static Item sampleLeggings; public static int sampleLeggingsID = 28526; public static Item sampleBoots; public static int sampleBootsID = 28527; public static EnumArmorMaterial sampleArmorEnum; @EventHandler public void init(FMLInitializationEvent event) { //表示名の登録 LanguageRegistry.addName(sampleHelmet, "Sample Helmet"); LanguageRegistry.instance().addNameForObject(sampleHelmet, "ja_JP", "サンプルヘルメット"); LanguageRegistry.addName(sampleChestplate, "Sample Chestplate"); LanguageRegistry.instance().addNameForObject(sampleChestplate, "ja_JP", "サンプルチェストプレート"); LanguageRegistry.addName(sampleLeggings, "Sample Leggings"); LanguageRegistry.instance().addNameForObject(sampleLeggings, "ja_JP", "サンプルレギンス"); LanguageRegistry.addName(sampleBoots, "Sample Boots"); LanguageRegistry.instance().addNameForObject(sampleBoots, "ja_JP", "サンプルブーツ"); } @EventHandler public void preInit(FMLPreInitializationEvent event) { //インスタンスの代入 setUnlocalizedNameでシステム名の登録、setTextureNameでテクスチャの指定をしています。 sampleHelmet = new ItemSampleArmor(sampleHelmetID, sampleArmorEnum, 0, 0, "sample").setUnlocalizedName("SampleHelmet").setTextureName("samplearmor:sample_helmet"); GameRegistry.registerItem(sampleHelmet, "samplehelmet"); sampleChestplate = new ItemSampleArmor(sampleChestplateID, sampleArmorEnum, 0, 1, "sample").setUnlocalizedName("SampleChestplate").setTextureName("samplearmor:sample_chestplate"); GameRegistry.registerItem(sampleChestplate, "samplechestplate"); sampleLeggings = new ItemSampleArmor(sampleLeggingsID, sampleArmorEnum, 0, 2, "sample").setUnlocalizedName("SampleLeggings").setTextureName("samplearmor:sample_leggings"); GameRegistry.registerItem(sampleLeggings, "sampleleggings"); sampleBoots = new ItemSampleArmor(sampleBootsID, sampleArmorEnum, 0, 3, "sample").setUnlocalizedName("SampleBoots").setTextureName("samplearmor:sample_boots"); GameRegistry.registerItem(sampleBoots, "sampleboots"); } static { //基本素材の設定 sampleArmorEnum = EnumHelper.addArmorMaterial("SAMPLEARMOR",15, new int[]{3, 8, 6, 3}, 9); sampleArmorEnum.customCraftingMaterial = Item.emerald; } }
- ItemSampleArmor.java
package mods.armorsample; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.Entity; import net.minecraft.item.EnumArmorMaterial; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ItemSampleArmor extends ItemArmor { //テクスチャパスを指定。この場合はassets/samplearmor/textures/model/armor/を指定しています。 private String texturePath = SampleArmorCore.modid + ":" + "textures/models/armor/"; public ItemSampleArmor(int par1, EnumArmorMaterial par2EnumArmorMaterial, int par3, int par4,String type) { super(par1, par2EnumArmorMaterial, par3, par4); this.setTextureName(type,par4); } /*layer名を登録しています。 * この場合はsample_layer_1.png、sample_layer_2.pngを登録しています。 * 上で指定したフォルダに入れてください。 */ private void setTextureName(String type,int armorPart) { if(armorType == 0 || armorType == 1 || armorType == 3) { this.texturePath += type + "_layer_1.png"; }else{ this.texturePath += type + "_layer_2.png"; } } @SideOnly(Side.CLIENT) public void registerIcon(IconRegister register) { this.itemIcon = register.registerIcon(SampleArmorCore.modid + ":" + this.getUnlocalizedName().substring(this.getUnlocalizedName().indexOf(".")+1)); } public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer) { return this.texturePath; } }
解説
SampleArmorCore.java
sampleHelmet = new ItemSampleArmor(sampleHelmetID, sampleArmorEnum, 0, 0, "sample").setUnlocalizedName("SampleHelmet").setTextureName("samplearmor:sample_helmet"); GameRegistry.registerItem(sampleHelmet, "samplehelmet"); sampleChestplate = new ItemSampleArmor(sampleChestplateID, sampleArmorEnum, 0, 1, "sample").setUnlocalizedName("SampleChestplate").setTextureName("samplearmor:sample_chestplate"); GameRegistry.registerItem(sampleChestplate, "samplechestplate"); sampleLeggings = new ItemSampleArmor(sampleLeggingsID, sampleArmorEnum, 0, 2, "sample").setUnlocalizedName("SampleLeggings").setTextureName("samplearmor:sample_leggings"); GameRegistry.registerItem(sampleLeggings, "sampleleggings"); sampleBoots = new ItemSampleArmor(sampleBootsID, sampleArmorEnum, 0, 3, "sample").setUnlocalizedName("SampleBoots").setTextureName("samplearmor:sample_boots"); GameRegistry.registerItem(sampleBoots, "sampleboots");
防具のデータを登録しています。
ここでシステム名の登録とテクスチャ名の指定をしておきます。
ItemSampleArmor内のstring名がレイヤー名の○○_layer_x.pngの○○の部分になります。
防具のテクスチャはassets/samplearmor/textures/items/に置きます。
//基本素材の設定 sampleArmorEnum = EnumHelper.addArmorMaterial("SAMPLEARMOR",15, new int[]{3, 8, 6, 3}, 9); sampleArmorEnum.customCraftingMaterial = Item.emerald;
防具の素材を設定しています。
1段目では左から引数に、名前、耐久値、耐久力{ヘルメット、チェストプレート、レギンス、ブーツ}、良エンチャントのつきやすさ
を指定しています。
2段目の意味はサンプル剣のページにあるので省略します。今回指定したのはエメラルドです。
ItemSampleArmor
private String texturePath = SampleArmorCore.modid + ":" + "textures/models/armor/";
レイヤーのフォルダ先を指定しています。
レイヤーのテクスチャはassets/samplearmor/textures/models/armor/に置きます。
private void setTextureName(String type,int armorPart) { if(armorType == 0 || armorType == 1 || armorType == 3) { this.texturePath += type + "_layer_1.png"; }else{ this.texturePath += type + "_layer_2.png"; } }
レイヤーの登録名を指定しています。
SampleArmorCoreで指定した"sample"が_layerの前に指定されます。
この場合指定された登録名はsample_layer_1.pngとsample_layer_2.pngです。