From 8a5c3b164788b575bf12edd2a0cfdde31c51181d Mon Sep 17 00:00:00 2001 From: yoyosource Date: Thu, 15 Jun 2023 22:49:38 +0200 Subject: [PATCH] Add unlimited TPS and better AFKStopperListener Signed-off-by: yoyosource --- .../features/tpslimit/TPSLimitCommand.java | 16 ++++-- .../features/tpslimit/TPSLimitUtils.java | 4 +- .../features/tpslimit/TPSWarpUtils.java | 3 +- .../features/world/AFKStopperListener.java | 50 +++++++++++++------ 4 files changed, 51 insertions(+), 22 deletions(-) diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitCommand.java index 778b6f82..20259a4c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitCommand.java @@ -31,20 +31,28 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; @Linked public class TPSLimitCommand extends SWCommand implements Enable { - private final List tabCompletions = new ArrayList<>(Arrays.asList("0,5", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20")); + private final List tabCompletions = new ArrayList<>(); + + static final int MAX_TPS = Integer.MAX_VALUE; public TPSLimitCommand() { super("tpslimit"); + tabCompletions.add("0,5"); + for (int i = 0; i <= 20; i++) { + tabCompletions.add(i + ""); + } if (TPSWarpUtils.isWarpAllowed()) { for (int i = 20; i <= 60; i += 5) { tabCompletions.add(i + ""); } + for (int i = 60; i <= 240; i += 10) { + tabCompletions.add(i + ""); + } } if (FreezeUtils.freezeEnabled) { tabCompletions.add("0"); @@ -79,7 +87,7 @@ public class TPSLimitCommand extends SWCommand implements Enable { sendNewTPSLimitMessage(true); return; } - if (tpsLimitDouble < 0.5 || tpsLimitDouble > (TPSWarpUtils.isWarpAllowed() ? 60 : 20)) { + if (tpsLimitDouble < 0.5 || tpsLimitDouble > (TPSWarpUtils.isWarpAllowed() ? MAX_TPS : 20)) { sendInvalidArgumentMessage(p); return; } @@ -121,6 +129,6 @@ public class TPSLimitCommand extends SWCommand implements Enable { } private void sendInvalidArgumentMessage(Player player) { - BauSystem.MESSAGE.send("TPSLIMIT_INVALID", player, TPSWarpUtils.isWarpAllowed() ? 60 : 20, FreezeUtils.freezeEnabled ? BauSystem.MESSAGE.parse("TPSLIMIT_INVALID_FROZEN", player) : ""); + BauSystem.MESSAGE.send("TPSLIMIT_INVALID", player, TPSWarpUtils.isWarpAllowed() ? MAX_TPS : 20, FreezeUtils.freezeEnabled ? BauSystem.MESSAGE.parse("TPSLIMIT_INVALID_FROZEN", player) : ""); } } \ No newline at end of file diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitUtils.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitUtils.java index abb28103..6e333f03 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitUtils.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitUtils.java @@ -32,6 +32,8 @@ import org.bukkit.scheduler.BukkitTask; import java.util.function.BiFunction; +import static de.steamwar.bausystem.features.tpslimit.TPSLimitCommand.MAX_TPS; + @UtilityClass public class TPSLimitUtils { @@ -88,7 +90,7 @@ public class TPSLimitUtils { @SuppressWarnings("unused") public static void setTPS(double d) { if (d < 0.5) d = 0.5; - if (d > (TPSWarpUtils.isWarpAllowed() ? 60 : 20)) d = (TPSWarpUtils.isWarpAllowed() ? 60 : 20); + if (d > (TPSWarpUtils.isWarpAllowed() ? MAX_TPS : 20)) d = (TPSWarpUtils.isWarpAllowed() ? MAX_TPS : 20); currentTPSLimit = d; tpsLimiter(); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSWarpUtils.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSWarpUtils.java index b6f4fa9a..d268ccf6 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSWarpUtils.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSWarpUtils.java @@ -40,7 +40,8 @@ public class TPSWarpUtils { public static void setTPS(double tps) { double d = 50 - (50 / (tps / 20.0)); - nanoDOffset = Math.max(0, Math.min((long) (d * 1000000), 375000000)); + // nanoDOffset = Math.max(0, Math.min((long) (d * 1000000), 375000000)); + nanoDOffset = (long) (d * 1000000); if (nanoDOffset == 0) { if (bukkitTask == null) return; bukkitTask.cancel(); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/world/AFKStopperListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/world/AFKStopperListener.java index 426d26bc..799ccba8 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/world/AFKStopperListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/world/AFKStopperListener.java @@ -30,30 +30,48 @@ import org.bukkit.event.player.PlayerMoveEvent; @Linked public class AFKStopperListener implements Listener { + // CPU > 50% + // RAM > 60% + private int minutesAfk = 0; public AFKStopperListener() { - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - switch (minutesAfk) { - case 5: - if (Bukkit.getOnlinePlayers().isEmpty()) { - Bukkit.shutdown(); - return; - } - for (Player p : Bukkit.getOnlinePlayers()) { - p.kickPlayer(BauSystem.MESSAGE.parse("AFK_KICK_MESSAGE", p)); - } - break; - case 4: - BauSystem.MESSAGE.broadcast("AFK_WARNING_MESSAGE"); - default: - minutesAfk++; + Bukkit.getScheduler().runTaskTimerAsynchronously(BauSystem.getInstance(), () -> { + double load = RamUsage.getLoad(); + double usage = RamUsage.getUsage(); + // System.out.println("CPU: " + load + " RAM: " + usage); + if (load < 50.0 && usage < 0.6) { + minutesAfk = 0; + return; } + Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { + switch (minutesAfk) { + case 5: + if (Bukkit.getOnlinePlayers().isEmpty()) { + Bukkit.shutdown(); + return; + } + for (Player p : Bukkit.getOnlinePlayers()) { + p.kickPlayer(BauSystem.MESSAGE.parse("AFK_KICK_MESSAGE", p)); + } + break; + case 4: + BauSystem.MESSAGE.broadcast("AFK_WARNING_MESSAGE"); + default: + minutesAfk++; + } + }, 1); }, 1200, 1200); //every minute } @EventHandler public void onPlayerMove(PlayerMoveEvent event) { - minutesAfk = 0; + if (event.getTo() == null) return; + if (event.getFrom().getPitch() != event.getTo().getPitch()) { + minutesAfk = 0; + } + if (event.getFrom().getYaw() != event.getTo().getYaw()) { + minutesAfk = 0; + } } }