当前位置: 首页 > 知识库问答 >
问题:

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

柴嘉石
2023-03-14

这是我的一段插件代码

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的发布,但没有一个搜索我可以理解的解决方案。

如果这确实是解决方案,您能帮助我了解我能做什么吗...

谢谢你。

共有3个答案

楚望
2023-03-14

我不确定,但我认为您可能需要显式转换为类型:

double playerHealth = (double)player.getHealth();
player.setHealth(playerHealth + heal);
石俊雄
2023-03-14

似乎有多个 getHealth()。Java 无法弄清楚你指的是哪个,因为它们在你使用它的上下文中都是有效的。

如果急救人员的回答不起作用,你也可以做...

player.setHealth(new Double(player.getHealth()) + heal);
安毅
2023-03-14

你能试试双 h = player.getHealth()吗?据我了解,由于向后兼容性,有两种getHealth方法。可能有一些反射魔法可以弄清楚是请求新的(双精度类型)还是旧的(整数类型)。

同样,setHealth有两个版本,因此编译器无法确定是否应该将getHealth()健康转换为int并使用setHealth(int),或者是否应该将getHealth()健康转换为双精度并使用setHealth(双精度),因为getHealth()是矛盾的。

@Yourcomment 它已被弃用,但仍支持向后兼容性,在这一点上,我不知道为什么会发生这种情况,似乎 bukkit 的 jar 有一个复杂的构建过程,所以那里可能出了问题,但是我在谷歌上找到的解决方案表明,将玩家投射到 Damageable 可以摆脱这个问题。

Damageable d = (Damageable) player;
 类似资料:
  • 我的代码片段如下所示 我收到的方法assertEquals(Object,Object)对于类型是不明确的。我不知道为什么我会得到它?

  • 问题内容: 我的一些测试工作正常。然后,我将其移至其他程序包,现在出现错误。这是代码: 错误消息是这样的: 对于类型JGraphtUtilitiesTest,方法assertEquals(Object,Object)是不明确的 我怎样才能解决这个问题?当我将类移至其他程序包时,为什么会发生此问题? 问题答案: 方法assertEquals(Object,Object)对于类型… 该错误的含义是,您

  • 问题内容: 我正在使用代码: 它显示错误: 为什么没有代表? 问题答案: 有3种的方法接受一个引用类型- ,,。 通过时,所有3个都适用。方法重载规则更喜欢具有最特定参数类型的方法,因此不选择。 然后,编译器不能在前两个- 和- 之间进行选择,因为它不比- 更具体,反之亦然。 如果要选择特定的方法,请将null强制转换为所需的类型。 例如 :

  • 问题内容: 取自Android的想法:从对话框中模糊和暗化背景窗口。我无法使对话框下的内容模糊。当调用eula.getWindow()时,我收到此错误: 对于类型AlertDialog.Builder,未定义方法getWindow() 随同主要活动中的以下代码一起显示出eula: 任何帮助是极大的赞赏。 问题答案: 是对话框类的方法,而不是对话框生成器的方法。您的代码应该看起来像这样: 请注意,尽

  • 具有不透明返回类型的函数或者方法会隐藏它返回值的类型信息。相对于提供具体的类型作为函数的返回类型,返回值根据它支持的协议进行描述。隐藏类型信息在模块和调用模块的代码之间的边界处很好用,因为返回值的具体类型可以保持私有。不同于返回一个协议类型的值,不透明类型保持了类型的身份——编译器可以访问类型的信息,但模块的客户端不能。 不透明类型解决的问题 比如说,你在写一个模块来使用 ASCII 绘制图像。最

  • 不透明类型 具有不透明返回类型的函数或方法会隐藏返回值的类型信息。函数不再提供具体的类型作为返回类型,而是根据它支持的协议来描述返回值。在处理模块和调用代码之间的关系时,隐藏类型信息非常有用,因为返回的底层数据类型仍然可以保持私有。而且不同于返回协议类型,不透明类型能保证类型一致性 —— 编译器能获取到类型信息,同时模块使用者却不能获取到 苹果官方示例代码: protocol Shape {