diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/Bloodmoon.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/Bloodmoon.java index dc1b1cf..1b69e5b 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/Bloodmoon.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/Bloodmoon.java @@ -78,7 +78,7 @@ public class Bloodmoon extends Appliance { ); private final boolean hordesEnabled = true; private final int hordeSpawnRateTicks = 800; - private final int hordeSpawnRateVariationTicks = 100; + private final int hordeSpawnRateVariationTicks = 800; private final int hordeMinPopulation = 3; private final int hordeMaxPopulation = 10; private final int hordeSpawnDistance = 10; @@ -87,6 +87,7 @@ public class Bloodmoon extends Appliance { EntityType.SKELETON, EntityType.SPIDER ); + private final Map hordeSpawnTasks = new HashMap<>(); private @Nullable BukkitTask hordeSpawnTask = null; public final int bloodmoonLength = 12000; public final int ticksPerDay = 24000; @@ -133,20 +134,26 @@ public class Bloodmoon extends Appliance { } private int getRandomHordeSpawnDelay() { - return this.hordeSpawnRateTicks + ThreadLocalRandom.current().nextInt(-this.hordeSpawnRateVariationTicks, this.hordeSpawnRateVariationTicks); + return this.hordeSpawnRateTicks + ThreadLocalRandom.current().nextInt(this.hordeSpawnRateVariationTicks); } private void startHordeSpawning(int delay) { - if(this.hordeSpawnTask != null) this.hordeSpawnTask.cancel(); - this.hordeSpawnTask = Bukkit.getScheduler().runTaskLater( - Main.instance(), - () -> { - if(!this.bloodmoonIsActive()) return; - this.spawnRandomHorde(); - this.startHordeSpawning(this.getRandomHordeSpawnDelay()); - }, - delay + Bukkit.getOnlinePlayers().forEach(player -> this.startHordeSpawning(delay, player)); + } + + private void startHordeSpawning(int delay, Player player) { + @Nullable BukkitTask task = this.hordeSpawnTasks.get(player); + if(task != null) task.cancel(); + task = Bukkit.getScheduler().runTaskLater( + Main.instance(), + () -> { + if(!this.bloodmoonIsActive()) return; + this.spawnRandomHorde(); + this.startHordeSpawning(this.getRandomHordeSpawnDelay()); + }, + delay ); + this.hordeSpawnTasks.put(player, task); } public void addPlayerToBossBar(Player player) { diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/BloodmoonSetting.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/BloodmoonSetting.java index e2925d8..c7dadeb 100644 --- a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/BloodmoonSetting.java +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/gameplay/bloodmoon/BloodmoonSetting.java @@ -29,7 +29,7 @@ public class BloodmoonSetting extends BoolSetting implements CategorizedSetting @Override protected String description() { - return "Kämpfe während dem Blutmond mit stärkeren Monstern mit besseren Drops. Kann nicht während dem Blutmond geändert werden!"; + return "Kämpfe während dem Blutmond gegen stärkere Monster mit besseren Drops. Kann nicht während dem Blutmond geändert werden!"; } @Override