提供: Minecraft Modding Wiki
移動先: 案内検索
(新規防具のチュートリアルみたいなものを作成しました。)
 
(ModLoaderのみで防具を作成する方法を追加。ただし付け焼刃です。)
1行目: 1行目:
 
このページは<br/>
 
このページは<br/>
・ModLoader<br/>
+
最低限ModLoaderを前提としています。
・MinecraftForge<br/>
 
を使っていることを前提に書かれています。
 
  
※Forgeを使わない方法は私は知りません。詳しい人お願いします・・。
+
=ModLoaderのみで追加する方法=
  
 +
==ソース解説==
 +
 +
===mod_hogearmorクラスを作成===
 +
<source lang="java">
 +
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");
 +
  }
 +
}
 +
</source>
 +
 +
===HogeArmorクラスを作成===
 +
<source lang="java">
 +
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;
 +
}
 +
}
 +
</source>
 +
 +
===EnumHogeArmorMaterialクラスを作成===
 +
突貫でサンプル的に作ったので変な部分がありますが、参考だけにしてください。<br/>
 +
内容はEnumArmorMaterialクラスと基本変えてないです。<br/>
 +
Cloth部分をHOGEにしてちょっと数字弄ってあるだけです。
 +
<source lang="java">
 +
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
 +
                });
 +
    }
 +
}
 +
</source>
 +
 +
=MinecraftForgeで追加する方法=
 
==ソース解説==
 
==ソース解説==
  

2012年3月21日 (水) 16:57時点における版

このページは
最低限ModLoaderを前提としています。

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


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