MOD製作チュートリアル > ツール類の追加

概要

新しい剣・シャベル・斧・ツルハシ・クワや、適正ブロックを自由に設定できるツールを追加する。

ソースコード

  • AluminiumMod.java
package tutorial.aluminiummod;
 
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemSpade;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraftforge.common.util.EnumHelper;
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;
 
@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 swordAluminium;
	public static Item shovelAluminium;
	public static Item pickaxeAluminium;
	public static Item axeAluminium;
	public static Item hoeAluminium;
	public static Item toolAluminium;
 
	public static ToolMaterial ALUMINIUM;
 
	@EventHandler
	public void perInit(FMLPreInitializationEvent event) {
		ALUMINIUM = EnumHelper.addToolMaterial("ALUMINIUM", 3, 1000, 7.5F, 2.5F, 10)
				.setRepairItem(new ItemStack(AluminiumMod.aluminium));
 
		aluminium = new Item()
				.setCreativeTab(CreativeTabs.tabMaterials)
				.setUnlocalizedName("aluminium")
				.setTextureName("aluminiummod:aluminium");
		GameRegistry.registerItem(aluminium, "aluminium");
 
		swordAluminium = new ItemSword(ALUMINIUM)
				.setCreativeTab(CreativeTabs.tabCombat)
				.setUnlocalizedName("swordAluminium")
				.setTextureName("aluminiummod:aluminium_sword");
		GameRegistry.registerItem(swordAluminium, "swordAluminium");
 
		shovelAluminium = new ItemSpade(ALUMINIUM)
				.setCreativeTab(CreativeTabs.tabTools)
				.setUnlocalizedName("shovelAluminium")
				.setTextureName("aluminiummod:aluminium_shovel");
		GameRegistry.registerItem(shovelAluminium, "shovelAluminium");
 
		pickaxeAluminium = new AluminiumPickaxe(ALUMINIUM)
				.setCreativeTab(CreativeTabs.tabTools)
				.setUnlocalizedName("pickaxeAluminium")
				.setTextureName("aluminiummod:aluminium_pickaxe");
		GameRegistry.registerItem(pickaxeAluminium, "pickaxeAluminium");
 
		axeAluminium = new AluminiumAxe(ALUMINIUM)
				.setCreativeTab(CreativeTabs.tabTools)
				.setUnlocalizedName("axeAluminium")
				.setTextureName("aluminiummod:aluminium_axe");
		GameRegistry.registerItem(axeAluminium, "axeAluminium");
 
		hoeAluminium = new ItemHoe(ALUMINIUM)
				.setCreativeTab(CreativeTabs.tabTools)
				.setUnlocalizedName("hoeAluminium")
				.setTextureName("aluminiummod:aluminium_hoe");
		GameRegistry.registerItem(hoeAluminium, "hoeAluminium");
 
		toolAluminium = new AluminiumTool(ALUMINIUM)
				.setCreativeTab(CreativeTabs.tabTools)
				.setUnlocalizedName("toolAluminium")
				.setTextureName("aluminiummod:aluminium_tool");
		GameRegistry.registerItem(toolAluminium, "toolAluminium");
	}
 
}
 

  • AluminiumPickaxe.java
package tutorial.aluminiummod;
 
import net.minecraft.item.ItemPickaxe;
 
public class AluminiumPickaxe extends ItemPickaxe {
 
	public AluminiumPickaxe(ToolMaterial toolMaterial) {
		super(toolMaterial);
	}
 
}
 

  • AluminiumAxe.java
package tutorial.aluminiummod;
 
import net.minecraft.item.ItemAxe;
 
public class AluminiumAxe extends ItemAxe {
 
	public AluminiumAxe(ToolMaterial toolMaterial) {
		super(toolMaterial);
	}
 
}
 

  • AluminiumTool.java
package tutorial.aluminiummod;
 
import java.util.Set;
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemTool;
 
import com.google.common.collect.Sets;
 
public class AluminiumTool extends ItemTool {
 
	private static final Set canHarvestBlock = Sets.newHashSet(new Block[] { Blocks.diamond_block });
 
	public AluminiumTool(ToolMaterial toolMaterial) {
		super(0.0F, toolMaterial, canHarvestBlock);
	}
 
	@Override
	public boolean func_150897_b(Block block) {
		return true;
	}
 
	@Override
	public float func_150893_a(ItemStack itemStack, Block block) {
		if (block.getMaterial() == Material.rock) {
			return this.efficiencyOnProperMaterial;
		}
		return super.func_150893_a(itemStack, block);
	}
 
	// ここにItemHoeのプログラムを張り付ければ、クワの効果も得られる。
 
}
 

解説

ToolMaterial

ツールの性質を保持するためのenum。

ToolMaterial setRepairItem(ItemStack stack)

金床で修繕するための素材を設定するメソッド。

EnumHelper

ToolMaterial addToolMaterial(String name, int harvestLevel, int maxUses, float efficiency, float damage, int enchantability)

新しくツールマテリアルを追加するためのメソッド。
引数は順に、ツールマテリアルの名前・回収レベル・最大耐久値・採掘速度・攻撃に使用したときのダメージ倍率・エンチャントの付きやすさ。
ダイヤモンドは、3, 1561, 8.0F, 3.0F, 10

Item

public boolean func_150897_b(Block block)

引数のブロックを回収できるかを返す。

public float func_150893_a(ItemStack itemStack, Block block)

採掘速度を返す。
ItemToolでは、コンストラクタの第3引数のSetに登録されているブロックのときに適性時採掘速度を返している。

使用例

オファレンの万能ツールを追加している部分
+ オファレンMOD

コメント

この項目に関する質問などをどうぞ。
  • アルミニウムツールが耐久値を保持しないのですが、、 - 名無しさん 2015-08-22 17:58:35
    • まだ編集が終わっていません。原因を調べ、テンプレートを使用して修正します。報告ありがとうございます - 赤砂蛇凪浜 2015-08-23 08:51:21
    • 編集完了しましたが、こちらの環境では特に問題はありませんでした。解決できていない場合はもう一度コメントしてくださるとありがたいです。 - 赤砂蛇凪浜 2015-09-04 09:17:25
  • 質問です。黄昏の森のstealeafでできるツールのようにもともとエンチャントがつくツールはどのようなコードにすればいいのでしょうか? - 名無しさん 2017-01-07 16:19:06
    • 解決しました。 - 名無しさん 2017-01-22 10:08:12
名前: