Java 如何获取杀死玩家bukkit的实体?
当你以某种方式被杀的时候,我试着定制死亡信息。当你被TNT炸死或被爬虫炸死时,我想要单独的信息。我试着调试它并生成爬行器和TNT,在控制台中,它将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
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())因为我知道if语句对实体没有选择性
方法和javadocs上有@Nullable
注释,因此您知道什么方法可以是null
PlayerDeathEvent#getEntity#getKiller
方法返回Player
,因此您不需要向其强制转换Player
对象。
- 否则,此方法仅返回被另一个活着的玩家杀死的玩家
Entity#getLastDamageCause
方法可以返回null
getCause()
方法返回一个枚举,因此您不需要使用equals
,您只需要==
来比较枚举值
您可以检查其他一些DamageCause
字段,包括ENTITY\u EXPLOSION
。有时,当爬行器爆炸时,损坏原因可能是块体爆炸
,可能是因为距离太远