package com.arslaancodes.arslaansmagichax.modules.impl; import com.arslaancodes.arslaansmagichax.ArslaansMagicHaxClient; import com.arslaancodes.arslaansmagichax.events.PacketEvent; import com.arslaancodes.arslaansmagichax.events.ReceivePacketEventBus; import com.arslaancodes.arslaansmagichax.modules.Category; import com.arslaancodes.arslaansmagichax.modules.Module; import com.arslaancodes.arslaansmagichax.modules.settings.BooleanSetting; import com.arslaancodes.arslaansmagichax.modules.settings.NumberSetting; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientboundTickingStatePacket; import net.minecraft.world.TickRateManager; public class TickRateLock extends Module { private NumberSetting tickRate = new NumberSetting("Tick Rate", 1, 100, 20, 1); private BooleanSetting frozen = new BooleanSetting("Frozen", false); private static float serverTickRate = 20; // default 20 tps private static boolean serverFrozen = false; // default not frozen public TickRateLock() { super("Tick Rate Lock", "Locks the tick rate to a specified value (Does not affect the server - client-side only)", -1, Category.MISC); addSetting(tickRate); addSetting(frozen); ReceivePacketEventBus.register(TickRateLock::onPacketReceive); } private static void onPacketReceive(PacketEvent.Receive event) { if (!ArslaansMagicHaxClient.tickRateLock.isEnabled()) return; Packet packet = event.packet(); if (packet instanceof ClientboundTickingStatePacket) { serverTickRate = ((ClientboundTickingStatePacket) packet).tickRate(); // save server tick rate serverFrozen = ((ClientboundTickingStatePacket) packet).isFrozen(); // save server frozen event.setCancelled(true); // ignores the server, frick them with all their rules } } @Override public void tick() { if (!this.isEnabled() || mc.player == null || mc.level == null) return; TickRateManager tickManager = mc.level.tickRateManager(); if (tickManager.tickrate() != tickRate.getValue() || tickManager.isFrozen() != frozen.isEnabled()) { tickManager.setTickRate(tickRate.getValueFloat()); tickManager.setFrozen(frozen.isEnabled()); } } @Override protected void onDisable() { if (mc.player == null || mc.level == null) return; TickRateManager tickManager = mc.level.tickRateManager(); tickManager.setTickRate(serverTickRate); tickManager.setFrozen(serverFrozen); } }