如何获得杀死玩家 bukkit 的实体?
How to get entity that killed player bukkit?
我正在尝试在您以某种方式被杀时制作自定义死亡消息。当你被 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());
,因为我知道 if 语句对实体没有选择性。
- 方法和 javadoc 上有
@Nullable
注释,因此您知道什么方法可以是 null
。
PlayerDeathEvent#getEntity#getKiller
方法 returns Player
所以你不需要向它投射 Player
对象。
- 否则,此方法仅 returns Player,如果它被另一个活着的 Player 杀死。
Entity#getLastDamageCause
方法可以 return null
getCause()
方法return是一个枚举,所以你不需要使用equals
,你只需要==
来比较枚举值。
- 您可以检查其他一些
DamageCause
字段,包括 ENTITY_EXPLOSION
。有时苦力怕爆炸的伤害原因可能是BLOCK_EXPLOSION
,可能是因为太远了。
我正在尝试在您以某种方式被杀时制作自定义死亡消息。当你被 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());
,因为我知道 if 语句对实体没有选择性。
- 方法和 javadoc 上有
@Nullable
注释,因此您知道什么方法可以是null
。 PlayerDeathEvent#getEntity#getKiller
方法 returnsPlayer
所以你不需要向它投射Player
对象。- 否则,此方法仅 returns Player,如果它被另一个活着的 Player 杀死。
Entity#getLastDamageCause
方法可以 return nullgetCause()
方法return是一个枚举,所以你不需要使用equals
,你只需要==
来比较枚举值。- 您可以检查其他一些
DamageCause
字段,包括ENTITY_EXPLOSION
。有时苦力怕爆炸的伤害原因可能是BLOCK_EXPLOSION
,可能是因为太远了。