summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2025-10-08 22:44:10 +1300
committerArslaan Pathan <[email protected]>2025-10-08 22:44:10 +1300
commit90f0c0722175466856b82ef65ada129eb972c425 (patch)
treec80ab1c31b3e56066a7c6daa9bdd67c6bd4197cf /src/main/java
parent9db037f2508ce99f51f6b9fee54a8e1ad12fe566 (diff)
downloadarslaansmagichax-90f0c0722175466856b82ef65ada129eb972c425.tar.xz
arslaansmagichax-90f0c0722175466856b82ef65ada129eb972c425.zip
finish clickgui, add more hacks, add settings, add mixins, add packet event buses and packet events, what the cook why did i put so much shit in one commit
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java21
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/events/PacketEvent.java18
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/events/SendPacketEventBus.java18
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/ClientCommonNetworkHandlerMixin.java23
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/DoubleSliderCallbacksMixin.java19
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerInteractEntityC2SPacketMixin.java17
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerMoveC2SPacketMixin.java16
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixininterface/IPacket.java6
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/Module.java50
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java60
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/AutoClicker.java48
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/ClickGUI.java2
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Criticals.java84
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Flight.java10
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Fullbright.java64
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/GUN.java19
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/NoPackets.java23
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Speed.java51
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Spider.java26
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/BooleanSetting.java33
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/ModeSetting.java65
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/NumberSetting.java66
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/Setting.java25
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIModuleButton.java45
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/ClickGUIScreen.java (renamed from src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIScreen.java)12
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/Frame.java (renamed from src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIFrame.java)48
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/ModuleButton.java100
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/CheckBox.java35
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/Component.java37
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/ModeBox.java39
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/Slider.java65
31 files changed, 1072 insertions, 73 deletions
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java
index 3253fd5..9733fec 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java
@@ -2,6 +2,7 @@ package net.justlearning.arslaan3102.arslaansmagichax;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.justlearning.arslaan3102.arslaansmagichax.commands.*;
import net.justlearning.arslaan3102.arslaansmagichax.modules.ModuleManager;
@@ -15,6 +16,13 @@ public class ArslaansMagicHaxClient implements ClientModInitializer {
public static GhostScaffold ghostScaffold = new GhostScaffold();
public static ClickGUI clickGUI = new ClickGUI();
public static FakeSneak fakeSneak = new FakeSneak();
+ public static NoPackets noPackets = new NoPackets();
+ public static Criticals criticals = new Criticals();
+ public static AutoClicker autoClicker = new AutoClicker();
+ public static GUN gun = new GUN();
+ public static Spider spider = new Spider();
+ public static Speed speed = new Speed();
+ public static Fullbright fullbright = new Fullbright();
@Override
public void onInitializeClient() {
@@ -32,12 +40,25 @@ public class ArslaansMagicHaxClient implements ClientModInitializer {
ModuleManager.INSTANCE.register(ghostScaffold);
ModuleManager.INSTANCE.register(clickGUI);
ModuleManager.INSTANCE.register(fakeSneak);
+ ModuleManager.INSTANCE.register(noPackets);
+ ModuleManager.INSTANCE.register(criticals);
+ ModuleManager.INSTANCE.register(autoClicker);
+ ModuleManager.INSTANCE.register(gun);
+ ModuleManager.INSTANCE.register(spider);
+ ModuleManager.INSTANCE.register(speed);
+ ModuleManager.INSTANCE.register(fullbright);
ModuleManager.INSTANCE.registerHUD();
+ ModuleManager.INSTANCE.loadModuleStates();
+
ClientTickEvents.END_CLIENT_TICK.register(mc -> {
ModuleManager.tick();
}
);
+
+ ClientLifecycleEvents.CLIENT_STOPPING.register(client -> {
+ ModuleManager.INSTANCE.close();
+ });
}
}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/events/PacketEvent.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/events/PacketEvent.java
new file mode 100644
index 0000000..654d2d8
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/events/PacketEvent.java
@@ -0,0 +1,18 @@
+package net.justlearning.arslaan3102.arslaansmagichax.events;
+
+import net.minecraft.network.packet.Packet;
+
+public final class PacketEvent {
+ private PacketEvent() {}
+
+ public static final class Send {
+ private final Packet<?> packet;
+ private boolean cancelled;
+
+ public Send(Packet<?> packet) { this.packet = packet; }
+
+ public Packet<?> packet() { return packet; }
+ public void setCancelled(boolean c) { cancelled = c; }
+ public boolean isCancelled() { return cancelled; }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/events/SendPacketEventBus.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/events/SendPacketEventBus.java
new file mode 100644
index 0000000..6f717ce
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/events/SendPacketEventBus.java
@@ -0,0 +1,18 @@
+package net.justlearning.arslaan3102.arslaansmagichax.events;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Consumer;
+
+public class SendPacketEventBus {
+ private static final List<Consumer<PacketEvent.Send>> listeners = new CopyOnWriteArrayList<>();
+
+ public static void register(Consumer<PacketEvent.Send> listener) {
+ listeners.add(listener);
+ }
+
+ public static void post(PacketEvent.Send ev) {
+ for (Consumer<PacketEvent.Send> l : listeners) l.accept(ev);
+ }
+}
+
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/ClientCommonNetworkHandlerMixin.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/ClientCommonNetworkHandlerMixin.java
new file mode 100644
index 0000000..bd32c63
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/ClientCommonNetworkHandlerMixin.java
@@ -0,0 +1,23 @@
+package net.justlearning.arslaan3102.arslaansmagichax.mixin;
+
+import net.justlearning.arslaan3102.arslaansmagichax.events.SendPacketEventBus;
+import net.justlearning.arslaan3102.arslaansmagichax.events.PacketEvent;
+import net.minecraft.client.network.ClientCommonNetworkHandler;
+import net.minecraft.network.packet.Packet;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(ClientCommonNetworkHandler.class)
+public class ClientCommonNetworkHandlerMixin {
+ @Inject(method = "sendPacket", at = @At("HEAD"), cancellable = true)
+ private void onSendPacket(Packet<?> packet, CallbackInfo ci) {
+ PacketEvent.Send ev = new PacketEvent.Send(packet);
+ SendPacketEventBus.post(ev);
+
+ if (ev.isCancelled()) {
+ ci.cancel();
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/DoubleSliderCallbacksMixin.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/DoubleSliderCallbacksMixin.java
new file mode 100644
index 0000000..5d30871
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/DoubleSliderCallbacksMixin.java
@@ -0,0 +1,19 @@
+package net.justlearning.arslaan3102.arslaansmagichax.mixin;
+
+import net.justlearning.arslaan3102.arslaansmagichax.ArslaansMagicHaxClient;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+import java.util.Optional;
+
+@Mixin(targets = "net.minecraft.client.option.SimpleOption$DoubleSliderCallbacks")
+public class DoubleSliderCallbacksMixin {
+ @Inject(method = "validate", at = @At("HEAD"), cancellable = true)
+ private void allowHighGamma(Double value, CallbackInfoReturnable<Optional<Double>> cir) {
+ if (ArslaansMagicHaxClient.fullbright.isEnabled()) {
+ cir.setReturnValue(Optional.of(value));
+ }
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerInteractEntityC2SPacketMixin.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerInteractEntityC2SPacketMixin.java
new file mode 100644
index 0000000..e99351c
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerInteractEntityC2SPacketMixin.java
@@ -0,0 +1,17 @@
+package net.justlearning.arslaan3102.arslaansmagichax.mixin;
+
+import net.justlearning.arslaan3102.arslaansmagichax.mixininterface.IPacket;
+import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket;
+import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
+import org.spongepowered.asm.mixin.Mixin;
+
+@Mixin(PlayerInteractEntityC2SPacket.class)
+public abstract class PlayerInteractEntityC2SPacketMixin implements IPacket {
+ private int tag = -1;
+
+ @Override
+ public void hax$setTag(int value) { tag = value; }
+
+ @Override
+ public int hax$getTag() { return tag; }
+} \ No newline at end of file
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerMoveC2SPacketMixin.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerMoveC2SPacketMixin.java
new file mode 100644
index 0000000..77ed3b1
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerMoveC2SPacketMixin.java
@@ -0,0 +1,16 @@
+package net.justlearning.arslaan3102.arslaansmagichax.mixin;
+
+import net.justlearning.arslaan3102.arslaansmagichax.mixininterface.IPacket;
+import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
+import org.spongepowered.asm.mixin.Mixin;
+
+@Mixin(PlayerMoveC2SPacket.class)
+public abstract class PlayerMoveC2SPacketMixin implements IPacket {
+ private int tag = -1;
+
+ @Override
+ public void hax$setTag(int value) { tag = value; }
+
+ @Override
+ public int hax$getTag() { return tag; }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixininterface/IPacket.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixininterface/IPacket.java
new file mode 100644
index 0000000..96c473c
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixininterface/IPacket.java
@@ -0,0 +1,6 @@
+package net.justlearning.arslaan3102.arslaansmagichax.mixininterface;
+
+public interface IPacket {
+ void hax$setTag(int value);
+ int hax$getTag();
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/Module.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/Module.java
index 9334a53..f42b473 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/Module.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/Module.java
@@ -1,13 +1,22 @@
package net.justlearning.arslaan3102.arslaansmagichax.modules;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.BooleanSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.ModeSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.NumberSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.Setting;
import net.minecraft.client.MinecraftClient;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
public abstract class Module {
private final String name;
private final String description;
private final Category category;
- public MinecraftClient mc;
- private final int glfwKeybinding;
+ public static MinecraftClient mc;
+ private int glfwKeybinding;
+ private final List<Setting> settings = new ArrayList<>();
private boolean enabled = false;
@@ -49,8 +58,45 @@ public abstract class Module {
if (enabled != state) toggle();
}
+ public void setGlfwKeybinding(int glfwKeybinding) {
+ this.glfwKeybinding = glfwKeybinding;
+ }
+
protected void onEnable() {}
protected void onDisable() {}
public void tick() {}
+
+ protected <T extends Setting> T addSetting(T setting) {
+ settings.add(setting);
+ return setting;
+ }
+
+ public List<Setting> getSettings() {
+ return settings;
+ }
+
+ public Optional<Setting> getSetting(String name) {
+ return settings.stream()
+ .filter(s -> s.getName().equalsIgnoreCase(name))
+ .findFirst();
+ }
+
+ public Optional<BooleanSetting> getBoolean(String name) {
+ return getSetting(name)
+ .filter(s -> s instanceof BooleanSetting)
+ .map(s -> (BooleanSetting) s);
+ }
+
+ public Optional<NumberSetting> getNumber(String name) {
+ return getSetting(name)
+ .filter(s -> s instanceof NumberSetting)
+ .map(s -> (NumberSetting) s);
+ }
+
+ public Optional<ModeSetting> getMode(String name) {
+ return getSetting(name)
+ .filter(s -> s instanceof ModeSetting)
+ .map(s -> (ModeSetting) s);
+ }
} \ No newline at end of file
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java
index 24c24ae..95aa499 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java
@@ -1,6 +1,8 @@
package net.justlearning.arslaan3102.arslaansmagichax.modules;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
+import net.justlearning.arslaan3102.arslaansmagichax.ArslaansMagicHax;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.Setting;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
@@ -9,11 +11,16 @@ import net.minecraft.client.util.InputUtil;
import net.minecraft.text.Text;
import net.minecraft.util.math.MathHelper;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
public class ModuleManager {
private boolean hudRegistered = false;
+ private static final String CONFIG_FILE = "ArslaansMagicHax.properties";
private static Map<Module, Boolean> previousKeyState = new HashMap<>();
@@ -94,4 +101,57 @@ public class ModuleManager {
y += textRenderer.fontHeight + 2;
}
}
+
+ public void close() {
+ for (Module module : modules) {
+ module.onDisable();
+ }
+ saveModuleStates();
+ }
+
+ public void loadModuleStates() {
+ File file = new File(CONFIG_FILE);
+ if (!file.exists()) return;
+
+ try (FileInputStream fis = new FileInputStream(file)) {
+ Properties properties = new Properties();
+ properties.load(fis);
+
+ for (Module module : modules) {
+ String enabled = properties.getProperty(module.getName() + ".enabled");
+ if ("true".equals(enabled)) {
+ module.setEnabled(true);
+ module.onEnable();
+ } else {
+ module.setEnabled(false);
+ }
+
+ for (Setting setting : module.getSettings()) {
+ String value = properties.getProperty(module.getName() + "." + setting.getName());
+ if (value != null) {
+ setting.setValueFromString(value);
+ }
+ }
+ }
+ } catch (IOException e) {
+ ArslaansMagicHax.LOGGER.info("Failed to load module states and settings", e);
+ }
+ }
+
+ private void saveModuleStates() {
+ Properties properties = new Properties();
+ for (Module module : modules) {
+ properties.setProperty(module.getName() + ".enabled", String.valueOf(module.isEnabled()));
+
+ for (Setting setting : module.getSettings()) {
+ properties.setProperty(module.getName() + "." + setting.getName(), setting.getValueAsString());
+ }
+ }
+
+ try (FileOutputStream fos = new FileOutputStream(CONFIG_FILE)) {
+ properties.store(fos, "Arslaan's Magic Hax - Module States & Settings");
+ } catch (IOException e) {
+ ArslaansMagicHax.LOGGER.error("Failed to save module states and settings", e);
+ }
+ }
}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/AutoClicker.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/AutoClicker.java
new file mode 100644
index 0000000..b131f53
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/AutoClicker.java
@@ -0,0 +1,48 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.ModeSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.NumberSetting;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.Hand;
+import net.minecraft.util.hit.EntityHitResult;
+import net.minecraft.util.hit.HitResult;
+
+import java.util.Objects;
+import java.util.Random;
+
+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.world == null) return;
+ if (mc.currentScreen != null) return;
+
+ HitResult hr = mc.crosshairTarget;
+ 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.interactionManager.attackEntity(mc.player, target);
+ mc.player.swingHand(Hand.MAIN_HAND);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/ClickGUI.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/ClickGUI.java
index f5f3a4f..b647887 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/ClickGUI.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/ClickGUI.java
@@ -2,7 +2,7 @@ package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
-import net.justlearning.arslaan3102.arslaansmagichax.screens.ClickGUIScreen;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.ClickGUIScreen;
import net.minecraft.client.MinecraftClient;
import org.lwjgl.glfw.GLFW;
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Criticals.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Criticals.java
new file mode 100644
index 0000000..e539ee7
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Criticals.java
@@ -0,0 +1,84 @@
+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.SendPacketEventBus;
+import net.justlearning.arslaan3102.arslaansmagichax.mixininterface.IPacket;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.ModeSetting;
+import net.minecraft.network.packet.Packet;
+import net.minecraft.network.packet.c2s.play.*;
+import net.minecraft.util.PlayerInput;
+
+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 PlayerInteractEntityC2SPacket && ((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()) {
+ PlayerInput fakeNoSprint = new PlayerInput(false, false, false, false, false, false, false);
+ mc.player.networkHandler.sendPacket(new PlayerInputC2SPacket(fakeNoSprint));
+
+ ClientCommandC2SPacket fakeNoSprintCommand = new ClientCommandC2SPacket(mc.player, ClientCommandC2SPacket.Mode.STOP_SPRINTING);
+ mc.player.networkHandler.sendPacket(fakeNoSprintCommand);
+
+ wasSprinting = true;
+ }
+
+ sendYPacket(0.0625);
+ sendYPacket(0);
+
+ ((IPacket) packet).hax$setTag(1337);
+ mc.player.networkHandler.sendPacket(packet);
+
+ // send sprinting packet again just in case it stopped the player from sprinting client-side (happens)
+ if (wasSprinting) {
+ PlayerInput fakeNoSprint = new PlayerInput(false, false, false, false, false, false, true);
+ mc.player.networkHandler.sendPacket(new PlayerInputC2SPacket(fakeNoSprint));
+
+ ClientCommandC2SPacket fakeNoSprintCommand = new ClientCommandC2SPacket(mc.player, ClientCommandC2SPacket.Mode.START_SPRINTING);
+ mc.player.networkHandler.sendPacket(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.11);
+ sendYPacket(0.1100013579);
+ sendYPacket(0.0000013579);
+ }
+ }
+ }
+
+ private static void sendYPacket(double height) {
+ double x = mc.player.getX();
+ double y = mc.player.getY();
+ double z = mc.player.getZ();
+
+ PlayerMoveC2SPacket packet = new PlayerMoveC2SPacket.PositionAndOnGround(x, y + height, z, false, mc.player.horizontalCollision);
+
+ mc.player.networkHandler.sendPacket(packet);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Flight.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Flight.java
index 63c4a8f..50c4b5e 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Flight.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Flight.java
@@ -10,11 +10,11 @@ public class Flight extends Module {
}
@Override
- protected void onEnable() {
- if (mc.player != null) {
- mc.player.getAbilities().allowFlying = true;
- mc.player.getAbilities().flying = true;
- }
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ mc.player.getAbilities().allowFlying = true;
+ mc.player.getAbilities().flying = true;
}
@Override
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Fullbright.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Fullbright.java
new file mode 100644
index 0000000..3085f02
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Fullbright.java
@@ -0,0 +1,64 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.ModeSetting;
+import net.minecraft.client.option.SimpleOption;
+import net.minecraft.entity.effect.StatusEffectInstance;
+import net.minecraft.entity.effect.StatusEffects;
+import net.minecraft.registry.Registries;
+
+import java.util.Objects;
+
+public class Fullbright extends Module {
+ private ModeSetting mode = new ModeSetting("Mode", "Gamma", "Effect", "Gamma");
+ private SimpleOption<Double> option;
+ private double previousGamma = 1.0;
+ private boolean didSetGamma = false; // in case the mod was initialized on client load/saved state
+
+ public Fullbright() {
+ super("Fullbright", "Brightens up your world!", -1, Category.RENDER);
+ addSetting(mode);
+ }
+
+ @Override
+ protected void onEnable() {
+ if (mc.options == null) return;
+ if (Objects.equals(mode.getMode(), "Gamma")) {
+ previousGamma = mc.options.getGamma().getValue();
+ mc.options.getGamma().setValue(1000.0);
+ }
+ didSetGamma = true;
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null) return;
+
+ if (Objects.equals(mode.getMode(), "Effect")) {
+ if (didSetGamma) {
+ // undo gamma if switching mode
+ mc.options.getGamma().setValue(previousGamma);
+ didSetGamma = false;
+ }
+ mc.player.addStatusEffect(new StatusEffectInstance(Registries.STATUS_EFFECT.getEntry(StatusEffects.NIGHT_VISION.value()), 1, 0));
+ }
+ if (Objects.equals(mode.getMode(), "Gamma")) {
+ if (!didSetGamma) {
+ previousGamma = mc.options.getGamma().getValue();
+ mc.options.getGamma().setValue(1000.0);
+ didSetGamma = true;
+ }
+ }
+ }
+
+ @Override
+ protected void onDisable() {
+ if (mc.player == null) return;
+ if (mc.player.hasStatusEffect(Registries.STATUS_EFFECT.getEntry(StatusEffects.NIGHT_VISION.value()))) {
+ mc.player.removeStatusEffect(Registries.STATUS_EFFECT.getEntry(StatusEffects.NIGHT_VISION.value()));
+ }
+
+ mc.options.getGamma().setValue(previousGamma);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/GUN.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/GUN.java
new file mode 100644
index 0000000..44d3544
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/GUN.java
@@ -0,0 +1,19 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
+
+import net.justlearning.arslaan3102.arslaansmagichax.ArslaansMagicHaxClient;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+
+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.noAttackCooldown.setEnabled(true);
+ ArslaansMagicHaxClient.criticals.setEnabled(true);
+ ArslaansMagicHaxClient.autoClicker.setEnabled(true);
+ this.setEnabled(false);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/NoPackets.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/NoPackets.java
new file mode 100644
index 0000000..db17e91
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/NoPackets.java
@@ -0,0 +1,23 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
+
+import net.justlearning.arslaan3102.arslaansmagichax.ArslaansMagicHaxClient;
+import net.justlearning.arslaan3102.arslaansmagichax.events.SendPacketEventBus;
+import net.justlearning.arslaan3102.arslaansmagichax.events.PacketEvent;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+import net.minecraft.text.Text;
+
+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.sendMessage(Text.literal("Cancelled outgoing packet: " + event.packet().getClass().getSimpleName() + " -> " + event.packet()), false);
+
+ event.setCancelled(true);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Speed.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Speed.java
new file mode 100644
index 0000000..c70c19b
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Speed.java
@@ -0,0 +1,51 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
+
+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;
+
+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
+ public void tick() {
+ if (!isEnabled() || mc.player == null) return;
+ if (!enableWhileSneaking.isEnabled() && mc.player.isSneaking()) return;
+ if (!enableInLava.isEnabled() && mc.player.isInLava()) return;
+ if (!enableInWater.isEnabled() && mc.player.isTouchingWater()) return;
+
+ float forward = mc.player.forwardSpeed;
+ float strafe = mc.player.sidewaysSpeed;
+ float yaw = mc.player.getYaw();
+
+ 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.setVelocity(x, mc.player.getVelocity().y, z);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Spider.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Spider.java
new file mode 100644
index 0000000..9ba3e5c
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/Spider.java
@@ -0,0 +1,26 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.NumberSetting;
+import net.minecraft.util.math.Vec3d;
+
+public class Spider extends Module {
+ private NumberSetting climbSpeed = new NumberSetting("Climb Speed", 0, 1, 0.2, 0.1);
+
+ 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;
+
+ Vec3d velocity = mc.player.getVelocity();
+ if (velocity.y >= 0.2) return;
+
+ mc.player.setVelocity(velocity.x, climbSpeed.getValue(), velocity.z);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/BooleanSetting.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/BooleanSetting.java
new file mode 100644
index 0000000..ac58c30
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/BooleanSetting.java
@@ -0,0 +1,33 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.settings;
+
+public class BooleanSetting extends Setting {
+
+ private boolean enabled;
+
+ public BooleanSetting(String name, boolean defaultValue) {
+ super(name);
+ this.enabled = defaultValue;
+ }
+
+ public void toggle() {
+ this.enabled = !this.enabled;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ @Override
+ public String getValueAsString() {
+ return String.valueOf(enabled);
+ }
+
+ @Override
+ public void setValueFromString(String value) {
+ this.enabled = Boolean.parseBoolean(value);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/ModeSetting.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/ModeSetting.java
new file mode 100644
index 0000000..31ea836
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/ModeSetting.java
@@ -0,0 +1,65 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.settings;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+public class ModeSetting extends Setting {
+
+ private String mode;
+ private List<String> modes;
+ private int index;
+
+ public ModeSetting(String name, String defaultMode, String... modes) {
+ super(name);
+ this.mode = defaultMode;
+ this.modes = Arrays.asList(modes);
+ this.index = this.mode.indexOf(defaultMode);
+ }
+
+ public String getMode() {
+ return mode;
+ }
+
+ public List<String> getModes() {
+ return modes;
+ }
+
+ public void setMode(String mode) {
+ this.mode = mode;
+ this.index = modes.indexOf(mode);
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ this.mode = modes.get(index);
+ }
+
+ public void cycle() {
+ if (index < modes.size() - 1) {
+ index++;
+ mode = modes.get(index);
+ } else if (index >= modes.size() - 1) {
+ index = 0;
+ mode = modes.get(0);
+ }
+ }
+
+ public boolean isMode(String mode) {
+ return Objects.equals(this.mode, mode);
+ }
+
+ @Override
+ public String getValueAsString() {
+ return mode;
+ }
+
+ @Override
+ public void setValueFromString(String value) {
+ setMode(value);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/NumberSetting.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/NumberSetting.java
new file mode 100644
index 0000000..d0f2bee
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/NumberSetting.java
@@ -0,0 +1,66 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.settings;
+
+public class NumberSetting extends Setting {
+
+ private double min, max, increment;
+ private double value;
+
+ public NumberSetting(String name, double min, double max, double defaultValue, double increment) {
+ super(name);
+ this.min = min;
+ this.max = max;
+ this.value = defaultValue;
+ this.increment = increment;
+ }
+
+ public static double clamp(double value, double min, double max) {
+ value = Math.max(min, value);
+ value = Math.min(max, value);
+ return value;
+ }
+
+ public double getValue() {
+ return value;
+ }
+
+ public float getValueFloat() {
+ return (float) value;
+ }
+
+ public int getValueInt() {
+ return (int) value;
+ }
+
+ public double getIncrement() {
+ return increment;
+ }
+
+ public double getMin() {
+ return min;
+ }
+
+ public double getMax() {
+ return max;
+ }
+
+ public void setValue(double value) {
+ value = clamp(value, this.min, this.max);
+ value = Math.round(value * (1.0 / this.increment)) / (1.0 / this.increment);
+ this.value = value;
+ }
+
+ public void increment(boolean positive) {
+ if (positive) setValue(getValue() + getIncrement());
+ else setValue(getValue() - getIncrement());
+ }
+
+ @Override
+ public String getValueAsString() {
+ return String.valueOf(value);
+ }
+
+ @Override
+ public void setValueFromString(String value) {
+ setValue(Double.parseDouble(value));
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/Setting.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/Setting.java
new file mode 100644
index 0000000..a149d83
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/settings/Setting.java
@@ -0,0 +1,25 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.settings;
+
+public abstract class Setting {
+ private String name;
+ private boolean visible = true;
+
+ public Setting(String name) {
+ this.name = name;
+ }
+
+ public boolean isVisible() {
+ return visible;
+ }
+
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public abstract String getValueAsString();
+ public abstract void setValueFromString(String value);
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIModuleButton.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIModuleButton.java
deleted file mode 100644
index a1090a5..0000000
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIModuleButton.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package net.justlearning.arslaan3102.arslaansmagichax.screens;
-
-import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.DrawContext;
-import net.minecraft.text.Text;
-
-import java.awt.Color;
-
-public class ClickGUIModuleButton {
-
- public Module module;
- public ClickGUIFrame parent;
- public int offset;
-
- public ClickGUIModuleButton(Module module, ClickGUIFrame parent, int offset) {
- this.module = module;
- this.parent = parent;
- this.offset = offset;
- }
-
- public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
- int alpha = isHovered(mouseX, mouseY) ? 230 : 160;
- context.fill(parent.x, parent.y + offset, parent.x + parent.width, parent.y + offset + parent.height, new Color(30, 30, 47, alpha).getRGB());
-
- String text = module.getName();
-
- int textX = parent.x + 5;
- int textY = parent.y + offset + (parent.height - parent.mc.textRenderer.fontHeight) / 2;
-
- int textColor = module.isEnabled() ? new Color(252, 210, 77, 255).getRGB() : Color.white.getRGB();
-
- context.drawTextWithShadow(parent.mc.textRenderer, Text.literal(text), textX, textY, textColor);
- }
-
- public void mouseClicked(double mouseX, double mouseY, int button) {
- if (isHovered(mouseX, mouseY) && button == 0) {
- module.toggle();
- }
- }
-
- public boolean isHovered(double mouseX, double mouseY) {
- return mouseX > parent.x && mouseX < parent.x + parent.width && mouseY > parent.y + offset && mouseY < parent.y + offset + parent.height;
- }
-}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIScreen.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/ClickGUIScreen.java
index 0e33107..85458c0 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIScreen.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/ClickGUIScreen.java
@@ -1,4 +1,4 @@
-package net.justlearning.arslaan3102.arslaansmagichax.screens;
+package net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui;
import net.justlearning.arslaan3102.arslaansmagichax.ArslaansMagicHaxClient;
import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
@@ -12,7 +12,7 @@ import java.util.List;
public class ClickGUIScreen extends Screen {
public static final ClickGUIScreen INSTANCE = new ClickGUIScreen();
- private List<ClickGUIFrame> frames;
+ private List<Frame> frames;
private ClickGUIScreen() {
super(Text.literal("ClickGUI"));
@@ -21,14 +21,14 @@ public class ClickGUIScreen extends Screen {
int offset = 20;
for (Category category : Category.values()) {
- frames.add(new ClickGUIFrame(category, offset, 30, 100, 30));
+ frames.add(new Frame(category, offset, 30, 100, 20));
offset += 120;
}
}
@Override
public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
- for (ClickGUIFrame frame : frames) {
+ for (Frame frame : frames) {
frame.render(context, mouseX, mouseY, deltaTicks);
frame.updatePosition(mouseX, mouseY);
}
@@ -37,7 +37,7 @@ public class ClickGUIScreen extends Screen {
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
- for (ClickGUIFrame frame : frames) {
+ for (Frame frame : frames) {
frame.mouseClicked(mouseX, mouseY, button);
}
return super.mouseClicked(mouseX, mouseY, button);
@@ -45,7 +45,7 @@ public class ClickGUIScreen extends Screen {
@Override
public boolean mouseReleased(double mouseX, double mouseY, int button) {
- for (ClickGUIFrame frame : frames) {
+ for (Frame frame : frames) {
frame.mouseReleased(mouseX, mouseY, button);
}
return super.mouseReleased(mouseX, mouseY, button);
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIFrame.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/Frame.java
index 0958162..a959ffc 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/ClickGUIFrame.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/Frame.java
@@ -1,8 +1,9 @@
-package net.justlearning.arslaan3102.arslaansmagichax.screens;
+package net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui;
import net.justlearning.arslaan3102.arslaansmagichax.modules.Category;
import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
import net.justlearning.arslaan3102.arslaansmagichax.modules.ModuleManager;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting.Component;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text;
@@ -10,9 +11,8 @@ import net.minecraft.text.Text;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
-public class ClickGUIFrame {
+public class Frame {
public int x, y, width, height, dragX, dragY;
public Category category;
@@ -20,11 +20,11 @@ public class ClickGUIFrame {
public boolean isOpen = false;
- private List<ClickGUIModuleButton> buttons;
+ private List<ModuleButton> buttons;
protected MinecraftClient mc = MinecraftClient.getInstance();
- public ClickGUIFrame(Category category, int x, int y, int width, int height) {
+ public Frame(Category category, int x, int y, int width, int height) {
this.category = category;
this.x = x;
this.y = y;
@@ -36,10 +36,8 @@ public class ClickGUIFrame {
int offset = height;
for (Module module : ModuleManager.INSTANCE.getModulesWithCategory(category)) {
- if (!Objects.equals(module.getName(), "ClickGUI")) {
- buttons.add(new ClickGUIModuleButton(module, this, offset));
- offset += height;
- }
+ buttons.add(new ModuleButton(module, this, offset));
+ offset += height;
}
}
@@ -47,14 +45,13 @@ public class ClickGUIFrame {
context.fill(x, y, x + width, y + height, new Color(252, 210, 77, 255).getRGB());
String text = category.name();
- int textWidth = mc.textRenderer.getWidth(text);
- int textX = x + (width - textWidth) / 2;
int textY = y + (height - mc.textRenderer.fontHeight) / 2;
- context.drawText(mc.textRenderer, Text.literal(text), textX, textY, new Color(30, 30, 47, 255).getRGB(), false);
+ context.drawText(mc.textRenderer, Text.literal(text), x + 5, textY, new Color(30, 30, 47, 255).getRGB(), false);
+ context.drawText(mc.textRenderer, isOpen ? "-" : "+", x + width - 5 - mc.textRenderer.getWidth("+"), textY, new Color(30, 30, 47, 255).getRGB(), false);
if (isOpen) {
- for (ClickGUIModuleButton button : buttons) {
+ for (ModuleButton button : buttons) {
button.render(context, mouseX, mouseY, deltaTicks);
}
}
@@ -72,7 +69,7 @@ public class ClickGUIFrame {
}
if (isOpen) {
- for (ClickGUIModuleButton moduleButton : buttons) {
+ for (ModuleButton moduleButton : buttons) {
moduleButton.mouseClicked(mouseX, mouseY, button);
}
}
@@ -82,6 +79,12 @@ public class ClickGUIFrame {
if (button == 0 && dragging) {
dragging = false;
}
+
+ if (isOpen) {
+ for (ModuleButton moduleButton : buttons) {
+ moduleButton.mouseReleased(mouseX, mouseY, button);
+ }
+ }
}
public boolean isHovered(double mouseX, double mouseY) {
@@ -94,4 +97,21 @@ public class ClickGUIFrame {
y = (int) (mouseY - dragY);
}
}
+
+ public void updateButtons() {
+ int offset = height;
+
+ for (ModuleButton button : buttons) {
+ button.offset = offset;
+ offset += height;
+
+ if (button.extended) {
+ for (Component component : button.components) {
+ if (component.setting.isVisible()) {
+ offset += height;
+ }
+ }
+ }
+ }
+ }
}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/ModuleButton.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/ModuleButton.java
new file mode 100644
index 0000000..979b81d
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/ModuleButton.java
@@ -0,0 +1,100 @@
+package net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.BooleanSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.ModeSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.NumberSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.Setting;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting.CheckBox;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting.Component;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting.ModeBox;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting.Slider;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.text.Text;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ModuleButton {
+
+ public Module module;
+ public Frame parent;
+ public int offset;
+ public List<Component> components;
+ public boolean extended;
+
+ public ModuleButton(Module module, Frame parent, int offset) {
+ this.module = module;
+ this.parent = parent;
+ this.offset = offset;
+ this.extended = false;
+ this.components = new ArrayList<>();
+
+ int setOffset = parent.height;
+ for (Setting setting : module.getSettings()) {
+ if (setting instanceof BooleanSetting) {
+ components.add(new CheckBox(setting, this, setOffset));
+ } else if (setting instanceof ModeSetting) {
+ components.add(new ModeBox(setting, this, setOffset));
+ } else if (setting instanceof NumberSetting) {
+ components.add(new Slider(setting, this, setOffset));
+ }
+ setOffset += parent.height;
+ }
+ }
+
+ public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
+ int alpha = isHovered(mouseX, mouseY) ? 230 : 160;
+
+ context.fill(parent.x, parent.y + offset, parent.x + parent.width, parent.y + offset + parent.height, new Color(30, 30, 47, alpha).getRGB());
+
+ if (isHovered(mouseX, mouseY)) {
+ context.drawTooltip(Text.literal(module.getDescription()), mouseX, mouseY);
+ }
+
+ String text = module.getName();
+
+ int textX = parent.x + 5;
+ int textY = parent.y + offset + (parent.height - parent.mc.textRenderer.fontHeight) / 2;
+
+ int textColor = module.isEnabled() ? new Color(252, 210, 77, 255).getRGB() : Color.white.getRGB();
+
+ context.drawTextWithShadow(parent.mc.textRenderer, Text.literal(text), textX, textY, textColor);
+
+ if (extended) {
+ for (Component component : components) {
+ component.render(context, mouseX, mouseY, deltaTicks);
+ }
+ }
+ }
+
+ public void mouseClicked(double mouseX, double mouseY, int button) {
+ if (isHovered(mouseX, mouseY)) {
+ if (button == 0) {
+ module.toggle();
+ }
+ else if (button == 1) {
+ extended = !extended;
+ parent.updateButtons();
+ }
+ }
+
+ for (Component component : components) {
+ component.mouseClicked(mouseX, mouseY, button);
+ }
+ }
+
+ public void mouseReleased(double mouseX, double mouseY, int button) {
+ // luigi wins by doing absolutely nothing
+
+ // nevermind we did something
+ for (Component component : components) {
+ component.mouseReleased(mouseX, mouseY, button);
+ }
+ }
+
+ public boolean isHovered(double mouseX, double mouseY) {
+ return mouseX > parent.x && mouseX < parent.x + parent.width && mouseY > parent.y + offset && mouseY < parent.y + offset + parent.height;
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/CheckBox.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/CheckBox.java
new file mode 100644
index 0000000..e6e3ef7
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/CheckBox.java
@@ -0,0 +1,35 @@
+package net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.BooleanSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.Setting;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.ModuleButton;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.text.Text;
+
+import java.awt.*;
+
+public class CheckBox extends Component {
+
+ private BooleanSetting booleanSetting = (BooleanSetting) setting;
+
+ public CheckBox(Setting setting, ModuleButton parent, int offset) {
+ super(setting, parent, offset);
+ this.booleanSetting = (BooleanSetting) setting;
+ }
+
+ @Override
+ public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
+ int alpha = isHovered(mouseX, mouseY) ? 230 : 160;
+ context.fill(parent.parent.x, parent.parent.y + parent.offset + offset, parent.parent.x + parent.parent.width, parent.parent.y + parent.offset + offset + parent.parent.height, new Color(30, 30, 47, alpha).getRGB());
+
+ context.drawTextWithShadow(mc.textRenderer, Text.literal(booleanSetting.getName() + ": " + booleanSetting.isEnabled()), parent.parent.x + 5, parent.parent.y + parent.offset + offset + (parent.parent.height - mc.textRenderer.fontHeight) / 2, Color.white.getRGB());
+ }
+
+ @Override
+ public void mouseClicked(double mouseX, double mouseY, int button) {
+ if (isHovered(mouseX, mouseY) && button == 0) {
+ booleanSetting.toggle();
+ }
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/Component.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/Component.java
new file mode 100644
index 0000000..1622aa5
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/Component.java
@@ -0,0 +1,37 @@
+package net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.Setting;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.ModuleButton;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.DrawContext;
+
+public class Component {
+
+ public Setting setting;
+ public ModuleButton parent;
+ public int offset;
+
+ protected static MinecraftClient mc = MinecraftClient.getInstance();
+
+ public Component(Setting setting, ModuleButton parent, int offset) {
+ this.setting = setting;
+ this.parent = parent;
+ this.offset = offset;
+ }
+
+ public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
+
+ }
+
+ public void mouseClicked(double mouseX, double mouseY, int button) {
+
+ }
+
+ public void mouseReleased(double mouseX, double mouseY, int button) {
+
+ }
+
+ public boolean isHovered(double mouseX, double mouseY) {
+ return mouseX > parent.parent.x && mouseX < parent.parent.x + parent.parent.width && mouseY > parent.parent.y + parent.offset + offset && mouseY < parent.parent.y + parent.offset + offset + parent.parent.height;
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/ModeBox.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/ModeBox.java
new file mode 100644
index 0000000..651cab1
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/ModeBox.java
@@ -0,0 +1,39 @@
+package net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.ModeSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.Setting;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.ModuleButton;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.text.Text;
+
+import java.awt.*;
+
+public class ModeBox extends Component {
+
+ private ModeSetting modeSetting = (ModeSetting) setting;
+
+ public ModeBox(Setting setting, ModuleButton parent, int offset) {
+ super(setting, parent, offset);
+ this.modeSetting = (ModeSetting) setting;
+ }
+
+ @Override
+ public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
+ int alpha = isHovered(mouseX, mouseY) ? 230 : 160;
+ context.fill(parent.parent.x, parent.parent.y + parent.offset + offset, parent.parent.x + parent.parent.width, parent.parent.y + parent.offset + offset + parent.parent.height, new Color(30, 30, 47, alpha).getRGB());
+
+ context.drawTextWithShadow(mc.textRenderer, Text.literal(modeSetting.getName() + ": " + modeSetting.getMode()), parent.parent.x + 5, parent.parent.y + parent.offset + offset + (parent.parent.height - mc.textRenderer.fontHeight) / 2, Color.white.getRGB());
+ }
+
+ @Override
+ public void mouseClicked(double mouseX, double mouseY, int button) {
+ if (isHovered(mouseX, mouseY) && button == 0) {
+ modeSetting.cycle();
+ }
+ }
+
+ @Override
+ public void mouseReleased(double mouseX, double mouseY, int button) {
+ super.mouseReleased(mouseX, mouseY, button);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/Slider.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/Slider.java
new file mode 100644
index 0000000..bf002e3
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/screens/clickgui/setting/Slider.java
@@ -0,0 +1,65 @@
+package net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.setting;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.NumberSetting;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.settings.Setting;
+import net.justlearning.arslaan3102.arslaansmagichax.screens.clickgui.ModuleButton;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.text.Text;
+
+import java.awt.*;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+public class Slider extends Component {
+
+ public NumberSetting numberSetting = (NumberSetting) setting;
+
+ private boolean sliding = false;
+
+ public Slider(Setting setting, ModuleButton parent, int offset) {
+ super(setting, parent, offset);
+ this.numberSetting = (NumberSetting) setting;
+ }
+
+ @Override
+ public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
+ int alpha = isHovered(mouseX, mouseY) ? 230 : 160;
+ context.fill(parent.parent.x, parent.parent.y + parent.offset + offset, parent.parent.x + parent.parent.width, parent.parent.y + parent.offset + offset + parent.parent.height, new Color(30, 30, 47, alpha).getRGB());
+
+ double diff = Math.min(parent.parent.width, Math.max(0, mouseX - parent.parent.x));
+ int renderWidth = (int) (parent.parent.width * (numberSetting.getValue() - numberSetting.getMin()) / (numberSetting.getMax()) - numberSetting.getMin());
+
+ context.fill(parent.parent.x, parent.parent.y + parent.offset + offset, parent.parent.x + renderWidth, parent.parent.y + parent.offset + offset + parent.parent.height, new Color(252, 210, 77, 255).getRGB());
+
+ if (sliding) {
+ if (diff == 0) {
+ numberSetting.setValue(numberSetting.getMin());
+ }
+ else {
+ numberSetting.setValue(roundToPlace((diff / parent.parent.width) * (numberSetting.getMax() - numberSetting.getMin()) + numberSetting.getMin(), 1));
+ }
+ }
+
+ context.drawTextWithShadow(mc.textRenderer, Text.literal(numberSetting.getName() + ": " + numberSetting.getValue()), parent.parent.x + 5, parent.parent.y + parent.offset + offset + (parent.parent.height - mc.textRenderer.fontHeight) / 2, Color.white.getRGB());
+ }
+
+ @Override
+ public void mouseClicked(double mouseX, double mouseY, int button) {
+ if (isHovered(mouseX, mouseY)) sliding = true;
+ }
+
+ @Override
+ public void mouseReleased(double mouseX, double mouseY, int button) {
+ sliding = false;
+ }
+
+ private double roundToPlace(double value, int place) {
+ if (place < 0) {
+ return value;
+ }
+
+ BigDecimal bd = new BigDecimal(value);
+ bd = bd.setScale(place, RoundingMode.HALF_UP);
+ return bd.doubleValue();
+ }
+}