Client Game Speed / Timer Acceleration
Minecraft Gameplay Impact
In vanilla Minecraft, client-side physics, movement calculations, input polling, and local block breaking advance at a fixed baseline of 20 ticks per second (50 milliseconds per tick). In Minecraft 1.20.3+, Mojang introduced dynamic tick rate capabilities, delegating the per-tick duration calculation to MinecraftClient.getTargetMillisPerTick().
Timer cheats hook into this method to artificially divide the returned milliseconds per tick by a user-defined multiplier (for example, 2.0x or 3.0x). In the inspected timer module (com.example.timer.mixin.MinecraftClientMixin), @Inject hooks into the RETURN of method_54785 with cancellable = true. If the cheat is active, it reads TimerState.get().tickMultiplier() and sets the return value to cir.getReturnValueF() / multiplier. This causes the client loop to execute multiple ticks within the time normally allotted for a single tick, allowing the local player to traverse terrain, process movement inputs, and cycle interactions faster in real-world time.
When connected to an authoritative multiplayer server, the server maintains its own tick rate at 20 TPS regardless of the client's local configuration. An accelerated client will dispatch movement packets (PlayerMoveC2SPacket) and interaction packets at an abnormally elevated frequency relative to server elapsed time. Modern server-side anticheats monitor incoming packet intervals and flag such bursts as Timer or Speed violations.
In legitimate contexts, Minecraft provides the official command /tick rate <rate> (introduced in 1.20.3) for server operators to synchronously adjust global simulation speed across all connected clients. Camera and cinematics utilities such as ReplayMod adjust rendering interpolation during offline timeline scrubbing and video rendering, but do not manipulate live competitive gameplay tick multipliers.
Functions & APIs Analyzed
MinecraftClient.method_54785 / getTargetMillisPerTick
Calculates the target duration of a client game tick in milliseconds.
@Inject / @ModifyReturnValue (Mixin)
SpongePowered Mixin annotations intercepting method execution to alter the returned tick duration.
Decompiled Representation (Vineflower View)
@Mixin(class_310.class)
public class MinecraftClientMixin {
@Inject(method = "method_54785", at = @At("RETURN"), cancellable = true)
private void timer$scaleMillisPerTick(float millis, CallbackInfoReturnable<Float> cir) {
float multiplier = TimerState.get().tickMultiplier();
if (multiplier != 1.0F) {
cir.setReturnValue(cir.getReturnValueF() / multiplier);
}
}
}
Bytecode Signature & Static Detection
The detector inspects method-level annotations across client classes, matching Mixin injection annotations (@Inject, @ModifyReturnValue, @ModifyExpressionValue, @Redirect, or @Overwrite) targeting tick duration computation:
- Intermediary method:
method_54785. - Named Yarn method:
getTargetMillisPerTick.
In Minecraft 1.20.3+, MinecraftClient.getTargetMillisPerTick(float) calculates the length of each client game tick in milliseconds. Intercepting this return value enables clients to divide the target duration by an arbitrary multiplier, accelerating the local game loop.