实现1.7常出现的玩家0血问题

在1.7的mod服中,经常会有mod出现不正确的血量操作导致玩家卡0血,不能聊天也死不了。

解决办法是,通过修改玩家NBT数据中的血量,将其改为正常值。(但是这得手动改,不是自动化的,很不符合程序设计是简化人类操作的这个初衷)

于是,我写了一段JavaScript的NPC脚本来自动修复这个0血异常

以下是JavaScript脚本

//玩家登录就执行FixZeroHealth函数,如果0血就进行修复操作
function login(event) {
    var player = Java.type("org.bukkit.Bukkit").getServer().getPlayer(event.getPlayer().getName());
    FixZeroHealth(player);
}

//修复0血
function FixZeroHealth(player) {
    var Class = Java.type("java.lang.Class");
    var Bukkit = Java.type("org.bukkit.Bukkit");
    var ClassLoader = Bukkit.getPluginManager().getPlugin("PowerNBT").getClass().getClassLoader();
    var FindClass = ClassLoader.getClass().getDeclaredMethod("findClass", Class.forName("java.lang.String"));
    FindClass.setAccessible(true);
    var NBTManager = FindClass.invoke(ClassLoader, "me.dpohvar.powernbt.api.NBTManager");
    var nbtm = NBTManager.getDeclaredMethod("getInstance").invoke(null);
    if (nbtm.read(player).getFloat("AbsorptionAmount") != 0.0) {
        var nbtcompound = nbt.read(player);
        nbtcompound.remove("AbsorptionAmount");
        nbtcompound.put("AbsorptionAmount", 0.0);
        nbtcompound.put("HealF", 20.0);
        nbtm.write(player, nbtcompound);
		print("[玲珑]修复了玩家" + player.getName() + "的零血bug");
    }
}

最后更新于