Java Bukkit死亡/杀死侦听器被void杀死时抛出错误
所以我制作了kill counter插件,我制作了一个监听死亡并杀死它的监听器,它看起来像这样:Java Bukkit死亡/杀死侦听器被void杀死时抛出错误,java,bukkit,Java,Bukkit,所以我制作了kill counter插件,我制作了一个监听死亡并杀死它的监听器,它看起来像这样: @EventHandler public void killPlayer(EntityDeathEvent e) { Entity deadEntity = e.getEntity(); Entity killer = e.getEntity().getKiller(); if (killer instanceof Player && deadEntity
@EventHandler
public void killPlayer(EntityDeathEvent e) {
Entity deadEntity = e.getEntity();
Entity killer = e.getEntity().getKiller();
if (killer instanceof Player && deadEntity instanceof Player) {
Player player = (Player) killer;
Player dead = (Player) deadEntity;
int killcount = 0;
int deathcount = 0;
String killpath = "playerkills." + player.getName().toLowerCase();
String deathpath = "playerdeaths." + dead.getName().toLowerCase();
if (config.contains(killpath)) {
killcount = config.getInt(killpath);
}
if (config.contains(deathpath)) {
deathcount = config.getInt(deathpath);
}
config.set(killpath, killcount +1);
config.set(deathpath, deathcount +1);
plugin.saveConfig();
}
我已经试过制作“预侦听器”来防止错误的发生,但它不起作用。这是我编写的一段代码:
@EventHandler
public void playerDeath(PlayerDeathEvent e){
Entity entity = e.getEntity();
EntityDamageEvent entityDamageEvent = entity.getLastDamageCause();
if(entityDamageEvent.getCause() == EntityDamageEvent.DamageCause.VOID){
//Player died from void
}
}
但我还是得到了同样的错误。这就是错误:
问题是:
Void不是Bukkit中的实体
因此,您的线路
Entity killer = e.getEntity().getKiller();
由于void不是实体而引发错误
如果它不是一个实体
对于一般修复,请在使用前检查杀手是否为空
if (killer != null)//Continue
如果您阅读stacktrace,最后在net.battleheroes.java.deathcost.Events包的PlayerDeath类的第25行得到一个NullPointerException,如果您不发布该部分代码,我们将无法帮助您。可能的void副本不是实体<代码>!=空的是神奇的