Refactored spec and management
This commit is contained in:
@@ -4,5 +4,5 @@ public class Providers {
|
|||||||
public static RefConstructorProvider refConstructor;
|
public static RefConstructorProvider refConstructor;
|
||||||
public static SaturnProvider saturn;
|
public static SaturnProvider saturn;
|
||||||
public static GLFWProvider GLFW;
|
public static GLFWProvider GLFW;
|
||||||
public static FeatureProvider module;
|
public static FeatureProvider feature;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package org.saturnclient.mod;
|
package org.saturnclient.mod;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import org.saturnclient.common.ref.asset.IdentifierRef;
|
import org.saturnclient.common.ref.asset.IdentifierRef;
|
||||||
import org.saturnclient.config.ConfigManager;
|
import org.saturnclient.config.ConfigManager;
|
||||||
import org.saturnclient.config.property.NamedProperty;
|
import org.saturnclient.config.property.NamedProperty;
|
||||||
@@ -7,12 +9,12 @@ import org.saturnclient.ui.RenderScope;
|
|||||||
import org.saturnclient.ui.resources.Textures;
|
import org.saturnclient.ui.resources.Textures;
|
||||||
|
|
||||||
public abstract class Mod {
|
public abstract class Mod {
|
||||||
private final ModSpec details;
|
private final ModSpec spec;
|
||||||
private final ConfigManager configManager;
|
private final ConfigManager configManager;
|
||||||
|
|
||||||
public Mod(ModSpec details, NamedProperty... props) {
|
public Mod(ModSpec spec, NamedProperty... props) {
|
||||||
this.details = details;
|
this.spec = spec;
|
||||||
configManager = new ConfigManager(details.name);
|
configManager = new ConfigManager(spec.name);
|
||||||
for (NamedProperty prop : props) {
|
for (NamedProperty prop : props) {
|
||||||
configManager.property(prop.name, prop.prop);
|
configManager.property(prop.name, prop.prop);
|
||||||
}
|
}
|
||||||
@@ -34,11 +36,11 @@ public abstract class Mod {
|
|||||||
public abstract void onEnabled(boolean e);
|
public abstract void onEnabled(boolean e);
|
||||||
|
|
||||||
public final String getName() {
|
public final String getName() {
|
||||||
return details.name;
|
return spec.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IdentifierRef getIconTexture() {
|
public IdentifierRef getIconTexture() {
|
||||||
return Textures.getModIcon(details.namespace);
|
return Textures.getModIcon(spec.namespace);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConfigManager getConfig() {
|
public ConfigManager getConfig() {
|
||||||
@@ -46,14 +48,24 @@ public abstract class Mod {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return details.description;
|
return spec.description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getTags() {
|
public String[] getTags() {
|
||||||
return details.tags;
|
return spec.tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVersion() {
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,15 +7,15 @@ import org.saturnclient.mod.mods.*;
|
|||||||
|
|
||||||
public class ModManager {
|
public class ModManager {
|
||||||
public static List<Mod> ENABLED_MODS = new ArrayList<>();
|
public static List<Mod> ENABLED_MODS = new ArrayList<>();
|
||||||
public static Mod[] MODS = {
|
public static List<Mod> MODS = new ArrayList<>(List.of(
|
||||||
new ArmorDisplayMod(), new DayCounterMod(), new KeystrokesMod(), new StatusEffectsMod(),
|
new ArmorDisplayMod(), new DayCounterMod(), new KeystrokesMod(), new StatusEffectsMod(),
|
||||||
new AutoSprintMod(), new FpsMod(), new NametagsMod(), new TpsMod(),
|
new AutoSprintMod(), new FpsMod(), new NametagsMod(), new TpsMod(),
|
||||||
new ClockMod(), new FreelookMod(), new NoFogMod(), new ZoomMod(),
|
new ClockMod(), new FreelookMod(), new NoFogMod(), new ZoomMod(),
|
||||||
new CoordinatesMod(), new FullbrightMod(), new PingMod(),
|
new CoordinatesMod(), new FullbrightMod(), new PingMod(),
|
||||||
new CrosshairMod(), new HealthDisplayMod(), new SpeedometerMod(),
|
new CrosshairMod(), new HealthDisplayMod(), new SpeedometerMod()));
|
||||||
};
|
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
|
MODS.removeIf(mod -> !mod.isSupported());
|
||||||
updateEnabledModules();
|
updateEnabledModules();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
package org.saturnclient.mod;
|
package org.saturnclient.mod;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class ModSpec {
|
public class ModSpec {
|
||||||
public String name;
|
public String name;
|
||||||
public String namespace;
|
public String namespace;
|
||||||
public String description;
|
public String description;
|
||||||
public String version;
|
public String version;
|
||||||
public String[] tags = {};
|
public String[] tags = {};
|
||||||
|
public Supplier<?>[] requiresFeature = {};
|
||||||
|
|
||||||
public ModSpec(String name, String namespace) {
|
public ModSpec(String name, String namespace) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -36,4 +39,9 @@ public class ModSpec {
|
|||||||
this.tags = tags;
|
this.tags = tags;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ModSpec requires(Supplier<?>... suppliers) {
|
||||||
|
this.requiresFeature = suppliers;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.saturnclient.mod.mods;
|
package org.saturnclient.mod.mods;
|
||||||
|
|
||||||
import org.saturnclient.common.feature.PlayerFeature;
|
import org.saturnclient.common.feature.PlayerFeature;
|
||||||
|
import org.saturnclient.common.provider.FeatureProvider;
|
||||||
import org.saturnclient.common.provider.Providers;
|
import org.saturnclient.common.provider.Providers;
|
||||||
import org.saturnclient.common.ref.game.ItemStackRef;
|
import org.saturnclient.common.ref.game.ItemStackRef;
|
||||||
import org.saturnclient.config.property.BoolProperty;
|
import org.saturnclient.config.property.BoolProperty;
|
||||||
@@ -28,7 +29,8 @@ public class ArmorDisplayMod extends Mod implements HudMod {
|
|||||||
new ModSpec("Armor Display", "armor")
|
new ModSpec("Armor Display", "armor")
|
||||||
.description("Displays armor durability")
|
.description("Displays armor durability")
|
||||||
.version("v0.2.0")
|
.version("v0.2.0")
|
||||||
.tags("Utility"),
|
.tags("Utility")
|
||||||
|
.requires(Providers.feature::player),
|
||||||
enabled.named("Enabled"),
|
enabled.named("Enabled"),
|
||||||
useMainHand.named("Use Main Hand"),
|
useMainHand.named("Use Main Hand"),
|
||||||
layout.prop());
|
layout.prop());
|
||||||
@@ -40,7 +42,7 @@ public class ArmorDisplayMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderHud(RenderScope scope) {
|
public void renderHud(RenderScope scope) {
|
||||||
PlayerFeature player = Providers.module.player();
|
PlayerFeature player = Providers.feature.player();
|
||||||
renderArmor(scope,
|
renderArmor(scope,
|
||||||
player.getMainHand(),
|
player.getMainHand(),
|
||||||
player.getHelmet(),
|
player.getHelmet(),
|
||||||
@@ -51,7 +53,7 @@ public class ArmorDisplayMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderDummy(RenderScope scope) {
|
public void renderDummy(RenderScope scope) {
|
||||||
PlayerFeature player = Providers.module.player();
|
PlayerFeature player = Providers.feature.player();
|
||||||
renderArmor(scope,
|
renderArmor(scope,
|
||||||
player.getDummyMainHand(),
|
player.getDummyMainHand(),
|
||||||
player.getDummyHelmet(),
|
player.getDummyHelmet(),
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ public class AutoSprintMod extends Mod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
PlayerFeature player = Providers.module.player();
|
PlayerFeature player = Providers.feature.player();
|
||||||
NetworkFeature network = Providers.module.network();
|
NetworkFeature network = Providers.feature.network();
|
||||||
|
|
||||||
if (!player.hasPlayer() || !network.hasNetwork()) {
|
if (!player.hasPlayer() || !network.hasNetwork()) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ public class CoordinatesMod extends Mod implements HudMod {
|
|||||||
@Override
|
@Override
|
||||||
public void renderHud(RenderScope scope) {
|
public void renderHud(RenderScope scope) {
|
||||||
renderCoords(
|
renderCoords(
|
||||||
Providers.module.player().getX(),
|
Providers.feature.player().getX(),
|
||||||
Providers.module.player().getY(),
|
Providers.feature.player().getY(),
|
||||||
Providers.module.player().getZ(),
|
Providers.feature.player().getZ(),
|
||||||
scope);
|
scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,11 +34,11 @@ public class CrosshairMod extends Mod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(RenderScope scope) {
|
public void render(RenderScope scope) {
|
||||||
if (!enabled.value || !Providers.module.entity().isTargetingLivingEntity()) {
|
if (!enabled.value || !Providers.feature.entity().isTargetingLivingEntity()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderFeature render = Providers.module.render();
|
RenderFeature render = Providers.feature.render();
|
||||||
int x = (render.getScaledWindowWidth() - CROSSHAIR_SIZE) / 2;
|
int x = (render.getScaledWindowWidth() - CROSSHAIR_SIZE) / 2;
|
||||||
int y = (render.getScaledWindowHeight() - CROSSHAIR_SIZE) / 2;
|
int y = (render.getScaledWindowHeight() - CROSSHAIR_SIZE) / 2;
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class DayCounterMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderHud(RenderScope scope) {
|
public void renderHud(RenderScope scope) {
|
||||||
renderDay(Providers.module.world().getDay(), scope);
|
renderDay(Providers.feature.world().getDay(), scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class FpsMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderHud(RenderScope scope) {
|
public void renderHud(RenderScope scope) {
|
||||||
renderFps(Providers.module.render().getFps(), scope);
|
renderFps(Providers.feature.render().getFps(), scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ public class FreelookMod extends Mod {
|
|||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
private void startFreelook() {
|
private void startFreelook() {
|
||||||
RenderFeature render = Providers.module.render();
|
RenderFeature render = Providers.feature.render();
|
||||||
wasFirstPerson = render.isFirstPerson();
|
wasFirstPerson = render.isFirstPerson();
|
||||||
render.setThirdPersonBack();
|
render.setThirdPersonBack();
|
||||||
isFreeLooking = true;
|
isFreeLooking = true;
|
||||||
@@ -83,7 +83,7 @@ public class FreelookMod extends Mod {
|
|||||||
|
|
||||||
private void stopFreelook() {
|
private void stopFreelook() {
|
||||||
if (wasFirstPerson) {
|
if (wasFirstPerson) {
|
||||||
Providers.module.render().setFirstPerson();
|
Providers.feature.render().setFirstPerson();
|
||||||
}
|
}
|
||||||
isFreeLooking = false;
|
isFreeLooking = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class HealthDisplayMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderHud(RenderScope scope) {
|
public void renderHud(RenderScope scope) {
|
||||||
float health = Providers.module.player().getHealth();
|
float health = Providers.feature.player().getHealth();
|
||||||
if (displayMode.value == 1)
|
if (displayMode.value == 1)
|
||||||
health /= 2f; // convert to hearts
|
health /= 2f; // convert to hearts
|
||||||
renderHealth(health, scope);
|
renderHealth(health, scope);
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class KeystrokesMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
PlayerFeature player = Providers.module.player();
|
PlayerFeature player = Providers.feature.player();
|
||||||
w = player.isForwardPressed();
|
w = player.isForwardPressed();
|
||||||
a = player.isLeftPressed();
|
a = player.isLeftPressed();
|
||||||
s = player.isBackPressed();
|
s = player.isBackPressed();
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class PingMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderHud(RenderScope scope) {
|
public void renderHud(RenderScope scope) {
|
||||||
renderPing(Providers.module.network().getPing(), scope);
|
renderPing(Providers.feature.network().getPing(), scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public class SpeedometerMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderHud(RenderScope scope) {
|
public void renderHud(RenderScope scope) {
|
||||||
PlayerFeature player = Providers.module.player();
|
PlayerFeature player = Providers.feature.player();
|
||||||
PlayerFeature.Velocity v = player.getVelocity();
|
PlayerFeature.Velocity v = player.getVelocity();
|
||||||
boolean onGround = player.isOnGround();
|
boolean onGround = player.isOnGround();
|
||||||
|
|
||||||
|
|||||||
@@ -43,12 +43,12 @@ public class StatusEffectsMod extends Mod implements HudMod {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderHud(RenderScope scope) {
|
public void renderHud(RenderScope scope) {
|
||||||
renderEffects(scope, Providers.module.player().getActiveEffects());
|
renderEffects(scope, Providers.feature.player().getActiveEffects());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderDummy(RenderScope scope) {
|
public void renderDummy(RenderScope scope) {
|
||||||
renderEffects(scope, Providers.module.player().getDummyEffects());
|
renderEffects(scope, Providers.feature.player().getDummyEffects());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user