方法getHealth()对于Player-Bukkit 1.6.4类型是不明确的

Lev*_*han 2 java ambiguous minecraft bukkit

这是我的插件代码.

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;
}
Run Code Online (Sandbox Code Playgroud)

我知道可能存在很多错误,我可以自己处理它们.我无法处理的那个是

player.setHealth(player.getHealth() + heal);
Run Code Online (Sandbox Code Playgroud)

Eclipse(我的IDE)告诉我getHealth()方法对于Player类型是不明确的.

我知道自从Bukkit 1.6.x发布以来,这可能是一个非常受欢迎的问题,但我所做的搜索都没有给我一个我能理解的解决方案.

如果确实是解决方案,请你帮我理解我能做些什么......

谢谢.

ary*_*naq 5

你能尝试加倍h = player.getHealth()吗?据我所知,由于向后兼容性,有两种getHealth方法.可能有一些反射魔法来确定是否请求new(类型double)或old(类型int).

同样,setHealth有两个版本,因此编译器无法弄清楚它是否应该转换getHealth() + health为int并使用setHealth(int)或者是否应该强制转换getHealth() + health为double并使用setHealth(double)因为getHealth()是ambigious.

@Yourcomment它已被弃用,但仍然支持向后兼容性,此时我对于为什么会发生这种情况一无所知,似乎bukkit有一个复杂的构建程序及其罐子因此可能出现问题,但是我在谷歌上发现了一个解决方案建议将播放器转换为Damageable可以解决问题.

Damageable d = (Damageable) player;
Run Code Online (Sandbox Code Playgroud)