这是我的一个插件代码。
public boolean reapSoul(Player player, Player tplayer, double damage)
{
if(player.hasPermission("myrace.wraith.reap"))
{
player.sendMessage(ChatColor.DARK_GRAY + "You have reaped " + tplayer.getName() + "'s soul.");
damage = player.getLevel()/10;
double heal = damage/2;
tplayer.damage(damage);
player.setHealth(player.getHealth() + heal);
}
return true;
}
我知道可能存在很多错误,我可以自己处理。我无法处理的是
player.setHealth(player.getHealth() + heal);
Eclipse(我的IDE)告诉我,对于播放器类型,getHealth()方法不明确。
我知道自Bukkit 1.6.x发布以来,这可能是一个非常受欢迎的问题,但是我所做的任何搜索都没有给我提供我可以理解的解决方案。
如果this确实是解决方案,请您帮助我了解我可以做什么...
谢谢。
最佳答案
您可以尝试加倍h = player.getHealth()
吗?据我了解,由于向后兼容,有两种getHealth方法。可能有一些反射魔术可以弄清楚是请求新的(double类型)还是旧的(int类型)。
同样,setHealth有两个版本,因此编译器无法确定是将getHealth() + health
强制转换为int并使用setHealth(int)
,还是应该将getHealth() + health
强制转换为double并使用setHealth(double)
,因为getHealth()
含糊不清。
@你的评论
它已被弃用,但仍支持向后兼容性,这一点我仍然不知道为什么会发生,bukkit的jar似乎有一个复杂的构建过程,因此那里可能出了问题,但是我在google上找到了一个解决方案建议将玩家置于“可损坏”状态可以消除此问题。
Damageable d = (Damageable) player;