从Bukkit 1.6.4开始,还有另一种处理玩家生活的方法,即从现在起将生命存储为两倍。为了与较旧的插件兼容,Player.getHealth()
方法模棱两可,其中包括:
@Deprecated
public int getHealth();
public double getHealth();
我试图使用
Player.getHealth()
并导致错误。我搜索了一个解决方案,但是double d = (double) player.getHealth()
或double d = new Double(player.getHealth());
之类的东西仍然会抛出错误The method getHealth() of Player is ambigious
(我正在使用Eclipse btw。)。但是经过一番搜索,我也发现了这一点:Damageable d = player; //because player is a Damageable
double health = d.getHealth();
//the method called is the "new one", which returns a double
我不明白为什么这行得通,因为我研究了Damageable,并且已经在Damageable中定义了两种模棱两可的方法。上述错误也应该在这里发生。我哪里错了?我想念什么?
提前致谢。
最佳答案
这是因为在Minecraft 1.6.4及更高版本中,运行状况现在存储在浮动对象中。 Bukkit决定使用double来防止将来从float变为double。如果您在任何地方都不使用NMS
,请仅使用bukkit
,而不要使用craftbukkit
,因为这样做将使您可以只使用double d = player.getHealth();
。否则,如果需要craftbukkit
,则可以在构建层次结构中将bukkit
高于craftbukkit
。Damageable.getHealth()
是Bukkit中的一种方法,因此不建议使用,而Player.getHealth()
是CraftBukkit中的一种方法(CraftBukkit主要使用原始Minecraft服务器(称为NMS)中的代码,因此已弃用。从构建路径中删除CraftBukkit
,或在其上方放置Bukkit
,则Player.getHealth()
将起作用。
Bukkit已弃用使用整数的.getHealth()
方法,尽管它们仍然可以使用,但很快将被删除。因此,目前,您需要使用double health = ((Damageable) player).getHealth();