From ab4501aa4cc6f6a0b2f3b0305486eaa38b71b0e0 Mon Sep 17 00:00:00 2001 From: HexedHero <6012891+HexedHero@users.noreply.github.com> Date: Thu, 9 Apr 2020 15:37:51 +0100 Subject: [PATCH] Add check for NPCs to /back listeners (#2833) Add a check for NPCs to the PlayerTeleportEvent and PlayerDeathEvent to avoid unnecessarily tracking NPCs' `/back` locations. Closes #2832. --- .../com/earth2me/essentials/EssentialsEntityListener.java | 4 ++++ .../com/earth2me/essentials/EssentialsPlayerListener.java | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java index 3052f73a0..c14becb62 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsEntityListener.java @@ -140,6 +140,10 @@ public class EssentialsEntityListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerDeathEvent(final PlayerDeathEvent event) { + Entity entity = event.getEntity(); + if (entity.hasMetadata("NPC")) { + return; + } final User user = ess.getUser(event.getEntity()); if (user.isAuthorized("essentials.back.ondeath") && !ess.getSettings().isCommandDisabled("back")) { user.setLastLocation(); diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java index 75cdd3bd6..c2b27dd14 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java @@ -438,7 +438,11 @@ public class EssentialsPlayerListener implements Listener { final boolean backListener = ess.getSettings().registerBackInListener(); final boolean teleportInvulnerability = ess.getSettings().isTeleportInvulnerability(); if (backListener || teleportInvulnerability) { - final User user = ess.getUser(event.getPlayer()); + Player player = event.getPlayer(); + if (player.hasMetadata("NPC")) { + return; + } + final User user = ess.getUser(player); //There is TeleportCause.COMMMAND but plugins have to actively pass the cause in on their teleports. if (backListener && (event.getCause() == TeleportCause.PLUGIN || event.getCause() == TeleportCause.COMMAND)) { user.setLastLocation();