Refactored all the common/module to feature

This commit is contained in:
2026-03-24 11:52:43 +01:00
parent 8471894248
commit bdab6586d4
17 changed files with 61 additions and 57 deletions
@@ -1,4 +1,4 @@
package org.saturnclient.common.module;
package org.saturnclient.common.feature;
/**
* EntityModule provides queries about entities in the current world.
@@ -6,7 +6,7 @@ package org.saturnclient.common.module;
* Designed to be thin so that feature logic is not polluted with
* engine-specific entity types.
*/
public interface EntityModule {
public interface EntityFeature {
// ---------------------------------------------------------------
// Crosshair / targeting
@@ -30,7 +30,9 @@ public interface EntityModule {
String getCustomName();
float getHealth();
float getMaxHealth();
EntityType getEntityType();
}
@@ -1,11 +1,11 @@
package org.saturnclient.common.module;
package org.saturnclient.common.feature;
/**
* NetworkModule provides access to the current server connection.
*
* Methods return safe defaults (false / -1) when not connected.
*/
public interface NetworkModule {
public interface NetworkFeature {
/** Returns true when a server connection is active. */
boolean hasNetwork();
@@ -1,4 +1,4 @@
package org.saturnclient.common.module;
package org.saturnclient.common.feature;
import java.util.List;
@@ -11,7 +11,7 @@ import org.saturnclient.common.ref.game.ItemStackRef;
* All methods return safe defaults (false / 0 / empty) when no player
* is present so that features do not need to null-check everywhere.
*/
public interface PlayerModule {
public interface PlayerFeature {
// ---------------------------------------------------------------
// Presence
@@ -1,17 +1,18 @@
package org.saturnclient.common.module;
package org.saturnclient.common.feature;
/**
* RenderModule provides access to render-time information that does
* not belong to the player or world, such as the current window
* dimensions, camera perspective, and the frame's FPS counter.
*/
public interface RenderModule {
public interface RenderFeature {
// ---------------------------------------------------------------
// Window
// ---------------------------------------------------------------
int getScaledWindowWidth();
int getScaledWindowHeight();
// ---------------------------------------------------------------
@@ -27,5 +28,6 @@ public interface RenderModule {
boolean isFirstPerson();
void setFirstPerson();
void setThirdPersonBack();
}
@@ -1,4 +1,4 @@
package org.saturnclient.common.module;
package org.saturnclient.common.feature;
/**
* WorldModule provides access to world-level information that is not
@@ -6,7 +6,7 @@ package org.saturnclient.common.module;
*
* All methods return safe defaults when no world is loaded.
*/
public interface WorldModule {
public interface WorldFeature {
/** Returns true when a world is currently loaded. */
boolean hasWorld();
@@ -1,10 +1,10 @@
package org.saturnclient.common.provider;
import org.saturnclient.common.module.EntityModule;
import org.saturnclient.common.module.NetworkModule;
import org.saturnclient.common.module.PlayerModule;
import org.saturnclient.common.module.RenderModule;
import org.saturnclient.common.module.WorldModule;
import org.saturnclient.common.feature.EntityFeature;
import org.saturnclient.common.feature.NetworkFeature;
import org.saturnclient.common.feature.PlayerFeature;
import org.saturnclient.common.feature.RenderFeature;
import org.saturnclient.common.feature.WorldFeature;
/**
* ModuleProvider is the single entry point for features to access
@@ -16,20 +16,20 @@ import org.saturnclient.common.module.WorldModule;
* because the provider may swap implementations at runtime (e.g. on
* world change).
*/
public interface ModuleProvider {
public interface FeatureProvider {
/** Access to the local player and movement state. */
PlayerModule player();
PlayerFeature player();
/** Access to the game world (time, TPS packets, etc.). */
WorldModule world();
WorldFeature world();
/** Access to entity / nametag queries. */
EntityModule entity();
EntityFeature entity();
/** Access to rendering utilities (window size, textures, etc.). */
RenderModule render();
RenderFeature render();
/** Access to the network / server connection. */
NetworkModule network();
NetworkFeature network();
}
@@ -4,5 +4,5 @@ public class Providers {
public static RefConstructorProvider refConstructor;
public static SaturnProvider saturn;
public static GLFWProvider GLFW;
public static ModuleProvider module;
public static FeatureProvider module;
}
@@ -1,7 +1,7 @@
package org.saturnclient.mod.mods;
import org.saturnclient.common.feature.PlayerFeature;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.common.module.PlayerModule;
import org.saturnclient.common.ref.game.ItemStackRef;
import org.saturnclient.config.property.BoolProperty;
import org.saturnclient.config.property.Property;
@@ -15,7 +15,7 @@ import org.saturnclient.ui.RenderScope;
* ArmorDisplayMod renders the durability of the player's equipped
* armor pieces (and optionally the main-hand item) as a HUD overlay.
*
* Engine access is provided exclusively through {@link ModuleProvider}.
* Engine access is provided exclusively through {@link FeatureProvider}.
*/
public class ArmorDisplayMod extends Mod implements HudMod {
@@ -40,7 +40,7 @@ public class ArmorDisplayMod extends Mod implements HudMod {
@Override
public void renderHud(RenderScope scope) {
PlayerModule player = Providers.module.player();
PlayerFeature player = Providers.module.player();
renderArmor(scope,
player.getMainHand(),
player.getHelmet(),
@@ -51,7 +51,7 @@ public class ArmorDisplayMod extends Mod implements HudMod {
@Override
public void renderDummy(RenderScope scope) {
PlayerModule player = Providers.module.player();
PlayerFeature player = Providers.module.player();
renderArmor(scope,
player.getDummyMainHand(),
player.getDummyHelmet(),
@@ -1,12 +1,12 @@
package org.saturnclient.mod.mods;
import org.saturnclient.common.feature.NetworkFeature;
import org.saturnclient.common.feature.PlayerFeature;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.config.property.BoolProperty;
import org.saturnclient.config.property.Property;
import org.saturnclient.mod.Mod;
import org.saturnclient.mod.ModSpec;
import org.saturnclient.common.module.NetworkModule;
import org.saturnclient.common.module.PlayerModule;
/**
* AutoSprintMod automatically enables sprinting whenever the
@@ -31,8 +31,8 @@ public class AutoSprintMod extends Mod {
@Override
public void tick() {
PlayerModule player = Providers.module.player();
NetworkModule network = Providers.module.network();
PlayerFeature player = Providers.module.player();
NetworkFeature network = Providers.module.network();
if (!player.hasPlayer() || !network.hasNetwork()) {
return;
@@ -1,11 +1,11 @@
package org.saturnclient.mod.mods;
import org.saturnclient.common.feature.RenderFeature;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.config.property.BoolProperty;
import org.saturnclient.config.property.Property;
import org.saturnclient.mod.Mod;
import org.saturnclient.mod.ModSpec;
import org.saturnclient.common.module.RenderModule;
import org.saturnclient.ui.RenderScope;
import org.saturnclient.ui.resources.Textures;
@@ -38,7 +38,7 @@ public class CrosshairMod extends Mod {
return;
}
RenderModule render = Providers.module.render();
RenderFeature render = Providers.module.render();
int x = (render.getScaledWindowWidth() - CROSSHAIR_SIZE) / 2;
int y = (render.getScaledWindowHeight() - CROSSHAIR_SIZE) / 2;
@@ -1,6 +1,6 @@
package org.saturnclient.mod.mods;
import org.saturnclient.common.module.WorldModule;
import org.saturnclient.common.feature.WorldFeature;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.config.property.BoolProperty;
import org.saturnclient.config.property.Property;
@@ -13,7 +13,7 @@ import org.saturnclient.ui.resources.Fonts;
/**
* DayCounterMod shows how many in-game days have elapsed.
* Day count is derived from the world age via {@link WorldModule}.
* Day count is derived from the world age via {@link WorldFeature}.
*/
public class DayCounterMod extends Mod implements HudMod {
@@ -1,6 +1,6 @@
package org.saturnclient.mod.mods;
import org.saturnclient.common.module.RenderModule;
import org.saturnclient.common.feature.RenderFeature;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.config.property.BoolProperty;
import org.saturnclient.config.property.Property;
@@ -13,7 +13,7 @@ import org.saturnclient.ui.resources.Fonts;
/**
* FpsMod displays the current frames-per-second as a HUD element.
* FPS is obtained from {@link RenderModule} rather than cached in the feature.
* FPS is obtained from {@link RenderFeature} rather than cached in the feature.
*/
public class FpsMod extends Mod implements HudMod {
@@ -6,14 +6,14 @@ import org.saturnclient.config.property.KeybindingProperty;
import org.saturnclient.config.property.Property;
import org.saturnclient.mod.Mod;
import org.saturnclient.mod.ModSpec;
import org.saturnclient.common.module.RenderModule;
import org.saturnclient.common.feature.RenderFeature;
import org.saturnclient.common.provider.GLFWProvider;
/**
* FreelookMod lets the player look around freely (in third-person)
* without changing the direction their character walks.
*
* Camera perspective is controlled through {@link RenderModule} so
* Camera perspective is controlled through {@link RenderFeature} so
* that the feature itself contains no direct Minecraft API calls.
*/
public class FreelookMod extends Mod {
@@ -75,7 +75,7 @@ public class FreelookMod extends Mod {
// ---------------------------------------------------------------
private void startFreelook() {
RenderModule render = Providers.module.render();
RenderFeature render = Providers.module.render();
wasFirstPerson = render.isFirstPerson();
render.setThirdPersonBack();
isFreeLooking = true;
@@ -1,5 +1,6 @@
package org.saturnclient.mod.mods;
import org.saturnclient.common.feature.PlayerFeature;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.config.property.BoolProperty;
import org.saturnclient.config.property.ColorProperty;
@@ -8,7 +9,6 @@ import org.saturnclient.mod.HudMod;
import org.saturnclient.mod.Mod;
import org.saturnclient.mod.ModLayout;
import org.saturnclient.mod.ModSpec;
import org.saturnclient.common.module.PlayerModule;
import org.saturnclient.ui.RenderScope;
/**
@@ -67,7 +67,7 @@ public class KeystrokesMod extends Mod implements HudMod {
@Override
public void tick() {
PlayerModule player = Providers.module.player();
PlayerFeature player = Providers.module.player();
w = player.isForwardPressed();
a = player.isLeftPressed();
s = player.isBackPressed();
@@ -1,6 +1,6 @@
package org.saturnclient.mod.mods;
import org.saturnclient.common.module.EntityModule;
import org.saturnclient.common.feature.EntityFeature;
import org.saturnclient.config.property.BoolProperty;
import org.saturnclient.config.property.Property;
import org.saturnclient.config.property.SelectProperty;
@@ -13,10 +13,10 @@ import org.saturnclient.mod.ModSpec;
* Actual rendering is injected via a mixin; this class owns the
* configuration and exposes two static query methods the mixin uses:
* {@link #shouldReplaceName()} and
* {@link #getNametagString(EntityModule.EntityState)}.
* {@link #getNametagString(EntityFeature.EntityState)}.
*
* No ModuleProvider is required here because the mixin passes the
* already-resolved {@link EntityModule.EntityState} directly.
* already-resolved {@link EntityFeature.EntityState} directly.
*/
public class NametagsMod extends Mod {
@@ -83,7 +83,7 @@ public class NametagsMod extends Mod {
* Builds the replacement nametag string for the given entity state,
* or {@code null} if this entity should not have its tag replaced.
*/
public static String getNametagString(EntityModule.EntityState state) {
public static String getNametagString(EntityFeature.EntityState state) {
if (state.getCustomName() == null)
return null;
if (!healthDisplay.value)
@@ -92,14 +92,14 @@ public class NametagsMod extends Mod {
float health = state.getHealth();
float maxHealth = state.getMaxHealth();
EntityModule.EntityType type = state.getEntityType();
if (type == EntityModule.EntityType.PASSIVE && !passive.value)
EntityFeature.EntityType type = state.getEntityType();
if (type == EntityFeature.EntityType.PASSIVE && !passive.value)
return null;
if (type == EntityModule.EntityType.HOSTILE && !hostile.value)
if (type == EntityFeature.EntityType.HOSTILE && !hostile.value)
return null;
if (type == EntityModule.EntityType.PLAYER && !players.value)
if (type == EntityFeature.EntityType.PLAYER && !players.value)
return null;
if (type == EntityModule.EntityType.OTHER)
if (type == EntityFeature.EntityType.OTHER)
return null;
if (health < 0f || maxHealth < 0f || health > maxHealth)
@@ -1,5 +1,6 @@
package org.saturnclient.mod.mods;
import org.saturnclient.common.feature.PlayerFeature;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.config.property.BoolProperty;
import org.saturnclient.config.property.Property;
@@ -8,13 +9,12 @@ import org.saturnclient.mod.HudMod;
import org.saturnclient.mod.Mod;
import org.saturnclient.mod.ModLayout;
import org.saturnclient.mod.ModSpec;
import org.saturnclient.common.module.PlayerModule;
import org.saturnclient.ui.RenderScope;
import org.saturnclient.ui.resources.Fonts;
/**
* SpeedometerMod displays the player's current movement speed as
* a HUD element. Velocity data comes from {@link PlayerModule}.
* a HUD element. Velocity data comes from {@link PlayerFeature}.
*/
public class SpeedometerMod extends Mod implements HudMod {
@@ -45,8 +45,8 @@ public class SpeedometerMod extends Mod implements HudMod {
@Override
public void renderHud(RenderScope scope) {
PlayerModule player = Providers.module.player();
PlayerModule.Velocity v = player.getVelocity();
PlayerFeature player = Providers.module.player();
PlayerFeature.Velocity v = player.getVelocity();
boolean onGround = player.isOnGround();
double effectiveY = onGround ? 0.0 : v.y;
@@ -2,7 +2,7 @@ package org.saturnclient.mod.mods;
import java.util.List;
import org.saturnclient.common.provider.ModuleProvider;
import org.saturnclient.common.provider.FeatureProvider;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.common.ref.game.EffectRef;
import org.saturnclient.config.property.BoolProperty;
@@ -20,7 +20,7 @@ import org.saturnclient.ui.RenderScope;
* The effect list is supplied by the platform through an interface
* returned by a future {@code PlayerModule#getActiveEffects()} call.
* Until that is wired up, the existing {@link StatusEffectsInterface}
* bridge is used, accessed via {@link ModuleProvider}.
* bridge is used, accessed via {@link FeatureProvider}.
*/
public class StatusEffectsMod extends Mod implements HudMod {