diff --git a/SpigotCore_Main/src/de/steamwar/core/CheckpointUtils.java b/SpigotCore_Main/src/de/steamwar/core/CheckpointUtils.java index 13feea8..44deb79 100644 --- a/SpigotCore_Main/src/de/steamwar/core/CheckpointUtils.java +++ b/SpigotCore_Main/src/de/steamwar/core/CheckpointUtils.java @@ -58,7 +58,7 @@ public class CheckpointUtils { Bukkit.getOnlinePlayers().forEach(player -> player.kickPlayer(null)); List networkManagers = TinyProtocol.networkManagers.get(TinyProtocol.getServerConnection(Core.getInstance())); - if(!networkManagers.isEmpty()) { + if(!Bukkit.getOnlinePlayers().isEmpty() || !networkManagers.isEmpty()) { Core.getInstance().getLogger().log(Level.INFO, "Waiting for players to disconnect for checkpointing"); Bukkit.getScheduler().runTaskLater(Core.getInstance(), CheckpointUtils::freeze, 1); return; diff --git a/SpigotCore_Main/src/de/steamwar/core/CrashDetector.java b/SpigotCore_Main/src/de/steamwar/core/CrashDetector.java index 26a12f0..0c4c9ec 100644 --- a/SpigotCore_Main/src/de/steamwar/core/CrashDetector.java +++ b/SpigotCore_Main/src/de/steamwar/core/CrashDetector.java @@ -29,7 +29,7 @@ import java.util.stream.Collectors; public class CrashDetector { - private static final long TIMEOUT = 20000; + private static final long TIMEOUT = 20_000_000_000L; private final AtomicLong lastTick = new AtomicLong(Long.MAX_VALUE); private final AtomicLong lastMessage = new AtomicLong(Long.MAX_VALUE); private final Thread mainThread = Thread.currentThread(); @@ -39,8 +39,8 @@ public class CrashDetector { public CrashDetector () { Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { - lastTick.set(System.currentTimeMillis()); - lastMessage.set(System.currentTimeMillis()); + lastTick.set(System.nanoTime()); + lastMessage.set(System.nanoTime()); }, 0, 1); watchdog = new Thread(this::run, "SteamWar Watchdog"); watchdog.setDaemon(true); @@ -59,7 +59,7 @@ public class CrashDetector { private void run() { SWException.init(); while (run) { - long curTime = System.currentTimeMillis(); + long curTime = System.nanoTime(); if(curTime - 4*TIMEOUT >= lastTick.get()) { SWException.log("Server did not recover in " + (curTime - lastTick.get()) + "ms, unclean server stop", ""); hardStop();