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

时间:2014-03-14 23:04:49

标签: methods minecraft bukkit

我有这个问题,我试图从PlayerDeathEvent获取杀手健康,但它给我的错误,方法getHealth()对于类型Player

是不明确的

这是一段代码。

@EventHandler
public void onDeath(PlayerDeathEvent event) {
    Player p = event.getEntity();
    Player killer = p.getKiller();
    double playerHealth = killer.getHealth();
}

任何人都知道它为什么不起作用?

3 个答案:

答案 0 :(得分:3)

有两种getHealth()方法,因为Bukkit处理Minecraft的方式改变了1.6中实体健康的存储方式。您可以阅读有关此here的更多信息。

如果您没有使用任何NMS代码,则应在构建路径中使用bukkit.jar而不是使用craftbukkit.jar。这应该可以轻松解决您的问题。

如果确实需要NMS代码,则需要在构建路径中同时使用bukkit.jar和craftbukkit.jar。此外,你必须在构建路径中的craftbukkit.jar上面有bukkit.jar才能工作。

答案 1 :(得分:0)

您获得错误的原因可能是因为,假设爬行者或其他非玩家实体杀死玩家。这是为了防止这种情况你应该做些什么:

@EventHandler
public void onDeath(PlayerDeathEvent e){
    Player p = e.getEntity().getPlayer(); //use .getPlayer() just to be safe
    if(p.getLastDamageCause().equals(DamageCause.ENTITY_ATTACK) && p.getKiller() instanceof Player){
        //the player was last damaged by a LivingEntity, and the killer of the player is in-fact a player
        Player killer = p.getKiller();
        double playerHealth = killer.getHealth();
    }
}

答案 2 :(得分:0)

如果您需要nms代码

将播放器转换为Damagable也会有效