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

标签 java minecraft bukkit ambiguous

这是我的插件代码片段。

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/

相关文章:

java - 保持 TrayDialog 打开并提交数据

java - 这是否被视为 "Database as an IPC"反模式?

directx - 处理 Minecraft 风格地形中的方 block (d3d/c++)

java.lang.NullPointerException 错误请

java - Minecraft 实体注册表在服务器加载时失败

java - 如何使用noteblockapi bukkit?

java - 如何使用 MySql 处理日语搜索查询?

java - 当 Android 看不到证书时,如何在 Android 中调用安全 (SSL) 网络服务?

python - 如何让python打开一个应用程序并使用它?

java - 如何改变活塞方向?