diff --git a/Spigot-Server-Patches/0407-Only-count-Natural-Spawned-mobs-towards-natural-spaw.patch b/Spigot-Server-Patches/0407-Only-count-Natural-Spawned-mobs-towards-natural-spaw.patch new file mode 100644 index 000000000..8bbb9dde3 --- /dev/null +++ b/Spigot-Server-Patches/0407-Only-count-Natural-Spawned-mobs-towards-natural-spaw.patch @@ -0,0 +1,60 @@ +From 47a799afb7b6774c8e7cd964e80aa4d99946826f Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Sun, 24 Mar 2019 01:01:32 -0400 +Subject: [PATCH] Only count Natural Spawned mobs towards natural spawn mob + limit + +This resolves the super common complaint about mobs not spawning. + +This was ultimately a flaw in the vanilla count algorithim that allows +spawners and other misc mobs to count against the mob limit, which are +not bounded, and can prevent the entire world from spawning new. + +I believe Bukkits changes around persistence may of actually made it +worse than vanilla. + +This should fully solve all of the issues around it so that only natural +influences natural spawns. + +diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +index 929f5c303..ff520d9e8 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java ++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +@@ -509,6 +509,16 @@ public class PaperWorldConfig { + maxAutoSaveChunksPerTick = getInt("max-auto-save-chunks-per-tick", 24); + } + ++ public boolean countAllMobsForSpawning = false; ++ private void countAllMobsForSpawning() { ++ countAllMobsForSpawning = getBoolean("count-all-mobs-for-spawning", false); ++ if (countAllMobsForSpawning) { ++ log("Counting all mobs for spawning. Mob farms may reduce natural spawns elsewhere in world."); ++ } else { ++ log("Using improved mob spawn limits (Only Natural Spawns impact spawn limits for more natural spawns)"); ++ } ++ } ++ + public boolean antiXray; + public boolean asynchronous; + public EngineMode engineMode; +diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java +index c646393eb..959fc99bb 100644 +--- a/src/main/java/net/minecraft/server/WorldServer.java ++++ b/src/main/java/net/minecraft/server/WorldServer.java +@@ -867,6 +867,13 @@ public class WorldServer extends World { + EnumCreatureType enumcreaturetype = entity.getEntityType().d(); + + if (enumcreaturetype != EnumCreatureType.MISC && this.getChunkProvider().b(entity)) { ++ // Paper start - Only count natural spawns ++ if (!this.paperConfig.countAllMobsForSpawning && ++ !(entity.spawnReason == CreatureSpawnEvent.SpawnReason.NATURAL || ++ entity.spawnReason == CreatureSpawnEvent.SpawnReason.CHUNK_GEN)) { ++ continue; ++ } ++ // Paper end + object2intmap.mergeInt(enumcreaturetype, 1, Integer::sum); + } + } +-- +2.22.0 + diff --git a/removed/1.14/0423-Only-count-Natural-Spawned-mobs-towards-natural-spaw.patch b/removed/1.14/0423-Only-count-Natural-Spawned-mobs-towards-natural-spaw.patch deleted file mode 100644 index c96473b00..000000000 --- a/removed/1.14/0423-Only-count-Natural-Spawned-mobs-towards-natural-spaw.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 07bc019d7485fc75328f148ca9498a5216a3f657 Mon Sep 17 00:00:00 2001 -From: Aikar -Date: Sun, 24 Mar 2019 01:01:32 -0400 -Subject: [PATCH] Only count Natural Spawned mobs towards natural spawn mob - limit - -This resolves the super common complaint about mobs not spawning. - -This was ultimately a flaw in the vanilla count algorithim that allows -spawners and other misc mobs to count against the mob limit, which are -not bounded, and can prevent the entire world from spawning new. - -I believe Bukkits changes around persistence may of actually made it -worse than vanilla. - -This should fully solve all of the issues around it so that only natural -influences natural spawns. - -diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index a70a64070e..bfd690eccd 100644 ---- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -@@ -598,4 +598,14 @@ public class PaperWorldConfig { - log("Using vanilla redstone algorithm."); - } - } -+ -+ public boolean countAllMobsForSpawning = false; -+ private void countAllMobsForSpawning() { -+ countAllMobsForSpawning = getBoolean("count-all-mobs-for-spawning", false); -+ if (countAllMobsForSpawning) { -+ log("Counting all mobs for spawning. Mob farms may reduce natural spawns elsewhere in world."); -+ } else { -+ log("Using improved mob spawn limits (Only Natural Spawns impact spawn limits for more natural spawns)"); -+ } -+ } - } -diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldEntityList.java b/src/main/java/com/destroystokyo/paper/PaperWorldEntityList.java -index a10a5bc138..a5a63f8004 100644 ---- a/src/main/java/com/destroystokyo/paper/PaperWorldEntityList.java -+++ b/src/main/java/com/destroystokyo/paper/PaperWorldEntityList.java -@@ -7,6 +7,7 @@ import net.minecraft.server.IAnimal; - import net.minecraft.server.MinecraftServer; - import net.minecraft.server.World; - import net.minecraft.server.WorldServer; -+import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; - - import java.util.ArrayList; - import java.util.Collection; -@@ -90,7 +91,12 @@ public class PaperWorldEntityList extends ArrayList { - } - - public void updateEntityCount(Entity entity, int amt) { -- if (!(entity instanceof IAnimal)) return; -+ // Only count natural spawns so that mob -+ if (!(entity instanceof IAnimal) || ( -+ !world.paperConfig.countAllMobsForSpawning && -+ entity.spawnReason != SpawnReason.NATURAL && -+ entity.spawnReason != SpawnReason.CHUNK_GEN -+ )) return; - - if (entity instanceof EntityInsentient) { - EntityInsentient entityinsentient = (EntityInsentient) entity; --- -2.21.0 -