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/net/justlearning/arslaan3102/arslaansmagichax/modules | |
| 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/net/justlearning/arslaan3102/arslaansmagichax/modules')
15 files changed, 618 insertions, 8 deletions
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); +} |
