Java Bukkit API - 在 PlayerMoveMent 事件中获取 LastDamageCause 实体
Java Bukkit API - Get LastDamageCause Entity in PlayerMoveMent Event
所以我想弄清楚当玩家到达我的世界虚空时如何得到最后的伤害原因。但是,我找不到获得 damager.
的方法
这是我的事件处理程序
@EventHandler
public void on(PlayerMoveEvent event)
{
Player player = (Player)event.getPlayer();
if (event.getTo().getY() <= 20.0)
{
Entity damager = (Player) event.getPlayer().getLastDamageCause().getEntity();
if(damager instanceof Player)
{
if(player.getLastDamageCause().getEntity().equals(damager))
{
damager.sendMessage("KILLER WORKING");
player.sendMessage("WOKRING!!!!");
}
}
}
}
不知何故,当我(玩家)受到伤害时,它会同时给出这两条消息。谁能帮我?谢谢!
你会收到这两条消息,因为当时玩家和破坏者都是同一个人。
您从 getLastDamageCause().getEntity()
获取实体,将其存储到破坏者对象中。然后检查损坏者是否等于 getLastDamageCause().getEntity()
,它总是 returns 为真。
解决你的问题,根据这个topic"getEntity() returns the subject of the DamageEvent, not the damager. To get the damager, you need to check:"
if(player.getLastDamageCause() instanceof EntityDamageByEntityEvent)
Player damager = ((EntityDamageByEntityEvent) player.getLastDamageCause()).getDamager();
那个代码 returns 伤害玩家的玩家,对于一个我不知道的实体。不过好像只要是播放器就可以了。
顺便说一下,没有必要将 event.getPlayer()
投射到玩家身上,因为它已经是玩家了。
所以我想弄清楚当玩家到达我的世界虚空时如何得到最后的伤害原因。但是,我找不到获得 damager.
的方法这是我的事件处理程序
@EventHandler
public void on(PlayerMoveEvent event)
{
Player player = (Player)event.getPlayer();
if (event.getTo().getY() <= 20.0)
{
Entity damager = (Player) event.getPlayer().getLastDamageCause().getEntity();
if(damager instanceof Player)
{
if(player.getLastDamageCause().getEntity().equals(damager))
{
damager.sendMessage("KILLER WORKING");
player.sendMessage("WOKRING!!!!");
}
}
}
}
不知何故,当我(玩家)受到伤害时,它会同时给出这两条消息。谁能帮我?谢谢!
你会收到这两条消息,因为当时玩家和破坏者都是同一个人。
您从 getLastDamageCause().getEntity()
获取实体,将其存储到破坏者对象中。然后检查损坏者是否等于 getLastDamageCause().getEntity()
,它总是 returns 为真。
解决你的问题,根据这个topic"getEntity() returns the subject of the DamageEvent, not the damager. To get the damager, you need to check:"
if(player.getLastDamageCause() instanceof EntityDamageByEntityEvent)
Player damager = ((EntityDamageByEntityEvent) player.getLastDamageCause()).getDamager();
那个代码 returns 伤害玩家的玩家,对于一个我不知道的实体。不过好像只要是播放器就可以了。
顺便说一下,没有必要将 event.getPlayer()
投射到玩家身上,因为它已经是玩家了。