Java Bukkit API - 获取 PlayerMoveMent 事件中的 LastDamageCause 实体

标签 java bukkit

所以我试图弄清楚当玩家到达《我的世界》中的虚空时如何获得最后的伤害。但是,我找不到获得伤害者的方法。

这是我的事件处理程序

@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()获取实体,并将其存储到损坏者对象中。然后检查damager是否等于getLastDamageCause().getEntity(),它总是返回true。

解决你的问题,按照这个topic “getEntity() 返回 DamageEvent 的主体,而不是损坏者。要获取损坏者,您需要检查:”

if(player.getLastDamageCause() instanceof EntityDamageByEntityEvent)
    Player damager = ((EntityDamageByEntityEvent) player.getLastDamageCause()).getDamager();

该代码返回对我不知道的实体造成伤害的玩家。但看来你只需要检查它是否是一个玩家。

顺便说一句,不需要将 event.getPlayer() 转换为播放器,因为它已经是播放器了。

关于Java Bukkit API - 获取 PlayerMoveMent 事件中的 LastDamageCause 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172855/

相关文章:

Java Bukkit - 插件无法解析为变量

java - 如何更改 CouchDB 数据库中所有文档的结构?

java - 使用自定义方法和其他类的方法创建类? java

java - 我的世界财富 block

java - 数据库连接应该始终保持打开状态还是仅在需要时才打开?

java - 如何在服务器范围内设置计时器

java - 为什么颜色的深浅会改变?

java - 如何转换为指定的类类型?

java - 如何在JasperReports中获取列表的第一个元素?

java - 如何使自定义 View 从 Activity 中失效