aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0038-Configurable-mob-spawner-tick-rate.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0038-Configurable-mob-spawner-tick-rate.patch')
-rw-r--r--patches/server/0038-Configurable-mob-spawner-tick-rate.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/patches/server/0038-Configurable-mob-spawner-tick-rate.patch b/patches/server/0038-Configurable-mob-spawner-tick-rate.patch
new file mode 100644
index 0000000000..dfef31d530
--- /dev/null
+++ b/patches/server/0038-Configurable-mob-spawner-tick-rate.patch
@@ -0,0 +1,63 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Sudzzy <[email protected]>
+Date: Wed, 2 Mar 2016 15:03:53 -0600
+Subject: [PATCH] Configurable mob spawner tick rate
+
+
+diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+index ceb1602afb90fc0a23d6cc8d22fc85fab3b8da14..e7b7f0a1a35f782a0da4627b4f02e673ca73693e 100644
+--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
++++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+@@ -222,4 +222,9 @@ public class PaperWorldConfig {
+ private void disableIceAndSnow(){
+ disableIceAndSnow = getBoolean("disable-ice-and-snow", false);
+ }
++
++ public int mobSpawnerTickRate;
++ private void mobSpawnerTickRate() {
++ mobSpawnerTickRate = getInt("mob-spawner-tick-rate", 1);
++ }
+ }
+diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java
+index 31bfc0c491c9a4cc6782b6c284121f96972517ea..6aab3df317a9612da9b83284aa6056f0c7cf436c 100644
+--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
++++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java
+@@ -42,6 +42,7 @@ public abstract class BaseSpawner {
+ public int requiredPlayerRange = 16;
+ public int spawnRange = 4;
+ private final Random random = new Random();
++ private int tickDelay = 0; // Paper
+
+ public BaseSpawner() {}
+
+@@ -75,13 +76,18 @@ public abstract class BaseSpawner {
+ }
+
+ public void serverTick(ServerLevel world, BlockPos pos) {
++ // Paper start - Configurable mob spawner tick rate
++ if (spawnDelay > 0 && --tickDelay > 0) return;
++ tickDelay = world.paperConfig.mobSpawnerTickRate;
++ if (tickDelay == -1) { return; } // If disabled
++ // Paper end
+ if (this.isNearPlayer(world, pos)) {
+- if (this.spawnDelay == -1) {
++ if (this.spawnDelay < -tickDelay) {
+ this.delay(world, pos);
+ }
+
+ if (this.spawnDelay > 0) {
+- --this.spawnDelay;
++ this.spawnDelay -= tickDelay; // Paper
+ } else {
+ boolean flag = false;
+
+@@ -146,8 +152,7 @@ public abstract class BaseSpawner {
+ ((Mob) entity).finalizeSpawn(world, world.getCurrentDifficultyAt(entity.blockPosition()), MobSpawnType.SPAWNER, (SpawnGroupData) null, (CompoundTag) null);
+ }
+ // Spigot Start
+- if ( entityinsentient.level.spigotConfig.nerfSpawnerMobs )
+- {
++ if (entityinsentient.level.spigotConfig.nerfSpawnerMobs) {
+ entityinsentient.aware = false;
+ }
+ // Spigot End