diff --git a/src/main/java/eu/m724/tweaks/module/sleep/TimeForwardRunnable.java b/src/main/java/eu/m724/tweaks/module/sleep/TimeForwardRunnable.java index 80b6f3e..d435be9 100644 --- a/src/main/java/eu/m724/tweaks/module/sleep/TimeForwardRunnable.java +++ b/src/main/java/eu/m724/tweaks/module/sleep/TimeForwardRunnable.java @@ -14,37 +14,38 @@ import org.bukkit.scheduler.BukkitRunnable; public class TimeForwardRunnable extends BukkitRunnable { private final Server server; - private final World world; // TODO multi worlds - - private final double percentage; public TimeForwardRunnable(Plugin plugin) { this.server = plugin.getServer(); - this.world = server.getWorld("world"); - this.percentage = (world.getGameRuleValue(GameRule.PLAYERS_SLEEPING_PERCENTAGE) / 100.0); } @Override public void run() { - int playersSleeping = SleepState.playersSleeping; - //System.out.println(playersSleeping); - if (playersSleeping == 0) return; + for (World world : server.getWorlds()) { + var gameRuleValue = world.getGameRuleValue(GameRule.PLAYERS_SLEEPING_PERCENTAGE); + if (gameRuleValue == null) gameRuleValue = 100; + double percentage = gameRuleValue / 100.0; - int onlinePlayers = (int) (server.getOnlinePlayers().size() / percentage); // TODO optimize remove size every tick maybe + int playersSleeping = SleepState.playersSleeping; + //System.out.println(playersSleeping); + if (playersSleeping == 0) return; - double sleepPercentage = (double) playersSleeping / onlinePlayers; + int onlinePlayers = (int) (world.getPlayers().size() / percentage); - // we want sleep to take 200 ticks which is 10 seconds assuming all palyres onilien + double sleepPercentage = (double) playersSleeping / onlinePlayers; - long time = world.getTime(); - long untilDay = 23459 - time; + // we want sleep to take 200 ticks which is 10 seconds assuming all palyres onilien - if (untilDay == 0) return; + long time = world.getTime(); + long untilDay = 23459 - time; - long perSkip = 200 + (100000 / -untilDay); - perSkip = Math.clamp(perSkip, 20, 200); - perSkip = (long) (perSkip * sleepPercentage); + if (untilDay == 0) return; - world.setTime(world.getTime() + perSkip); + long perSkip = 200 + (100000 / -untilDay); + perSkip = Math.clamp(perSkip, 20, 200); + perSkip = (long) (perSkip * sleepPercentage); + + world.setTime(world.getTime() + perSkip); + } } }