diff --git a/src/main/java/org/saturnclient/modules/HudMod.java b/src/main/java/org/saturnclient/modules/HudMod.java new file mode 100644 index 0000000..b8b09b5 --- /dev/null +++ b/src/main/java/org/saturnclient/modules/HudMod.java @@ -0,0 +1,11 @@ +package org.saturnclient.modules; + +import org.saturnclient.ui.RenderScope; + +public interface HudMod { + public ModDimensions getDimensions(); + + public void renderDummy(RenderScope scope); + + public void renderHud(RenderScope scope); +} diff --git a/src/main/java/org/saturnclient/modules/ModDimensions.java b/src/main/java/org/saturnclient/modules/ModDimensions.java new file mode 100644 index 0000000..472f97a --- /dev/null +++ b/src/main/java/org/saturnclient/modules/ModDimensions.java @@ -0,0 +1,54 @@ +package org.saturnclient.modules; + +import java.util.Map; + +import org.saturnclient.config.manager.Property; +import org.saturnclient.config.manager.Property.NamedProperty; + +public class ModDimensions { + public Property x = Property.integer(0); + public Property y = Property.integer(0); + public Property scale = Property.floatProp(1.0f); + public Property bgColor = Property.color(0x00000000); + public Property fgColor = Property.color(0xFFffffff); + public Property radius = Property.integer(0); + public Property font = Property.font(0); + public boolean renderBackground = true; + + public int width = 0; + public int height = 0; + + public NamedProperty>> prop() { + return Property.namespace(Map.of( + "X", x, + "Y", y, + "Scale", scale, + "Background Color", bgColor, + "Foreground Color", fgColor, + "Corner Radius", radius, + "Font", font)).named("In-Game Display"); + } + + public ModDimensions() { + } + + public ModDimensions(int width, int height) { + this.width = width; + this.height = height; + } + + public ModDimensions(int x, int y, int width, int height) { + this.x.value = x; + this.y.value = y; + this.width = width; + this.height = height; + } + + public ModDimensions(int x, int y, int width, int height, float scale) { + this.x.value = x; + this.y.value = y; + this.scale.value = scale; + this.width = width; + this.height = height; + } +} diff --git a/src/main/java/org/saturnclient/modules/ModManager.java b/src/main/java/org/saturnclient/modules/ModManager.java new file mode 100644 index 0000000..e4e068e --- /dev/null +++ b/src/main/java/org/saturnclient/modules/ModManager.java @@ -0,0 +1,52 @@ +package org.saturnclient.modules; + +import java.util.ArrayList; +import java.util.List; + +import org.saturnclient.modules.mods.*; + +public class ModManager { + public static final List ENABLED_MODS = new ArrayList<>(); + public static final Module[] ALL_MODS = { + new Crosshair(), + new AutoSprint(), + new ArmorDisplay(), + new Fps(), + new StatusEffects(), + new Coordinates(), + new Freelook(), + new Keystrokes(), + new Fullbright(), + new NoFog(), + new DayCounter(), + new Speedometer(), + new Zoom(), + new HealthDisplay(), + new Nametags(), + new Ping(), + new Tps(), + new Clock() + }; + + public static void init() { + // Pre-filter enabled modules to avoid checking every tick + updateEnabledModules(); + } + + public static synchronized void updateEnabledModules() { + ENABLED_MODS.clear(); + for (Module m : ALL_MODS) { + if (m.isEnabled()) { + ENABLED_MODS.add(m); + } + } + } + + public static Module[] getAllMods() { + return ALL_MODS; + } + + public static void refreshEnabledModules() { + updateEnabledModules(); + } +} diff --git a/src/main/java/org/saturnclient/modules/Module.java b/src/main/java/org/saturnclient/modules/Module.java new file mode 100644 index 0000000..c40da1a --- /dev/null +++ b/src/main/java/org/saturnclient/modules/Module.java @@ -0,0 +1,59 @@ +package org.saturnclient.modules; + +import org.saturnclient.common.minecraft.bindings.SaturnIdentifier; +import org.saturnclient.config.manager.ConfigManager; +import org.saturnclient.config.manager.Property.NamedProperty; +import org.saturnclient.ui.RenderScope; +import org.saturnclient.ui.resources.Textures; + +public abstract class Module { + private final ModuleDetails details; + private final ConfigManager configManager; + + public Module(ModuleDetails details, NamedProperty... props) { + this.details = details; + configManager = new ConfigManager(details.name); + for (NamedProperty prop : props) { + configManager.property(prop.name, prop.prop); + } + } + + public void render(RenderScope scope) { + } + + public void tick() { + } + + public abstract boolean isEnabled(); + + public final void setEnabled(boolean e) { + onEnabled(e); + ModManager.updateEnabledModules(); + } + + public abstract void onEnabled(boolean e); + + public final String getName() { + return details.name; + } + + public SaturnIdentifier getIconTexture() { + return Textures.getModIcon(details.namespace); + } + + public ConfigManager getConfig() { + return configManager; + } + + public String getDescription() { + return details.description; + } + + public String[] getTags() { + return details.tags; + } + + public String getVersion() { + return details.version; + } +} diff --git a/src/main/java/org/saturnclient/modules/ModuleDetails.java b/src/main/java/org/saturnclient/modules/ModuleDetails.java new file mode 100644 index 0000000..3cce480 --- /dev/null +++ b/src/main/java/org/saturnclient/modules/ModuleDetails.java @@ -0,0 +1,39 @@ +package org.saturnclient.modules; + +public class ModuleDetails { + public String name; + public String namespace; + public String description; + public String version; + public String[] tags = {}; + + public ModuleDetails(String name, String namespace) { + this.name = name; + this.namespace = namespace; + } + + public ModuleDetails name(String name) { + this.name = name; + return this; + } + + public ModuleDetails namespace(String namespace) { + this.namespace = namespace; + return this; + } + + public ModuleDetails description(String description) { + this.description = description; + return this; + } + + public ModuleDetails version(String version) { + this.version = version; + return this; + } + + public ModuleDetails tags(String... tags) { + this.tags = tags; + return this; + } +}