From 879e70fb6badd516dd5c27f091d7d43f9f4fba34 Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Thu, 20 Oct 2022 14:19:22 -0400 Subject: [PATCH] Ignore NPCs in JailListener (#5130) Co-authored-by: pop4959 Co-authored-by: MD <1917406+mdcfe@users.noreply.github.com> Citizens NPCs cannot be jailed. This change prevents unnecessary lookups of NPC users. --- .../java/com/earth2me/essentials/Jails.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Jails.java b/Essentials/src/main/java/com/earth2me/essentials/Jails.java index 2cbf2c91c..123d159f3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Jails.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Jails.java @@ -203,6 +203,10 @@ public class Jails implements net.ess3.api.IJails { private class JailListener implements Listener { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onJailBlockBreak(final BlockBreakEvent event) { + if (shouldIgnore(event.getPlayer())) { + return; + } + final User user = ess.getUser(event.getPlayer()); if (user.isJailed() && !user.isAuthorized("essentials.jail.allow-break")) { event.setCancelled(true); @@ -211,6 +215,10 @@ public class Jails implements net.ess3.api.IJails { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onJailBlockPlace(final BlockPlaceEvent event) { + if (shouldIgnore(event.getPlayer())) { + return; + } + final User user = ess.getUser(event.getPlayer()); if (user.isJailed() && !user.isAuthorized("essentials.jail.allow-place")) { event.setCancelled(true); @@ -219,6 +227,10 @@ public class Jails implements net.ess3.api.IJails { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onJailBlockDamage(final BlockDamageEvent event) { + if (shouldIgnore(event.getPlayer())) { + return; + } + final User user = ess.getUser(event.getPlayer()); if (user.isJailed() && !user.isAuthorized("essentials.jail.allow-block-damage")) { event.setCancelled(true); @@ -232,6 +244,9 @@ public class Jails implements net.ess3.api.IJails { } final Entity damager = event.getDamager(); if (damager.getType() == EntityType.PLAYER) { + if (shouldIgnore((Player) damager)) { + return; + } final User user = ess.getUser((Player) damager); if (user != null && user.isJailed()) { event.setCancelled(true); @@ -241,6 +256,10 @@ public class Jails implements net.ess3.api.IJails { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onJailPlayerInteract(final PlayerInteractEvent event) { + if (shouldIgnore(event.getPlayer())) { + return; + } + final User user = ess.getUser(event.getPlayer()); if (user.isJailed() && !user.isAuthorized("essentials.jail.allow-interact")) { event.setCancelled(true); @@ -249,6 +268,10 @@ public class Jails implements net.ess3.api.IJails { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onJailPlayerGameModeChange(final PlayerGameModeChangeEvent event) { + if (shouldIgnore(event.getPlayer())) { + return; + } + final User user = ess.getUser(event.getPlayer()); if (user.isJailed()) { event.setCancelled(true); @@ -257,6 +280,10 @@ public class Jails implements net.ess3.api.IJails { @EventHandler(priority = EventPriority.HIGHEST) public void onJailPlayerRespawn(final PlayerRespawnEvent event) { + if (shouldIgnore(event.getPlayer())) { + return; + } + final User user = ess.getUser(event.getPlayer()); if (!user.isJailed() || user.getJail() == null || user.getJail().isEmpty()) { return; @@ -275,6 +302,10 @@ public class Jails implements net.ess3.api.IJails { @EventHandler(priority = EventPriority.HIGH) public void onJailPlayerTeleport(final PlayerTeleportEvent event) { + if (shouldIgnore(event.getPlayer())) { + return; + } + final User user = ess.getUser(event.getPlayer()); if (!user.isJailed() || user.getJail() == null || user.getJail().isEmpty()) { return; @@ -294,6 +325,10 @@ public class Jails implements net.ess3.api.IJails { @EventHandler(priority = EventPriority.HIGHEST) public void onJailPlayerJoin(final PlayerJoinEvent event) { + if (shouldIgnore(event.getPlayer())) { + return; + } + final User user = ess.getUser(event.getPlayer()); final long currentTime = System.currentTimeMillis(); user.checkJailTimeout(currentTime); @@ -318,5 +353,10 @@ public class Jails implements net.ess3.api.IJails { future.completeExceptionally(ex); } } + + private boolean shouldIgnore(final Player base) { + // Ignore Citizens NPCs + return base.getUniqueId().version() == 2 || base.hasMetadata("NPC"); + } } }