From 263190daa90b98d60b8600d3bb9d4adb37176d4d Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sun, 3 May 2026 19:01:25 +0200 Subject: [PATCH] possibly fix false negative check when worldguard is involved --- pom.xml | 4 ++-- .../preventstabby/data/PlayerManager.java | 11 +++++++++-- .../preventstabby/hooks/WorldGuardHook.java | 8 ++++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 3ad1ad2..3270456 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.youhavetrouble.preventstabby PreventStabby - 2.1.3 + 2.1.4-test jar PreventStabby @@ -85,7 +85,7 @@ io.papermc.paper paper-api - 1.21-R0.1-SNAPSHOT + 1.21.11-R0.1-SNAPSHOT provided diff --git a/src/main/java/me/youhavetrouble/preventstabby/data/PlayerManager.java b/src/main/java/me/youhavetrouble/preventstabby/data/PlayerManager.java index 7d0825f..685c6ac 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/data/PlayerManager.java +++ b/src/main/java/me/youhavetrouble/preventstabby/data/PlayerManager.java @@ -176,7 +176,14 @@ public class PlayerManager { } } - if (!attackerPlayerData.isPvpEnabled() || (PreventStabby.worldGuardHookEnabled() && !WorldGuardHook.isPlayerForcedToPvp(Bukkit.getPlayer(attackerId)))) { + Boolean attackerForcedPvpState = null; + Boolean victimForcedPvpState = null; + if (PreventStabby.worldGuardHookEnabled()) { + attackerForcedPvpState = WorldGuardHook.isPlayerForcedToPvp(Bukkit.getPlayer(attackerId)); + victimForcedPvpState = WorldGuardHook.isPlayerForcedToPvp(Bukkit.getPlayer(victimId)); + } + + if (!attackerPlayerData.isPvpEnabled() || Boolean.FALSE.equals(attackerForcedPvpState)) { String message = switch (victimClassifier) { case PLAYER -> plugin.getConfigCache().cannot_attack_attacker; case PET -> plugin.getConfigCache().cannot_attack_pets_victim; @@ -186,7 +193,7 @@ public class PlayerManager { return new DamageCheckResult(false, attackerId, victimId, message, victimClassifier.equals(Target.EntityClassifier.PLAYER)); } - if (!victimPlayerData.isPvpEnabled() || (PreventStabby.worldGuardHookEnabled() && !WorldGuardHook.isPlayerForcedToPvp(Bukkit.getPlayer(victimId)))) { + if (!victimPlayerData.isPvpEnabled() || Boolean.FALSE.equals(victimForcedPvpState)) { String message = switch (victimClassifier) { case PLAYER -> plugin.getConfigCache().cannot_attack_victim; case PET -> plugin.getConfigCache().cannot_attack_pets_attacker; diff --git a/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java b/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java index 5130d4b..79eee69 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java +++ b/src/main/java/me/youhavetrouble/preventstabby/hooks/WorldGuardHook.java @@ -51,7 +51,7 @@ public class WorldGuardHook { } } - public static boolean isPlayerForcedToPvp(Player player) { + public static Boolean isPlayerForcedToPvp(Player player) { if (player == null) return false; if (!PreventStabby.worldGuardHookEnabled()) return false; RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); @@ -60,7 +60,11 @@ public class WorldGuardHook { if (loc.getWorld() == null) return false; LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); ApplicableRegionSet set = query.getApplicableRegions(new Location(BukkitAdapter.adapt(loc.getWorld()), loc.getX(), loc.getY(), loc.getZ())); - return set.testState(localPlayer, FORCE_PVP_FLAG); + return switch (set.queryState(localPlayer, FORCE_PVP_FLAG)) { + case ALLOW -> true; + case DENY -> false; + case null-> null; + }; } }