这是我的插件代码片段。
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() 方法对于 Player 类型不明确。
我知道这可能是自 Bukkit 1.6.x 发布以来一个非常流行的问题,但我所做的搜索都没有给我一个我可以理解的解决方案。
如果this这确实是解决方案,您能帮助我了解我能做什么吗...
谢谢。
最佳答案
你能尝试两次h =player.getHealth()
吗?据我了解,由于向后兼容性,有两种 getHealth 方法。可能有一些反射魔法来确定是否请求新的(double 类型)或旧的(int 类型)。
同样,setHealth 有两个版本,因此编译器无法确定是否应该将 getHealth() + health
转换为 int 并使用 setHealth(int)
或者是否应该进行转换getHealth() + health
加倍并使用 setHealth(double)
因为 getHealth()
不明确。
@你的评论 它已被弃用,但仍然支持向后兼容,此时我不知道为什么会发生这种情况,似乎 bukkit 的 jar 包有一个复杂的构建过程,所以那里可能出了问题,但是我在 google 上找到了一个解决方案建议将玩家转换为可损坏可以解决该问题。
Damageable d = (Damageable) player;
关于java - getHealth() 方法对于 Player 类型不明确 - Bukkit 1.6.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711567/