moar client-server tick speed separation

This commit is contained in:
gnembon committed 2023-05-16 10:35:40 +02:00
1 parent e0a3060339
commit df786605c2
23 files changed
+166 -148

No files matched your search

@@ -1,8 +1,10 @@
package carpet.mixins;
import carpet.fakes.MinecraftServerInterface;
import carpet.fakes.ThreadedAnvilChunkStorageInterface;
import carpet.helpers.TickSpeed;
import carpet.helpers.TickRateManager;
import carpet.utils.CarpetProfiler;
import net.minecraft.server.level.DistanceManager;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@@ -78,7 +80,7 @@ public abstract class ServerChunkCache_tickMixin
private boolean skipChunkTicking(ServerLevel serverWorld)
{
boolean debug = serverWorld.isDebug();
if (!TickSpeed.process_entities())
if (!((MinecraftServerInterface)serverWorld.getServer()).getTickRateManager().process_entities())
{
// simplified chunk tick iteration assuming world is frozen otherwise as suggested by Hadron67
// to be kept in sync with the original injection source
@@ -97,4 +99,17 @@ public abstract class ServerChunkCache_tickMixin
return debug;
}
@Redirect(method = "tick", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/server/level/DistanceManager;purgeStaleTickets()V"
))
private void pauseTicketSystem(DistanceManager distanceManager)
{
// pausing expiry of tickets
// that will prevent also chunks from unloading, so require a deep frozen state
TickRateManager trm = ((MinecraftServerInterface) level.getServer()).getTickRateManager();
if (!trm.process_entities() && trm.deeplyFrozen()) return;
distanceManager.purgeStaleTickets();
}
}