diff --git a/src/main/java/org/saturnclient/common/provider/Providers.java b/src/main/java/org/saturnclient/common/provider/Providers.java index def0342..b905958 100644 --- a/src/main/java/org/saturnclient/common/provider/Providers.java +++ b/src/main/java/org/saturnclient/common/provider/Providers.java @@ -4,5 +4,5 @@ public class Providers { public static RefConstructorProvider refConstructor; public static SaturnProvider saturn; public static GLFWProvider GLFW; - public static FeatureProvider module; + public static FeatureProvider feature; } diff --git a/src/main/java/org/saturnclient/mod/Mod.java b/src/main/java/org/saturnclient/mod/Mod.java index 1c914c0..2316624 100644 --- a/src/main/java/org/saturnclient/mod/Mod.java +++ b/src/main/java/org/saturnclient/mod/Mod.java @@ -1,5 +1,7 @@ package org.saturnclient.mod; +import java.util.function.Supplier; + import org.saturnclient.common.ref.asset.IdentifierRef; import org.saturnclient.config.ConfigManager; import org.saturnclient.config.property.NamedProperty; @@ -7,12 +9,12 @@ import org.saturnclient.ui.RenderScope; import org.saturnclient.ui.resources.Textures; public abstract class Mod { - private final ModSpec details; + private final ModSpec spec; private final ConfigManager configManager; - public Mod(ModSpec details, NamedProperty... props) { - this.details = details; - configManager = new ConfigManager(details.name); + public Mod(ModSpec spec, NamedProperty... props) { + this.spec = spec; + configManager = new ConfigManager(spec.name); for (NamedProperty prop : props) { configManager.property(prop.name, prop.prop); } @@ -34,11 +36,11 @@ public abstract class Mod { public abstract void onEnabled(boolean e); public final String getName() { - return details.name; + return spec.name; } public IdentifierRef getIconTexture() { - return Textures.getModIcon(details.namespace); + return Textures.getModIcon(spec.namespace); } public ConfigManager getConfig() { @@ -46,14 +48,24 @@ public abstract class Mod { } public String getDescription() { - return details.description; + return spec.description; } public String[] getTags() { - return details.tags; + return spec.tags; } public String getVersion() { - return details.version; + return spec.version; + } + + public boolean isSupported() { + for (Supplier supplier : spec.requiresFeature) { + if (supplier.get() == null) { + return false; + } + } + + return true; } } diff --git a/src/main/java/org/saturnclient/mod/ModManager.java b/src/main/java/org/saturnclient/mod/ModManager.java index 3491b80..cb039cd 100644 --- a/src/main/java/org/saturnclient/mod/ModManager.java +++ b/src/main/java/org/saturnclient/mod/ModManager.java @@ -7,15 +7,15 @@ import org.saturnclient.mod.mods.*; public class ModManager { public static List ENABLED_MODS = new ArrayList<>(); - public static Mod[] MODS = { + public static List MODS = new ArrayList<>(List.of( new ArmorDisplayMod(), new DayCounterMod(), new KeystrokesMod(), new StatusEffectsMod(), new AutoSprintMod(), new FpsMod(), new NametagsMod(), new TpsMod(), new ClockMod(), new FreelookMod(), new NoFogMod(), new ZoomMod(), new CoordinatesMod(), new FullbrightMod(), new PingMod(), - new CrosshairMod(), new HealthDisplayMod(), new SpeedometerMod(), - }; + new CrosshairMod(), new HealthDisplayMod(), new SpeedometerMod())); public static void init() { + MODS.removeIf(mod -> !mod.isSupported()); updateEnabledModules(); } diff --git a/src/main/java/org/saturnclient/mod/ModSpec.java b/src/main/java/org/saturnclient/mod/ModSpec.java index 7aa678b..e92404b 100644 --- a/src/main/java/org/saturnclient/mod/ModSpec.java +++ b/src/main/java/org/saturnclient/mod/ModSpec.java @@ -1,11 +1,14 @@ package org.saturnclient.mod; +import java.util.function.Supplier; + public class ModSpec { public String name; public String namespace; public String description; public String version; public String[] tags = {}; + public Supplier[] requiresFeature = {}; public ModSpec(String name, String namespace) { this.name = name; @@ -36,4 +39,9 @@ public class ModSpec { this.tags = tags; return this; } + + public ModSpec requires(Supplier... suppliers) { + this.requiresFeature = suppliers; + return this; + } } diff --git a/src/main/java/org/saturnclient/mod/mods/ArmorDisplayMod.java b/src/main/java/org/saturnclient/mod/mods/ArmorDisplayMod.java index d9c8a2e..40210a0 100644 --- a/src/main/java/org/saturnclient/mod/mods/ArmorDisplayMod.java +++ b/src/main/java/org/saturnclient/mod/mods/ArmorDisplayMod.java @@ -1,6 +1,7 @@ package org.saturnclient.mod.mods; import org.saturnclient.common.feature.PlayerFeature; +import org.saturnclient.common.provider.FeatureProvider; import org.saturnclient.common.provider.Providers; import org.saturnclient.common.ref.game.ItemStackRef; import org.saturnclient.config.property.BoolProperty; @@ -28,7 +29,8 @@ public class ArmorDisplayMod extends Mod implements HudMod { new ModSpec("Armor Display", "armor") .description("Displays armor durability") .version("v0.2.0") - .tags("Utility"), + .tags("Utility") + .requires(Providers.feature::player), enabled.named("Enabled"), useMainHand.named("Use Main Hand"), layout.prop()); @@ -40,7 +42,7 @@ public class ArmorDisplayMod extends Mod implements HudMod { @Override public void renderHud(RenderScope scope) { - PlayerFeature player = Providers.module.player(); + PlayerFeature player = Providers.feature.player(); renderArmor(scope, player.getMainHand(), player.getHelmet(), @@ -51,7 +53,7 @@ public class ArmorDisplayMod extends Mod implements HudMod { @Override public void renderDummy(RenderScope scope) { - PlayerFeature player = Providers.module.player(); + PlayerFeature player = Providers.feature.player(); renderArmor(scope, player.getDummyMainHand(), player.getDummyHelmet(), diff --git a/src/main/java/org/saturnclient/mod/mods/AutoSprintMod.java b/src/main/java/org/saturnclient/mod/mods/AutoSprintMod.java index 913f84c..a58fb91 100644 --- a/src/main/java/org/saturnclient/mod/mods/AutoSprintMod.java +++ b/src/main/java/org/saturnclient/mod/mods/AutoSprintMod.java @@ -31,8 +31,8 @@ public class AutoSprintMod extends Mod { @Override public void tick() { - PlayerFeature player = Providers.module.player(); - NetworkFeature network = Providers.module.network(); + PlayerFeature player = Providers.feature.player(); + NetworkFeature network = Providers.feature.network(); if (!player.hasPlayer() || !network.hasNetwork()) { return; diff --git a/src/main/java/org/saturnclient/mod/mods/CoordinatesMod.java b/src/main/java/org/saturnclient/mod/mods/CoordinatesMod.java index 80e3c16..97b6fd6 100644 --- a/src/main/java/org/saturnclient/mod/mods/CoordinatesMod.java +++ b/src/main/java/org/saturnclient/mod/mods/CoordinatesMod.java @@ -43,9 +43,9 @@ public class CoordinatesMod extends Mod implements HudMod { @Override public void renderHud(RenderScope scope) { renderCoords( - Providers.module.player().getX(), - Providers.module.player().getY(), - Providers.module.player().getZ(), + Providers.feature.player().getX(), + Providers.feature.player().getY(), + Providers.feature.player().getZ(), scope); } diff --git a/src/main/java/org/saturnclient/mod/mods/CrosshairMod.java b/src/main/java/org/saturnclient/mod/mods/CrosshairMod.java index c2e607f..2f9b169 100644 --- a/src/main/java/org/saturnclient/mod/mods/CrosshairMod.java +++ b/src/main/java/org/saturnclient/mod/mods/CrosshairMod.java @@ -34,11 +34,11 @@ public class CrosshairMod extends Mod { @Override public void render(RenderScope scope) { - if (!enabled.value || !Providers.module.entity().isTargetingLivingEntity()) { + if (!enabled.value || !Providers.feature.entity().isTargetingLivingEntity()) { return; } - RenderFeature render = Providers.module.render(); + RenderFeature render = Providers.feature.render(); int x = (render.getScaledWindowWidth() - CROSSHAIR_SIZE) / 2; int y = (render.getScaledWindowHeight() - CROSSHAIR_SIZE) / 2; diff --git a/src/main/java/org/saturnclient/mod/mods/DayCounterMod.java b/src/main/java/org/saturnclient/mod/mods/DayCounterMod.java index 2f9cb3a..eae280b 100644 --- a/src/main/java/org/saturnclient/mod/mods/DayCounterMod.java +++ b/src/main/java/org/saturnclient/mod/mods/DayCounterMod.java @@ -36,7 +36,7 @@ public class DayCounterMod extends Mod implements HudMod { @Override public void renderHud(RenderScope scope) { - renderDay(Providers.module.world().getDay(), scope); + renderDay(Providers.feature.world().getDay(), scope); } @Override diff --git a/src/main/java/org/saturnclient/mod/mods/FpsMod.java b/src/main/java/org/saturnclient/mod/mods/FpsMod.java index 223a655..89e5b45 100644 --- a/src/main/java/org/saturnclient/mod/mods/FpsMod.java +++ b/src/main/java/org/saturnclient/mod/mods/FpsMod.java @@ -36,7 +36,7 @@ public class FpsMod extends Mod implements HudMod { @Override public void renderHud(RenderScope scope) { - renderFps(Providers.module.render().getFps(), scope); + renderFps(Providers.feature.render().getFps(), scope); } @Override diff --git a/src/main/java/org/saturnclient/mod/mods/FreelookMod.java b/src/main/java/org/saturnclient/mod/mods/FreelookMod.java index ae19f46..a9f02d4 100644 --- a/src/main/java/org/saturnclient/mod/mods/FreelookMod.java +++ b/src/main/java/org/saturnclient/mod/mods/FreelookMod.java @@ -75,7 +75,7 @@ public class FreelookMod extends Mod { // --------------------------------------------------------------- private void startFreelook() { - RenderFeature render = Providers.module.render(); + RenderFeature render = Providers.feature.render(); wasFirstPerson = render.isFirstPerson(); render.setThirdPersonBack(); isFreeLooking = true; @@ -83,7 +83,7 @@ public class FreelookMod extends Mod { private void stopFreelook() { if (wasFirstPerson) { - Providers.module.render().setFirstPerson(); + Providers.feature.render().setFirstPerson(); } isFreeLooking = false; } diff --git a/src/main/java/org/saturnclient/mod/mods/HealthDisplayMod.java b/src/main/java/org/saturnclient/mod/mods/HealthDisplayMod.java index abfb8b5..8800698 100644 --- a/src/main/java/org/saturnclient/mod/mods/HealthDisplayMod.java +++ b/src/main/java/org/saturnclient/mod/mods/HealthDisplayMod.java @@ -41,7 +41,7 @@ public class HealthDisplayMod extends Mod implements HudMod { @Override public void renderHud(RenderScope scope) { - float health = Providers.module.player().getHealth(); + float health = Providers.feature.player().getHealth(); if (displayMode.value == 1) health /= 2f; // convert to hearts renderHealth(health, scope); diff --git a/src/main/java/org/saturnclient/mod/mods/KeystrokesMod.java b/src/main/java/org/saturnclient/mod/mods/KeystrokesMod.java index f007acd..dec0d8f 100644 --- a/src/main/java/org/saturnclient/mod/mods/KeystrokesMod.java +++ b/src/main/java/org/saturnclient/mod/mods/KeystrokesMod.java @@ -67,7 +67,7 @@ public class KeystrokesMod extends Mod implements HudMod { @Override public void tick() { - PlayerFeature player = Providers.module.player(); + PlayerFeature player = Providers.feature.player(); w = player.isForwardPressed(); a = player.isLeftPressed(); s = player.isBackPressed(); diff --git a/src/main/java/org/saturnclient/mod/mods/PingMod.java b/src/main/java/org/saturnclient/mod/mods/PingMod.java index 0ea8038..60edb44 100644 --- a/src/main/java/org/saturnclient/mod/mods/PingMod.java +++ b/src/main/java/org/saturnclient/mod/mods/PingMod.java @@ -35,7 +35,7 @@ public class PingMod extends Mod implements HudMod { @Override public void renderHud(RenderScope scope) { - renderPing(Providers.module.network().getPing(), scope); + renderPing(Providers.feature.network().getPing(), scope); } @Override diff --git a/src/main/java/org/saturnclient/mod/mods/SpeedometerMod.java b/src/main/java/org/saturnclient/mod/mods/SpeedometerMod.java index cc079a4..6ae7c63 100644 --- a/src/main/java/org/saturnclient/mod/mods/SpeedometerMod.java +++ b/src/main/java/org/saturnclient/mod/mods/SpeedometerMod.java @@ -45,7 +45,7 @@ public class SpeedometerMod extends Mod implements HudMod { @Override public void renderHud(RenderScope scope) { - PlayerFeature player = Providers.module.player(); + PlayerFeature player = Providers.feature.player(); PlayerFeature.Velocity v = player.getVelocity(); boolean onGround = player.isOnGround(); diff --git a/src/main/java/org/saturnclient/mod/mods/StatusEffectsMod.java b/src/main/java/org/saturnclient/mod/mods/StatusEffectsMod.java index b49fbfc..9ac20bc 100644 --- a/src/main/java/org/saturnclient/mod/mods/StatusEffectsMod.java +++ b/src/main/java/org/saturnclient/mod/mods/StatusEffectsMod.java @@ -43,12 +43,12 @@ public class StatusEffectsMod extends Mod implements HudMod { @Override public void renderHud(RenderScope scope) { - renderEffects(scope, Providers.module.player().getActiveEffects()); + renderEffects(scope, Providers.feature.player().getActiveEffects()); } @Override public void renderDummy(RenderScope scope) { - renderEffects(scope, Providers.module.player().getDummyEffects()); + renderEffects(scope, Providers.feature.player().getDummyEffects()); } // ---------------------------------------------------------------