diff --git a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java index eb40972..b3b2538 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java +++ b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java @@ -25,6 +25,7 @@ public final class PreventStabby extends JavaPlugin { private PlayerManager playerManager; private DatabaseSQLite sqLite; private SmartCache smartCache; + private static boolean worldGuardHook; @Override public void onEnable() { @@ -45,7 +46,7 @@ public final class PreventStabby extends JavaPlugin { smartCache.runSmartCache(); // Register listeners - Reflections reflections = new Reflections(new String[]{"me.youhavetrouble.preventstabby"}); + Reflections reflections = new Reflections((Object[]) new String[]{"me.youhavetrouble.preventstabby"}); Set> listenerClasses = reflections.getTypesAnnotatedWith(PreventStabbyListener.class); listenerClasses.forEach((listener)-> { try { @@ -71,11 +72,18 @@ public final class PreventStabby extends JavaPlugin { try { WorldGuardHook.init(); - } catch (NoClassDefFoundError ignored) {} + worldGuardHook = true; + } catch (NoClassDefFoundError e) { + worldGuardHook = false; + } Metrics metrics = new Metrics(this, 10597); } + public static boolean worldGuardHookEnabled() { + return worldGuardHook; + } + public void reloadPluginConfig() { configCache = new ConfigCache(); } diff --git a/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java b/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java index eb5b730..d7c3978 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java +++ b/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java @@ -20,7 +20,6 @@ public class WorldGuardHook { private static FlagRegistry flagRegistry; public static StateFlag FORCE_PVP_FLAG; - private static boolean enabled = false; public static void init() { PreventStabby plugin = PreventStabby.getPlugin(); @@ -31,13 +30,11 @@ public class WorldGuardHook { plugin.getLogger().info("Hooking into WorldGuard"); flagRegistry = WorldGuard.getInstance().getFlagRegistry(); createForcePvpFlag(plugin); - enabled = true; } catch (NoClassDefFoundError | ClassNotFoundException ignored) { } } private static void createForcePvpFlag(Plugin plugin) { - if (!enabled) return; if (flagRegistry == null) return; String flagName = "preventstabby-force-pvp"; try { @@ -55,7 +52,6 @@ public class WorldGuardHook { } public static boolean isPlayerForcedToPvp(Player player) { - if (!enabled) return false; RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); RegionQuery query = container.createQuery(); org.bukkit.Location loc = player.getLocation(); @@ -64,8 +60,4 @@ public class WorldGuardHook { return set.testState(localPlayer, FORCE_PVP_FLAG); } - public static boolean isHooked() { - return enabled; - } - } diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java index d23514f..88e80f8 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java @@ -112,24 +112,25 @@ public class PlayerManager { public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage, boolean checkVictimSpawnProtection) { if (hasLoginProtection(attacker) || hasTeleportProtection(attacker)) return false; - if (checkVictimSpawnProtection && hasLoginProtection(victim)) return false; - if (checkVictimSpawnProtection && hasTeleportProtection(victim)) return false; SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); - Player attackerPlayer = Bukkit.getPlayer(attacker); - Player victimPlayer = Bukkit.getPlayer(victim); + if (!smartCache.getPlayerData(attacker).isPvpEnabled()) { + Player attackerPlayer = Bukkit.getPlayer(attacker); + if (PreventStabby.worldGuardHookEnabled() && WorldGuardHook.isPlayerForcedToPvp(attackerPlayer)) return true; - if (!smartCache.getPlayerData(attacker).isPvpEnabled() && (attackerPlayer != null && !isInForcedPvpRegion(attackerPlayer))) { if (sendDenyMessage) { ConfigCache config = PreventStabby.getPlugin().getConfigCache(); PluginMessages.sendActionBar(attacker, config.getCannot_attack_attacker()); } return false; } - if (!smartCache.getPlayerData(victim).isPvpEnabled() && (victimPlayer != null && !isInForcedPvpRegion(victimPlayer))) { + if (!smartCache.getPlayerData(victim).isPvpEnabled()) { + Player victimPlayer = Bukkit.getPlayer(victim); + if (PreventStabby.worldGuardHookEnabled() && WorldGuardHook.isPlayerForcedToPvp(victimPlayer)) return true; + if (sendDenyMessage) { ConfigCache config = PreventStabby.getPlugin().getConfigCache(); PluginMessages.sendActionBar(attacker, config.getCannot_attack_victim()); @@ -157,9 +158,4 @@ public class PlayerManager { return Instant.now().getEpochSecond() < smartCache.getPlayerData(uuid).getTeleportTimestamp(); } - public boolean isInForcedPvpRegion(Player player) { - if (!WorldGuardHook.isHooked()) return false; - return WorldGuardHook.isPlayerForcedToPvp(player); - } - }