From 7a9b2f601fe7edf886017245e933fba184db14bb Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Sun, 29 Jul 2018 21:23:29 +0200 Subject: [PATCH] Add next-wave-delay per-arena setting. This commit adds a new per-arena config-file setting, next-wave-delay. When a new wave is about to spawn, a positive next-wave-delay value will cause the spawning of the wave to be delayed by that amount of seconds, similar to how first-wave-delay delays the spawning of the first wave. By moving all of the actual spawning logic into a new method and simply referencing that as a Runnable, we can avoid having to set weird boolean flags and re-scheduling the MASpawnThread itself. Closes #449 --- .../com/garbagemule/MobArena/MASpawnThread.java | 14 ++++++++++++++ src/main/resources/res/settings.yml | 1 + 2 files changed, 15 insertions(+) diff --git a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java index 03de097..f202238 100644 --- a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java @@ -38,6 +38,7 @@ public class MASpawnThread implements Runnable private int playerCount, monsterLimit; private boolean waveClear, bossClear, preBossClear, wavesAsLevel; private int waveInterval; + private int nextWaveDelay; /** * Create a new monster spawner for the input arena. @@ -70,6 +71,7 @@ public class MASpawnThread implements Runnable preBossClear = arena.getSettings().getBoolean("clear-wave-before-boss", false); wavesAsLevel = arena.getSettings().getBoolean("display-waves-as-level", false); waveInterval = arena.getSettings().getInt("wave-interval", 3); + nextWaveDelay = arena.getSettings().getInt("next-wave-delay", 0); } public void run() { @@ -104,6 +106,18 @@ public class MASpawnThread implements Runnable return; } + // Delay the next wave + if (nextWaveDelay > 0) { + arena.scheduleTask(this::spawnNextWave, nextWaveDelay * 20); + } else { + spawnNextWave(); + } + } + + private void spawnNextWave() { + // Grab the wave number. + int nextWave = waveManager.getWaveNumber() + 1; + // Grant rewards (if any) for the wave that just ended grantRewards(nextWave - 1); diff --git a/src/main/resources/res/settings.yml b/src/main/resources/res/settings.yml index 869d1ad..b341be6 100644 --- a/src/main/resources/res/settings.yml +++ b/src/main/resources/res/settings.yml @@ -21,6 +21,7 @@ min-players: 0 max-players: 0 max-join-distance: 0 first-wave-delay: 5 +next-wave-delay: 0 wave-interval: 15 final-wave: 0 monster-limit: 100