从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();

09-30 22:50