50 lines
1.6 KiB
Java
50 lines
1.6 KiB
Java
/*
|
|
* Copyright (C) 2024 Minecon724
|
|
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
|
* in the project root for the full license text.
|
|
*/
|
|
|
|
package eu.m724.tweaks.sleep;
|
|
|
|
import org.bukkit.GameRule;
|
|
import org.bukkit.Server;
|
|
import org.bukkit.World;
|
|
import org.bukkit.plugin.Plugin;
|
|
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;
|
|
|
|
int onlinePlayers = (int) (server.getOnlinePlayers().size() / percentage); // TODO optimize remove size every tick maybe
|
|
|
|
double sleepPercentage = (double) playersSleeping / onlinePlayers;
|
|
|
|
// we want sleep to take 200 ticks which is 10 seconds assuming all palyres onilien
|
|
|
|
long time = world.getTime();
|
|
long untilDay = 23459 - time;
|
|
|
|
if (untilDay == 0) return;
|
|
|
|
long perSkip = 200 + (100000 / -untilDay);
|
|
perSkip = Math.clamp(perSkip, 20, 200);
|
|
perSkip = (long) (perSkip * sleepPercentage);
|
|
|
|
world.setTime(world.getTime() + perSkip);
|
|
}
|
|
}
|