这是我的一个插件代码。

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;

10-07 16:42