## 概述
本部分以制作一個和黑曜石鎬為例,講述如何做出一個新的工具或武器,如斧、鎬、鏟、以及鋤和劍。
## 物品和ToolMaterial
在包`net.xiaobang.bm.item`下新建一個文件`ItemObsidianPickaxe.java`,并讓`ItemObsidianPickaxe`類繼承`ItemPickaxe`類:
**`src/main/java/net/xiaobang/bm/item/ItemObsidianPickaxe.java`**
~~~
package net.xiaobang.bm.item;
import net.xiaobang.bm.creativetab.CreativeTabsLoader;
import net.minecraft.item.Item;
import net.minecraft.item.ItemPickaxe;
import net.minecraftforge.common.util.EnumHelper;
public class ItemObsidianPickaxe extends ItemPickaxe
{
public static final Item.ToolMaterial OBSIDIAN = EnumHelper.addToolMaterial("OBSIDIAN", 3, 2061, 18.0F, 2.0F, 10);
public ItemObsidianPickaxe()
{
super(OBSIDIAN);
this.setUnlocalizedName("obsidianPickaxe");
this.setCreativeTab(CreativeTabsLoader.tabBm);
this.setTextureName("bm:obsidianPickaxe");
}
}
~~~
先來說說這一行:
`public static final Item.ToolMaterial OBSIDIAN = EnumHelper.addToolMaterial("OBSIDIAN", 3, 2061, 18.0F, 2.0F, 10);`
這里添加了一個作為工具需要的枚舉類,ToolMaterial的實例。顧名思義,ToolMaterial就是工具或武器使用的材料,Forge本身定義了五種材料:WOOD,STONE,IRON,EMERALD,GOLD。它們分別表示木頭、石頭、鐵、鉆石、金。
我們來看看ToolMaterial的構造方法:
~~~
private ToolMaterial(int harvestLevel, int maxUses, float efficiency, float damageVsEntity, int enchantability) {...}
~~~
和五種材料的參數:
* WOOD(0, 59, 2.0F, 0.0F, 15),
* STONE(1, 131, 4.0F, 1.0F, 5),
* IRON(2, 250, 6.0F, 2.0F, 14),
* EMERALD(3, 1561, 8.0F, 3.0F, 10),
* GOLD(0, 32, 12.0F, 0.0F, 22);
ToolMaterial的構造方法共有五個參數:
* `harvestLevel`參數表示制作出的工具等級。這一點在鎬中尤其明顯,如木頭為0,只能挖掘對應等級為0的方塊才能掉落物品,如石頭等,而鉆石為3,就可以挖掘出對應等級為3的,其他鎬挖不出物品的方塊,如黑曜石。這里使用了最高等級3
* `maxUses`參數表示制作出的工具對應耐久。如鉆石工具就是1561,耐久最高,而木工具為59,耐久最低。這里刻意提高了該數值,為2061
* `efficiency`參數表示制作出的工具使用效率。使用效率和該參數的值成正比。這里刻意提高了該數值,為18.0F
* `damageVsEntity`參數表示攻擊傷害力度。同樣該力度和該參數的值成正相關。這里為2.0F,表示攻擊力很低
* `enchantability`參數與附魔等級相關。Minecraft中關于附魔等級的系統十分復雜。但是有一點,就是該值越高,對應的附魔就越容易得到高等級。這也是為何金更容易得到高等級附魔,而石頭得到的附魔就相當低。這里為10,和鉆石相同
`EnumHelper`的作用就是為Minecraft的一些枚舉類型注冊新的實例,該方法的第一個參數為實例的名稱,后面的參數就是該枚舉類型構造方法需要的參數。比如這里就是向ToolMaterial枚舉類型添加一個名為`REDSTONE`的實例,并提供相應的參數。
## 材質
(你可以看到就只是鉆石鎬調了色=_=||):
**`src/main/resources/assets/fmltutor/textures/items/obsidianPickaxe.png`**

## 一些事情
語言文件和在`GameRegistry`中注冊(這里需要稍微注意一下的可能是`ToolMaterial`和物品的先后注冊順序):
**`src/main/resources/assets/bm/lang/en_US.lang`(部分)**
`item.obsidianPickaxe.name=Obsidian Pickaxe`
**`src/main/resources/assets/bm/lang/zh_CN.lang.lang`(部分)**
`item.obsidianPickaxe.name=黑曜石鎬`
**`src/main/java/net/xiaobang/bm/loader/ItemLoader.java`(部分)**
~~~
public static ItemDiamondStick ds = new ItemDiamondStick();
public static ItemObsidianPickaxe op = new ItemObsidianPickaxe();
public ItemLoader(FMLPreInitializationEvent event)
{
register(ds, "diamondStick");
register(op,"obsidianPickaxe");
}
~~~
當然最后,也可以加入進合成表里面:
**`src/main/java/net/xiaobang/bm/crafting/CraftingLoader.java`(部分)**
~~~
GameRegistry.addShapedRecipe(new ItemStack(ItemLoader.op), new Object[]
{
"###", " * ", " * ", '#', Blocks.obsidian '*', Items.stick
});
~~~
打開游戲試試吧~
當然,其他需要ToolMaterial的工具,如斧、鏟、鋤與劍,它們的制作,都是同樣的道理。