Exclude Citizens NPCs from player listener; resolves #874

This commit is contained in:
Daniel Saukel 2020-08-31 22:29:18 +02:00
parent cae69090be
commit cc8f23f56f

View File

@ -86,9 +86,16 @@ public class DPlayerListener implements Listener {
@EventHandler @EventHandler
public void onEntityDamage(EntityDamageEvent event) { public void onEntityDamage(EntityDamageEvent event) {
if (!(event.getEntity() instanceof LivingEntity)) {
return;
}
LivingEntity entity = ((LivingEntity) event.getEntity());
if (isCitizensNPC(entity)) {
return;
}
World world = event.getEntity().getWorld(); World world = event.getEntity().getWorld();
GameWorld gameWorld = plugin.getGameWorld(world); GameWorld gameWorld = plugin.getGameWorld(world);
if (gameWorld == null) { if (gameWorld == null) {
return; return;
} }
@ -98,24 +105,20 @@ public class DPlayerListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
} }
if (!(event.getEntity() instanceof LivingEntity)) { boolean dead = entity.getHealth() - event.getFinalDamage() <= 0;
return;
}
boolean dead = ((LivingEntity) event.getEntity()).getHealth() - event.getFinalDamage() <= 0;
if (!dead) { if (!dead) {
return; return;
} }
if (event.getEntity() instanceof Player && !gameWorld.getDungeon().getRules().getState(GameRule.DEATH_SCREEN)) { if (entity instanceof Player && !gameWorld.getDungeon().getRules().getState(GameRule.DEATH_SCREEN)) {
event.setDamage(0); event.setDamage(0);
GamePlayer gamePlayer = plugin.getPlayerCache().getGamePlayer((Player) event.getEntity()); GamePlayer gamePlayer = plugin.getPlayerCache().getGamePlayer((Player) entity);
if (gamePlayer == null) { if (gamePlayer == null) {
return; return;
} }
((DGamePlayer) gamePlayer).onDeath(null); ((DGamePlayer) gamePlayer).onDeath(null);
} }
if (plugin.getDungeonMob((LivingEntity) event.getEntity()) != null) { if (plugin.getDungeonMob(entity) != null) {
String killer = null; String killer = null;
if (event instanceof EntityDamageByEntityEvent) { if (event instanceof EntityDamageByEntityEvent) {