提供: Minecraft Modding Wiki
移動先: 案内検索

1.6のカスタムツール追加[編集]

ここでのカスタムツールというのは、たとえばつるはしなら丸石や石、かまどなどを素早く壊すことができるが、そのように素早く壊せるブロックを自分で指定した道具類とする。
今回は、石、丸石、苔石、丸石フェンス、かまど、木材、原木、作業台のみ対応させる。

ソースコード[編集]

  • SampleCustomToolCore.java
package mods.customtoolsample;

import net.minecraft.item.EnumToolMaterial;
import net.minecraft.item.Item;

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 = "CustomTool", name = "CustomTool", version = "1.0")
public class SampleCustomToolCore
{
	public static Item customTool;
	/* アイテムID */
	public static int customToolID = 27400;

	@EventHandler
	public void Init(FMLInitializationEvent event)
	{
		/* 全言語での表示名登録 */
		LanguageRegistry.addName(customTool, "Custom Tool");
		/* ja_JP(日本語)での表示名登録 */
		LanguageRegistry.instance().addNameForObject(customTool, "ja_JP", "カスタムツール");
	}

	@EventHandler
	public void PreInit(FMLPreInitializationEvent event)
	{
		/* インスタンスの代入 */
		customTool = new ItemCustomTool(customToolID, EnumToolMaterial.IRON);
		/* アイテム登録 */
		GameRegistry.registerItem(customTool, "Custom Tool");
	}
}
  • ItemCustomTool.java
package mods.customtoolsample;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.EnumToolMaterial;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemTool;

public class ItemCustomTool extends ItemTool
{
	public static final Block[] blocksEffectiveAgainst = new Block[] {Block.stone, Block.cobblestone, Block.cobblestoneMossy, Block.cobblestoneWall, Block.furnace, Block.planks, Block.wood, Block.workbench};

	public ItemCustomTool(int par1, EnumToolMaterial par2EnumToolMaterial)
	{
		/* ItemID, 攻撃力(これが素材によってまた加算されます), 素材, 上で定義した素早く壊せるブロックの配列 */
		super(par1, 2.0F, par2EnumToolMaterial, blocksEffectiveAgainst);
	}

	/* おもに石など、素手で掘るとドロップしないブロックを掘るときにもしtrueが帰っていて、なおかつblocksEffectiveAgainstにそのブロックが入っていたらそのブロックが素早く掘れるようになります */

	public boolean canHarvestBlock(Block par1Block)
	{
		return true; //詳しい使い方はItemPickaxeを参照。ツルハシ+シャベルに対応しているブロックを追加する場合は工夫必要
	}

	/* ブロック破壊したときの破壊速度のベース。剣の場合は1.5Fを返している(1.5倍?) */
	public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
	{
		return 1.0F; //通常は1.0F(一倍)です。ちなみに筆者はとある穴に引っかかって30分ほどNullPointerExceptionで悩みました。 ( ´∀`)<ぬるぽ
	}
}

解説[編集]

SampleCustomToolsCore.java[編集]

こちらのSamplePickaxeCore.javaを参照してください。

ItemCustomTool.java[編集]

public static final Block[] blocksEffectiveAgainst = new Block[] {... ... ...};

こちらに対応しているブロックを入れているようです。ItemPickaxeやItemAxeでも同じように代入しています。

super(par1, 2.0F, par2EnumToolMaterial, blocksEffectiveAgainst);
  • par1 = ItemID
  • 2.0F = そのツールが持つ攻撃力。ItemAxeの場合は3.0F(ハート1.5個分)
  • par2EnumToolMaterial = EnumToolMaterial型のものを投げてあげましょう。詳しくは1.6のツール類追加

 EnumToolMaterial.IRONのようにしてもよいでしょう。(この場合鉄のツルハシと同じ耐久度・早さで採掘できるようになります)

  • blocksEffectiveAgainst = 先ほどのcanHarvestBlockなどに関係してきます。対応したブロックを代入してあります。