我有这个问题,我试图从PlayerDeathEvent获取杀手健康,但它给我的错误,方法getHealth()对于类型Player
是不明确的这是一段代码。
@EventHandler
public void onDeath(PlayerDeathEvent event) {
Player p = event.getEntity();
Player killer = p.getKiller();
double playerHealth = killer.getHealth();
}
任何人都知道它为什么不起作用?
答案 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)
将播放器转换为Damagable也会有效