From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Sudzzy 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 bf0c767af0ca5129b69b3c8dcfe54cdee989854b..cff814a123e02aea96197c1be092c210c2fcf781 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -217,4 +217,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 a003e1c0d99a4d4c88269ea5bad250ba73bbc9c9..65744b55f06c225745e3e145e5f5e60ebefd304c 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -46,6 +46,7 @@ public abstract class BaseSpawner { public int requiredPlayerRange; public int spawnRange; private final Random random; + private int tickDelay = 0; // Paper public BaseSpawner() { this.spawnPotentials = BaseSpawner.EMPTY_POTENTIALS; @@ -101,13 +102,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; @@ -156,8 +162,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