diff --git a/Towny/src/main/java/com/palmergames/bukkit/config/ConfigNodes.java b/Towny/src/main/java/com/palmergames/bukkit/config/ConfigNodes.java index 9d1585f9ef..0a94f85b4f 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/config/ConfigNodes.java +++ b/Towny/src/main/java/com/palmergames/bukkit/config/ConfigNodes.java @@ -690,6 +690,13 @@ public enum ConfigNodes { "", "# If set to true, when a world has forcepvp set to true, homeblocks of towns will not be affected and have PVP set to off.", "# Does not have any effect when Event War is active."), + GTOWN_SETTINGS_ADMINS_CAN_ALWAYS_PVP( + "global_town_settings.admins_can_always_pvp", + "false", + "", + "# If set to true, any player with towny.admin (or OP,) will be able to hurt other players overriding any location's PVP setting.", + "# Setting this to true will create avenues for admins to abuse players."), + GTOWN_SETTINGS_KEEP_INVENTORY_ON_DEATH_IN_TOWN( "global_town_settings.keep_inventory_on_death_in_town", "false", diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/TownySettings.java b/Towny/src/main/java/com/palmergames/bukkit/towny/TownySettings.java index b97904d11e..1c4879e6d7 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/TownySettings.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/TownySettings.java @@ -2922,6 +2922,10 @@ public static boolean isForcePvpNotAffectingHomeblocks() { return getBoolean(ConfigNodes.GTOWN_SETTINGS_HOMEBLOCKS_PREVENT_FORCEPVP); } + public static boolean isPVPAlwaysAllowedForAdmins() { + return getBoolean(ConfigNodes.GTOWN_SETTINGS_ADMINS_CAN_ALWAYS_PVP); + } + public static int getConfirmationTimeoutSeconds() { return getInt(ConfigNodes.INVITE_SYSTEM_CONFIRMATION_TIMEOUT); } diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/utils/CombatUtil.java b/Towny/src/main/java/com/palmergames/bukkit/towny/utils/CombatUtil.java index ead10b0763..e0fa6eab01 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/utils/CombatUtil.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/utils/CombatUtil.java @@ -145,9 +145,9 @@ private static boolean preventDamageCall(TownyWorld world, Entity attackingEntit /* * Both townblocks are not Arena plot and Player is not considered an Admin by Towny. - * Arena plots never prevent pvp, admins are never prevented from pvping. + * Arena plots never prevent pvp, admins can some times bypass pvp settings. */ - if (!isArenaPlot(attackerTB, defenderTB) && !isTownyAdmin(attackingPlayer)) { + if (!isArenaPlot(attackerTB, defenderTB) && !isTownyAdminBypassingPVP(attackingPlayer)) { /* * Check if we are preventing friendly fire between allies * Check the attackers TownBlock for its PvP status, else the world. @@ -710,7 +710,7 @@ private static boolean isNotNPC(Entity entity) { } } - private static boolean isTownyAdmin(Player attackingPlayer) { - return TownyUniverse.getInstance().getPermissionSource().isTownyAdmin(attackingPlayer); + private static boolean isTownyAdminBypassingPVP(Player attackingPlayer) { + return TownySettings.isPVPAlwaysAllowedForAdmins() && TownyUniverse.getInstance().getPermissionSource().isTownyAdmin(attackingPlayer); } } diff --git a/Towny/src/main/resources/ChangeLog.txt b/Towny/src/main/resources/ChangeLog.txt index 9f6bd5b7ac..871d50ebd0 100644 --- a/Towny/src/main/resources/ChangeLog.txt +++ b/Towny/src/main/resources/ChangeLog.txt @@ -9757,4 +9757,9 @@ v0.92.0.11: - Closes #7397. 0.100.2.9: - Fix scheduling 0 tick delayed task on paper, courtesy of Warrior with PR #7404. - - Call NewResidentThread sync on Folia, courtesy of Warrior with PR #7394. \ No newline at end of file + - Call NewResidentThread sync on Folia, courtesy of Warrior with PR #7394. + - Disable admins-bypassing-pvp settings by default. + - New Config Option: global_town_settings.admins_can_always_pvp + - Default: false + - If set to true, any player with towny.admin (or OP,) will be able to hurt other players overriding any location's PVP setting. + - Setting this to true will create avenues for admins to abuse players. \ No newline at end of file