实现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");
}
}
最后更新于