繁体   English   中英

Bukkit-为什么要铸造成易损件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM