第三章:真正弄清楚一个Mod的组织结构
<基于1.8 Forge的Minecraft mod制作经验分享>
首先看看一个mod的文件结构,懂Java的应该都看得懂:
src/main/ --java/com.xxxxxxxx.xxx/ ----block/ ----item/ ...... ----xxx.java --resources/assets/xxx/ ----blockstates/ ----lang/ ----models/ ----textures/ ----mcmod.info
可以看到在main文件夹下,有java、resources两个文件夹,前者放Java源码,后者存放要用到的资源,现在开始具体介绍:
-
首先,你需要一个用@Mod(modid = xxxx, version = xxxx)这个注解标识的Java主类作为入口,对应上图的xxx.java。Forge会根据这个注解识别到它。modid是你的mod的Id,即一个唯一标识你的mod的字符串,记得小写,version是版本号,一个形如1.0.0的String。一般建议把这两个String作为常量定义主类里,方便随后的调用。
然后,你需要用@EventHandler注解标注几个方法,使这个主类能够真正的在Forge运行时做一些事情。这个注解是根据其标注的方法的参数来工作的,这里有三个基本的参数:FMLPreInitializationEvent、FMLInitializationEvent、FMLPostInitializationEvent。这三个参数其实是三个事件,Forge会在MC开始时依次执行这三个事件。关于它们的具体分工我发现很难说清楚,还是在之后用到的时候再细说吧。
在我的斗罗大(大)陆(坑)mod里,主类是长这样的:
@Mod(modid = DouroMod.MODID, version = DouroMod.VERSION) public class DouroMod { /**ModInfo*/ public static final String MODID = "douromod"; public static final String VERSION = "0.0.0"; ...... ...... @EventHandler public void preInit(FMLPreInitializationEvent event) { ...... } @EventHandler public void init(FMLInitializationEvent event) { ...... } @EventHandler public void postInit(FMLPostInitializationEvent event) { ...... } }
-
然后你需要对你的mod做一个描述,这部分内容在上图中的mcmod.info里面完成。里面的modid、name、description等等都是顾名思义的,填上就行。需要注意version、mcversion别动,看得出那是占位符吧,是由gradle搞定的,不需要你写。另外,如果想要输中文并正常显示的话,需要把文件编码调整为GBK而不是UTF-8,有点奇怪对吧,所以建议别用中文,除非你想让外国友人看到乱码。
-
现在你的mod主类已经建立,并且用@Mod申明了mod的Id和Version,也为你的mod添加了描述信息。但你还需要在build.gradle里面同步的修改它们。在工程目录下找到build.gradle并打开,可以看到里面其实写的很详细,你需要改什么,不应该动什么。关键是把version = ""里面改为你的mod版本号,group = ""里面写你的包名com.xxxxxxxx.xxx,archivesBaseName = ""里面写mod的Id。
好了,运行试试看,在mod选项里是不是已经看到了你的mod以及的描述信息了呢?我的Github链接https://github.com/zhengxiaoyao0716/DouroMod,快来一起做啊