写在最前面,本教程转载至ustc-zzzz,本人只是做一个转载和笔记。
FML与Forge的由来
在很久很久以前(一个可以追溯到Minecraft刚刚发布的年代),人们就开始为Minecraft制作和使用Mod了。那个时候,由于Mod的制作方式是直接通过底层对Minecraft修改,所以将两个Minecraft Mod进行整合几乎是一件不可能的事情。
随后,Minecraft MCP(Minecraft Mod Coder Pack)的诞生,让Mod的制作和整合变得容易。这是因为Minecraft被进行了混淆化,这件事使得原本好看好记的诸如Item这样的类名、方法名、变量名等,通通被混淆化成了alq这样难以阅读和辨认的符号。Minecraft MCP的意义,就是对其进行反混淆,把alq这样的类名用一个诸如Item的名称代替。这使得人们可以通过更改MCP提供的源代码来进行Mod制作。但是,若是想合并两个Mod,必须要把两个Mod的源代码一行一行地进行整合。
直到2010年年底,一个叫作ModLoader的Mod横空出世,这使得Mod的开发方式产生了跨时代性的变化。ModLoader提供了一个框架和一套API,玩家通过这个框架可以很方便地管理Mod,开发者通过这一套API可以完成很多任务,如添加新方块、添加新物品,等等。
从2010年圣诞节前夕,Minecraft Beta版本发布开始,直到2011年年底Minecraft正式版发布,这一段时间被称为Minecraft Mod的“黄金时期”。很多著名的Mod如RailCraft,IndustrialCraft,BuildCraft等,都是这一时期开始开发的。但是,这段时期的Mod开发仍然问题重重。比如BuildCraft和IndistrialCraft就不能共存。他们更改了太多底层的东西。
这些Mod的开发者们看到Mod的整合仍旧困难,他们便发起了一项新的计划,这个计划就是Minecraft Forge。随着Minecraft正式版的发布和“黄金时期”的终结,很多Minecraft Forge的开发者,渐渐不再参与Minecraft Forge的开发。然而随着Mod数量的爆炸式增加,以LexManos和Cpw等为首的开发人员仍然坚持着Minecraft Forge的开发,并加入了很多崭新的特性。他们甚至将ModLoader这个框架整合进了Minecraft Forge,也就是Forge Mod Loader,简称FML。直到今天,Minecraft Forge和通过Minecraft Forge开发的难以计数的Mods,仍在发展壮大。
阅读本教程需要什么
Java等程序设计基础知识
本教程不针对Java初学者,本教程假定读者已经对Java的基础知识有了一定深入的了解。换言之,本教程假设读者已经对下面这些Java概念进行了深入地了解:
- 对象
- 类、属性和方法
- 变量、运算符和表达式
- 条件和循环
- 包、继承、多态和接口
- 泛型
- 容器
- 异常
下面这些Java概念虽然对Mod开发比较重要,但是读者在阅读之前不需要掌握或者只有阅读本教程更深入的部分才需要掌握,如果教程的某一部分认为读者不需要掌握,教程会在用到的时候会加以简要的介绍,如果需要,教程会提醒读者阅读相关的资料:
- 注解
- 数字和字符串的操作
- 输入输出流
- 多线程和同步
- 反射
- 中立字节码
下面这些Java概念和本Mod开发教程无关,虽然这些概念在其他Java应用中比较重要,但在本教程中不会用到。当然,了解这些知识对Mod开发是有一定帮助的:
- 正则表达式
- 图形界面
- 网络
- 数据库
- 。。。
这里推荐一本书《Head First Java, 2nd Edition》,这本书的中文版适用于没有任何编程基础的读者。如果看完了这本书的前十一章,对于阅读本教程的Java基础知识就已经足够了。
如果想深入学习的话,推荐《Effective Java (2nd Edition)》和《The Java Language Specification (3rd Edition)》两本书。
相对而言,作者会保证教程使用的代码可以在Java6下运行,尽量减少使用一些令人迷惑的特性,并尽可能保证除了Forge/FML之外,不使用其他的第三方库。
除了Java知识之外,了解一些游戏开发的知识,如OpenGL等等,对阅读本教程有一些帮助,但对于阅读本教程没有专门学习的必要,除非作者在某些地方特定指出了对该知识的需要。
源代码
对于教程中的所有源代码实现,本教程会尽可能地保证在Minecraft 1.8.9版本、和给定Forge版本下的服务端和客户端下成功运行。本教程也会考虑到诸如Minecraft 1.9.4、1.10.2、1.11.2等更高的Minecraft版本对应的Forge版本,并尽可能使相同的代码在高版本的Forge里正常工作,但不作保证。
对于教程中出现的源代码,读者可能需要加上一些import等辅助语句以使其正常工作。对于教程附带的源代码,本教程已经在Minecraft 1.8.9版本、和给定Forge版本,也就是11.15.1.2318下的客户端和服务端进行了测试。
本教程的所有源代码虽然进行了充分的测试,但是由于作者水平有限,可能无法发现一些错误,恳情读者指出。
工作环境的准备
从Forge官网下载ForgeMdk,并尽可能采用稳定版本(作者采用的是11.15.1.2318版本),本教程的所有开发操作都基于此。