提供: Minecraft Modding Wiki
2012年10月25日 (木) 18:19時点におけるTakanasayo (トーク | 投稿記録)による版 (カテゴリの追加)
移動先: 案内検索

この記事は"ModLoader及びMinecraftForge"を前提MODとしています。

ModLoaderのみで追加する方法

ソース解説

mod_hogearmorクラスを作成

package 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";
	}
}


自分のコメントを追加
Minecraft Modding Wikiはすべてのコメントを歓迎します。匿名で投稿したくない場合は、アカウント作成またはログインしてください。無料です。


  • これってエンチャントできるの? --114.198.223.38 2012年9月4日 (火) 20:21 (JST)

  • Modの画像データはMCPのどこに格納したらいいのですか? --115.178.118.163 2012年7月9日 (月) 19:55 (JST)

  • 何がどう出来なくて、分からないのか一切分からないので答えようがありません。 --Nagisawa 2012年4月10日 (火) 11:13 (JST)

  • ModLoaderのみ版が不完全なんですが…装備のスキンの呼び出し方もわからないし… --Aoisensi 2012年4月9日 (月) 21:50 (JST)