<基于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源码,后者存放要用到的资源,现在开始具体介绍:

  1. 首先,你需要一个用@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)
    { ...... }
}

  1. 然后你需要对你的mod做一个描述,这部分内容在上图中的mcmod.info里面完成。里面的modid、name、description等等都是顾名思义的,填上就行。需要注意version、mcversion别动,看得出那是占位符吧,是由gradle搞定的,不需要你写。另外,如果想要输中文并正常显示的话,需要把文件编码调整为GBK而不是UTF-8,有点奇怪对吧,所以建议别用中文,除非你想让外国友人看到乱码。
  2. 现在你的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,快来一起做啊

第三章:真正弄清楚一个Mod的组织结构

爱冷剑,怜悲箫,月下狼孤啸; 轻点画,慢勾描,云中人逍遥。