提供: Minecraft Modding Wiki
(ModLoaderのみで防具を作成する方法を追加。ただし付け焼刃です。) |
|||
1行目: | 1行目: | ||
− | + | {{前提MOD|reqmod="ModLoader"}} | |
− | |||
=ModLoaderのみで追加する方法= | =ModLoaderのみで追加する方法= |
2012年3月22日 (木) 21:26時点における版
この記事は"ModLoader"を前提MODとしています。 |
目次
ModLoaderのみで追加する方法
ソース解説
mod_hogearmorクラスを作成
ppackage net.minecraft.src; import net.minecraft.client.Minecraft; public class mod_hogearmor extends BaseMod { public static Item HogeHelmet; public static Item HogePlate; public static Item HogeLegs; public static Item HogeBoots; public mod_hogearmor() { } public String getVersion() { return "1.1"; } public void load() { /* *ItemArmor()内を説明します。 *2500~2503:ただのItemIDを指定しているだけです。 *EnumHogeArmorMaterial.HOGEは材料のIDです。 *今回はEnumHogeArmorMaterialクラスで無駄に定義してありますので、そこから取得しています。 *ModLoader.addArmor()でHogeArmorのクラスを参照 *その後の0~3は部位の種類を定義しています。 */ HogeHelmet = new HogeArmor(2500, EnumHogeArmorMaterial.HOGE, ModLoader.AddArmor("HogeArmor"), 0).setItemName("HogeHelmet"); HogePlate = new HogeArmor(2501, EnumHogeArmorMaterial.HOGE, ModLoader.AddArmor("HogeArmor"), 1).setItemName("HogePlate"); HogeLegs = new HogeArmor(2502, EnumHogeArmorMaterial.HOGE, ModLoader.AddArmor("HogeArmor"), 2).setItemName("HogeLegs"); HogeBoots = new HogeArmor(2503, EnumHogeArmorMaterial.HOGE, ModLoader.AddArmor("HogeArmor"), 3).setItemName("HogeBoots"); /* *テクスチャを割り当ててるだけです。 */ HogeHelmet.iconIndex = ModLoader.addOverride("/gui/items.png", "/armor/hogeHelmet.png"); ModLoader.AddName(HogeHelmet, "Hoge Helmet"); HogePlate.iconIndex = ModLoader.addOverride("/gui/items.png", "/armor/hogeHelmet.png"); ModLoader.AddName(HogePlate, "Hoge Plate"); HogeLegs.iconIndex = ModLoader.addOverride("/gui/items.png", "/armor/hogelegs.png"); ModLoader.AddName(HogeLegs, "Hoge Legs"); HogeBoots.iconIndex = ModLoader.addOverride("/gui/items.png", "/aromor/hogeboots.png"); ModLoader.AddName(HogeBoots, "Hoge Boots"); } }
HogeArmorクラスを作成
package net.minecraft.src; public class HogeArmor extends Item { private static final int[] maxDamageArray = {11,16,15,13}; public final int armorType; public final int damageReduceAmount; public final int renderIndex; public final EnumHogeArmorMaterial material; /* * Itemクラスからの初期化に加えて、mod_hogearmorからのデータを割り当てているだけです。 * 詳細はmod_hogearmorを確認ください。 */ public HogeArmor(int i, EnumHogeArmorMaterial enumhogaarmormaterial, int j, int k) { super(i); this.material = enumhogaarmormaterial; this.armorType = k; this.renderIndex = j; this.damageReduceAmount = enumhogaarmormaterial.getDamageReductionAmount(k); setMaxDamage(enumhogaarmormaterial.getDurability(k)); maxStackSize = 1; } public int getItemEnchantability() { return material.getEnchantability(); } public int[] getMaxDamageArray() { return maxDamageArray; } }
EnumHogeArmorMaterialクラスを作成
突貫でサンプル的に作ったので変な部分がありますが、参考だけにしてください。
内容はEnumArmorMaterialクラスと基本変えてないです。
Cloth部分をHOGEにしてちょっと数字弄ってあるだけです。
package net.minecraft.src; public final class EnumHogeArmorMaterial extends Enum { public static final EnumHogeArmorMaterial HOGE; private int maxDamageFactor; private int damageReductionAmountArray[]; private int enchantability; private static final EnumHogeArmorMaterial allArmorMaterials[]; private static final EnumHogeArmorMaterial $VALUES[]; public static EnumHogeArmorMaterial[] values() { return (EnumHogeArmorMaterial[])$VALUES.clone(); } public static EnumHogeArmorMaterial valueOf(String s) { return (EnumHogeArmorMaterial)Enum.valueOf(net.minecraft.src.EnumHogeArmorMaterial.class, s); } private EnumHogeArmorMaterial(String s, int i, String s1, int j, int k, int ai[], int l) { super(s, i); maxDamageFactor = k; damageReductionAmountArray = ai; enchantability = l; } public int getDurability(int i) { return ItemArmor.getMaxDamageArray()[i] * maxDamageFactor; } public int getDamageReductionAmount(int i) { return damageReductionAmountArray[i]; } public int getEnchantability() { return enchantability; } static { HOGE = new EnumHogeArmorMaterial("HOGE", 0, "HOGE", 4, 33, new int[] { 3, 8, 6, 3 }, 10); $VALUES = (new EnumHogeArmorMaterial[] { HOGE }); allArmorMaterials = (new EnumHogeArmorMaterial[] { HOGE }); } }
MinecraftForgeで追加する方法
ソース解説
サンプルソース内部に説明をしています。
mod_hogearmor
HogeArmor
と、2つのクラスを作成しています。
※SpriteID無限化を使っています。
詳細はSpriteID無限化を確認ください。
mod_hogearmorクラスを作成
package net.minecraft.src; import net.minecraft.src.forge.*; public class mod_hogearmor { public static Item helmetHogeArmor; public static Item plateHogeArmor; public static Item legsHogeArmor; public static Item bootsHogeArmor; static EnumArmorMaterial enumArmorHoge; public mod_hogearmor() { } public void load() { /* * SpriteID無限化してるだけです。 */ MinecraftForgeClient.preloadTexture("/gui/items.png") /* * EnumHelper.addArmorMaterial()内部を説明します。 * "Hoge"は材料名です。適当なのでHogeです。 * 29の部分は、完全に防具が破壊されるまでのダメージ値です。 * 配列部分は2:Helmet 7:Chestplate 5:legs 3:bootsと防具の種類を示しています。 * 最後のやつはわかりません。知ってる人教えろください。 */ enumArmorHoge = EnumHelper.addArmorMaterial("Hoge", 29, new int[] {2, 7, 5, 3}, 9); /* * new HogeArmor()内部を説明します。 * 127,128...はItemIDを設定 * enumArmorHogeは上記enumArmorHogeを参照 * 5は材料のIDです。ダイヤモンド製の防具が4なので5以上から始める必要があります。 * 最後の数字は0:Helmet 1:Chestplate 2:legs 3:boots と、防具の種類を示しています。 */ helmetHogeArmor = new HogeArmor(127, enumArmorHoge, 5, 0).setIconCoord(0, 6).setItemName("helmetHogeArmor"); plateHogeArmor = new HogeArmor(128, enumArmorHoge, 5, 1).setIconCoord(0, 7).setItemName("plateHogeArmor"); legsHogeArmor = new HogeArmor(129, enumArmorHoge, 5, 2).setIconCoord(0, 8).setItemName("plateHogeArmor"); bootsHogeArmor = new HogeArmor(130, enumArmorHoge, 5, 3).setIconCoord(0, 9).setItemName("plateHogeArmor"); } public String getVersion() { return "1.0.0"; } }
HogeArmorクラスを作成
package net.minecraft.src; import net.minecraft.src.forge.*; public class HogeArmor extends ItemArmor implements ITextureProvider, IArmorTextureProvider { /* * ItemArmorの初期化 */ public HogeArmor(int i, EnumArmorMaterial enumarmormaterial, int j, int k) { super(i, enumarmormaterial, j, k); } /* * SpriteID無限化してるだけです。 */ public String getTextureFile() { return "/gui/items.png"; } /* * IArmorTextureProviderで防具のテクスチャファイルを適当させているだけです。 * 頭、胴、足は"/armor/hogearmor_1.png"から * 脚は"/armor/hogearmor_2.png"を参照させています。 */ @Override public String getArmorTextureFile(ItemStack itemstack) { if(itemstack.itemID == mod_hogearmor.helmetHogeArmor.shiftedIndex || itemstack.itemID == mod_hogearmor.plateHogeArmor.shiftedIndex || itemstack.itemID == mod_hogearmor.bootsHogeArmor.shiftedIndex) { return "/armor/hogearmor_1.png"; } if(itemstack.itemID == mod_hogearmor.legsHogeArmor.shiftedIndex) { return "/armor/hogearmor_2.png"; } return "/armor/hogearmor_1.png"; } }
コメントの自動更新を有効化