Java 如何获取杀死玩家bukkit的实体?

Java 如何获取杀死玩家bukkit的实体?,java,minecraft,bukkit,Java,Minecraft,Bukkit,当你以某种方式被杀的时候,我试着定制死亡信息。当你被TNT炸死或被爬虫炸死时,我想要单独的信息。我试着调试它并生成爬行器和TNT,在控制台中,它将e.getEntity().getKiller()作为null输出到控制台中。如果我执行e.getEntity().getKiller().getName(),它会给出一个错误 以下是我的调试器代码: package me.Pale_Gray.BetterDeathMessages.deathmessages; import org.bukkit.C

当你以某种方式被杀的时候,我试着定制死亡信息。当你被TNT炸死或被爬虫炸死时,我想要单独的信息。我试着调试它并生成爬行器和TNT,在控制台中,它将
e.getEntity().getKiller()
作为
null
输出到控制台中。如果我执行
e.getEntity().getKiller().getName()
,它会给出一个错误

以下是我的调试器代码:

package me.Pale_Gray.BetterDeathMessages.deathmessages;

import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.PlayerDeathEvent;

public class DeathByTnt implements Listener{

    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent e) {
        String msg = e.getDeathMessage();
        System.out.println((Player) e.getEntity().getKiller());
        if (e.getEntity().getLastDamageCause().getCause().equals(DamageCause.ENTITY_EXPLOSION)) {
            msg = ChatColor.translateAlternateColorCodes('&', "&cIt went off with a BANG!");
            e.setDeathMessage(msg);
        }
    }
    
}
我只要求关注
System.out.println((Player)e.getEntity().getKiller())
  • 方法和javadocs上有
    @Nullable
    注释,因此您知道什么方法可以是
    null
  • PlayerDeathEvent#getEntity#getKiller
    方法返回
    Player
    ,因此您不需要向其强制转换
    Player
    对象。
    • 否则,此方法仅返回被另一个活着的玩家杀死的玩家
  • Entity#getLastDamageCause
    方法可以返回null
  • getCause()
    方法返回一个枚举,因此您不需要使用
    equals
    ,您只需要
    ==
    来比较枚举值
  • 您可以检查其他一些
    DamageCause
    字段,包括
    ENTITY\u EXPLOSION
    。有时,当爬行器爆炸时,损坏原因可能是
    块体爆炸
    ,可能是因为距离太远