[英]Bukkit - Why does casting to Damageable work?
从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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.