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 2f7a5a4a5a7b29750cfd777e0bc5d19a14e93fa2..4de86b09c6bc3c1974ce61b550ccb73d37f6f170 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -176,4 +176,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 10058d3c3565382faa893b79119c5caf845bf29a..ed631d5bfba5d2543e8eed017a7c484ad3ddb453 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -41,6 +41,7 @@ public abstract class BaseSpawner { public int maxNearbyEntities = 6; public int requiredPlayerRange = 16; public int spawnRange = 4; + private int tickDelay = 0; // Paper public BaseSpawner() {} @@ -70,6 +71,10 @@ public abstract class BaseSpawner { } public void tick() { + // Paper start - Configurable mob spawner tick rate + if (spawnDelay > 0 && --tickDelay > 0) return; + tickDelay = this.getLevel().paperConfig.mobSpawnerTickRate; + // Paper end if (!this.isNearPlayer()) { this.oSpin = this.spin; } else { @@ -84,18 +89,18 @@ public abstract class BaseSpawner { world.addParticle(ParticleTypes.SMOKE, d0, d1, d2, 0.0D, 0.0D, 0.0D); world.addParticle(ParticleTypes.FLAME, d0, d1, d2, 0.0D, 0.0D, 0.0D); if (this.spawnDelay > 0) { - --this.spawnDelay; + this.spawnDelay -= tickDelay; // Paper } this.oSpin = this.spin; this.spin = (this.spin + (double) (1000.0F / ((float) this.spawnDelay + 200.0F))) % 360.0D; } else { - if (this.spawnDelay == -1) { + if (this.spawnDelay < -tickDelay) { // Paper this.delay(); } if (this.spawnDelay > 0) { - --this.spawnDelay; + this.spawnDelay -= tickDelay; // Paper return; }