From 291268c14f2b912cecde984cef457284391fdefe Mon Sep 17 00:00:00 2001 From: gnembon Date: Mon, 27 Apr 2020 18:05:08 -0300 Subject: [PATCH 1/2] reset tick rate when changing worlds in SP --- src/main/java/carpet/CarpetServer.java | 1 + src/main/java/carpet/helpers/TickSpeed.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index 7f471737..554a4ca1 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -118,6 +118,7 @@ public class CarpetServer // static for now - easier to handle all around the co if (scriptServer != null) scriptServer.onClose(); settingsManager.detachServer(); LoggerRegistry.stopLoggers(); + TickSpeed.reset(); extensions.forEach(e -> e.onServerClosed(server)); minecraft_server = null; } diff --git a/src/main/java/carpet/helpers/TickSpeed.java b/src/main/java/carpet/helpers/TickSpeed.java index 2daf4fd1..33d735b7 100644 --- a/src/main/java/carpet/helpers/TickSpeed.java +++ b/src/main/java/carpet/helpers/TickSpeed.java @@ -44,6 +44,24 @@ public class TickSpeed } } + public static void reset() + { + tickrate = 20.0f; + mspt = 50.0f; + time_bias = 0; + time_warp_start_time = 0; + time_warp_scheduled_ticks = 0; + time_advancerer = null; + tick_warp_callback = null; + tick_warp_sender = null; + player_active_timeout = 0; + process_entities = true; + deepFreeze = false; + is_paused = false; + is_superHot = false; + notifyTickrateListeners("carpet"); + } + public static void add_ticks_to_run_in_pause(int ticks) { player_active_timeout = PLAYER_GRACE+ticks; From c6efb4219554b8eb2dc2f5330dc9ddaa604bfce2 Mon Sep 17 00:00:00 2001 From: gnembon Date: Mon, 27 Apr 2020 19:55:01 -0300 Subject: [PATCH 2/2] fixed position correction packets for superhot --- .../ServerPlayNetworkHandler_tickMixin.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/carpet/mixins/ServerPlayNetworkHandler_tickMixin.java b/src/main/java/carpet/mixins/ServerPlayNetworkHandler_tickMixin.java index 167e80aa..919fc3ad 100644 --- a/src/main/java/carpet/mixins/ServerPlayNetworkHandler_tickMixin.java +++ b/src/main/java/carpet/mixins/ServerPlayNetworkHandler_tickMixin.java @@ -31,6 +31,10 @@ public class ServerPlayNetworkHandler_tickMixin } } + // to skip reposition adjustment check + private static long lastMovedTick = 0L; + private static double lastMoved = 0.0D; + @Inject(method = "onPlayerMove", at = @At( value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;isSleeping()Z", @@ -38,10 +42,23 @@ public class ServerPlayNetworkHandler_tickMixin )) private void checkMove(PlayerMoveC2SPacket p, CallbackInfo ci) { - if (Math.abs(p.getX(player.getX()) - lastTickX) > 0.0001D - || Math.abs(p.getY(player.getY()) - lastTickY) > 0.0001D - || Math.abs(p.getZ(player.getZ()) - lastTickZ) > 0.0001D) + double movedBy = player.getPos().squaredDistanceTo(lastTickX, lastTickY, lastTickZ); + if (movedBy == 0.0D) return; + // corrective tick + if (movedBy < 0.0009 && lastMoved > 0.0009 && Math.abs(player.getServer().getTicks()-lastMovedTick-20)<2) { + //CarpetSettings.LOG.error("Corrective movement packet"); + return; + } + if (movedBy > 0.0D) + { + //CarpetSettings.LOG.error(String.format( + // "moved by %.6f at %d", + // player.getPos().squaredDistanceTo(lastTickX, lastTickY, lastTickZ), + // player.getServer().getTicks()-lastMovedTick + //)); + lastMoved = movedBy; + lastMovedTick = player.getServer().getTicks(); TickSpeed.reset_player_active_timeout(); } }