首先现在项目的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内测试可能会报错。