这两天实在是好忙啊,被boss紧逼什么的。各种事情都要到deadline了。但是教程什么的还是要继续更新啦。至于我的那个物品最大堆叠的mod已经发现了一些问题。这个mod的bug修复只进行了一部分。目前只是修复了不能附魔的问题。其他的工作量实在是太大了。毕竟coremod就是一个大坑啊。但愿我这种各种拖延症不会被四季大人提前带走吧……
Minecraft Forge 中使用最多的一个类基本上就是GameRegistry了吧。游戏里面的各种物品的注册都是能够通过GameRegistry实现的。当然了,操作已经注册了的物品也可以通过GameRegistry来操作。所以各种Mod开发者一定都很熟悉这个类,所以我就不介绍了……(雾,拖走
有一些低端的mod可能只包含一些基本的GameRegistry的使用。当然这种Mod基本都可以用mod制作器来代替。但是使用好GameRegistry还是很重要的。成功废话脱篇幅。
下面介绍一下GameRegistry提供的一些功能
- registerWorldGenerator:注册世界生成器用来在世界生成的时候插入一些自定义的方块
- generateWorld:添加世界生成的钩子(如果你对于钩子不清楚的话可以移步wiki 或者 度娘)
- registerItem:注册物品,有两个重载(这也是本次教程要讲的一部分)
- addSubstitutionAlias:给物品或者方块添加别名。说白了就是改名
- registerBlock:注册方块。有四个重载,可见这果然是方块的世界啊。(也是本次教程的一部分)
- addRecipe:添加合成。有两个重载。
- addShapedRecipe:添加有序合成。
- addShapelessRecipe:添加无序合成。(这三个合成将会在下一期介绍)
- addSmelting:添加烧炼。(下一期介绍)
- registerTileEntity:注册TileEntity(是在不知道TileEntity翻译成什么号)。总之这个就是一种记录在地图区块的数据。
- registerTileEntityWithAlternatives:类似上一条。
- registerFuelHandler:添加新的燃料用的。
- getFuelValue:获得物品的燃烧时间
- findBlock:通过名字获得方块(注意:现在的minecraft已经马上就不支持数字ID了。请使用这种方式获得方块)
- findItem:通过名字获得物品
- registerCustomItemStack:注册自定义的物品栈(关于物品栈的概念还是以后介绍吧)
- findItemStack:通过mod名和名字获得刚刚注册的物品栈
- findUniqueIdentifierFor:查找一个方块或者物品的UID(唯一身份标识)
以上就是GameRegistry的功能。基本上这些功能能实现一个一般的Mod的绝大多数的功能了呢。
下面就来介绍一下如何添加一个自定义的物品,作为GameRegistry的使用实例:
要知道物品就是net.minecraft.item.Item。当然可以是它的子类。所以创建一个物品的话我们不妨就创建一个新的类继承自那个物品类:
class MyCustomItem extends Item { //这里不要吐槽我的括号在下一行。这样能多占一行呢www……找boss算工作量什么的 //下面物品的具体内容 //基本上就是提供一个构造函数。不要忘记在构造函数里面设定你的物品以及@Override处理你关心的那些方法就好 //不过在构造函数设定你的物品不是必须的。你可以在注册物品的时候对这个实例进行设定,只要是public的就可以在外部修改。这样的做法还是推荐那些直接使用Item进行注册的物品使用。如果要完全自定义一个物品,我个人还是推荐在构造函数初始化。这样代码看起来会比较整洁。 }
这就是一个基本的物品。然后你需要实例化你的物品。并且你需要添加类似下面的代码
GameRegistry.registerItem(new MyCustomItem() , "myCustumItem" , "myCustumMod")
这样你就成功添加了一个你的自定义的Item。
下面介绍一下如何添加一个自定义的方块
添加自定义方块的做法和自定义物品的做法几乎一模一样。方块类都是继承net.minecraft.block.Block。同样的我们自己写一个block之后用GameRegistry注册就好了。至于Block的材质这个参数我们以后介绍。今天先写这么多了