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

JavaBukkit API-在PlayerMoveMent事件中获取最后的伤害原因实体

朱俊雅
2023-03-14

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

这是我的事件处理器

@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!!!!");  
            }
        }
    }
}

不知怎的,当我(球员)受伤时,它会发出两条消息。有人能帮我吗?谢谢

共有1个答案

徐峰
2023-03-14

你会收到这两条信息,因为玩家和伤害者在那个时候是相同的。

您从getLastDamageBase(). getEntity()中获取实体,将其存储到damager对象中。然后检查Dam的值是否等于getLastDamage的值(). getEntity(),它总是返回true。

为了解决您的问题,根据本主题“getEntity() 返回 DamageEvent 的主题,而不是损坏者。要获得损坏者,您需要检查:”

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

该代码返回损坏玩家的玩家,对于我不知道的实体。但你似乎只需要检查一下它是否是玩家。

顺便说一下,不需要强制转换<code>事件。getPlayer()转换为播放器,因为它已经是播放器了。

 类似资料:
  • 实际上,我用@KafkaListener来阅读一个主题中的事件,我想阅读100个事件,然后放一个线程。在一定时间内睡觉。我的问题是,当线程返回时,侦听器继续执行我读到的最后一个事件,但我想在线程睡眠时放弃这些事件,继续执行主题中的最后一个事件。 比如: 1-100-捕获 睡线 101-500 线程返回 501-601-捕获 101-500事件可以被丢弃 代码: kafka配置:

  • 问题内容: 我正在调查以下内容 当启动部署了servlet的jboss服务器时,就会发生这种情况。它是用jdk-1.5.0_11编译的,我尝试用jdk-1.5.0_15重新编译,但没有成功。编译运行正常,但是在部署时会发生。 当我更改方法名称并收到以下错误时: 你可以看到显示了更多的方法签名。 实际的方法签名是 我已经尝试过使用它进行查看,并且给出了应有的方法签名。 当我的其他同事签出代码,对其进

  • 请原谅这个问题的含混不清,请允许我解释一下。 我使用PDFBox创建了一个PDFGenerator。PDF大约有9页,实际的PDFGenerator.java是一个怪物,几乎有4k行代码,大部分代码是PDF内部文本的恒定像素定位。 当前版本(v1)包括两个主要变量,一个电源和一个排气。因此,对于每一行内容,都有一个供应值和一个排气值。 整个过程非常完美,我对整个生成过程非常满意。然而,现在v2已经

  • 问题内容: 我有以下失败部分: 我想在错误消息的正文中包含构建失败的原因。 我怎样才能做到这一点? 如果没有,是否可以将构建日志文件附加到电子邮件? 问题答案: 我不知道一种凭空自动获取故障原因的方法。 但是,您可以在每个阶段中使用“ post {failure {”块来至少捕获其失败的阶段到环境变量中(例如env.FAILURE_REASON),并在最终(全局范围)通知块中访问该env var

  • 我知道你可以得到损坏的原因 在实体损坏事件中,但是我还没有找到返回造成损坏的实体的方法。我需要找出这一点,这样我就可以检查玩家的库存中是否有某个物品。

  • 我有一个来验证它的输入: 在中,我得到的消息(即)类似于: org.springframework.validation.BeanPropertyBindingResult:1 errors字段“item”上的对象“item holder”字段错误:拒绝的值[非常糟糕的值];代码[typemismatch.itemholder.item,typemismatch.item,typemismatch