diff --git a/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/TickManager15.java b/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/TickManager15.java
new file mode 100644
index 00000000..a888e4de
--- /dev/null
+++ b/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/TickManager15.java
@@ -0,0 +1,140 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2020 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.bausystem.utils;
+
+import de.steamwar.bausystem.region.GlobalRegion;
+import de.steamwar.bausystem.utils.bossbar.BossBarService;
+import de.steamwar.bausystem.utils.tps.TPSFreezeUtils;
+import de.steamwar.bausystem.utils.tps.TPSLimitUtils;
+import de.steamwar.core.TPSWarpUtils;
+import org.bukkit.Bukkit;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+
+public class TickManager15 implements TickManager, Listener {
+
+ private static float currentTPSLimit = 20;
+ private boolean currentlyStepping = false;
+ private float currentLimit;
+ private int stepsTotal;
+ private int stepsLeft;
+
+ @Override
+ public boolean canFreeze() {
+ return TPSFreezeUtils.isCanFreeze();
+ }
+
+ @Override
+ public void setTickRate(float tickRate) {
+ if (currentlyStepping) {
+ currentlyStepping = false;
+ Bukkit.getOnlinePlayers().forEach(player -> {
+ BossBarService.instance.remove(player, GlobalRegion.getInstance(), "TickStep");
+ });
+ }
+ TPSWarpUtils.warp(tickRate);
+ if (currentTPSLimit == 0 && tickRate != 0) {
+ TPSFreezeUtils.unfreeze();
+ }
+ currentTPSLimit = tickRate;
+ if (tickRate == 0) {
+ TPSLimitUtils.unlimit();
+ TPSFreezeUtils.freeze();
+ } else if (tickRate < 20.0) {
+ TPSLimitUtils.limit(tickRate);
+ } else if (tickRate >= 20) {
+ TPSLimitUtils.unlimit();
+ }
+ }
+
+ @Override
+ public boolean isFrozen() {
+ return TPSFreezeUtils.frozen();
+ }
+
+ @Override
+ public void setFreeze(boolean freeze) {
+ if (freeze) {
+ setTickRate(0);
+ }
+ }
+
+ @Override
+ public void stepTicks(int ticks) {
+ currentLimit = 0;
+ setTickRate(20);
+ stepsLeft = ticks;
+ stepsTotal = ticks;
+ currentlyStepping = true;
+ }
+
+ @Override
+ public void sprintTicks(int ticks) {
+ currentLimit = currentTPSLimit;
+ setTickRate(4000);
+ stepsLeft = ticks;
+ stepsTotal = ticks;
+ currentlyStepping = true;
+ }
+
+ @Override
+ public boolean isSprinting() {
+ return currentlyStepping && currentTPSLimit > 20;
+ }
+
+ @Override
+ public boolean isStepping() {
+ return currentlyStepping && currentTPSLimit <= 20;
+ }
+
+ @Override
+ public float getTickRate() {
+ return currentTPSLimit;
+ }
+
+ @Override
+ public void blockTpsPacket(boolean block) {
+
+ }
+
+ @Override
+ public long getTotalTicks() {
+ return stepsTotal;
+ }
+
+ @Override
+ public long getDoneTicks() {
+ return stepsTotal - stepsLeft;
+ }
+
+ @Override
+ public long getRemainingTicks() {
+ return stepsLeft;
+ }
+
+ @EventHandler
+ public void onTickEnd(TickEndEvent event) {
+ if (!currentlyStepping) return;
+ stepsLeft--;
+ if (stepsLeft <= 0) {
+ setTickRate(currentLimit);
+ }
+ }
+}
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/PacketCache.java b/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/PacketCache.java
similarity index 83%
rename from BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/PacketCache.java
rename to BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/PacketCache.java
index a53bd819..63308284 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/PacketCache.java
+++ b/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/PacketCache.java
@@ -1,23 +1,23 @@
/*
- * This file is a part of the SteamWar software.
+ * This file is a part of the SteamWar software.
*
- * Copyright (C) 2023 SteamWar.de-Serverteam
+ * Copyright (C) 2020 SteamWar.de-Serverteam
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
*/
-package de.steamwar.bausystem.features.tpslimit;
+package de.steamwar.bausystem.utils.tps;
import de.steamwar.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol;
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSFreezeUtils.java b/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/TPSFreezeUtils.java
similarity index 65%
rename from BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSFreezeUtils.java
rename to BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/TPSFreezeUtils.java
index cb79f6fb..bed7f7e6 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSFreezeUtils.java
+++ b/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/TPSFreezeUtils.java
@@ -1,23 +1,23 @@
/*
- * This file is a part of the SteamWar software.
+ * This file is a part of the SteamWar software.
*
- * Copyright (C) 2023 SteamWar.de-Serverteam
+ * Copyright (C) 2020 SteamWar.de-Serverteam
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
*/
-package de.steamwar.bausystem.features.tpslimit;
+package de.steamwar.bausystem.utils.tps;
import de.steamwar.Reflection;
import lombok.Getter;
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitUtils.java b/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/TPSLimitUtils.java
similarity index 98%
rename from BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitUtils.java
rename to BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/TPSLimitUtils.java
index 29068ace..8b58b00a 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSLimitUtils.java
+++ b/BauSystem/BauSystem_15/src/de/steamwar/bausystem/utils/tps/TPSLimitUtils.java
@@ -17,7 +17,7 @@
* along with this program. If not, see .
*/
-package de.steamwar.bausystem.features.tpslimit;
+package de.steamwar.bausystem.utils.tps;
import de.steamwar.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol;
diff --git a/BauSystem/BauSystem_19/src/de/steamwar/bausystem/utils/TickListener19.java b/BauSystem/BauSystem_19/src/de/steamwar/bausystem/utils/TickListener19.java
index 5191b38b..211c004b 100644
--- a/BauSystem/BauSystem_19/src/de/steamwar/bausystem/utils/TickListener19.java
+++ b/BauSystem/BauSystem_19/src/de/steamwar/bausystem/utils/TickListener19.java
@@ -22,7 +22,6 @@ package de.steamwar.bausystem.utils;
import com.destroystokyo.paper.event.server.ServerTickEndEvent;
import com.destroystokyo.paper.event.server.ServerTickStartEvent;
import de.steamwar.bausystem.BauSystem;
-import de.steamwar.bausystem.features.tpslimit.TPSFreezeUtils;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -37,7 +36,7 @@ public class TickListener19 implements TickListener, Listener {
@EventHandler
public void onServerTickStart(ServerTickStartEvent event) {
- if (TPSFreezeUtils.isFrozen()) return;
+ if (TickManager.impl.isFrozen()) return;
Bukkit.getPluginManager().callEvent(new TickStartEvent());
tickStartRan = true;
}
diff --git a/BauSystem/BauSystem_21/src/de/steamwar/bausystem/utils/NativeTickManager21.java b/BauSystem/BauSystem_21/src/de/steamwar/bausystem/utils/TickManager21.java
similarity index 67%
rename from BauSystem/BauSystem_21/src/de/steamwar/bausystem/utils/NativeTickManager21.java
rename to BauSystem/BauSystem_21/src/de/steamwar/bausystem/utils/TickManager21.java
index 728870a9..fe60c8c4 100644
--- a/BauSystem/BauSystem_21/src/de/steamwar/bausystem/utils/NativeTickManager21.java
+++ b/BauSystem/BauSystem_21/src/de/steamwar/bausystem/utils/TickManager21.java
@@ -20,18 +20,23 @@
package de.steamwar.bausystem.utils;
import com.comphenix.tinyprotocol.TinyProtocol;
+import de.steamwar.Reflection;
import net.minecraft.network.protocol.game.ClientboundTickingStatePacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ServerTickRateManager;
+import net.minecraft.world.TickRateManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
-public class NativeTickManager21 implements NativeTickManager {
+public class TickManager21 implements TickManager {
private static final ServerTickRateManager manager = MinecraftServer.getServer().tickRateManager();
+ private static final Reflection.Field frozenTicksToRun = Reflection.getField(TickRateManager.class, int.class, 0);
+ private static final Reflection.Field remainingSprintTicks = Reflection.getField(ServerTickRateManager.class, long.class, 0);
private boolean blockTpsPacket = true;
+ private int totalSteps;
- public NativeTickManager21() {
+ public TickManager21() {
TinyProtocol.instance.addFilter(ClientboundTickingStatePacket.class, this::blockPacket);
}
@@ -43,6 +48,11 @@ public class NativeTickManager21 implements NativeTickManager {
}
}
+ @Override
+ public boolean canFreeze() {
+ return true;
+ }
+
@Override
public void blockTpsPacket(boolean block) {
blockTpsPacket = block;
@@ -57,14 +67,14 @@ public class NativeTickManager21 implements NativeTickManager {
@Override
public void setTickRate(float tickRate) {
- if (getFreezeState()) {
+ if (isFrozen()) {
setFreeze(false);
}
manager.setTickRate(tickRate);
}
@Override
- public boolean getFreezeState() {
+ public boolean isFrozen() {
return manager.isFrozen();
}
@@ -74,12 +84,20 @@ public class NativeTickManager21 implements NativeTickManager {
}
@Override
- public void stepTick(int ticks) {
+ public void stepTicks(int ticks) {
+ if (manager.isSprinting()) {
+ manager.stopSprinting();
+ }
+ this.totalSteps = ticks;
manager.stepGameIfPaused(ticks);
}
@Override
public void sprintTicks(int ticks) {
+ if (manager.isSteppingForward()) {
+ manager.stopStepping();
+ }
+ this.totalSteps = ticks;
manager.requestGameToSprint(ticks, true);
}
@@ -89,7 +107,31 @@ public class NativeTickManager21 implements NativeTickManager {
}
@Override
- public float tickrate() {
+ public boolean isStepping() {
+ return manager.isSteppingForward();
+ }
+
+ @Override
+ public float getTickRate() {
return manager.tickrate();
}
+
+ @Override
+ public long getRemainingTicks() {
+ if (isSprinting()) {
+ return remainingSprintTicks.get(manager);
+ } else {
+ return frozenTicksToRun.get(manager);
+ }
+ }
+
+ @Override
+ public long getDoneTicks() {
+ return totalSteps - getRemainingTicks();
+ }
+
+ @Override
+ public long getTotalTicks() {
+ return totalSteps;
+ }
}
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
index 8376f0f1..1d47beb8 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
+++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
@@ -19,7 +19,6 @@
package de.steamwar.bausystem;
-import de.steamwar.core.WorldEditRendererCUIEditor;
import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.configplayer.ConfigConverter;
@@ -29,7 +28,6 @@ import de.steamwar.bausystem.features.script.lua.libs.LuaLib;
import de.steamwar.bausystem.features.slaves.laufbau.BoundingBoxLoader;
import de.steamwar.bausystem.features.slaves.panzern.Panzern;
import de.steamwar.bausystem.features.slaves.panzern.PanzernAlgorithm;
-import de.steamwar.bausystem.features.tpslimit.TPSFreezeUtils;
import de.steamwar.bausystem.features.tracer.TraceManager;
import de.steamwar.bausystem.features.tracer.TraceRecorder;
import de.steamwar.bausystem.features.world.BauScoreboard;
@@ -39,11 +37,13 @@ import de.steamwar.bausystem.region.loader.RegionLoader;
import de.steamwar.bausystem.region.loader.Updater;
import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.bausystem.utils.TickListener;
+import de.steamwar.bausystem.utils.TickManager;
import de.steamwar.bausystem.worlddata.WorldData;
import de.steamwar.command.AbstractValidator;
import de.steamwar.command.SWCommand;
import de.steamwar.command.SWCommandUtils;
import de.steamwar.core.Core;
+import de.steamwar.core.WorldEditRendererCUIEditor;
import de.steamwar.linkage.LinkedInstance;
import de.steamwar.linkage.MaxVersion;
import de.steamwar.linkage.MinVersion;
@@ -266,7 +266,7 @@ public class BauSystem extends JavaPlugin {
@Override
public void run() {
- if (TPSFreezeUtils.isFrozen()) return;
+ if (TickManager.impl.isFrozen()) return;
if (counter >= delay) {
runnable.run();
cancel();
@@ -284,7 +284,7 @@ public class BauSystem extends JavaPlugin {
@Override
public void run() {
- if (TPSFreezeUtils.isFrozen()) return;
+ if (TickManager.impl.isFrozen()) return;
if (counter >= (first ? delay : period)) {
first = false;
runnable.run();
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/TpsLib.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/TpsLib.java
index 6b9435e1..44d9a378 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/TpsLib.java
+++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/TpsLib.java
@@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.script.lua.libs;
import de.steamwar.bausystem.features.tpslimit.TPSSystem;
+import de.steamwar.bausystem.utils.TickManager;
import de.steamwar.core.TPSWatcher;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance;
@@ -51,7 +52,7 @@ public class TpsLib implements LuaLib {
tpsLib.set("fiveMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.FIVE_MINUTES)));
tpsLib.set("tenMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.TEN_MINUTES)));
tpsLib.set("current", getter(TPSWatcher::getTPS));
- tpsLib.set("limit", getter(TPSSystem::getCurrentTPSLimit));
+ tpsLib.set("limit", getter(() -> (double) TickManager.impl.getTickRate()));
return tpsLib;
}
}
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSCommand.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSCommand.java
index c1d09c63..f3f4cc62 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSCommand.java
+++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSCommand.java
@@ -1,20 +1,20 @@
/*
- * This file is a part of the SteamWar software.
+ * This file is a part of the SteamWar software.
*
- * Copyright (C) 2023 SteamWar.de-Serverteam
+ * Copyright (C) 2020 SteamWar.de-Serverteam
*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
*
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
*/
package de.steamwar.bausystem.features.tpslimit;
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSSystem.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSSystem.java
index 46dc7257..f87c21b3 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSSystem.java
+++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSSystem.java
@@ -25,23 +25,19 @@ import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.bausystem.region.GlobalRegion;
import de.steamwar.bausystem.region.Region;
-import de.steamwar.bausystem.utils.NativeTickManager;
import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.bausystem.utils.TickEndEvent;
+import de.steamwar.bausystem.utils.TickManager;
import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar;
import de.steamwar.bausystem.utils.bossbar.BossBarService;
import de.steamwar.command.AbstractSWCommand;
import de.steamwar.command.SWCommand;
import de.steamwar.core.Core;
-import de.steamwar.core.TPSWarpUtils;
import de.steamwar.core.TPSWatcher;
import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance;
-import de.steamwar.linkage.MaxVersion;
-import lombok.Getter;
-import lombok.Setter;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.boss.BarColor;
@@ -54,90 +50,61 @@ import org.bukkit.inventory.ItemStack;
import java.util.Arrays;
@Linked
-@MaxVersion(20)
public class TPSSystem implements Listener {
- private static double currentTPSLimit = 20;
-
public TPSSystem() {
- if (TPSFreezeUtils.isCanFreeze()) {
+ if (TickManager.impl.canFreeze()) {
new TPSFreezeCommand();
new TickFreezeCommand();
new TickStepCommand();
}
new TPSLimitCommand();
new TickLimitCommand();
- if (Core.getVersion() >= 15 && Core.getVersion() <= 20) {
+ if (Core.getVersion() >= 15) {
new TPSWarpCommand();
new TickWarpCommand();
- if (TPSFreezeUtils.isCanFreeze()) {
+ if (TickManager.impl.canFreeze()) {
new TickWarpingCommand();
}
}
+ if (Core.getVersion() >= 21) {
+ new Tick21Command();
+ }
new TPSDefaultCommand();
new TickDefaultCommand();
new TPSBaseCommand();
new TickBaseCommand();
- }
-
- private void setTPS(double tps) {
- if (currentlyStepping) {
- currentlyStepping = false;
- Bukkit.getOnlinePlayers().forEach(player -> {
- BossBarService.instance.remove(player, GlobalRegion.getInstance(), "TickStep");
- });
- }
- TPSWarpUtils.warp(tps);
- if (currentTPSLimit == 0 && tps != 0) {
- TPSFreezeUtils.unfreeze();
- }
- currentTPSLimit = tps;
- if (tps == 0) {
- TPSLimitUtils.unlimit();
- TPSFreezeUtils.freeze();
- } else if (tps < 20.0) {
- TPSLimitUtils.limit(tps);
- } else if (tps >= 20) {
- TPSLimitUtils.unlimit();
- }
-
- Bukkit.getOnlinePlayers().forEach(player -> {
- if (currentTPSLimit == 0) {
- SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("TPSLIMIT_FROZEN", player));
- } else {
- SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("TPSLIMIT_SET", player, currentTPSLimit));
- }
- });
- }
-
- private boolean currentlyStepping = false;
- private double currentLimit;
- private int stepsTotal;
- private int stepsLeft;
-
- private void setSkip(int steps, double tpsLimitToUse) {
- currentLimit = tpsLimitToUse == 20 ? 0 : currentTPSLimit;
- setTPS(tpsLimitToUse);
- stepsLeft = steps;
- stepsTotal = steps;
- currentlyStepping = true;
+ Bukkit.getPluginManager().registerEvents(TickManager.impl, BauSystem.getInstance());
}
@EventHandler
public void onTickEnd(TickEndEvent event) {
- if (!currentlyStepping) return;
- if (stepsTotal > 1) {
+ bossbar();
+ }
+
+ private void bossbar() {
+ if ((TickManager.impl.isStepping() || TickManager.impl.isSprinting()) && TickManager.impl.getRemainingTicks() > 0) {
Bukkit.getOnlinePlayers().forEach(player -> {
BauSystemBossbar bossbar = BossBarService.instance.get(player, GlobalRegion.getInstance(), "TickStep");
bossbar.setColor(BarColor.YELLOW);
- bossbar.setTitle(BauSystem.MESSAGE.parse("TICK_BOSSBAR", player, (stepsTotal - stepsLeft), stepsTotal));
- bossbar.setProgress((stepsTotal - stepsLeft) / (double) stepsTotal);
+ bossbar.setTitle(BauSystem.MESSAGE.parse("TICK_BOSSBAR", player, TickManager.impl.getDoneTicks(), TickManager.impl.getTotalTicks()));
+ bossbar.setProgress(TickManager.impl.getDoneTicks() / (double) TickManager.impl.getTotalTicks());
+ });
+ } else {
+ Bukkit.getOnlinePlayers().forEach(player -> {
+ BossBarService.instance.remove(player, GlobalRegion.getInstance(), "TickStep");
});
}
- stepsLeft--;
- if (stepsLeft <= 0) {
- setTPS(currentLimit);
- }
+ }
+
+ public static void sendTickRateChange() {
+ Bukkit.getOnlinePlayers().forEach(player -> {
+ if (TickManager.impl.isFrozen()) {
+ SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("TPSLIMIT_FROZEN", player));
+ } else {
+ SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("TPSLIMIT_SET", player, TickManager.impl.getTickRate()));
+ }
+ });
}
private class TPSBaseCommand extends SWCommand {
@@ -158,7 +125,8 @@ public class TPSSystem implements Listener {
@Register(value = "0", description = "TPSLIMIT_FREEZE_HELP")
public void freeze(@Validator Player player) {
- setTPS(0);
+ TickManager.impl.setFreeze(true);
+ sendTickRateChange();
}
}
@@ -170,8 +138,9 @@ public class TPSSystem implements Listener {
}
@Register(description = "TPSLIMIT_LIMIT_HELP")
- public void limit(@Validator Player player, @Min(doubleValue = 0.5) @Max(doubleValue = 20.0) double tpsLimit) {
- setTPS(tpsLimit);
+ public void limit(@Validator Player player, @Min(doubleValue = 0.5) @Max(doubleValue = 20.0) float tpsLimit) {
+ TickManager.impl.setTickRate(tpsLimit);
+ sendTickRateChange();
}
}
@@ -183,8 +152,9 @@ public class TPSSystem implements Listener {
}
@Register(description = "TPSLIMIT_WARP_HELP")
- public void warp(@Validator Player player, @Min(doubleValue = 20.0, inclusive = false) double tpsLimit) {
- setTPS(tpsLimit);
+ public void warp(@Validator Player player, @Min(doubleValue = 20.0, inclusive = false) float tpsLimit) {
+ TickManager.impl.setTickRate(tpsLimit);
+ sendTickRateChange();
}
}
@@ -197,12 +167,13 @@ public class TPSSystem implements Listener {
@Register(description = "TPSLIMIT_HELP")
public void currentLimit(Player player) {
- BauSystem.MESSAGE.send("TPSLIMIT_CURRENT", player, currentTPSLimit);
+ BauSystem.MESSAGE.send("TPSLIMIT_CURRENT", player, TickManager.impl.getTickRate());
}
@Register(value = "default", description = "TPSLIMIT_DEFAULT_HELP")
public void reset(@Validator Player player) {
- setTPS(20);
+ TickManager.impl.setTickRate(20.0F);
+ sendTickRateChange();
}
}
@@ -224,12 +195,14 @@ public class TPSSystem implements Listener {
@Register(value = {"rate", "0"}, description = "TICK_FREEZE_HELP")
@Register(value = "freeze", description = "TICK_FREEZE_HELP_2")
public void freeze(@Validator Player player) {
- setTPS(0);
+ TickManager.impl.setFreeze(true);
+ sendTickRateChange();
}
@Register(value = "unfreeze", description = "TICK_UNFREEZE_HELP")
public void unfreeze(@Validator Player player) {
- setTPS(20);
+ TickManager.impl.setTickRate(20.0F);
+ sendTickRateChange();
}
}
@@ -242,7 +215,9 @@ public class TPSSystem implements Listener {
@Register(value = "step", description = "TICK_STEPPING_HELP")
public void step(@Validator Player player, @Min(intValue = 1) @OptionalValue("1") int steps) {
- setSkip(steps, 20);
+ TickManager.impl.stepTicks(steps);
+ sendTickRateChange();
+ bossbar();
}
}
@@ -254,8 +229,9 @@ public class TPSSystem implements Listener {
}
@Register(value = "warp", description = "TICK_WARPING_HELP")
- public void warp(@Validator Player player, @Min(intValue = 1) @OptionalValue("1") int steps, @Min(doubleValue = 20) @OptionalValue("4000") double tps) {
- setSkip(steps, tps);
+ public void warp(@Validator Player player, @Min(intValue = 1) @OptionalValue("1") int steps) {
+ TickManager.impl.sprintTicks(steps);
+ sendTickRateChange();
}
}
@@ -267,8 +243,9 @@ public class TPSSystem implements Listener {
}
@Register(value = "rate", description = "TICK_LIMIT_HELP")
- public void limit(@Validator Player player, @Min(doubleValue = 0.5, inclusive = false) @Max(doubleValue = 20.0) double tpsLimit) {
- setTPS(tpsLimit);
+ public void limit(@Validator Player player, @Min(doubleValue = 0.5, inclusive = false) @Max(doubleValue = 20.0) float tpsLimit) {
+ TickManager.impl.setTickRate(tpsLimit);
+ sendTickRateChange();
}
}
@@ -280,8 +257,9 @@ public class TPSSystem implements Listener {
}
@Register(value = "rate", description = "TICK_WARP_HELP")
- public void warp(@Validator Player player, @Min(doubleValue = 20.0, inclusive = false) double tpsLimit) {
- setTPS(tpsLimit);
+ public void warp(@Validator Player player, @Min(doubleValue = 20.0, inclusive = false) float tpsLimit) {
+ TickManager.impl.setTickRate(tpsLimit);
+ sendTickRateChange();
}
}
@@ -294,12 +272,31 @@ public class TPSSystem implements Listener {
@Register(value = "rate", description = "TICK_HELP")
public void currentLimit(Player player) {
- BauSystem.MESSAGE.send("TPSLIMIT_CURRENT", player, currentTPSLimit);
+ BauSystem.MESSAGE.send("TPSLIMIT_CURRENT", player, TickManager.impl.getTickRate());
}
@Register(value = {"rate", "default"}, description = "TICK_DEFAULT_HELP")
public void reset(@Validator Player player) {
- setTPS(20);
+ TickManager.impl.setTickRate(20.0F);
+ sendTickRateChange();
+ }
+ }
+
+ @AbstractSWCommand.PartOf(TickBaseCommand.class)
+ private class Tick21Command extends SWCommand {
+
+ private Tick21Command() {
+ super("");
+ }
+
+ @Register(value = "normalclient")
+ public void smooth(@Validator Player player) {
+ TickManager.impl.blockTpsPacket(true);
+ }
+
+ @Register(value = "slowclient")
+ public void unsmooth(@Validator Player player) {
+ TickManager.impl.blockTpsPacket(false);
}
}
@@ -321,12 +318,8 @@ public class TPSSystem implements Listener {
@Override
public String get(Region region, Player p) {
- boolean isWarping = tpsSystem.currentlyStepping;
- boolean isFrozen = TPSFreezeUtils.frozen();
- if (Core.getVersion() >= 21) {
- isWarping = NativeTickManager.impl.isSprinting();
- isFrozen = NativeTickManager.impl.getFreezeState();
- }
+ boolean isWarping = TickManager.impl.isSprinting();
+ boolean isFrozen = TickManager.impl.isFrozen();
if (tpsSystem != null && isWarping) {
long time = System.currentTimeMillis() % 1000;
@@ -348,28 +341,20 @@ public class TPSSystem implements Listener {
private String tpsColor() {
double tps = TPSWatcher.getTPSUnlimited(TPSWatcher.TPSType.ONE_SECOND);
- if (tps > TPSSystem.getCurrentTPSLimit() * 0.9) {
+ if (tps > TickManager.impl.getTickRate() * 0.9) {
return "§a";
}
- if (tps > TPSSystem.getCurrentTPSLimit() * 0.5) {
+ if (tps > TickManager.impl.getTickRate() * 0.5) {
return "§e";
}
return "§c";
}
private String tpsLimit() {
- if (TPSSystem.getCurrentTPSLimit() == 20) {
+ if (TickManager.impl.getTickRate() == 20) {
return "";
}
- return "§8/§7" + TPSSystem.getCurrentTPSLimit();
- }
- }
-
- public static double getCurrentTPSLimit() {
- if (Core.getVersion() >= 21) {
- return NativeTickManager.impl.tickrate();
- } else {
- return currentTPSLimit;
+ return "§8/§7" + TickManager.impl.getTickRate();
}
}
@@ -385,7 +370,7 @@ public class TPSSystem implements Listener {
@Override
public ItemStack getItem(Player player) {
- return new SWItem(Material.CLOCK, BauSystem.MESSAGE.parse("TPSLIMIT_GUI_ITEM_NAME", player), Arrays.asList(BauSystem.MESSAGE.parse("TPSLIMIT_GUI_ITEM_LORE", player, tpsSystem.currentTPSLimit)), false, clickType -> {
+ return new SWItem(Material.CLOCK, BauSystem.MESSAGE.parse("TPSLIMIT_GUI_ITEM_NAME", player), Arrays.asList(BauSystem.MESSAGE.parse("TPSLIMIT_GUI_ITEM_LORE", player, TickManager.impl.getTickRate())), false, clickType -> {
}).getItemStack();
}
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/modern/ModernTPSLimitCommand.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/modern/ModernTPSLimitCommand.java
deleted file mode 100644
index 4d2295c0..00000000
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/modern/ModernTPSLimitCommand.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2025 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.bausystem.features.tpslimit.modern;
-
-import de.steamwar.bausystem.BauSystem;
-import de.steamwar.bausystem.utils.NativeTickManager;
-import de.steamwar.command.SWCommand;
-import de.steamwar.linkage.Linked;
-import de.steamwar.linkage.MinVersion;
-import org.bukkit.entity.Player;
-
-import static de.steamwar.bausystem.features.tpslimit.modern.ModernTickCommand.sendTickRateChange;
-
-@Linked
-@MinVersion(21)
-public class ModernTPSLimitCommand extends SWCommand {
- public ModernTPSLimitCommand() {
- super("tpslimit");
- setMessage(BauSystem.MESSAGE);
- addDefaultHelpMessage("TPSLIMIT_HELP");
- }
-
- @Register(value = "0", description = "TPSLIMIT_FREEZE_HELP")
- public void freeze(@Validator Player player) {
- NativeTickManager.impl.setFreeze(true);
- sendTickRateChange();
- }
-
- @Register(description = "TPSLIMIT_LIMIT_HELP")
- public void limit(@Validator Player player, @Min(doubleValue = 0.5) @Max(doubleValue = 20.0) float tpsLimit) {
- NativeTickManager.impl.setTickRate(tpsLimit);
- sendTickRateChange();
- }
-
- @Register(description = "TPSLIMIT_WARP_HELP")
- public void warp(@Validator Player player, @Min(doubleValue = 20.0, inclusive = false) float tpsLimit) {
- NativeTickManager.impl.setTickRate(tpsLimit);
- sendTickRateChange();
- }
-
- @Register(description = "TPSLIMIT_HELP")
- public void currentLimit(Player player) {
- BauSystem.MESSAGE.send("TPSLIMIT_CURRENT", player, NativeTickManager.impl.tickrate());
- }
-
- @Register(value = "default", description = "TPSLIMIT_DEFAULT_HELP")
- public void reset(@Validator Player player) {
- NativeTickManager.impl.setTickRate(20);
- sendTickRateChange();
- }
-}
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/modern/ModernTickCommand.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/modern/ModernTickCommand.java
deleted file mode 100644
index 057658b5..00000000
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/modern/ModernTickCommand.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * This file is a part of the SteamWar software.
- *
- * Copyright (C) 2025 SteamWar.de-Serverteam
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package de.steamwar.bausystem.features.tpslimit.modern;
-
-import de.steamwar.bausystem.BauSystem;
-import de.steamwar.bausystem.SWUtils;
-import de.steamwar.bausystem.utils.NativeTickManager;
-import de.steamwar.command.SWCommand;
-import de.steamwar.linkage.Linked;
-import de.steamwar.linkage.MinVersion;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Listener;
-
-@Linked
-@MinVersion(21)
-public class ModernTickCommand extends SWCommand implements Listener {
- public ModernTickCommand() {
- super("tick");
- setMessage(BauSystem.MESSAGE);
- }
-
- public static void sendTickRateChange() {
- Bukkit.getOnlinePlayers().forEach(player -> {
- if (NativeTickManager.impl.getFreezeState()) {
- SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("TPSLIMIT_FROZEN", player));
- } else {
- SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("TPSLIMIT_SET", player, NativeTickManager.impl.tickrate()));
- }
- });
- }
-
- @Register(value = {"rate", "0"}, description = "TICK_FREEZE_HELP")
- @Register(value = "freeze", description = "TICK_FREEZE_HELP_2")
- public void freeze(@Validator Player player) {
- NativeTickManager.impl.setFreeze(true);
- sendTickRateChange();
- }
-
- @Register(value = "unfreeze", description = "TICK_UNFREEZE_HELP")
- public void unfreeze(@Validator Player player) {
- NativeTickManager.impl.setFreeze(false);
- sendTickRateChange();
- }
-
- @Register(value = "step", description = "TICK_STEPPING_HELP")
- public void step(@Validator Player player, @Min(intValue = 1) @OptionalValue("1") int steps) {
- NativeTickManager.impl.stepTick(steps);
- }
-
- @Register(value = "warp", description = "TICK_WARP_HELP")
- public void warp(@Validator Player player, @Min(intValue = 1) @OptionalValue("1") int steps) {
- NativeTickManager.impl.sprintTicks(steps);
- }
-
- @Register(value = "rate", description = "TICK_LIMIT_HELP")
- public void limit(@Validator Player player, @Min(doubleValue = 0.5, inclusive = false) float tpsLimit) {
- NativeTickManager.impl.setTickRate(tpsLimit);
- sendTickRateChange();
- }
-
- @Register(value = "rate", description = "TICK_HELP")
- public void currentLimit(Player player) {
- BauSystem.MESSAGE.send("TPSLIMIT_CURRENT", player, NativeTickManager.impl.tickrate());
- }
-
- @Register(value = {"rate", "default"}, description = "TICK_DEFAULT_HELP")
- public void reset(@Validator Player player) {
- NativeTickManager.impl.setTickRate(20);
- sendTickRateChange();
- }
-
- @Register(value = "normalclient")
- public void smooth(@Validator Player player) {
- NativeTickManager.impl.blockTpsPacket(true);
- }
-
- @Register(value = "slowclient")
- public void unsmooth(@Validator Player player) {
- NativeTickManager.impl.blockTpsPacket(false);
- }
-}
diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/NativeTickManager.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/TickManager.java
similarity index 74%
rename from BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/NativeTickManager.java
rename to BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/TickManager.java
index 7dadf98f..7777c52a 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/NativeTickManager.java
+++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/utils/TickManager.java
@@ -21,16 +21,26 @@ package de.steamwar.bausystem.utils;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.core.VersionDependent;
+import org.bukkit.event.Listener;
-public interface NativeTickManager {
- NativeTickManager impl = VersionDependent.getVersionImpl(BauSystem.getInstance());
+public interface TickManager extends Listener {
+ TickManager impl = VersionDependent.getVersionImpl(BauSystem.getInstance());
void setTickRate(float tickRate);
- boolean getFreezeState();
+ float getTickRate();
+
+ boolean canFreeze();
void setFreeze(boolean freeze);
- void stepTick(int ticks);
+ boolean isFrozen();
+
+ void stepTicks(int ticks);
+ boolean isStepping();
+
void sprintTicks(int ticks);
boolean isSprinting();
- float tickrate();
+
void blockTpsPacket(boolean block);
+ long getRemainingTicks();
+ long getDoneTicks();
+ long getTotalTicks();
}