diff options
Diffstat (limited to 'src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/TickRateLock.java')
| -rw-r--r-- | src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/TickRateLock.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/TickRateLock.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/TickRateLock.java new file mode 100644 index 0000000..b5202df --- /dev/null +++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/TickRateLock.java @@ -0,0 +1,58 @@ +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); + } +} |
