Add proper scheduled restart here & fixes
This commit is contained in:
parent
58fcd4c145
commit
8815877bea
4 changed files with 44 additions and 4 deletions
|
@ -4,6 +4,7 @@ import buttondevteam.core.MainPlugin;
|
||||||
import buttondevteam.core.component.channel.Channel;
|
import buttondevteam.core.component.channel.Channel;
|
||||||
import buttondevteam.lib.TBMCSystemChatEvent;
|
import buttondevteam.lib.TBMCSystemChatEvent;
|
||||||
import buttondevteam.lib.architecture.Component;
|
import buttondevteam.lib.architecture.Component;
|
||||||
|
import buttondevteam.lib.architecture.ConfigData;
|
||||||
import buttondevteam.lib.chat.IFakePlayer;
|
import buttondevteam.lib.chat.IFakePlayer;
|
||||||
import buttondevteam.lib.chat.TBMCChatAPI;
|
import buttondevteam.lib.chat.TBMCChatAPI;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
@ -13,16 +14,28 @@ import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides commands such as /schrestart (restart after a countdown) and /primerestart (restart when nobody is online)
|
* Provides commands such as /schrestart (restart after a countdown) and /primerestart (restart when nobody is online)
|
||||||
*/
|
*/
|
||||||
public class RestartComponent extends Component<MainPlugin> implements Listener {
|
public class RestartComponent extends Component<MainPlugin> implements Listener {
|
||||||
@Override
|
@Override
|
||||||
public void enable() {
|
public void enable() {
|
||||||
registerCommand(new ScheduledRestartCommand(this));
|
var scheduledRestartCommand = new ScheduledRestartCommand(this);
|
||||||
|
registerCommand(scheduledRestartCommand);
|
||||||
registerCommand(new PrimeRestartCommand(this));
|
registerCommand(new PrimeRestartCommand(this));
|
||||||
registerListener(this);
|
registerListener(this);
|
||||||
restartBroadcast = TBMCSystemChatEvent.BroadcastTarget.add("restartCountdown");
|
restartBroadcast = TBMCSystemChatEvent.BroadcastTarget.add("restartCountdown");
|
||||||
|
|
||||||
|
int restartAt = restartAt().get();
|
||||||
|
if (restartAt < 0) return;
|
||||||
|
int restart = syncStart(restartAt);
|
||||||
|
log("Scheduled restart " + (restart / 3600. / 20.) + " hours from now");
|
||||||
|
Bukkit.getScheduler().runTaskLater(getPlugin(), () -> scheduledRestartCommand.def(Bukkit.getConsoleSender(), 0), restart);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -30,10 +43,36 @@ public class RestartComponent extends Component<MainPlugin> implements Listener
|
||||||
TBMCSystemChatEvent.BroadcastTarget.remove(restartBroadcast);
|
TBMCSystemChatEvent.BroadcastTarget.remove(restartBroadcast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the hour of day when the server should be restarted. Set to -1 to disable.
|
||||||
|
*/
|
||||||
|
private ConfigData<Integer> restartAt() {
|
||||||
|
return getConfig().getData("restartAt", 12);
|
||||||
|
}
|
||||||
|
|
||||||
private long lasttime = 0;
|
private long lasttime = 0;
|
||||||
@Getter
|
@Getter
|
||||||
private TBMCSystemChatEvent.BroadcastTarget restartBroadcast;
|
private TBMCSystemChatEvent.BroadcastTarget restartBroadcast;
|
||||||
|
|
||||||
|
private int syncStart(int hour) {
|
||||||
|
var now = ZonedDateTime.now(ZoneId.ofOffset("", ZoneOffset.UTC));
|
||||||
|
int secs = now.getHour() * 3600 + now.getMinute() * 60 + now.getSecond();
|
||||||
|
//System.out.println("now: " + secs / 3600.);
|
||||||
|
int diff = secs - hour * 3600;
|
||||||
|
//System.out.println("diff: " + diff / 3600.);
|
||||||
|
if (diff < 0) {
|
||||||
|
diff += 24 * 3600;
|
||||||
|
}
|
||||||
|
//System.out.println("diff: " + diff / 3600.);
|
||||||
|
int count = diff / (24 * 3600);
|
||||||
|
//System.out.println("count: " + count);
|
||||||
|
int intervalPart = diff - count * 24 * 3600;
|
||||||
|
//System.out.println("intervalPart: " + intervalPart / 3600.);
|
||||||
|
int remaining = 24 * 3600 - intervalPart;
|
||||||
|
//System.out.println("remaining: " + remaining / 3600.);
|
||||||
|
return remaining * 20;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerLeave(PlayerQuitEvent event) {
|
public void onPlayerLeave(PlayerQuitEvent event) {
|
||||||
if (PrimeRestartCommand.isPlsrestart()
|
if (PrimeRestartCommand.isPlsrestart()
|
||||||
|
|
|
@ -143,6 +143,7 @@ public abstract class Component<TP extends JavaPlugin> {
|
||||||
Throwable t = ex;
|
Throwable t = ex;
|
||||||
for (var th = t; th != null; th = th.getCause())
|
for (var th = t; th != null; th = th.getCause())
|
||||||
t = th; //Set if not null
|
t = th; //Set if not null
|
||||||
|
if (t != e)
|
||||||
t.initCause(e);
|
t.initCause(e);
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,7 +198,7 @@ public class Command2MC extends Command2<ICommand2MC, Command2MCSender> implemen
|
||||||
private boolean shouldRegisterOfficially = true;
|
private boolean shouldRegisterOfficially = true;
|
||||||
|
|
||||||
private void registerOfficially(ICommand2MC command, List<SubcommandData<ICommand2MC>> subcmds) {
|
private void registerOfficially(ICommand2MC command, List<SubcommandData<ICommand2MC>> subcmds) {
|
||||||
if (!shouldRegisterOfficially) return;
|
if (!shouldRegisterOfficially || command.getPlugin() == null) return;
|
||||||
try {
|
try {
|
||||||
var cmdmap = (SimpleCommandMap) Bukkit.getServer().getClass().getMethod("getCommandMap").invoke(Bukkit.getServer());
|
var cmdmap = (SimpleCommandMap) Bukkit.getServer().getClass().getMethod("getCommandMap").invoke(Bukkit.getServer());
|
||||||
var path = command.getCommandPath();
|
var path = command.getCommandPath();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: ChromaCore
|
name: ChromaCore
|
||||||
main: buttondevteam.core.MainPlugin
|
main: buttondevteam.core.MainPlugin
|
||||||
version: 1.0
|
version: '1.0'
|
||||||
author: NorbiPeti
|
author: NorbiPeti
|
||||||
commands:
|
commands:
|
||||||
updateplugin:
|
updateplugin:
|
||||||
|
|
Loading…
Reference in a new issue