Java Bukkit-为什么铸造到可损坏的工作?

Java Bukkit-为什么铸造到可损坏的工作?,java,interface,minecraft,overloading,bukkit,Java,Interface,Minecraft,Overloading,Bukkit,从Bukkit 1.6.4开始,还有另一种处理玩家生命的方式,从现在起,生命被存储为双倍。为了兼容较旧的插件,Player.getHealth()方法含糊不清,有: @Deprecated public int getHealth(); public double getHealth(); 我试图使用Player.getHealth(),结果出现了一个错误。我搜索了一个解决方案,但类似于double d=(double)player.getHealth()或double d=new doubl

从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())
仍然抛出错误
Player的getHealth()方法含糊不清
(顺便说一句,我使用的是Eclipse)。但经过一番搜索,我还发现:

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
,请仅使用,而不要使用
craftbukkit
,因为这样可以使您只需执行
double d=player.getHealth()。否则,如果您需要
craftbukkit
,可以将
bukkit
放在构建层次结构中高于
craftbukkit

Damageable.getHealth()
是Bukkit的一个方法,因此它没有被弃用,而
Player.getHealth()
是CraftBukkit的一个方法(CraftBukkit使用的代码主要来自原始的Minecraft服务器(称为NMS),所以它是不推荐的。尽管如果要从构建路径中删除
CraftBukkit
,或者将
Bukkit
放在它上面,那么
Player.getHealth()
就可以了


Bukkit不赞成使用整数的
.getHealth()
方法,尽管它们仍然有效,但很快就会被删除。因此,目前,您需要使用
双健康=((可损坏的)播放器).getHealth()

你能发布一个相关javadoc的链接吗。我发现的只是double方法。我想你的意思是:(第二个是玩家的doc,但这两个方法只是在Damageable中列出的(第一个链接))但是我认为这些都不能帮助你解决这个问题。似乎是这样。javadocs和源代码都没有提到这个方法,但是查看craftbukkit.jar中的.class文件可以看出它确实存在。事实上,名称中带有
\u INVALID\u
前缀的所有方法似乎都丢失了这个前缀。快速搜索ClassFileTransformer没有发现任何东西,我不擅长这种编译时突变的东西,因此无法解决这个问题。顺便说一句,我对java规范的理解是,这是一个编译时错误。如果这恰好是正确的,bukkit使用某种黑魔法来解决这个问题,那么我怀疑调用c的行为lass方法可能没有很好的定义,并且可能因jvm而异。不幸的是,这并不是我所要求的。您在回答中为这个问题提供了一个很好的解决方案,但我问为什么
Damageable.getHealth()
有效,尽管这个方法含糊不清。