From 892a8410bbd095bd257c931d0cfe3e763d498596 Mon Sep 17 00:00:00 2001 From: Jinzo <91829829+pernio@users.noreply.github.com> Date: Wed, 19 Aug 2026 20:02:12 +0200 Subject: [PATCH 1/2] Protect players from hostile mobs in claims --- .../java/com/palmergames/bukkit/towny/utils/CombatUtil.java | 4 ++++ 1 file changed, 4 insertions(+) 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 2656429bab2..6b34a603d7e 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 @@ -30,6 +30,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.LightningStrike; +import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.entity.Wolf; @@ -236,6 +237,9 @@ private static boolean preventDamageCall(TownyWorld world, Entity attackingEntit * If Defender is a player, Attacker is not. */ if (defendingPlayer != null) { + if (attackingEntity instanceof Monster && !TownyAPI.getInstance().areMobsEnabled(defendingPlayer.getLocation())) { + return true; + } /* * If attackingEntity is a tamed Wolf and... From 179d735bd212f673dfdb339c24af0677cf0ba8cd Mon Sep 17 00:00:00 2001 From: Jinzo <91829829+pernio@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:30:21 +0200 Subject: [PATCH 2/2] Add config node for mob protection in claims --- .../java/com/palmergames/bukkit/config/ConfigNodes.java | 7 +++++++ .../java/com/palmergames/bukkit/towny/TownySettings.java | 4 ++++ .../com/palmergames/bukkit/towny/utils/CombatUtil.java | 7 ++++++- 3 files changed, 17 insertions(+), 1 deletion(-) 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 0e8b5e4b925..8a6d02823c0 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/config/ConfigNodes.java +++ b/Towny/src/main/java/com/palmergames/bukkit/config/ConfigNodes.java @@ -2096,6 +2096,13 @@ public enum ConfigNodes { "", "# Setting this to false will allow block projectile sources, namely dispensers, to harm the above protected mobs (using potions, arrows, etc.), if they're in the same townblock and PvP is enabled." ), + PROT_PREVENT_MONSTER_DAMAGE_TO_PLAYERS_IN_MOBLESS_AREAS( + "protection.prevent_monster_damage_to_players_in_mobless_areas", + "false", + "", + "# When set to true, players will be protected from monster damage in locations where mobs are disabled.", + "# Warning: This allows players to abuse mob farms while being invulnerable in a nearby chunk where mob spawns are disabled." + ), PROT_POTION_TYPES( "protection.potion_types", "BLINDNESS,NAUSEA,INSTANT_DAMAGE,HUNGER,POISON,SLOWNESS,MINING_FATIGUE,WEAKNESS,WITHER,WIND_CHARGED,WEAVING,INFESTED,OOZING", 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 1eeba922333..8aab7ab8b75 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/TownySettings.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/TownySettings.java @@ -4097,6 +4097,10 @@ public static boolean areProtectedEntitiesProtectedAgainstMobs() { public static boolean areProtectedEntitiesProtectedAgainstBlockProjectileSource() { return getBoolean(ConfigNodes.PROT_MOB_TYPES_MOB_VS_BLOCK_PROJECTILE_SOURCE_BYPASS); } + + public static boolean isMonsterDamageBlockedInMoblessAreas() { + return getBoolean(ConfigNodes.PROT_PREVENT_MONSTER_DAMAGE_TO_PLAYERS_IN_MOBLESS_AREAS); + } public static String getBossBarNotificationColor() { return getString(ConfigNodes.NOTIFICATION_BOSSBARS_COLOR); 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 6b34a603d7e..74cf451345d 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 @@ -237,7 +237,12 @@ private static boolean preventDamageCall(TownyWorld world, Entity attackingEntit * If Defender is a player, Attacker is not. */ if (defendingPlayer != null) { - if (attackingEntity instanceof Monster && !TownyAPI.getInstance().areMobsEnabled(defendingPlayer.getLocation())) { + /* + * Protects players against monster damage when mobs spawns are not allowed. + */ + if (TownySettings.isMonsterDamageBlockedInMoblessAreas() + && attackingEntity instanceof Monster + && !TownyAPI.getInstance().areMobsEnabled(defendingPlayer.getLocation())) { return true; }