papermc/Spigot-Server-Patches/0134-Allow-capping-number-of-attempts-at-spawning-mobs.patch
Aikar 18b4817a33 bump the default maxMobSpawns default to 250, and add support for unlimited
Use -1 to represent vanilla/unlimited.
Updated PaperWorldConfig to also update the individual worlds limit if it was set
to the new default value.

Should hopefully help #235
2016-05-16 22:07:12 -04:00

52 lines
2.6 KiB
Diff

From 665309dc76ad50bb5c79f50fcbf48cdcf5bc92f4 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Fri, 15 Apr 2016 21:27:14 -0400
Subject: [PATCH] Allow capping number of attempts at spawning mobs
By default, this logic would loop endlessly trying to fill the world
with entities until it hits the worlds spawn.
This patch will cap the # of attempts to so that the tick does not spend
extra long time on mob spawning
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 6a235d1..d470e75 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -320,4 +320,18 @@ public class PaperWorldConfig {
private void useVanillaScoreboardColoring() {
useVanillaScoreboardColoring = getBoolean("use-vanilla-world-scoreboard-name-coloring", false);
}
+
+ public int maxMobSpawnAttempts;
+ private void maxMobSpawnAttempts() {
+ maxMobSpawnAttempts = getInt("max-mob-spawn-attempts", 250);
+ log( "Max Mob Spawn Attempts: " + maxMobSpawnAttempts);
+ if (maxMobSpawnAttempts < 0) {
+ maxMobSpawnAttempts = Integer.MAX_VALUE;
+ } else {
+ if (maxMobSpawnAttempts < 250 && PaperConfig.version < 10) {
+ set("max-mob-spawn-attempts", 250);
+ maxMobSpawnAttempts = 250;
+ }
+ }
+ }
}
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
index a034db2..113a372 100644
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
@@ -140,8 +140,9 @@ public final class SpawnerCreature {
Iterator iterator1 = this.b.iterator();
int moblimit = (limit * i / 256) - mobcnt + 1; // Spigot - up to 1 more than limit
+ int maxMobSpawnAttempts = worldserver.paperConfig.maxMobSpawnAttempts; // Paper - max attempts
label120:
- while (iterator1.hasNext() && (moblimit > 0)) { // Spigot - while more allowed
+ while (iterator1.hasNext() && (moblimit > 0) && maxMobSpawnAttempts-- > 0) { // Spigot - while more allowed // Paper - max attempts
// CraftBukkit start = use LongHash and LongObjectHashMap
long key = ((Long) iterator1.next()).longValue();
BlockPosition blockposition1 = getRandomPosition(worldserver, LongHash.msw(key), LongHash.lsw(key));
--
2.8.2