本帖最后由 szszss 于 2012-4-13 20:15 编辑
MCP的Mod制作教程(2)
建立一个使用ModLoader的Mod
作者:szszss
索引贴地址:
http://www.mcbbs.net/thread-18949-1-2.html
我决定以一个开发实例作为教程,我们要使用ModLoader来创建一个叫做Diracon的mod,它将具有如下功能.
(1)一个新的矿物(砖块):Diracium
(2)一个新的矿锭(物品):Diracium Ingot
(3)一个新的物品:Dirac Wand
(4)一种新的Mob:Dirac Pig
(5)添加新的功能,使Dirac Wand具有瞬间转移箱子内的物品的能力
(6)修改地形生成器,使新矿物可以生成
(7)一个以土块为燃料的新炉子Unthinkable Furnace
这7个功能基本涵盖了基础mod开发的全部,我计划分为三个部分,(1)(2)(3)作为第一部分,(4)(5)作为第二部分,(6)(7)和mod的编译发布作为第三部分.
这里说明一下本教程中不同颜色的字体所代表的含义.
蓝色:一个章节
红色:知识点,相当于一个章节所讲内容的提炼
灰色:原理,想深入学习MCP的人可以读读,普通MODer可以无视了.
注:本文最初基于MCP5.6和ModLoader1.1.0编写的.
MCP6.2和ModLoader1.2.4更新了大量方法的名字,导致我的教程几乎报废一半...
不管怎么说,我用了一个晚上的时间还是修正了教程的文字部分,使其和最新版的MCP与ModLoader接轨.但图片部分我实在是无力修改了...大家将就着看吧.
使用ModLoader建立一个新Mod
首先你要在net.minecraft.src包内创建一个新的类(Class,假设你已经有基本的Java知识了,如果没有请自行学习...)文件.右键net.minecraft.src,选择New - Class.
之后要设定类的名字,Java的开发规范是类的首字母大写,而MCP的开发规范是首字母小写,我们采用MCP的规范,将类命名为mod_Diracon
知识点:mod主类的命名
使用ModLoader的mod必须有一个叫做mod_XXX(XXX为mod名)的类文件,并且与ModLoader类放在同一目录
点击Finish开始创建,创建完后我们便有了一个空荡荡的文件,我们要让它与ModLoader建立链接,方法是让mod_Diracon继承BaseMod类.
在public class mod_Diracon后面({的前面)输入extends BaseMod
输入完之后静等2秒,你的Eclipse就开始报错了...因为你继承了BaseMod类,但没有重写(Override)BaseMod内的两个抽象(Abstract)方法.
解决的办法是在mod_Diracon类内加入这两个方法.
- public String getVersion()
- {
- return "1.0.0";
- }
- public void load()
- {
- }
复制代码
之后你的程序应该是这个样子
知识点:继承BaseMod后必要的2个重写
getVersion和load是2个抽象功能,必须被mod文件重写,getVersion是在ModLoader查询版本时反馈版本号,MCP官方推荐的格式是"主版本号.副版本号.工程版本号"(如1.1.5)
load是mod在载入时会执行的方法,它具有相当于构造函数的功能.
连接官方的Javadoc
注:在MCP6.1以后,MCP会自动在本地代码上加上注释,所以这一步不重要了.你完全可以跳过这一步.
从MCP6.0后,MCP组提供了一套Javadoc.可以理解为对代码的注释手册.
要在Eclipse中建立同在线Javadoc的链接,首先右键项目,选择Properties,在新弹出的窗口的左侧列表中选择Javadoc Location,在文本框中输入:
之后点击Apply,然后点击OK.这样你就完成配置了.
关于本文术语的约定俗成
这个章节实际上是在我写完全部基础教程后才加上的,我在这里解释一下今后教程中将使用的术语.
从上往下看.
红1:包,所有的MC源代码都在同一个包内.
蓝1:导入的库,有时我们需要导入Java自带的库.
绿1:类,类的概念我实在难以解释,熟悉Java的人应该都知道吧...
紫1:继承,派生.正规的说法是一个基类派生出子类,子类继承自基类.然后我们并不在乎这上面的文字游戏,汉语本来就是个不规范的语言呢...我们说子类从基类派生而来,或子类继承自基类不也一样吗...所以本文不会太注重派生/继承的用词.但我保证会留下足够的逻辑线索让你一眼看出我所表达的意思.
青1:基于XXX接口创建类.
红2:类的空位,即方法与方法间的空位,如果我说"在XX类中添加这些代码"就是指在这些位置添加代码.
蓝2:构造函数.如果一个方法的名字和类相同,那么它就是构造函数.它会在类实例化时执行.
绿2:方法/函数,我习惯叫它方法.这个是最准确最规范的叫法.
紫2:返回值.
青2:参数.
最后再向新手程序员解释一下何为重写,重写(Override)是让子类的方法覆盖父类的方法,重写的办法是让子类方法的名字和父类方法一致.唯一特例是构造函数,它的名字依然和子类名字保持一致,但必须调用父类的构造函数(使用super).
下一篇:创建新的砖块,物品和冶炼
http://www.mcbbs.net/thread-18940-1-1.html