本帖最后由 hao19891029 于 2013-10-10 16:37 编辑
注:下面文章基本转自Forge论坛里的教程(原地址),游戏版本为1.6.2。缓慢更新。。。
索引贴地址:点我
引
目标
提前准备
Eclipse
建立包(Packages)和类(Classes)
基本类的代码
基本类里的注解
代理类
结束
下一步做什么?
注:下面文章基本转自Forge论坛里的教程(原地址),游戏版本为1.6.2。缓慢更新。。。
索引贴地址:点我
引
欢迎一起来制作minecraft mod!我们开发者可以控制Miencraft的很多东西,但是Minercaft的代码是非常多的,并且刚开始的时候可能困难是巨大的。但是制造你自己的方块并且给Minecraft增加新的玩法是一个好玩又自由的经历!如果你不喜欢游戏里的平面,改变它!如果你想要更多的游戏内容,你可以加进去!这个教程旨在通过基本的教学说明让你制作mod轻松一些。 |
目标
|
提前准备
|
Eclipse
教程假定你使用的是Eclipse。当你第一次运行Eclipse的时候,它会要求你指定一个工作空间,确保你将工作空间指定到\forge\mcp\eclipse下面。 当你这样做了以后,Eclipse会直接拥有一个项目叫“Minecraft”,伸展开这个项目,你会看到一个资源源文件夹叫“src”。把它神展开,你会看到很多的Minecraft和Minecraft Forge的包。当然你不会更改里面的任何包和类,自由地去看这些包里面的内容然后可以想想你可以干什么或者看看Minecraft是怎么用这些代码工作的。 工作空间的提示: 如果你指定了错误的工作空间到你的Eclipse,或者已经使用了另一个工作空间,你可以建立一个新的工作空间,步骤为:进入File -> Swith Workspace -> Other... |
建立包(Packages)和类(Classes)
用Forge制作Mod意味着所有的添加修改都是通过建立新的类来完成的。任何时候,除非你打算制作一个coremod或者有一个很好的理由,你最好都别修改游戏本身的任何类。你自己新增的类应该全都在你自己的包里面。 你自己的Mod 如果你正打算制造一个实用的mod,你应该使用一个自己的包名。对于包名下面是一个建议:
在Eclipse里面建立包和类的方法是,在左边的包浏览器(Package Explorer)里找到你想让你的mod在里面的包,点击右键。如果想新建包,最好直接在“src”文件夹下面新建包含你的mod的代码及资源的包。例如,一开始时,先在“src”文件夹右键,选择“New -> Package” 或者 “New -> Class”来新建包或类。 本文将教你如何新建一个叫Generic的mod,我们将会新建一个叫“tutorial.generic”的包。如果你完全跟着教程所说的去做,那请在项目名“Minecraft”下面的“src”直接点击右键,选中“New”,然后选择“Package“,确保你的项目的资源文件夹是“Minecraft\src” 并且你新建的包的名字为 “tutorial.generic”。完成以后,左边的包浏览器应该会显示出来你的空的名叫“tutorial.generic”的包。 接下来,我们来建立第一个类--基本类Base Mod,任何mod都需要建立一个基本类,这个类包含有一些信息,这些信息可以让forge将你的mod载入到minecraft里面。例如像教程里的话,基本类就是名叫“Generic mod”的类了。 在“tutorial.generic”包上点击右键,选择建立一个新的类(class)。这时候需要注意的几件事是:1、你的项目的资源文件夹应该是“Minecraft\src”;2、包应该叫“tutorial.generic”;3、类名叫“Generic”。 这时候你应该有一个叫“Generic”的类,它位于“Minecraft\src”资源文件夹里的“tutorial.generic”包里面。如果你不是这样,那请重新再来一遍。 文件路径 你可以在硬盘里找到你建的包和类,路径是:你解压出来的forge文件夹里的 \mcp\src\Minecraft 里面。 |
基本类的代码
Forge载入mod的时候首先是通过基本类来载入的,你的mod的其它所有类都需要通过基本类来注册到Forge里面以便Forge载入,正因为这样,建议你以你的mod的名称来命名你的基本类。就像教程的一样,教程所要做的mod叫“Generic Mod”,基本类的名称就叫“Generic”。 在上面一步,我们建立了一个空的类。接下来让我们看看怎么构建一个标准的基本类。把Eclipse自动生成的代码删除掉,我们来看看下面的代码怎么写的:
|
基本类里的注解
在上面的教程里大概你有很多想问的疑问,希望在这个注解说明里你可以找到答案。这个部分讲的是在基本类里用到的注解(@开头的)的列表以及它们的作用。 @Mod 告诉Forge这是你的mod的基本类,它带有三个参数。
@NetworkMod 告诉Forge当客户端安装了这个mod之后,服务端是否需要安装,这个注解包含两个参数。
例如,如果clientSideRequired设定为true,serverSideRequired设定为true,这样当你客户端安装了该mod而服务端没有安装的话,客户端就无法连接上服务端,如果serverSideRequired设定为false,这样即使服务端没有安装该mod,客户端也能连接上。 @Instance 基本类应该是使用单例模式的。这是你的mod给Forge引用的对象。确保里面填写的参数跟你在@Mod里的modid一样,否则它会默认为空字符串,这样会在安装了其它一样是空字符串的mod后引发错误。 @SidedProxy 这个代理类注解是告诉Forge当客户端运行的时候该使用那些类,当服务端运行的时候又该启动哪些其它的类,例如对于物品方块的材质渲染,客户端需要而服务端不需要,因为服务端不需要看到游戏的界面。你可以在任何地方用到这个注解。
@EvenHandler 有这个注解的方法会被所有方法调用。在1.6.1以前的版本并没有使用“@EvenHandler”,而是用“@PreInit”、“@Init”和“@PostInit”来代替。对于1.6.X版本来说,使用这个注解都需要导入“cpw.mods.fml.common.Mod.EventHandler;”。 |
代理类
Minecraft启动的时候是以启动服务端模式启动客户端,即使在单人游戏模式也会。当客户端在渲染世界里存在的所有东西的材质的时候,服务端的代码负责完成所有世界里的数据和状态等工作。而如果你的mod装在服务端里,那么客户端的代码就不会执行。让所有代码同时在指定的客户端和服务端工作是一项艰难的事情。因此,Forge给了两个注解让你可以指定那些代码是在服务端或客户端运行的。 当你想让服务端代码调用一个类的构造方法而客户端代码调用另一个类的构造方法的时候,你可以使用注解“@SidedProxy”。两个被调用的类都要是同样的类型或者同一类型的子类,并且类的名字需要用字符串(String)类型书写。在基本类里我们可以看到注解是这样写的:
我们一般使用代理类来注册材质图片并且托管我们的游戏界面管理器(GUI handler)。 一开始Forge会从服务端的proxy代码开始,通过读取以上的代码,找到“tutorial.generic.CommonProxy”类。请你在“tutorial.generic”包里建立一个叫“CommonProxy”的类,然后照着下面的代码构建这个类的内容。
关于继承的提示: 任何在“ClientProxy”类里没有重写的方法都会像在父类(即“CommonProxy”类)里的方法一样执行。不要忘记了这点。 |
结束
这个时候,你在你的包浏览器里应该会有这样的结构了(“minecraft”和“minecraftforge”包的结构就不写出来了):
目前为止,你已经成功建立了一个Forge的Mod的模板了。 为了测试你的mod,你可以这样做:首先保存你的成果,然后点击绿色箭头图标的“Run”按钮,然后Minecraft就会启动并载入你的mod,你应该可以在刚进入游戏的菜单里的“Mod”里看到你的mod。 |
下一步做什么?
在以后的教程中,你将可以学会以下三个功能:
|
本帖最后由 丰盛的蝙蝠 于 2013-9-30 17:53 编辑
抢···················还好赶上了
抢···················还好赶上了
来支持一下 是不是沙发啊
地板。。。我来晚了