企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 概述 本部分以制作一个和黑曜石镐为例,讲述如何做出一个新的工具或武器,如斧、镐、铲、以及锄和剑。 ## 物品和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`** ![](https://i.vgy.me/QCAbvv.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的工具,如斧、铲、锄与剑,它们的制作,都是同样的道理。