Update and integrate legacy system

This commit is contained in:
2025-07-08 22:16:52 +02:00
parent a572b84016
commit d657f9871d
13 changed files with 333 additions and 323 deletions
@@ -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<Integer> frozenTicksToRun = Reflection.getField(TickRateManager.class, int.class, 0);
private static final Reflection.Field<Long> 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;
}
}