From 8815877bea9bc5c6b003b0374d79c37690e2ea46 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 25 Jul 2020 20:27:56 +0200 Subject: [PATCH] Add proper scheduled restart here & fixes --- .../component/restart/RestartComponent.java | 41 ++++++++++++++++++- .../lib/architecture/Component.java | 3 +- .../buttondevteam/lib/chat/Command2MC.java | 2 +- Chroma-Core/src/main/resources/plugin.yml | 2 +- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/Chroma-Core/src/main/java/buttondevteam/core/component/restart/RestartComponent.java b/Chroma-Core/src/main/java/buttondevteam/core/component/restart/RestartComponent.java index 99fa663..1333955 100644 --- a/Chroma-Core/src/main/java/buttondevteam/core/component/restart/RestartComponent.java +++ b/Chroma-Core/src/main/java/buttondevteam/core/component/restart/RestartComponent.java @@ -4,6 +4,7 @@ import buttondevteam.core.MainPlugin; import buttondevteam.core.component.channel.Channel; import buttondevteam.lib.TBMCSystemChatEvent; import buttondevteam.lib.architecture.Component; +import buttondevteam.lib.architecture.ConfigData; import buttondevteam.lib.chat.IFakePlayer; import buttondevteam.lib.chat.TBMCChatAPI; import lombok.Getter; @@ -13,16 +14,28 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; 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) */ public class RestartComponent extends Component implements Listener { @Override public void enable() { - registerCommand(new ScheduledRestartCommand(this)); + var scheduledRestartCommand = new ScheduledRestartCommand(this); + registerCommand(scheduledRestartCommand); registerCommand(new PrimeRestartCommand(this)); registerListener(this); 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 @@ -30,10 +43,36 @@ public class RestartComponent extends Component implements Listener TBMCSystemChatEvent.BroadcastTarget.remove(restartBroadcast); } + /** + * Specifies the hour of day when the server should be restarted. Set to -1 to disable. + */ + private ConfigData restartAt() { + return getConfig().getData("restartAt", 12); + } + private long lasttime = 0; @Getter 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 public void onPlayerLeave(PlayerQuitEvent event) { if (PrimeRestartCommand.isPlsrestart() diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/Component.java b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/Component.java index 757e9fd..fa77d78 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/Component.java +++ b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/Component.java @@ -143,7 +143,8 @@ public abstract class Component { Throwable t = ex; for (var th = t; th != null; th = th.getCause()) t = th; //Set if not null - t.initCause(e); + if (t != e) + t.initCause(e); throw ex; } } diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java b/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java index 49875db..03be4bc 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java +++ b/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java @@ -198,7 +198,7 @@ public class Command2MC extends Command2 implemen private boolean shouldRegisterOfficially = true; private void registerOfficially(ICommand2MC command, List> subcmds) { - if (!shouldRegisterOfficially) return; + if (!shouldRegisterOfficially || command.getPlugin() == null) return; try { var cmdmap = (SimpleCommandMap) Bukkit.getServer().getClass().getMethod("getCommandMap").invoke(Bukkit.getServer()); var path = command.getCommandPath(); diff --git a/Chroma-Core/src/main/resources/plugin.yml b/Chroma-Core/src/main/resources/plugin.yml index 3298819..94e61ef 100755 --- a/Chroma-Core/src/main/resources/plugin.yml +++ b/Chroma-Core/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: ChromaCore main: buttondevteam.core.MainPlugin -version: 1.0 +version: '1.0' author: NorbiPeti commands: updateplugin: