From 382706a6dfeea27608f2f9786b11fcf4711b0f9a Mon Sep 17 00:00:00 2001 From: gnembon <41132274+gnembon@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:09:20 +0200 Subject: [PATCH] 23w43a --- gradle.properties | 2 +- src/main/java/carpet/CarpetSettings.java | 3 +- .../java/carpet/commands/SpawnCommand.java | 5 +- .../java/carpet/fakes/LevelInterface.java | 3 -- .../fakes/MinecraftClientInferface.java | 6 --- .../fakes/MinecraftServerInterface.java | 5 -- .../carpet/helpers/ServerTickRateManager.java | 20 -------- .../java/carpet/helpers/TickRateManager.java | 19 ------- .../java/carpet/logging/HUDController.java | 22 +++------ .../carpet/mixins/AbstractArrowMixin.java | 8 +-- .../mixins/ClientLevel_tickSpeedMixin.java | 28 ----------- .../LevelRenderer_pausedShakeMixin.java | 49 ------------------- .../java/carpet/mixins/MinecraftMixin.java | 3 +- .../mixins/MinecraftServer_scarpetMixin.java | 18 ++++--- .../MinecraftServer_tickspeedMixin.java | 15 ------ .../mixins/Minecraft_pausedShakeMixin.java | 18 ------- .../carpet/mixins/Minecraft_tickMixin.java | 22 +++++++++ .../carpet/mixins/ServerLevel_tickMixin.java | 8 --- .../patches/TickSyncedBorderExtent.java | 14 +++--- .../java/carpet/script/CarpetEventServer.java | 2 +- .../java/carpet/script/external/Vanilla.java | 6 --- .../java/carpet/script/utils/SystemInfo.java | 2 +- src/main/resources/carpet.mixins.json | 4 +- 23 files changed, 58 insertions(+), 224 deletions(-) delete mode 100644 src/main/java/carpet/fakes/MinecraftClientInferface.java delete mode 100644 src/main/java/carpet/helpers/ServerTickRateManager.java delete mode 100644 src/main/java/carpet/helpers/TickRateManager.java delete mode 100644 src/main/java/carpet/mixins/ClientLevel_tickSpeedMixin.java delete mode 100644 src/main/java/carpet/mixins/LevelRenderer_pausedShakeMixin.java delete mode 100644 src/main/java/carpet/mixins/Minecraft_pausedShakeMixin.java create mode 100644 src/main/java/carpet/mixins/Minecraft_tickMixin.java diff --git a/gradle.properties b/gradle.properties index ce62176b..a796bf88 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check https://fabricmc.net/develop/ - minecraft_version=23w42a + minecraft_version=23w43a loader_version=0.14.22 jsr305_version=3.0.2 fabric_version=0.89.3+1.20.2 diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index 891cc554..0a636314 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -20,7 +20,6 @@ import net.minecraft.server.dedicated.DedicatedServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -599,7 +598,7 @@ public class CarpetSettings extra = "works only in SP, and will slow down players", category = {CREATIVE, SURVIVAL, CLIENT} ) - public static boolean smoothClientAnimations; + public static boolean smoothClientAnimations = true; private static class PushLimitLimits extends Validator { @Override public Integer validate(CommandSourceStack source, CarpetRule currentRule, Integer newValue, String string) { diff --git a/src/main/java/carpet/commands/SpawnCommand.java b/src/main/java/carpet/commands/SpawnCommand.java index 85c56f01..e8824afa 100644 --- a/src/main/java/carpet/commands/SpawnCommand.java +++ b/src/main/java/carpet/commands/SpawnCommand.java @@ -1,10 +1,8 @@ package carpet.commands; import carpet.CarpetSettings; -import carpet.fakes.MinecraftServerInterface; import carpet.fakes.SpawnGroupInterface; import carpet.helpers.HopperCounter; -import carpet.helpers.ServerTickRateManager; import carpet.utils.CommandHelper; import carpet.utils.Messenger; import carpet.utils.SpawnReporter; @@ -24,6 +22,7 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.arguments.DimensionArgument; import net.minecraft.commands.arguments.coordinates.BlockPosArgument; import net.minecraft.core.BlockPos; +import net.minecraft.server.ServerTickRateManager; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.item.DyeColor; @@ -179,7 +178,7 @@ public class SpawnCommand // tick warp 0 - ServerTickRateManager trm = ((MinecraftServerInterface)source.getServer()).getTickRateManager(); + ServerTickRateManager trm = source.getServer().tickRateManager(); // stop warp // unnecessary // start warp diff --git a/src/main/java/carpet/fakes/LevelInterface.java b/src/main/java/carpet/fakes/LevelInterface.java index 05da80b4..583da757 100644 --- a/src/main/java/carpet/fakes/LevelInterface.java +++ b/src/main/java/carpet/fakes/LevelInterface.java @@ -1,6 +1,5 @@ package carpet.fakes; -import carpet.helpers.TickRateManager; import net.minecraft.world.level.redstone.NeighborUpdater; import org.jetbrains.annotations.Nullable; @@ -23,6 +22,4 @@ public interface LevelInterface List getOtherEntitiesLimited(@Nullable Entity except, AABB box, Predicate predicate, int limit); NeighborUpdater getNeighborUpdater(); - - TickRateManager tickRateManager(); } diff --git a/src/main/java/carpet/fakes/MinecraftClientInferface.java b/src/main/java/carpet/fakes/MinecraftClientInferface.java deleted file mode 100644 index 6e200c7f..00000000 --- a/src/main/java/carpet/fakes/MinecraftClientInferface.java +++ /dev/null @@ -1,6 +0,0 @@ -package carpet.fakes; - -public interface MinecraftClientInferface -{ - float getPausedTickDelta(); -} diff --git a/src/main/java/carpet/fakes/MinecraftServerInterface.java b/src/main/java/carpet/fakes/MinecraftServerInterface.java index cf3fd479..53290428 100644 --- a/src/main/java/carpet/fakes/MinecraftServerInterface.java +++ b/src/main/java/carpet/fakes/MinecraftServerInterface.java @@ -2,12 +2,9 @@ package carpet.fakes; import java.util.Map; import java.util.function.BooleanSupplier; - -import carpet.helpers.ServerTickRateManager; import carpet.script.CarpetScriptServer; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceKey; -//import net.minecraft.server.ServerResources; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; @@ -24,6 +21,4 @@ public interface MinecraftServerInterface void addScriptServer(CarpetScriptServer scriptServer); CarpetScriptServer getScriptServer(); - - ServerTickRateManager getTickRateManager(); } diff --git a/src/main/java/carpet/helpers/ServerTickRateManager.java b/src/main/java/carpet/helpers/ServerTickRateManager.java deleted file mode 100644 index 30cccacd..00000000 --- a/src/main/java/carpet/helpers/ServerTickRateManager.java +++ /dev/null @@ -1,20 +0,0 @@ -package carpet.helpers; - - -import net.minecraft.server.MinecraftServer; - - -public class ServerTickRateManager extends TickRateManager -{ - public ServerTickRateManager(MinecraftServer server) { - } - - public boolean isInWarpSpeed() - { - return false; - } - - public void requestGameToSprint(final int ticks) - { // noop - } -} diff --git a/src/main/java/carpet/helpers/TickRateManager.java b/src/main/java/carpet/helpers/TickRateManager.java deleted file mode 100644 index 3e3b3a33..00000000 --- a/src/main/java/carpet/helpers/TickRateManager.java +++ /dev/null @@ -1,19 +0,0 @@ -package carpet.helpers; - -public class TickRateManager -{ - public boolean gameIsPaused() - { - return false; - } - - public float mspt() - { - return 50.0f; - } - - public boolean runsNormally() - { - return true; - } -} diff --git a/src/main/java/carpet/logging/HUDController.java b/src/main/java/carpet/logging/HUDController.java index 61678839..b29fbab6 100644 --- a/src/main/java/carpet/logging/HUDController.java +++ b/src/main/java/carpet/logging/HUDController.java @@ -1,9 +1,7 @@ package carpet.logging; import carpet.CarpetServer; -import carpet.fakes.MinecraftServerInterface; import carpet.helpers.HopperCounter; -import carpet.helpers.ServerTickRateManager; import carpet.logging.logHelpers.PacketCounter; import carpet.utils.Messenger; import carpet.utils.SpawnReporter; @@ -11,16 +9,16 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundTabListPacket; import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.ServerTickRateManager; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.TimeUtil; import net.minecraft.world.level.Level; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.OptionalDouble; import java.util.Set; import java.util.function.Consumer; @@ -117,18 +115,14 @@ public class HUDController } private static Component [] send_tps_display(MinecraftServer server) { - OptionalDouble averageTPS = Arrays.stream(server.tickTimes).average(); - ServerTickRateManager trm = ((MinecraftServerInterface)server).getTickRateManager(); - if (averageTPS.isEmpty()) - { - return new Component[]{Component.literal("No TPS data available")}; - } - double MSPT = Arrays.stream(server.tickTimes).average().getAsDouble() * 1.0E-6D; - double TPS = 1000.0D / Math.max(trm.isInWarpSpeed()?0.0:trm.mspt(), MSPT); - if (trm.gameIsPaused()) { + double MSPT = ((double)server.getAverageTickTimeNanos())/ TimeUtil.NANOSECONDS_PER_MILLISECOND; + ServerTickRateManager trm = server.tickRateManager(); + + double TPS = 1000.0D / Math.max(trm.isSprinting()?0.0:trm.millisecondsPerTick(), MSPT); + if (trm.isFrozen()) { TPS = 0; } - String color = Messenger.heatmap_color(MSPT,trm.mspt()); + String color = Messenger.heatmap_color(MSPT,trm.millisecondsPerTick()); return new Component[]{Messenger.c( "g TPS: ", String.format(Locale.US, "%s %.1f",color, TPS), "g MSPT: ", String.format(Locale.US,"%s %.1f", color, MSPT))}; diff --git a/src/main/java/carpet/mixins/AbstractArrowMixin.java b/src/main/java/carpet/mixins/AbstractArrowMixin.java index 2be15272..cc27e0ec 100644 --- a/src/main/java/carpet/mixins/AbstractArrowMixin.java +++ b/src/main/java/carpet/mixins/AbstractArrowMixin.java @@ -5,7 +5,7 @@ import carpet.logging.logHelpers.TrajectoryLogHelper; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.projectile.AbstractArrow; -import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; @@ -20,10 +20,10 @@ public abstract class AbstractArrowMixin extends Entity private TrajectoryLogHelper logHelper; public AbstractArrowMixin(EntityType entityType_1, Level world_1) { super(entityType_1, world_1); } - @Inject(method = "(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/level/Level;)V", at = @At("RETURN")) - private void addLogger(EntityType entityType_1, Level world_1, CallbackInfo ci) + @Inject(method = "(Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/level/Level;Lnet/minecraft/world/item/ItemStack;)V", at = @At("RETURN")) + private void addLogger(final EntityType entityType, final Level level, final ItemStack itemStack, final CallbackInfo ci) { - if (LoggerRegistry.__projectiles && !world_1.isClientSide) + if (LoggerRegistry.__projectiles && !level.isClientSide) logHelper = new TrajectoryLogHelper("projectiles"); } diff --git a/src/main/java/carpet/mixins/ClientLevel_tickSpeedMixin.java b/src/main/java/carpet/mixins/ClientLevel_tickSpeedMixin.java deleted file mode 100644 index 12a5b6cf..00000000 --- a/src/main/java/carpet/mixins/ClientLevel_tickSpeedMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package carpet.mixins; - -import carpet.fakes.LevelInterface; -import carpet.helpers.TickRateManager; -import net.minecraft.client.multiplayer.ClientLevel; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ClientLevel.class) -public abstract class ClientLevel_tickSpeedMixin implements LevelInterface -{ - - private TickRateManager tickRateManager; - - @Inject(method = "", at = @At("RETURN")) - private void onInit(CallbackInfo ci) - { - this.tickRateManager = new TickRateManager(); - } - - @Override - public TickRateManager tickRateManager() - { - return tickRateManager; - } -} diff --git a/src/main/java/carpet/mixins/LevelRenderer_pausedShakeMixin.java b/src/main/java/carpet/mixins/LevelRenderer_pausedShakeMixin.java deleted file mode 100644 index 2c38ffb8..00000000 --- a/src/main/java/carpet/mixins/LevelRenderer_pausedShakeMixin.java +++ /dev/null @@ -1,49 +0,0 @@ -package carpet.mixins; - -import carpet.fakes.LevelInterface; -import carpet.fakes.MinecraftClientInferface; -import carpet.helpers.TickRateManager; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.LevelRenderer; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -@Mixin(value = LevelRenderer.class, priority = 69420) -public class LevelRenderer_pausedShakeMixin -{ - @Shadow @Final private Minecraft minecraft; - - @Shadow private ClientLevel level; - float initial = -1234.0f; - - // require 0 is for optifine being a bitch as it usually is. - @ModifyVariable(method = "renderLevel", argsOnly = true, require = 0, ordinal = 0, at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/multiplayer/ClientLevel;entitiesForRendering()Ljava/lang/Iterable;" - )) - private float changeTickPhase(float previous) - { - initial = previous; - TickRateManager trm = ((LevelInterface)level).tickRateManager(); - if (!trm.runsNormally()) - return ((MinecraftClientInferface)minecraft).getPausedTickDelta(); - return previous; - } - - // require 0 is for optifine being a bitch as it usually is. - @ModifyVariable(method = "renderLevel", argsOnly = true, require = 0, ordinal = 0 ,at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V", - shift = At.Shift.BEFORE - )) - private float changeTickPhaseBack(float previous) - { - // this may not set with optifine bitch - return initial==-1234.0f?previous:initial; - } - -} diff --git a/src/main/java/carpet/mixins/MinecraftMixin.java b/src/main/java/carpet/mixins/MinecraftMixin.java index 3c38779e..ffe95fb8 100644 --- a/src/main/java/carpet/mixins/MinecraftMixin.java +++ b/src/main/java/carpet/mixins/MinecraftMixin.java @@ -1,6 +1,5 @@ package carpet.mixins; -import carpet.fakes.LevelInterface; import carpet.network.CarpetClient; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; @@ -25,7 +24,7 @@ public class MinecraftMixin @Inject(at = @At("HEAD"), method = "tick") private void onClientTick(CallbackInfo info) { if (this.level != null) { - boolean runsNormally = ((LevelInterface)this.level).tickRateManager().runsNormally(); + boolean runsNormally = level.tickRateManager().runsNormally(); // hope server doesn't need to tick - should be handled by the server on its own if (!runsNormally) CarpetClient.shapes.renewShapes(); diff --git a/src/main/java/carpet/mixins/MinecraftServer_scarpetMixin.java b/src/main/java/carpet/mixins/MinecraftServer_scarpetMixin.java index 1dcbfffd..eaa6f0c1 100644 --- a/src/main/java/carpet/mixins/MinecraftServer_scarpetMixin.java +++ b/src/main/java/carpet/mixins/MinecraftServer_scarpetMixin.java @@ -7,6 +7,7 @@ import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; import net.minecraft.server.ServerFunctionManager; +import net.minecraft.server.ServerTickRateManager; import net.minecraft.server.TickTask; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.players.PlayerList; @@ -40,12 +41,6 @@ public abstract class MinecraftServer_scarpetMixin extends ReentrantBlockableEve @Shadow protected abstract void tickServer(BooleanSupplier booleanSupplier_1); - @Shadow private long nextTickTime; - - @Shadow private long lastOverloadWarning; - - @Shadow public abstract boolean pollTask(); - @Shadow @Final protected LevelStorageSource.LevelStorageAccess storageSource; @Shadow @Final private Map, ServerLevel> levels; @@ -62,11 +57,18 @@ public abstract class MinecraftServer_scarpetMixin extends ReentrantBlockableEve @Shadow @Final private StructureTemplateManager structureTemplateManager; + @Shadow public abstract ServerTickRateManager tickRateManager(); + + @Shadow private long nextTickTimeNanos; + + @Shadow private long lastOverloadWarningNanos; + @Override public void forceTick(BooleanSupplier isAhead) { - nextTickTime = lastOverloadWarning = Util.getMillis(); + nextTickTimeNanos = lastOverloadWarningNanos = Util.getNanos(); tickServer(isAhead); + pollTask(); while(pollTask()) {Thread.yield();} } @@ -88,7 +90,7 @@ public abstract class MinecraftServer_scarpetMixin extends ReentrantBlockableEve )) public void tickTasks(BooleanSupplier booleanSupplier_1, CallbackInfo ci) { - if (!getTickRateManager().runsNormally()) + if (!tickRateManager().runsNormally()) { return; } diff --git a/src/main/java/carpet/mixins/MinecraftServer_tickspeedMixin.java b/src/main/java/carpet/mixins/MinecraftServer_tickspeedMixin.java index 5da754ed..27fde78c 100644 --- a/src/main/java/carpet/mixins/MinecraftServer_tickspeedMixin.java +++ b/src/main/java/carpet/mixins/MinecraftServer_tickspeedMixin.java @@ -1,7 +1,6 @@ package carpet.mixins; import carpet.fakes.MinecraftServerInterface; -import carpet.helpers.ServerTickRateManager; import carpet.utils.CarpetProfiler; import net.minecraft.server.MinecraftServer; import net.minecraft.server.TickTask; @@ -23,20 +22,6 @@ public abstract class MinecraftServer_tickspeedMixin extends ReentrantBlockableE CarpetProfiler.ProfilerToken currentSection; - private ServerTickRateManager serverTickRateManager; - - @Inject(method = "", at = @At("RETURN")) - private void onInit(CallbackInfo ci) - { - serverTickRateManager = new ServerTickRateManager((MinecraftServer)(Object)this); - } - - @Override - public ServerTickRateManager getTickRateManager() - { - return serverTickRateManager; - } - // Replaced the above cancelled while statement with this one // could possibly just inject that mspt selection at the beginning of the loop, but then adding all mspt's to // replace 50L will be a hassle diff --git a/src/main/java/carpet/mixins/Minecraft_pausedShakeMixin.java b/src/main/java/carpet/mixins/Minecraft_pausedShakeMixin.java deleted file mode 100644 index 1ba01146..00000000 --- a/src/main/java/carpet/mixins/Minecraft_pausedShakeMixin.java +++ /dev/null @@ -1,18 +0,0 @@ -package carpet.mixins; - -import carpet.fakes.MinecraftClientInferface; -import net.minecraft.client.Minecraft; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(Minecraft.class) -public class Minecraft_pausedShakeMixin implements MinecraftClientInferface -{ - @Shadow private float pausePartialTick; - - @Override - public float getPausedTickDelta() - { - return pausePartialTick; - } -} diff --git a/src/main/java/carpet/mixins/Minecraft_tickMixin.java b/src/main/java/carpet/mixins/Minecraft_tickMixin.java new file mode 100644 index 00000000..08c3f9b8 --- /dev/null +++ b/src/main/java/carpet/mixins/Minecraft_tickMixin.java @@ -0,0 +1,22 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.client.Minecraft; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Minecraft.class) +public class Minecraft_tickMixin +{ + @Inject(method = "getTickTargetMillis", at = @At("HEAD"), cancellable = true) + private void onGetTickTargetMillis(final float f, final CallbackInfoReturnable cir) + { + if (!CarpetSettings.smoothClientAnimations) { + cir.setReturnValue(f); + } + } + + +} diff --git a/src/main/java/carpet/mixins/ServerLevel_tickMixin.java b/src/main/java/carpet/mixins/ServerLevel_tickMixin.java index 590fb0b9..38a19e69 100644 --- a/src/main/java/carpet/mixins/ServerLevel_tickMixin.java +++ b/src/main/java/carpet/mixins/ServerLevel_tickMixin.java @@ -1,8 +1,6 @@ package carpet.mixins; import carpet.fakes.LevelInterface; -import carpet.fakes.MinecraftServerInterface; -import carpet.helpers.TickRateManager; import carpet.utils.CarpetProfiler; import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; @@ -28,12 +26,6 @@ public abstract class ServerLevel_tickMixin extends Level implements LevelInterf super(writableLevelData, resourceKey, registryAccess, holder, supplier, bl, bl2, l, i); } - @Override - public TickRateManager tickRateManager() - { - return ((MinecraftServerInterface)getServer()).getTickRateManager(); - } - private CarpetProfiler.ProfilerToken currentSection; @Inject(method = "tick", at = @At( diff --git a/src/main/java/carpet/patches/TickSyncedBorderExtent.java b/src/main/java/carpet/patches/TickSyncedBorderExtent.java index a9e8917a..fde797e5 100644 --- a/src/main/java/carpet/patches/TickSyncedBorderExtent.java +++ b/src/main/java/carpet/patches/TickSyncedBorderExtent.java @@ -1,10 +1,10 @@ package carpet.patches; import carpet.CarpetServer; -import carpet.fakes.MinecraftServerInterface; -import carpet.helpers.ServerTickRateManager; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.ServerTickRateManager; import net.minecraft.util.Mth; +import net.minecraft.util.TimeUtil; import net.minecraft.world.level.border.BorderChangeListener; import net.minecraft.world.level.border.BorderStatus; import net.minecraft.world.level.border.WorldBorder; @@ -13,8 +13,6 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; - /** * This class is essentially a copy of {@link net.minecraft.world.level.border.WorldBorder.MovingBorderExtent} * but instead of using real time to lerp the border @@ -95,11 +93,11 @@ public class TickSyncedBorderExtent implements WorldBorder.BorderExtent } else { - ms = Arrays.stream(server.tickTimes).average().orElseThrow(IllegalStateException::new) * 1.0E-6D; - ServerTickRateManager trm = ((MinecraftServerInterface)server).getTickRateManager(); - if (!trm.isInWarpSpeed()) + ms = ((double)server.getAverageTickTimeNanos())/ TimeUtil.NANOSECONDS_PER_MILLISECOND; + ServerTickRateManager trm = server.tickRateManager(); + if (!trm.isSprinting()) { - ms = Math.max(ms, trm.mspt()); + ms = Math.max(ms, trm.millisecondsPerTick()); } } double tps = 1_000.0D / ms; diff --git a/src/main/java/carpet/script/CarpetEventServer.java b/src/main/java/carpet/script/CarpetEventServer.java index bcaad686..24de93ac 100644 --- a/src/main/java/carpet/script/CarpetEventServer.java +++ b/src/main/java/carpet/script/CarpetEventServer.java @@ -1369,7 +1369,7 @@ public class CarpetEventServer public void tick() { - if (Vanilla.isTickProcessingPaused(scriptServer.server)) + if (!scriptServer.server.tickRateManager().runsNormally()) { return; } diff --git a/src/main/java/carpet/script/external/Vanilla.java b/src/main/java/carpet/script/external/Vanilla.java index 6918ea1c..75ee9ab9 100644 --- a/src/main/java/carpet/script/external/Vanilla.java +++ b/src/main/java/carpet/script/external/Vanilla.java @@ -366,10 +366,4 @@ public class Vanilla return new BlockPredicatePayload(predicateData.getCMBlockState(), predicateData.getCMBlockTagKey(), predicateData.getCMProperties(), predicateData.getCMDataTag()); } } - - public static boolean isTickProcessingPaused(MinecraftServer server) - { - return !((MinecraftServerInterface)server).getTickRateManager().runsNormally(); - } - } diff --git a/src/main/java/carpet/script/utils/SystemInfo.java b/src/main/java/carpet/script/utils/SystemInfo.java index 03fa8f30..4db445ed 100644 --- a/src/main/java/carpet/script/utils/SystemInfo.java +++ b/src/main/java/carpet/script/utils/SystemInfo.java @@ -134,7 +134,7 @@ public class SystemInfo // might be off one tick when run in the off tasks or asynchronously. int currentReportedTick = c.server().getTickCount() - 1; List ticks = new ArrayList<>(100); - long[] tickArray = c.server().tickTimes; + long[] tickArray = c.server().getTickTimesNanos(); for (int i = currentReportedTick + 100; i > currentReportedTick; i--) { ticks.add(new NumericValue((tickArray[i % 100]) / 1000000.0)); diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 1239f7f1..a6889620 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -187,11 +187,9 @@ ], "client": [ - "ClientLevel_tickSpeedMixin", + "Minecraft_tickMixin", "ShulkerBoxAccessMixin", "MinecraftMixin", - "Minecraft_pausedShakeMixin", - "LevelRenderer_pausedShakeMixin", "Gui_tablistMixin", "PlayerTabOverlayMixin", "PistonHeadRenderer_movableBEMixin",