diff --git a/changelog.md b/changelog.md index 1e6076c..3808f23 100644 --- a/changelog.md +++ b/changelog.md @@ -16,6 +16,7 @@ These changes will (most likely) be included in the next version. - Husks, drowned, piglins, hoglins, and zoglins can now be spawned in their baby versions using the `baby` prefix seen on other monster types (e.g. `baby-zombie`). - Pet names are now per-class configurable via the optional `pet-name` property, which defaults to `'s pet` (the `` variable is also supported). - New per-arena setting `auto-leave-on-end` can be used to automatically "kick" spectators when the current session ends. +- New per-arena setting `clear-wave-leeway` allows for tweaking the number of mobs allowed to be alive before the next wave spawns. The setting affects `clear-wave-before-next`, `clear-wave-before-boss`, and the final wave check, and it defaults to 0. - Added boss abilities `disorient-all`, `fetch-all`, `pull-all`, and `throw-all`. These abilities work like their target-specific and distance-based counterparts, but affect all players in the arena. - (API) MobArena's internal command handler now supports registering pre-instantiated subcommand instances. This should make it easier for extensions to avoid the Singleton anti-pattern for command dependencies. - (API) MobArena now fires MobArenaPreReloadEvent and MobArenaReloadEvent before and after, respectively, reloading its config-file. This should allow extensions and other plugins to better respond to configuration changes. diff --git a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java index e486f4d..0eb99ea 100644 --- a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java @@ -42,6 +42,7 @@ public class MASpawnThread implements Runnable private int playerCount, monsterLimit; private boolean waveClear, bossClear, preBossClear, wavesAsLevel; + private int clearLeeway; private int waveInterval; private int nextWaveDelay; @@ -76,6 +77,7 @@ public class MASpawnThread implements Runnable waveClear = arena.getSettings().getBoolean("clear-wave-before-next", false); bossClear = arena.getSettings().getBoolean("clear-boss-before-next", false); preBossClear = arena.getSettings().getBoolean("clear-wave-before-boss", false); + clearLeeway = arena.getSettings().getInt("clear-wave-leeway", 0); wavesAsLevel = arena.getSettings().getBoolean("display-waves-as-level", false); waveInterval = arena.getSettings().getInt("wave-interval", 3); nextWaveDelay = arena.getSettings().getInt("next-wave-delay", 0); @@ -308,18 +310,18 @@ public class MASpawnThread implements Runnable return false; } - // Check for wave and pre boss clear - if (waveClear && !monsterManager.getMonsters().isEmpty()) { + // Check for wave clear + if (waveClear && monsterManager.getMonsters().size() > clearLeeway) { return false; } // Check for pre boss clear - if (preBossClear && waveManager.getNext().getType() == WaveType.BOSS && !monsterManager.getMonsters().isEmpty()) { + if (preBossClear && waveManager.getNext().getType() == WaveType.BOSS && monsterManager.getMonsters().size() > clearLeeway) { return false; } // Check for final wave - if (!monsterManager.getMonsters().isEmpty() && waveManager.getWaveNumber() == waveManager.getFinalWave()) { + if (monsterManager.getMonsters().size() > clearLeeway && waveManager.getWaveNumber() == waveManager.getFinalWave()) { return false; } diff --git a/src/main/resources/res/settings.yml b/src/main/resources/res/settings.yml index d2c12d3..49035c3 100644 --- a/src/main/resources/res/settings.yml +++ b/src/main/resources/res/settings.yml @@ -7,6 +7,7 @@ default-class: '' clear-wave-before-next: false clear-boss-before-next: false clear-wave-before-boss: false +clear-wave-leeway: 0 soft-restore: false soft-restore-drops: false require-empty-inv-join: false