diff options
| author | Arslaan Pathan <[email protected]> | 2025-10-08 22:44:10 +1300 |
|---|---|---|
| committer | Arslaan Pathan <[email protected]> | 2025-10-08 22:44:10 +1300 |
| commit | 90f0c0722175466856b82ef65ada129eb972c425 (patch) | |
| tree | c80ab1c31b3e56066a7c6daa9bdd67c6bd4197cf /src/main/java | |
| parent | 9db037f2508ce99f51f6b9fee54a8e1ad12fe566 (diff) | |
| download | arslaansmagichax-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')
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(); + } +} |
