package net.justlearning.arslaan3102.arslaansmagichax.modules.impl; import net.justlearning.arslaan3102.arslaansmagichax.ArslaansMagicHaxClient; import net.justlearning.arslaan3102.arslaansmagichax.events.PacketEvent; import net.justlearning.arslaan3102.arslaansmagichax.events.ReceivePacketEventBus; import net.justlearning.arslaan3102.arslaansmagichax.modules.Category; import net.justlearning.arslaan3102.arslaansmagichax.modules.Module; import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.BooleanSetting; import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.NumberSetting; import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.UpdateTickRateS2CPacket; import net.minecraft.world.tick.TickManager; 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 UpdateTickRateS2CPacket) { serverTickRate = ((UpdateTickRateS2CPacket) packet).tickRate(); // save server tick rate serverFrozen = ((UpdateTickRateS2CPacket) 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.world == null) return; TickManager tickManager = mc.world.getTickManager(); if (tickManager.getTickRate() != tickRate.getValue() || tickManager.isFrozen() != frozen.isEnabled()) { tickManager.setTickRate(tickRate.getValueFloat()); tickManager.setFrozen(frozen.isEnabled()); } } @Override protected void onDisable() { if (mc.player == null || mc.world == null) return; TickManager tickManager = mc.world.getTickManager(); tickManager.setTickRate(serverTickRate); tickManager.setFrozen(serverFrozen); } }