summaryrefslogtreecommitdiff
path: root/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2026-09-26 17:05:36 +1200
committerArslaan Pathan <[email protected]>2026-09-26 17:05:36 +1200
commit14c68eb5ba16774f581d95a39e64a7b303954ffc (patch)
tree2888ef11f47c6a639d440300ef580c247ad1bcb1 /src/main/java/com/arslaancodes/arslaansmagichax/modules/impl
parent766ba1c1d977442332cadaaeca93d795baa559df (diff)
downloadarslaansmagichax-14c68eb5ba16774f581d95a39e64a7b303954ffc.tar.xz
arslaansmagichax-14c68eb5ba16774f581d95a39e64a7b303954ffc.zip
migration to 26.2 - run migrateMappings with old loom then bring it back to new
Diffstat (limited to 'src/main/java/com/arslaancodes/arslaansmagichax/modules/impl')
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/AutoClicker.java47
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/ClickGUI.java23
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Criticals.java86
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/FakeSneak.java29
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Flight.java61
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Fullbright.java85
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GUN.java32
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GhostScaffold.java23
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GravityModifier.java31
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/HideModulesHUD.java12
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Jetpack.java32
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoAttackCooldown.java12
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoFall.java25
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoPackets.java23
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Poseidon.java21
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Speed.java58
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Spider.java33
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/TickRateLock.java58
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Waterwalk.java28
-rw-r--r--src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Xray.java65
20 files changed, 784 insertions, 0 deletions
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/AutoClicker.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/AutoClicker.java
new file mode 100644
index 0000000..7c67201
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/AutoClicker.java
@@ -0,0 +1,47 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import com.arslaancodes.arslaansmagichax.modules.settings.ModeSetting;
+import com.arslaancodes.arslaansmagichax.modules.settings.NumberSetting;
+import java.util.Objects;
+import java.util.Random;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.entity.Entity;
+import net.minecraft.world.phys.EntityHitResult;
+import net.minecraft.world.phys.HitResult;
+
+public class AutoClicker extends Module {
+ private final NumberSetting cps = new NumberSetting("CPS", 5, 50, 12, 0.1); // default 10 CPS
+ private final ModeSetting mode = new ModeSetting("Mode", "NoDelay", "CPS", "NoDelay");
+ private long nextClickTime = 0L;
+
+ public AutoClicker() {
+ super("AutoClicker", "Automatically attacks entities under your crosshair.", -1, Category.COMBAT);
+ addSetting(mode);
+ addSetting(cps);
+ }
+
+ @Override
+ public void tick() {
+ if (!isEnabled() || mc.player == null || mc.level == null) return;
+ if (mc.screen != null) return;
+
+ HitResult hr = mc.hitResult;
+ if (!(hr instanceof EntityHitResult eResult)) return;
+
+ Entity target = eResult.getEntity();
+ if (target == null || !target.isAlive()) return;
+
+ if (!Objects.equals(mode.getMode(), "NoDelay")) {
+ long now = System.currentTimeMillis();
+ if (now < nextClickTime) return;
+
+ double delayMs = 1000.0 / cps.getValue();
+ nextClickTime = now + (long) Math.max(1, delayMs);
+ }
+
+ mc.gameMode.attack(mc.player, target);
+ mc.player.swing(InteractionHand.MAIN_HAND);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/ClickGUI.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/ClickGUI.java
new file mode 100644
index 0000000..d47abf5
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/ClickGUI.java
@@ -0,0 +1,23 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import com.arslaancodes.arslaansmagichax.screens.clickgui.ClickGUIScreen;
+import net.minecraft.client.Minecraft;
+import org.lwjgl.glfw.GLFW;
+
+public class ClickGUI extends Module {
+ public ClickGUI() {
+ super("ClickGUI", "GUI to manage modules.", GLFW.GLFW_KEY_RIGHT_SHIFT, Category.MISC);
+ }
+
+ @Override
+ protected void onEnable() {
+ Minecraft.getInstance().setScreen(ClickGUIScreen.INSTANCE);
+ }
+
+ @Override
+ protected void onDisable() {
+ Minecraft.getInstance().setScreen(null);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Criticals.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Criticals.java
new file mode 100644
index 0000000..e8eaa7f
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Criticals.java
@@ -0,0 +1,86 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.ArslaansMagicHaxClient;
+import com.arslaancodes.arslaansmagichax.events.PacketEvent;
+import com.arslaancodes.arslaansmagichax.events.SendPacketEventBus;
+import com.arslaancodes.arslaansmagichax.mixininterface.IPacket;
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import com.arslaancodes.arslaansmagichax.modules.settings.ModeSetting;
+import net.minecraft.network.packet.c2s.play.*;
+import net.minecraft.network.protocol.Packet;
+import net.minecraft.network.protocol.game.ServerboundInteractPacket;
+import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
+import net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket;
+import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket;
+import net.minecraft.world.entity.player.Input;
+import java.util.Objects;
+
+public class Criticals extends Module {
+ private static ModeSetting mode = new ModeSetting("Mode", "Packet", "Packet", "Bypass");
+
+ public Criticals() {
+ super("Criticals", "Always gives critical hits.", -1, Category.COMBAT);
+ SendPacketEventBus.register(Criticals::packetEventListener);
+ addSetting(mode);
+ }
+
+ private static void packetEventListener(PacketEvent.Send event) {
+ if (!ArslaansMagicHaxClient.criticals.isEnabled() || mc.player == null) return;
+
+ String obamaHaveDih = "barapbarapba"; // kinda put it in mbappe
+
+ Packet<?> packet = event.packet();
+
+ // mojang did a mojang thing and you cant detect if packet is InteractType.ATTACK anymore so just assume it is and pray it works
+ if (packet instanceof ServerboundInteractPacket && ((IPacket) packet).hax$getTag() != 1337) {
+ event.setCancelled(true);
+
+ if (Objects.equals(mode.getMode(), "Packet")) {
+ // fake not sprinting if sprinting so it lets you crit
+ boolean wasSprinting = false;
+
+ if (mc.player.isSprinting()) {
+ Input fakeNoSprint = new Input(false, false, false, false, false, false, false);
+ mc.player.connection.send(new ServerboundPlayerInputPacket(fakeNoSprint));
+
+ ServerboundPlayerCommandPacket fakeNoSprintCommand = new ServerboundPlayerCommandPacket(mc.player, ServerboundPlayerCommandPacket.Action.STOP_SPRINTING);
+ mc.player.connection.send(fakeNoSprintCommand);
+
+ wasSprinting = true;
+ }
+
+ sendYPacket(0.0625);
+ sendYPacket(0);
+
+ ((IPacket) packet).hax$setTag(1337);
+ mc.player.connection.send(packet);
+
+ // send sprinting packet again just in case it stopped the player from sprinting client-side (happens)
+ if (wasSprinting) {
+ Input fakeNoSprint = new Input(false, false, false, false, false, false, true);
+ mc.player.connection.send(new ServerboundPlayerInputPacket(fakeNoSprint));
+
+ ServerboundPlayerCommandPacket fakeNoSprintCommand = new ServerboundPlayerCommandPacket(mc.player, ServerboundPlayerCommandPacket.Action.START_SPRINTING);
+ mc.player.connection.send(fakeNoSprintCommand);
+
+ mc.player.setSprinting(true);
+ }
+ } else if (Objects.equals(mode.getMode(), "Bypass")) {
+ // don't do the sprint bypass and make it more random-looking to throw off anticheat
+ sendYPacket(0.0625 + (Math.random() * 0.01));
+ sendYPacket(0.0);
+ }
+ }
+ }
+
+ private static void sendYPacket(double height) {
+ double x = mc.player.getX();
+ double y = mc.player.getY();
+ double z = mc.player.getZ();
+
+ ServerboundMovePlayerPacket packet = new ServerboundMovePlayerPacket.Pos(x, y + height, z, false, mc.player.horizontalCollision);
+
+ mc.player.connection.send(packet);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/FakeSneak.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/FakeSneak.java
new file mode 100644
index 0000000..8154a20
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/FakeSneak.java
@@ -0,0 +1,29 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.ArslaansMagicHaxClient;
+import com.arslaancodes.arslaansmagichax.events.PacketEvent;
+import com.arslaancodes.arslaansmagichax.events.SendPacketEventBus;
+import com.arslaancodes.arslaansmagichax.mixininterface.IPacket;
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import net.minecraft.network.protocol.Packet;
+import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket;
+import net.minecraft.world.entity.player.Input;
+
+public class FakeSneak extends Module {
+ public FakeSneak() {
+ super("Fake Sneak", "Makes you appear as sneaking to the server when you're not. Can be used to hide nametags.", -1, Category.MOVEMENT);
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ Input original = mc.player.input.keyPresses;
+
+ Input fakeSneak = new Input(original.forward(), original.backward(), original.left(), original.right(), original.jump(), true, original.sprint());
+ Packet fakeSneakPacket = new ServerboundPlayerInputPacket(fakeSneak);
+ ((IPacket) fakeSneakPacket).hax$setTag(1337);
+ mc.player.connection.send(fakeSneakPacket);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Flight.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Flight.java
new file mode 100644
index 0000000..c1a9125
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Flight.java
@@ -0,0 +1,61 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
+import org.lwjgl.glfw.GLFW;
+
+public class Flight extends Module {
+ private int flyingTickCounter = 0;
+ private boolean sentFirstPacket = false;
+
+ public Flight() {
+ super("Flight", "Enables creative flight in survival.", GLFW.GLFW_KEY_G, Category.MOVEMENT);
+ }
+
+ @Override
+ protected void onEnable() {
+ if (mc.player == null) return;
+ mc.player.displayClientMessage(Component.literal("[Flight] It is recommended to use this hack in combination with NoFall."), false);
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ mc.player.getAbilities().mayfly = true;
+ mc.player.getAbilities().flying = true;
+
+ if (flyingTickCounter >= 20) {
+ if (!sentFirstPacket) {
+ sendYPacket(-0.0625);
+ sentFirstPacket = true;
+ } else {
+ sendYPacket(0);
+ sentFirstPacket = false;
+ flyingTickCounter = 0;
+ }
+ }
+ flyingTickCounter++;
+ }
+
+
+ @Override
+ protected void onDisable() {
+ if (mc.player != null) {
+ mc.player.getAbilities().mayfly = false;
+ mc.player.getAbilities().flying = false;
+ }
+ }
+
+ private static void sendYPacket(double height) {
+ double x = mc.player.getX();
+ double y = mc.player.getY();
+ double z = mc.player.getZ();
+
+ ServerboundMovePlayerPacket packet = new ServerboundMovePlayerPacket.Pos(x, y + height, z, false, mc.player.horizontalCollision);
+
+ mc.player.connection.send(packet);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Fullbright.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Fullbright.java
new file mode 100644
index 0000000..56b0800
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Fullbright.java
@@ -0,0 +1,85 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import com.arslaancodes.arslaansmagichax.modules.settings.ModeSetting;
+import java.util.Objects;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.world.effect.MobEffectInstance;
+import net.minecraft.world.effect.MobEffects;
+
+public class Fullbright extends Module {
+ public ModeSetting mode = new ModeSetting("Mode", "Gamma", "Effect", "Gamma", "Effect + Gamma", "Break AO Renderer");
+ private double previousGamma = 1.0;
+ private boolean setPreviousGamma = false;
+ private String lastMode = ""; // track previous mode
+
+ public Fullbright() {
+ super("Fullbright", "Brightens up your world!", -1, Category.RENDER);
+ addSetting(mode);
+ lastMode = mode.getMode(); // initialize
+ }
+
+ @Override
+ protected void onEnable() {
+ if (mc.options == null) return;
+ applyMode(mode.getMode());
+
+ if (mc.levelRenderer != null) {
+ mc.levelRenderer.allChanged();
+ }
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ String currentMode = mode.getMode();
+ if (!Objects.equals(currentMode, lastMode)) {
+ applyMode(currentMode);
+
+ if (mc.levelRenderer != null) {
+ mc.levelRenderer.allChanged();
+ }
+
+ lastMode = currentMode;
+ }
+
+ if (Objects.equals(currentMode, "Effect")) {
+ mc.player.addEffect(new MobEffectInstance(BuiltInRegistries.MOB_EFFECT.wrapAsHolder(MobEffects.NIGHT_VISION.value()), 1, 255));
+ } else if (Objects.equals(currentMode, "Effect + Gamma")) {
+ mc.player.addEffect(new MobEffectInstance(BuiltInRegistries.MOB_EFFECT.wrapAsHolder(MobEffects.NIGHT_VISION.value()), 1, 255));
+ }
+ }
+
+ private void applyMode(String modeName) {
+ if (Objects.equals(modeName, "Gamma")) {
+ if (!setPreviousGamma) previousGamma = mc.options.gamma().get();
+ setPreviousGamma = true;
+ mc.options.gamma().set(1000.0);
+ } else if (Objects.equals(modeName, "Effect + Gamma")) {
+ if (!setPreviousGamma) previousGamma = mc.options.gamma().get();
+ setPreviousGamma = true;
+ mc.options.gamma().set(1000.0);
+ } else if (Objects.equals(modeName, "Effect")) {
+ mc.options.gamma().set(previousGamma);
+ setPreviousGamma = false;
+ }
+ }
+
+ @Override
+ protected void onDisable() {
+ if (mc.player == null) return;
+
+ if (mc.player.hasEffect(BuiltInRegistries.MOB_EFFECT.wrapAsHolder(MobEffects.NIGHT_VISION.value()))) {
+ mc.player.removeEffect(BuiltInRegistries.MOB_EFFECT.wrapAsHolder(MobEffects.NIGHT_VISION.value()));
+ }
+
+ mc.options.gamma().set(previousGamma);
+
+ if (mc.levelRenderer != null) {
+ mc.levelRenderer.allChanged();
+ }
+ }
+}
+
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GUN.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GUN.java
new file mode 100644
index 0000000..a9b2b7b
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GUN.java
@@ -0,0 +1,32 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.ArslaansMagicHaxClient;
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import net.minecraft.ChatFormatting;
+import net.minecraft.network.chat.Component;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.sounds.SoundEvent;
+
+public class GUN extends Module {
+ public GUN() {
+ super("G U N", "NoAttackCooldown + Criticals + AutoClicker = G U N", -1, Category.COMBAT);
+ }
+
+ @Override
+ protected void onEnable() {
+ ArslaansMagicHaxClient.clickGUI.setEnabled(false);
+ ArslaansMagicHaxClient.noAttackCooldown.setEnabled(true);
+ ArslaansMagicHaxClient.criticals.setEnabled(true);
+ ArslaansMagicHaxClient.autoClicker.setEnabled(true);
+ this.setEnabled(false);
+ if (mc.player != null) {
+ mc.player.displayClientMessage(Component.literal("[G U N] Enabled NoAttackCooldown, Criticals, AutoClicker"), false);
+ mc.player.displayClientMessage(Component.literal("[G U N] Disabled ClickGUI & self (this is a macro module)"), false);
+ mc.gui.setTitle(Component.literal("G U N").withStyle(ChatFormatting.RED));
+ mc.gui.setSubtitle(Component.literal("THE POWER").withStyle(ChatFormatting.YELLOW));
+ mc.player.displayClientMessage(Component.literal("Tip: when using G U N, if there is no anticheat set AutoClicker mode to NoDelay"), true);
+ mc.player.playSound(SoundEvent.createVariableRangeEvent(ResourceLocation.parse("minecraft:entity.evoker.prepare_wololo")), 100, 1);
+ }
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GhostScaffold.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GhostScaffold.java
new file mode 100644
index 0000000..8f27d35
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GhostScaffold.java
@@ -0,0 +1,23 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import net.minecraft.core.BlockPos;
+import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.state.BlockState;
+
+public class GhostScaffold extends Module {
+ public GhostScaffold() {
+ super("GhostScaffold", "Allows you to scaffold but with ghost blocks", -1, Category.MOVEMENT);
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null || mc.level == null) return;
+
+ BlockPos pos = mc.player.blockPosition().below();
+ BlockState blockState = Blocks.STONE.defaultBlockState();
+
+ mc.level.setBlockAndUpdate(pos, blockState);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GravityModifier.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GravityModifier.java
new file mode 100644
index 0000000..593963d
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/GravityModifier.java
@@ -0,0 +1,31 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import com.arslaancodes.arslaansmagichax.modules.settings.NumberSetting;
+import net.minecraft.network.chat.Component;
+import net.minecraft.world.phys.Vec3;
+import org.lwjgl.glfw.GLFW;
+
+public class GravityModifier extends Module {
+ private NumberSetting gravity = new NumberSetting("Modifier", -1, 1, 0, 0.01);
+
+ public GravityModifier() {
+ super("Gravity Modifier", "Changes gravity.", GLFW.GLFW_KEY_GRAVE_ACCENT, Category.MOVEMENT);
+ addSetting(gravity);
+ }
+
+ @Override
+ protected void onEnable() {
+ if (mc.player != null) mc.player.displayClientMessage(Component.literal("[Gravity Modifier] It is recommended to use this hack with NoFall."), false);
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ Vec3 velocity = mc.player.getDeltaMovement();
+ Vec3 newVelocity = new Vec3(velocity.x, velocity.y + gravity.getValue(), velocity.z);
+ mc.player.setDeltaMovement(newVelocity);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/HideModulesHUD.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/HideModulesHUD.java
new file mode 100644
index 0000000..9a81291
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/HideModulesHUD.java
@@ -0,0 +1,12 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+
+public class HideModulesHUD extends Module {
+ public HideModulesHUD() {
+ super("Hide Modules HUD", "Hides the list of modules in the top-left of the HUD.", -1, Category.RENDER);
+ }
+
+ // actual shit is in ModuleManager::onRenderHud (if condition to check if this is not enabled)
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Jetpack.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Jetpack.java
new file mode 100644
index 0000000..f1c1bbb
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Jetpack.java
@@ -0,0 +1,32 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import com.arslaancodes.arslaansmagichax.modules.settings.NumberSetting;
+import net.minecraft.network.chat.Component;
+import net.minecraft.world.phys.Vec3;
+
+public class Jetpack extends Module {
+ private NumberSetting speed = new NumberSetting("Thrust Speed", 1, 10, 1, 1);
+
+ public Jetpack() {
+ super("Jetpack", "Turns your jump key into a jetpack.", -1, Category.MOVEMENT);
+ addSetting(speed);
+ }
+
+ @Override
+ protected void onEnable() {
+ if (mc.player == null) return;
+ mc.player.displayClientMessage(Component.literal("[Jetpack] It is recommended to use this hack in combination with NoFall."), false);
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ if (mc.options.keyJump.isDown()) {
+ mc.player.setDeltaMovement(new Vec3(mc.player.getDeltaMovement().x, 0.42 * speed.getValue(), mc.player.getDeltaMovement().z));
+ mc.player.fallDistance = 0;
+ }
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoAttackCooldown.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoAttackCooldown.java
new file mode 100644
index 0000000..3b8db2a
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoAttackCooldown.java
@@ -0,0 +1,12 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+
+public class NoAttackCooldown extends Module {
+ public NoAttackCooldown() {
+ super("NoAttackCooldown", "Removes attack cooldown", -1, Category.COMBAT);
+ }
+
+ // removing cooldown handled in PlayerEntityMixin
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoFall.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoFall.java
new file mode 100644
index 0000000..927b435
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoFall.java
@@ -0,0 +1,25 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
+
+public class NoFall extends Module {
+ public NoFall() {
+ super("NoFall", "Negates fall damage.", -1, Category.PLAYER);
+ }
+
+ @Override
+ public void tick() {
+ if (this.isEnabled()) {
+ if (mc.player != null) {
+ if (!mc.player.onGround() && mc.player.fallDistance > 3) {
+ // magic hax
+ ServerboundMovePlayerPacket packet = new ServerboundMovePlayerPacket.PosRot(mc.player.getX(), mc.player.getY() + 0.000000001, mc.player.getZ(),
+ mc.player.getYRot(), mc.player.getXRot(), false, mc.player.horizontalCollision);
+ mc.player.connection.send(packet);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoPackets.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoPackets.java
new file mode 100644
index 0000000..cd25a3d
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/NoPackets.java
@@ -0,0 +1,23 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.ArslaansMagicHaxClient;
+import com.arslaancodes.arslaansmagichax.events.SendPacketEventBus;
+import com.arslaancodes.arslaansmagichax.events.PacketEvent;
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import net.minecraft.network.chat.Component;
+
+public class NoPackets extends Module {
+ public NoPackets() {
+ super("NoPackets", "Stops all outgoing packets from being sent. ONLY USE THIS IF YOU KNOW WHAT YOU ARE DOING!", -1, Category.MISC);
+ SendPacketEventBus.register(NoPackets::packetEventListener);
+ }
+
+ private static void packetEventListener(PacketEvent.Send event) {
+ if (!ArslaansMagicHaxClient.noPackets.isEnabled()) return;
+
+ if (mc.player != null) mc.player.displayClientMessage(Component.literal("Cancelled outgoing packet: " + event.packet().getClass().getSimpleName() + " -> " + event.packet()), false);
+
+ event.setCancelled(true);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Poseidon.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Poseidon.java
new file mode 100644
index 0000000..260e836
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Poseidon.java
@@ -0,0 +1,21 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.world.effect.MobEffectInstance;
+import net.minecraft.world.effect.MobEffects;
+
+public class Poseidon extends Module {
+ public Poseidon() {
+ super("Poseidon", "Stops you from drowning.", -1, Category.PLAYER);
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ mc.player.setAirSupply(mc.player.getMaxAirSupply());
+ mc.player.addEffect(new MobEffectInstance(BuiltInRegistries.MOB_EFFECT.wrapAsHolder(MobEffects.WATER_BREATHING.value()), 1, 255));
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Speed.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Speed.java
new file mode 100644
index 0000000..fe2b95f
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Speed.java
@@ -0,0 +1,58 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+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.chat.Component;
+
+public class Speed extends Module {
+ private final NumberSetting speed = new NumberSetting("Speed", 0.1, 2.0, 0.4, 0.05);
+ private final BooleanSetting enableWhileSneaking = new BooleanSetting("Enable while Sneaking", true);
+ private final BooleanSetting enableInWater = new BooleanSetting("Enable in Water", true);
+ private final BooleanSetting enableInLava = new BooleanSetting("Enable in Lava", true);
+
+ public Speed() {
+ super("Speed", "Makes you faster.", -1, Category.MOVEMENT);
+ addSetting(speed);
+ addSetting(enableWhileSneaking);
+ addSetting(enableInWater);
+ addSetting(enableInLava);
+ }
+
+ @Override
+ protected void onEnable() {
+ if (mc.player == null) return;
+ mc.player.displayClientMessage(Component.literal("[Speed] It is recommended to use this hack in combination with NoFall."), false);
+ }
+
+ @Override
+ public void tick() {
+ if (!isEnabled() || mc.player == null) return;
+ if (!enableWhileSneaking.isEnabled() && mc.player.isShiftKeyDown()) return;
+ if (!enableInLava.isEnabled() && mc.player.isInLava()) return;
+ if (!enableInWater.isEnabled() && mc.player.isInWater()) return;
+
+ float forward = mc.player.zza;
+ float strafe = mc.player.xxa;
+ float yaw = mc.player.getYRot();
+
+ if (forward == 0 && strafe == 0) return;
+
+ if (forward != 0) {
+ if (strafe > 0) yaw += (forward > 0 ? -45 : 45);
+ else if (strafe < 0) yaw += (forward > 0 ? 45 : -45);
+ strafe = 0;
+ forward = forward > 0 ? 1 : -1;
+ }
+
+ double rad = Math.toRadians(yaw);
+ double sin = Math.sin(rad);
+ double cos = Math.cos(rad);
+
+ double x = (forward * -sin + strafe * cos) * speed.getValue();
+ double z = (forward * cos - strafe * -sin) * speed.getValue();
+
+ mc.player.setDeltaMovement(x, mc.player.getDeltaMovement().y, z);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Spider.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Spider.java
new file mode 100644
index 0000000..87a6e12
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Spider.java
@@ -0,0 +1,33 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import com.arslaancodes.arslaansmagichax.modules.settings.NumberSetting;
+import net.minecraft.network.chat.Component;
+import net.minecraft.world.phys.Vec3;
+
+public class Spider extends Module {
+ private NumberSetting climbSpeed = new NumberSetting("Climb Speed", 0, 1, 0.2, 0.1);
+
+ @Override
+ protected void onEnable() {
+ if (mc.player == null) return;
+ mc.player.displayClientMessage(Component.literal("[Spider] It is recommended to use this hack in combination with NoFall."), false);
+ }
+
+ public Spider() {
+ super("Spider", "Allows you to climb walls like a spider.", -1, Category.MOVEMENT);
+ addSetting(climbSpeed);
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+ if (!mc.player.horizontalCollision) return;
+
+ Vec3 velocity = mc.player.getDeltaMovement();
+ if (velocity.y >= 0.2) return;
+
+ mc.player.setDeltaMovement(velocity.x, climbSpeed.getValue(), velocity.z);
+ }
+}
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);
+ }
+}
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Waterwalk.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Waterwalk.java
new file mode 100644
index 0000000..7949203
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Waterwalk.java
@@ -0,0 +1,28 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import net.minecraft.core.BlockPos;
+import net.minecraft.world.level.block.Blocks;
+
+public class Waterwalk extends Module {
+ public Waterwalk() {
+ super("Waterwalk", "Allows you to walk on water.", -1, Category.MOVEMENT);
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ BlockPos blockBelow = mc.player.blockPosition().below();
+
+ if (mc.level.getBlockState(blockBelow).is(Blocks.WATER)) {
+ if (mc.player.getDeltaMovement().y < 0) {
+ mc.player.setDeltaMovement(mc.player.getDeltaMovement().x, 0.0, mc.player.getDeltaMovement().z);
+
+ if (!mc.player.isJumping()) mc.player.setPosRaw(mc.player.getX(), Math.floor(mc.player.getY()), mc.player.getZ());
+ }
+ mc.player.setOnGround(true);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Xray.java b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Xray.java
new file mode 100644
index 0000000..51e16ca
--- /dev/null
+++ b/src/main/java/com/arslaancodes/arslaansmagichax/modules/impl/Xray.java
@@ -0,0 +1,65 @@
+package com.arslaancodes.arslaansmagichax.modules.impl;
+
+import com.arslaancodes.arslaansmagichax.modules.Category;
+import com.arslaancodes.arslaansmagichax.modules.Module;
+import com.arslaancodes.arslaansmagichax.modules.settings.ModeSetting;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import net.minecraft.network.chat.Component;
+import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.state.BlockState;
+
+public class Xray extends Module {
+ private List<BlockState> interestingBlocks = new ArrayList<>();
+
+ public Xray() {
+ super("Xray", "Allows you to see through blocks.", -1, Category.RENDER);
+
+ // Add ores, spawners, liquids, etc.
+ interestingBlocks.add(Blocks.DIAMOND_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.DEEPSLATE_DIAMOND_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.GOLD_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.DEEPSLATE_GOLD_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.IRON_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.DEEPSLATE_IRON_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.REDSTONE_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.DEEPSLATE_REDSTONE_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.LAPIS_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.DEEPSLATE_LAPIS_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.EMERALD_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.DEEPSLATE_EMERALD_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.COAL_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.DEEPSLATE_COAL_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.COPPER_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.DEEPSLATE_COPPER_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.NETHER_QUARTZ_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.NETHER_GOLD_ORE.defaultBlockState());
+ interestingBlocks.add(Blocks.SPAWNER.defaultBlockState());
+ interestingBlocks.add(Blocks.CHEST.defaultBlockState());
+ interestingBlocks.add(Blocks.ANCIENT_DEBRIS.defaultBlockState());
+ interestingBlocks.add(Blocks.GLOWSTONE.defaultBlockState());
+ interestingBlocks.add(Blocks.WATER.defaultBlockState());
+ interestingBlocks.add(Blocks.LAVA.defaultBlockState());
+ }
+
+ @Override
+ protected void onEnable() {
+ if (mc.levelRenderer != null) mc.levelRenderer.allChanged();
+
+ if (mc.player != null) mc.player.displayClientMessage(Component.literal("[Xray] It is recommended to use this hack with Fullbright for a better experience."), false);
+ }
+
+
+ @Override
+ protected void onDisable() {
+ if (mc.levelRenderer != null) mc.levelRenderer.allChanged();
+ }
+
+ public boolean isInterestingBlock(BlockState state) {
+ return interestingBlocks.contains(state);
+ }
+
+ // xraying is handled in BlockMixin.java
+}
+