这个代码是创建一个编号(ID)为100,材质为石材质的砖块.(ID的范围是0~4095,其中前几百个已经被使用了~…在http://www.minecraftforge.net/forum/index.php/topic,638.0.html上能找到哪些编号已经被流行Mod使用了)
很显然,这个结论和大多数教程都是相违的,很多教程,包括我过去写的旧教程,都强调一个派生自Block类的砖块类才代表一个砖块,事实上这并不准确.这个砖块并没有使用一个新的类,但它现在已经可以使用了.那么,为什么我们还要说新建一个砖块类才代表一种新砖块?因为类可以承载各种方法(Method),可以实现各种特殊的功能.一个砖块类的最简形式可以是这样public class MyBlock extends Block{
public MyBlock(int id, Material material) {
super(id, material);
}
而新建一种砖块的代码则是这样,这部分代码添加在你的Mod主类static public Block myBlock;
这个是让myBlock砖块只能被类型为pickaxe,强度为4的工具采集.由于原版的最强工具钻石工具也只有3强度,所以只有你的新物品能采集它.Forge的这个方法的好处是做到了类型统一,mod作者不用指定自己的砖块能被某几种工具采集,而只需指定自己的砖块能被哪一类工具采集,这样即使是别人开发了新mod,只要双方的工具类型一致,工具就能正常工作.但缺点就是一个工具不能有多种类型,对一个工具多次setToolClass只会让最后一次设置生效.解决的办法也不是没有,就是重写物品类的getStrVsBlock和canHarvestBlock方法.
///////////////////////////////////////////////////////////////////////////////////////////////////////////在这里我胡搞了一个叫Dirac Omni Tool的东西.先要说一下Dirac是什么,Dirac的中文写作迪拉克,读作xi jian(…….),本教程中的Diracium(迪拉克元素)是一种能从无穷无尽的迪拉克之海(反物质世界/纯能量世界)中吸取能量,凭借这些能量来创造各种在我们的宇宙中因为能量守恒定律而无法做到的事情!首先为物品画一个图,我随便瞎图了一个…之后将它存在相应文件夹下,名字叫做diracomnitool.png,然后创建一个物品类.之后我写了一个很简单通用的代码,即使是无法理解它的新人也可以直接拿来用.(不过真的是非常简单…)
public class ItemDiracOmniTool extends ItemTool{
public static final String[] HARVESTABLE = new String[] {"pickaxe","shovel","axe"};
//构造函数
public ItemDiracOmniTool(int id)
{
//调用基类的构造函数,参数分别是物品ID,攻击实体(Entity)造成的伤害,工具材质(ToolMaterial),能被这种工具加速挖掘的砖块.
//其中,第四个参数只对原生MC有用,对安装了Forge的MC是无效的.
super(id, 100, EnumToolMaterial.EMERALD, new Block[] {});
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////添加一个冶炼公式知识点:添加一个冶炼公式
///////////////////////////////////////////////////////////////////////////////////////////////////////////
MC专门提供了一个类来管理冶炼公式:FurnaceRecipes,它是个伪静态类,你可以直接跳过Forge,对FurnaceRecipes直接操作,你可以通过调用FurnaceRecipes的smelting方法来获取FurnaceRecipes类的实例.
它的代码是:[size=1em][size=1em]1
[size=1em][size=1em]FurnaceRecipes.smelting().addSmelting(myBlock.blockID, new ItemStack(myItem), 100f);
其中,myBlock是你的矿石砖块,myItem是冶炼产物,100f是冶炼后获得的经验.Minecraft中烧一个金矿才1f,烧一个碎石只有0.1f…)或者,你可以使用Forge的代码,FML的GameRegistry类提供了addSmelting方法来添加冶炼公式,它的参数和FurnaceRecipes的同名方法一样.
图:GameRegistry VS FurnaceRecipes,其实两者本质都一样.那么两者的区别在哪?答案是:没有区别…如果你看一下FML的代码的话,就会发现GameRegistry的addSmelting只是对FurnaceRecipes的addSmelting简单包装了一下,没有进行任何额外的操作…所以说,用哪个都一样- -||.
///////////////////////////////////////////////////////////////////////////////////////////////////////////在mod主类的load方法内添加:[size=1em][size=1em]1
[size=1em][size=1em]GameRegistry.addSmelting(diracBlock.blockID, new ItemStack(diracIngot), 100f);