summaryrefslogtreecommitdiff
path: root/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/TickRateLock.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/TickRateLock.java')
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/TickRateLock.java59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/TickRateLock.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/TickRateLock.java
new file mode 100644
index 0000000..75f8897
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/TickRateLock.java
@@ -0,0 +1,59 @@
+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);
+ }
+}