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 2656429bab2..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 @@ -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,14 @@ private static boolean preventDamageCall(TownyWorld world, Entity attackingEntit * If Defender is a player, Attacker is not. */ if (defendingPlayer != null) { + /* + * Protects players against monster damage when mobs spawns are not allowed. + */ + if (TownySettings.isMonsterDamageBlockedInMoblessAreas() + && attackingEntity instanceof Monster + && !TownyAPI.getInstance().areMobsEnabled(defendingPlayer.getLocation())) { + return true; + } /* * If attackingEntity is a tamed Wolf and...