diff --git a/src/main/java/net/pietru/cookie_utils/CookieUtils.java b/src/main/java/net/pietru/cookie_utils/CookieUtils.java index 18c391a..ab1bf48 100644 --- a/src/main/java/net/pietru/cookie_utils/CookieUtils.java +++ b/src/main/java/net/pietru/cookie_utils/CookieUtils.java @@ -2,8 +2,13 @@ package net.pietru.cookie_utils; import dev.crmodders.cosmicquilt.api.entrypoint.ModInitializer; import finalforeach.cosmicreach.GameSingletons; +import finalforeach.cosmicreach.Threads; +import finalforeach.cosmicreach.networking.netty.NettyServer; +import finalforeach.cosmicreach.networking.packets.MessagePacket; +import finalforeach.cosmicreach.networking.server.ServerSingletons; import net.pietru.cookie_utils.api.Region; import net.pietru.cookie_utils.kits.Kits; +import net.pietru.cookie_utils.npcs.NpcDef; import net.pietru.cookie_utils.permissions.Permissions; import net.pietru.cookie_utils.scripting.ScriptsDB; import net.pietru.cookie_utils.setups.setupCreator; @@ -12,6 +17,7 @@ import org.quiltmc.loader.api.ModContainer; import java.io.IOException; import java.util.Timer; +import java.util.TimerTask; public class CookieUtils implements ModInitializer { public static final String MOD_ID = "cookie_utils"; @@ -48,6 +54,39 @@ public class CookieUtils implements ModInitializer { System.out.println("CookieUtils loaded kits..."); GameSingletons.updateObservers.add(new CookieUtilsLogicRunner()); + + if (prop.auto_restart){ + int[] minutes = {1,5,10,15,30}; + int[] seconds = {1,2,3,4,5,6,7,8,9,10,15,30}; + delayer.schedule(new TimerTask() { + @Override + public void run() { + Threads.runOnMainThread(()->{ + ServerSingletons.SERVER.stop(); + }); + } + }, 1000L*60*60*prop.restart_hours_delay); + for (int i : minutes){ + delayer.schedule(new TimerTask() { + @Override + public void run() { + MessagePacket packet = new MessagePacket("[SERVER] Automatic restart in %d minutes...".formatted(i)); + ServerSingletons.SERVER.broadcastToAll(packet); + } + }, ((1000L*60*60*prop.restart_hours_delay)-(1000L*60*i))); + } + for (int i : seconds){ + delayer.schedule(new TimerTask() { + @Override + public void run() { + try { + MessagePacket packet = new MessagePacket("[SERVER] Automatic restart in %d seconds...".formatted(i)); + ServerSingletons.SERVER.broadcastToAll(packet); + } catch (Exception ignored) {} + } + }, ((1000L*60*60*prop.restart_hours_delay)-(1000L*i))); + } + } } } diff --git a/src/main/java/net/pietru/cookie_utils/utils/prop.java b/src/main/java/net/pietru/cookie_utils/utils/prop.java index d770f50..32271fd 100644 --- a/src/main/java/net/pietru/cookie_utils/utils/prop.java +++ b/src/main/java/net/pietru/cookie_utils/utils/prop.java @@ -17,6 +17,8 @@ public class prop { public static Properties panel_prop; public static int log_level = 1; public static boolean load_npcs = false; + public static boolean auto_restart = false; + public static int restart_hours_delay = 8; public static ArrayList get_server_property_array(String key, Object defaultValue) throws IOException { String txt = (String) get_server_property(key,defaultValue); @@ -65,7 +67,16 @@ public class prop { if (!panel_prop.containsKey("npc_load_on_start")){ panel_prop.put("npc_load_on_start","false"); save=true;} - load_npcs = Boolean.parseBoolean((String) panel_prop.getOrDefault("log_level","false")); + load_npcs = Boolean.parseBoolean((String) panel_prop.getOrDefault("npc_load_on_start","false")); + + + if (!panel_prop.containsKey("auto_restart_hours_delay")){ + panel_prop.put("auto_restart_hours_delay","8"); save=true;} + restart_hours_delay = Integer.parseInt((String) panel_prop.getOrDefault("auto_restart_hours_delay","8")); + restart_hours_delay = Math.max(1,restart_hours_delay); + if (!panel_prop.containsKey("auto_restart_enabled")){ + panel_prop.put("auto_restart_enabled","true"); save=true;} + auto_restart = Boolean.parseBoolean((String) panel_prop.getOrDefault("auto_restart_enabled","true")); /*