首先现在项目的run/mods目录中添加Vape Manager模组以便于调试运行。

然后再在项目代码中添加一个用于判断模组是否加载Vape Manager模组的函数。

例:

public static boolean hasAPI(){
    for(IModInfo modInfo:ModList.get().getMods()){
        if(modInfo.getModId().equals("vm")) {
            return true;
        }
    }
    return false;
}

然后在主函数中调用他进行判断,如果没有则抛出RuntimeException,反之,则进行写配置文件的操作(在模组加载时写配置文件正常情况下并不会影响Vape Manager对配置文件的读取,因为Vape Manager模组默认会最后一个被加载。)。

例:

if(!hasAPI()){     //检测是否有前置模组Vape Manager。
    throw new RuntimeException("NoFall requires Vape Manager mod.");     //没有则抛出异常。
}

if(!new File("config/vm/mods").exists()){         //判断并创建配置文件所在目录。
    new File("config/vm/mods").mkdirs();
}

if(!new File("config/vm/mods/NoFall.json").exists()){        //检测配置文件是否存在。
    JsonObject object = new JsonObject();
    object.addProperty("name","NoFall");       //写配置文件项“name”。
    object.addProperty("id","nf");                     //写配置文件项“id”。
    object.addProperty("main","cn.ksmcbrigade.NF.Manager");           //写配置文件项“main”。
    object.addProperty("function","NONE");      //写配置文件项“function”。
    object.addProperty("function_2","run");       //写配置文件项“function_2”。
    object.addProperty("gui_main","NONE");    //写配置文件项“gui_main”。
    object.addProperty("gui_function","NONE");          //写配置文件项“gui_function”。
    Files.write(Paths.get("config/vm/mods/NoFall.json"),object.toString().getBytes());        //将过配置文件写入到文件。
}

以上代码可能会抛出IOException,请用 try/catch 包裹或添加异常签名,否则将无法正常编译运行。


接下来创建配置文件内指定的类文件,然后在类文件内添加对应的函数。

例:

package cn.ksmcbrigade.NF;

import net.minecraft.world.entity.player.Player;

public class Manager {
    public static void run(Player player){
        player.fallDistance = 0;
    }
}

提示:函数的player参数如果不用也一定要加上,否则开启功能时将会报错并导致游戏崩溃。

注意:需要将模组使用build导出后在启动器测试,在IDE内测试可能会报错。