MOD製作チュートリアル > 防具の追加

概要

新しいヘルメット・チェストプレート・レギンス・ブーツを追加する。

ソースコード

  • AluminiumMod.java
package tutorial.aluminiummod;
 
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor.ArmorMaterial;
import net.minecraftforge.common.util.EnumHelper;
 
@Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION)
public class AluminiumMod {
 
	public static final String MODID = "AluminiumMod";
	public static final String MODNAME = "Aluminium Mod";
	public static final String VERSION = "1.0.0";
 
	public static Item aluminium;
	public static Item helmetAluminium;
	public static Item chestPlateAluminium;
	public static Item leggingsAluminium;
	public static Item bootsAluminium;
 
	public static ArmorMaterial ALUMINIUMARMOR;
 
	@EventHandler
	public void perInit(FMLPreInitializationEvent event) {
		ALUMINIUMARMOR = EnumHelper.addArmorMaterial("ALUMINIUMARMOR", 33, new int[] { 3, 8, 6, 3 }, 10);
		ALUMINIUMARMOR.customCraftingMaterial = aluminium;
 
		aluminium = new Item()
				.setCreativeTab(CreativeTabs.tabMaterials)
				.setUnlocalizedName("aluminium")
				.setTextureName("aluminiummod:aluminium");
		GameRegistry.registerItem(aluminium, "aluminium");
 
		helmetAluminium = new ItemAluminiumArmor(0)
				.setUnlocalizedName("helmetAluminium")
				.setTextureName("aluminiummod:helmetAluminium");
		GameRegistry.registerItem(helmetAluminium, "helmetAluminium");
 
		chestPlateAluminium = new ItemAluminiumArmor(1)
				.setUnlocalizedName("chestPlateAluminium")
				.setTextureName("aluminiummod:chestPlateAluminium");
		GameRegistry.registerItem(chestPlateAluminium, "chestPlateAluminium");
 
		leggingsAluminium = new ItemAluminiumArmor(2)
				.setUnlocalizedName("leggingsAluminium")
				.setTextureName("aluminiummod:leggingsAluminium");
		GameRegistry.registerItem(leggingsAluminium, "leggingsAluminium");
 
		bootsAluminium = new ItemAluminiumArmor(3)
				.setUnlocalizedName("bootsAluminium")
				.setTextureName("aluminiummod:bootsAluminium");
		GameRegistry.registerItem(bootsAluminium, "bootsAluminium");
	}
 
}
 

  • ItemAluminiumArmor.java
package tutorial.aluminiummod;
 
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
 
public class ItemAluminiumArmor extends ItemArmor {
 
	public ItemAluminiumArmor(int type) {
		super(AluminiumMod.ALUMINIUMARMOR, 0, type);
		this.setCreativeTab(CreativeTabs.tabCombat);
	}
 
	@Override
	public String getArmorTexture(ItemStack itemStack, Entity entity, int slot, String type) {
		if (this.armorType == 2) {
			return "aluminiummod:textures/models/armor/aluminium_layer_2.png";
		}
		return "aluminiummod:textures/models/armor/aluminium_layer_1.png";
	}
 
}
 

解説

ArmorMaterial

防具の性質を保持するためのenum。

Item customCraftingMaterial

金床で修繕するときに使う素材。

EnumHelper

ArmorMaterial addArmorMaterial(String name, int durability, int[] reductionAmounts, int enchantability)

新しくアーマーマテリアルを追加するためのメソッド。
引数は順に、アーマーマテリアルの名前・耐久値・部位ごとの防御力・エンチャントの付きやすさ
今回はダイヤモンドと同じ数値を使用。
耐久値は、第二引数で指定された値に、部位ごとにそれぞれ11, 16, 15, 13が乗算される。
防御力は、第三引数に防御力アイコン一個=2として入れる。
例えば、ヘルメット2、チェストプレート4、レギンス2、ブーツ1の防御力にする場合は、
第三引数にnew int[]{4, 8, 4, 2}と渡す。

ItemArmor

コンストラクタ(ArmorMaterial material, int renderIndex, int armorType)

armorTypeはどの部位かを表す数値。
renderIndexはgetArmorTextureをオーバーライドしているので関係ない。

String getArmorTexture(ItemStack itemStack, Entity entity, int slot, String type)

アーマーのモデルのテクスチャファイルの場所を返す。
モデルのテクスチャは、"C:/forge/src/main/resources/assets/aluminiummod/textures/models/armor/"に、"aluminium_layer_1.png"、"aluminium_layer_2.png"として保存する。
バニラのものを参考にするとよい。

使用例

オファレンの防具を追加している部分。
+ オファレンMOD

コメント

この項目に関する質問などをどうぞ。
  • 防御力の設定は、どうやるのですか。 - 新人もっだー 2015-12-23 11:41:45
    • 訂正しました。addArmorMaterialの第三引数で、ヘルメット、チェストプレート、レギンス、ブーツの順で登録してください。 - Tom Kate 2015-12-23 14:09:17
  • 一応コメントにて。耐久値を1600に設定していざ動かしてみたら、耐久値が17600になったので、計算してみたところ耐久値は設定されている値に16かけた数値みたいですね。 - 初心者modder 2016-01-20 14:54:07
    • ご指摘ありがとうございます。コードより確認し、addArmorMaterialの説明部分に追記しておきました。 - 赤砂蛇凪浜 2016-10-10 12:27:46
  • 「ItemStack customCraftingMaterial」にブロックは指定できないのですか? - モアイさん 2016-10-04 19:14:00
    • 返信遅くなり申し訳ありません。
      記述に間違いがありました。customCraftingMaterialはItem型です。修正しておきます。
      ブロックを指定する場合、Item.getItemFromBlockメソッドを使用してItem型として代入してください。 - 赤砂蛇凪浜 2016-10-10 12:22:34
名前: