diff --git a/common/src/main/java/org/saturnclient/modules/interfaces/HealthDisplayInterface.java b/common/src/main/java/org/saturnclient/modules/interfaces/HealthDisplayInterface.java new file mode 100644 index 0000000..cb8d20f --- /dev/null +++ b/common/src/main/java/org/saturnclient/modules/interfaces/HealthDisplayInterface.java @@ -0,0 +1,7 @@ +package org.saturnclient.modules.interfaces; + +public interface HealthDisplayInterface { + + float getPlayerHealth(); + +} \ No newline at end of file diff --git a/common/src/main/java/org/saturnclient/modules/interfaces/KeystrokesInterface.java b/common/src/main/java/org/saturnclient/modules/interfaces/KeystrokesInterface.java new file mode 100644 index 0000000..5c220ef --- /dev/null +++ b/common/src/main/java/org/saturnclient/modules/interfaces/KeystrokesInterface.java @@ -0,0 +1,13 @@ +package org.saturnclient.modules.interfaces; + +public interface KeystrokesInterface { + + boolean isForwardPressed(); + boolean isBackPressed(); + boolean isLeftPressed(); + boolean isRightPressed(); + boolean isJumpPressed(); + boolean isAttackPressed(); + boolean isUsePressed(); + +} \ No newline at end of file diff --git a/common/src/main/java/org/saturnclient/modules/interfaces/NametagsInterface.java b/common/src/main/java/org/saturnclient/modules/interfaces/NametagsInterface.java new file mode 100644 index 0000000..5834508 --- /dev/null +++ b/common/src/main/java/org/saturnclient/modules/interfaces/NametagsInterface.java @@ -0,0 +1,23 @@ +package org.saturnclient.modules.interfaces; + +public interface NametagsInterface { + + public static interface EntityState { + + String getCustomName(); + + float getHealth(); + + float getMaxHealth(); + + EntityType getEntityType(); + } + + public static enum EntityType { + PLAYER, + PASSIVE, + HOSTILE, + OTHER + } + +} \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/Fullbright.java b/common/src/main/java/org/saturnclient/modules/mods/Fullbright.java similarity index 100% rename from versions/1.21.4/src/main/java/org/saturnclient/modules/mods/Fullbright.java rename to common/src/main/java/org/saturnclient/modules/mods/Fullbright.java diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/HealthDisplay.java b/common/src/main/java/org/saturnclient/modules/mods/HealthDisplay.java similarity index 82% rename from versions/1.21.4/src/main/java/org/saturnclient/modules/mods/HealthDisplay.java rename to common/src/main/java/org/saturnclient/modules/mods/HealthDisplay.java index 6bf5383..b217101 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/HealthDisplay.java +++ b/common/src/main/java/org/saturnclient/modules/mods/HealthDisplay.java @@ -4,23 +4,22 @@ import org.saturnclient.modules.HudMod; import org.saturnclient.modules.ModDimensions; import org.saturnclient.modules.Module; import org.saturnclient.modules.ModuleDetails; -import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.modules.interfaces.HealthDisplayInterface; import org.saturnclient.config.manager.Property; import org.saturnclient.ui.RenderScope; import org.saturnclient.ui.resources.Fonts; -import net.minecraft.util.math.Vec3d; - public class HealthDisplay extends Module implements HudMod { + private static Property enabled = Property.bool(false); private static Property displayMode = Property.select(0, "Health", "Hearts"); private static Property decimals = Property.select(0, "0", "1", "2"); - private static ModDimensions dimensions = new ModDimensions(40, 18); - double speed = 0.; - Vec3d velocity; - double y = 0.; - public HealthDisplay() { + private static ModDimensions dimensions = new ModDimensions(40, 18); + + private final HealthDisplayInterface minecraft; + + public HealthDisplay(HealthDisplayInterface minecraft) { super(new ModuleDetails("Health display", "health") .description("Displays your current health") .version("v0.1.0") @@ -29,6 +28,8 @@ public class HealthDisplay extends Module implements HudMod { displayMode.named("Display mode"), decimals.named("Decimals"), dimensions.prop()); + + this.minecraft = minecraft; } @Override @@ -38,31 +39,43 @@ public class HealthDisplay extends Module implements HudMod { @Override public void renderHud(RenderScope scope) { - float health = SaturnClient.client.player.getHealth(); + float health = minecraft.getPlayerHealth(); + switch (displayMode.value) { case 1: health = health / 2; + break; } + renderHealth(health, scope); } public void renderHealth(float health, RenderScope scope) { + String text = ""; switch (decimals.value) { case 0: text = String.format("%.0f ", health); break; + case 1: text = String.format("%.1f ", health); break; + case 2: text = String.format("%.2f ", health); break; } - scope.drawText(text, - 0, 0, dimensions.font.value, dimensions.fgColor.value); + scope.drawText( + text, + 0, + 0, + dimensions.font.value, + dimensions.fgColor.value + ); + dimensions.width = Fonts.getWidth(text, dimensions.font.value); dimensions.height = 18 * text.split("\n").length; } @@ -81,4 +94,4 @@ public class HealthDisplay extends Module implements HudMod { public void onEnabled(boolean e) { enabled.value = e; } -} +} \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/Keystrokes.java b/common/src/main/java/org/saturnclient/modules/mods/Keystrokes.java similarity index 90% rename from versions/1.21.4/src/main/java/org/saturnclient/modules/mods/Keystrokes.java rename to common/src/main/java/org/saturnclient/modules/mods/Keystrokes.java index 766afb4..acf7256 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/Keystrokes.java +++ b/common/src/main/java/org/saturnclient/modules/mods/Keystrokes.java @@ -3,10 +3,10 @@ package org.saturnclient.modules.mods; import org.saturnclient.modules.Module; import org.saturnclient.modules.HudMod; import org.saturnclient.modules.ModDimensions; -import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.modules.ModuleDetails; +import org.saturnclient.modules.interfaces.KeystrokesInterface; import org.saturnclient.config.manager.Property; import org.saturnclient.ui.RenderScope; -import org.saturnclient.modules.ModuleDetails; public class Keystrokes extends Module implements HudMod { @@ -19,6 +19,8 @@ public class Keystrokes extends Module implements HudMod { private static final ModDimensions dimensions = new ModDimensions(78, 54); + private final KeystrokesInterface minecraft; + // Key states private boolean w, a, s, d, lmb, rmb, space; @@ -29,7 +31,7 @@ public class Keystrokes extends Module implements HudMod { private static final int MOUSE_HEIGHT = 24; private static final int SPACE_HEIGHT = 19; - public Keystrokes() { + public Keystrokes(KeystrokesInterface minecraft) { super(new ModuleDetails("Keystrokes", "keystrokes") .description("Displays movement keystrokes") .version("v0.2.0") @@ -42,18 +44,20 @@ public class Keystrokes extends Module implements HudMod { clickFg.named("Clicked fg"), clickBg.named("Clicked bg")); + this.minecraft = minecraft; + dimensions.renderBackground = false; } @Override public void tick() { - w = SaturnClient.client.options.forwardKey.isPressed(); - a = SaturnClient.client.options.leftKey.isPressed(); - s = SaturnClient.client.options.backKey.isPressed(); - d = SaturnClient.client.options.rightKey.isPressed(); - lmb = SaturnClient.client.options.attackKey.isPressed(); - rmb = SaturnClient.client.options.useKey.isPressed(); - space = SaturnClient.client.options.jumpKey.isPressed(); + w = minecraft.isForwardPressed(); + a = minecraft.isLeftPressed(); + s = minecraft.isBackPressed(); + d = minecraft.isRightPressed(); + lmb = minecraft.isAttackPressed(); + rmb = minecraft.isUsePressed(); + space = minecraft.isJumpPressed(); updateHeight(); } diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/Nametags.java b/common/src/main/java/org/saturnclient/modules/mods/Nametags.java similarity index 59% rename from versions/1.21.4/src/main/java/org/saturnclient/modules/mods/Nametags.java rename to common/src/main/java/org/saturnclient/modules/mods/Nametags.java index ba87168..41071f4 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/Nametags.java +++ b/common/src/main/java/org/saturnclient/modules/mods/Nametags.java @@ -2,14 +2,11 @@ package org.saturnclient.modules.mods; import org.saturnclient.modules.Module; import org.saturnclient.modules.ModuleDetails; -import org.saturnclient.modules.mods.utils.HealthRenderState; import org.saturnclient.config.manager.Property; - -import net.minecraft.client.render.entity.state.LivingEntityRenderState; - -// todo: rendering modes, custom names +import org.saturnclient.modules.interfaces.NametagsInterface; public class Nametags extends Module { + private static Property enabled = Property.bool(false); private static Property healthDisplay = Property.bool(false); private static Property players = Property.bool(true); @@ -20,51 +17,24 @@ public class Nametags extends Module { private static Property unit = Property.select(0, "Health", "Hearts"); private static Property format = Property.select(0, "Value", "Value / Total", "%"); private static Property nameColor = Property.select(15, - "Black", - "Dark Blue", - "Dark Green", - "Dark Aqua", - "Dark Red", - "Dark Purple", - "Gold", - "Gray", - "Dark Gray", - "Blue", - "Green", - "Aqua", - "Red", - "Light Purple", - "Yellow", - "White"); + "Black","Dark Blue","Dark Green","Dark Aqua","Dark Red","Dark Purple","Gold","Gray", + "Dark Gray","Blue","Green","Aqua","Red","Light Purple","Yellow","White"); private static Property healthColor = Property.select(12, - "Black", - "Dark Blue", - "Dark Green", - "Dark Aqua", - "Dark Red", - "Dark Purple", - "Gold", - "Gray", - "Dark Gray", - "Blue", - "Green", - "Aqua", - "Red", - "Light Purple", - "Yellow", - "White"); + "Black","Dark Blue","Dark Green","Dark Aqua","Dark Red","Dark Purple","Gold","Gray", + "Dark Gray","Blue","Green","Aqua","Red","Light Purple","Yellow","White"); private static final String[] COLOR_CODES = { "§0", "§1", "§2", "§3", "§4", "§5", "§6", "§7", "§8", "§9", "§a", "§b", "§c", "§d", "§e", "§f" }; - public Nametags() { - super( - new ModuleDetails("Nametags", "nametags") - .description("Allows you to modify entity nametags") - .tags("Camera", "Utility") - .version("0.1.0"), + private final NametagsInterface minecraft; + + public Nametags(NametagsInterface minecraft) { + super(new ModuleDetails("Nametags", "nametags") + .description("Allows you to modify entity nametags") + .tags("Camera", "Utility") + .version("0.1.0"), enabled.named("Enabled"), healthDisplay.named("Display health"), players.named("Players"), @@ -76,15 +46,16 @@ public class Nametags extends Module { format.named("Format"), nameColor.named("Name color"), healthColor.named("Health color")); + + this.minecraft = minecraft; } @Override public void tick() { - + // Currently unused } - public static String getHealthString(LivingEntityRenderState state, HealthRenderState hrs, float health, - float maxHealth) { + public static String getHealthString(NametagsInterface.EntityState state, float health, float maxHealth) { String ret = ""; switch (format.value) { @@ -101,28 +72,28 @@ public class Nametags extends Module { ret = String.format("%.0f%%", (health / maxHealth) * 100); break; } + return ret; } - public static String getNametagString(LivingEntityRenderState state) { - if (state.customName == null) + public static String getNametagString(NametagsInterface.EntityState state) { + if (state.getCustomName() == null) return null; + if (!healthDisplay.value) - return state.customName.getString(); // name only - if (!(state instanceof HealthRenderState hrs)) - return null; + return state.getCustomName(); // name only - float health = hrs.saturn$getHealth(); - float maxHealth = hrs.saturn$getMaxHealth(); + float health = state.getHealth(); + float maxHealth = state.getMaxHealth(); + NametagsInterface.EntityType type = state.getEntityType(); - HealthRenderState.EntityType type = hrs.saturn$getEntityType(); - if (type == HealthRenderState.EntityType.PASSIVE && !passive.value) + if (type == NametagsInterface.EntityType.PASSIVE && !passive.value) return null; - if (type == HealthRenderState.EntityType.HOSTILE && !hostile.value) + if (type == NametagsInterface.EntityType.HOSTILE && !hostile.value) return null; - if (type == HealthRenderState.EntityType.PLAYER && !players.value) + if (type == NametagsInterface.EntityType.PLAYER && !players.value) return null; - if (type == HealthRenderState.EntityType.OTHER) + if (type == NametagsInterface.EntityType.OTHER) return null; if (health < 0f || maxHealth < 0f || health > maxHealth) @@ -134,10 +105,8 @@ public class Nametags extends Module { String obf = obfuscate.value ? "§k" : ""; String reset = "§r"; - String ret = color + obf + state.customName.getString() + reset + " " + hpColor - + getHealthString(state, hrs, health, maxHealth) + heart; - - return ret; + return color + obf + state.getCustomName() + reset + " " + hpColor + + getHealthString(state, health, maxHealth) + heart; } public static boolean shouldReplaceName() { @@ -153,4 +122,4 @@ public class Nametags extends Module { public boolean isEnabled() { return enabled.value; } -} +} \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/FabricModuleProvider.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/FabricModuleProvider.java index 8fa3bc5..198cf48 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/FabricModuleProvider.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/FabricModuleProvider.java @@ -14,6 +14,8 @@ public class FabricModuleProvider implements ModuleProvider { new DayCounter(new DayCounterFabric()), new Fps(new FpsFabric()), new Freelook(new FreelookFabric()), + new HealthDisplay(new HealthDisplayFabric()), + new Keystrokes(new KeystrokesFabric()), new Clock(), }; diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/HealthDisplayFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/HealthDisplayFabric.java new file mode 100644 index 0000000..2f4ba34 --- /dev/null +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/HealthDisplayFabric.java @@ -0,0 +1,20 @@ +package org.saturnclient.impl.modules; + +import org.saturnclient.modules.interfaces.HealthDisplayInterface; + +import net.minecraft.client.MinecraftClient; + +public class HealthDisplayFabric implements HealthDisplayInterface { + + private final MinecraftClient mc = MinecraftClient.getInstance(); + + @Override + public float getPlayerHealth() { + if (mc.player == null) { + return 0f; + } + + return mc.player.getHealth(); + } + +} \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/KeystrokesFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/KeystrokesFabric.java new file mode 100644 index 0000000..ac0e8fa --- /dev/null +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/KeystrokesFabric.java @@ -0,0 +1,45 @@ +package org.saturnclient.impl.modules; + +import org.saturnclient.modules.interfaces.KeystrokesInterface; + +import net.minecraft.client.MinecraftClient; + +public class KeystrokesFabric implements KeystrokesInterface { + + private final MinecraftClient mc = MinecraftClient.getInstance(); + + @Override + public boolean isForwardPressed() { + return mc.options.forwardKey.isPressed(); + } + + @Override + public boolean isBackPressed() { + return mc.options.backKey.isPressed(); + } + + @Override + public boolean isLeftPressed() { + return mc.options.leftKey.isPressed(); + } + + @Override + public boolean isRightPressed() { + return mc.options.rightKey.isPressed(); + } + + @Override + public boolean isJumpPressed() { + return mc.options.jumpKey.isPressed(); + } + + @Override + public boolean isAttackPressed() { + return mc.options.attackKey.isPressed(); + } + + @Override + public boolean isUsePressed() { + return mc.options.useKey.isPressed(); + } +} \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/NametagsFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/NametagsFabric.java new file mode 100644 index 0000000..6ef217c --- /dev/null +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/NametagsFabric.java @@ -0,0 +1,49 @@ +package org.saturnclient.impl.modules; + +import org.saturnclient.modules.interfaces.NametagsInterface; +import org.saturnclient.modules.mods.utils.HealthRenderState; + +import net.minecraft.client.render.entity.state.LivingEntityRenderState; +import net.minecraft.text.Text; + +public class NametagsFabric implements NametagsInterface { + + public static class EntityStateImpl implements EntityState { + + private final LivingEntityRenderState state; + + public EntityStateImpl(LivingEntityRenderState state) { + this.state = state; + } + + @Override + public String getCustomName() { + Text name = state.customName; + return name != null ? name.getString() : null; + } + + @Override + public float getHealth() { + if (!(state instanceof HealthRenderState hrs)) + return 0.0f; + + return hrs.saturn$getHealth(); + } + + @Override + public float getMaxHealth() { + if (!(state instanceof HealthRenderState hrs)) + return 0.0f; + + return hrs.saturn$getMaxHealth(); + } + + @Override + public EntityType getEntityType() { + if (!(state instanceof HealthRenderState hrs)) + return null; + + return hrs.saturn$getEntityType(); + } + } +} \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/mixins/LivingEntityRenderStateMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/mixins/LivingEntityRenderStateMixin.java index dacee20..dfa7476 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/mixins/LivingEntityRenderStateMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/mixins/LivingEntityRenderStateMixin.java @@ -2,7 +2,7 @@ package org.saturnclient.modules.mods.mixins; import net.minecraft.client.render.entity.state.LivingEntityRenderState; -import org.saturnclient.modules.mods.utils.HealthRenderState; +import org.saturnclient.modules.interfaces.NametagsInterface.EntityType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -11,7 +11,7 @@ public class LivingEntityRenderStateMixin implements org.saturnclient.modules.mo @Unique private float saturn$health = 0f; @Unique private float saturn$maxHealth = 1f; - @Unique private HealthRenderState.EntityType saturn$entityType = HealthRenderState.EntityType.OTHER; + @Unique private EntityType saturn$entityType = EntityType.OTHER; public float saturn$getHealth() { return saturn$health; } public float saturn$getMaxHealth() { return saturn$maxHealth; } @@ -20,7 +20,7 @@ public class LivingEntityRenderStateMixin implements org.saturnclient.modules.mo this.saturn$maxHealth = maxHealth; } - public HealthRenderState.EntityType saturn$getEntityType() { return saturn$entityType; } - public void saturn$setEntityType(HealthRenderState.EntityType type) { this.saturn$entityType = type; } + public EntityType saturn$getEntityType() { return saturn$entityType; } + public void saturn$setEntityType(EntityType type) { this.saturn$entityType = type; } } \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/mixins/LivingEntityRendererMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/mixins/LivingEntityRendererMixin.java index 34e5d1f..1266102 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/mixins/LivingEntityRendererMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/modules/mods/mixins/LivingEntityRendererMixin.java @@ -2,6 +2,8 @@ package org.saturnclient.modules.mods.mixins; import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.state.LivingEntityRenderState; + +import org.saturnclient.modules.interfaces.NametagsInterface.EntityType; import org.saturnclient.modules.mods.utils.HealthRenderState; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.mob.HostileEntity; @@ -17,18 +19,19 @@ public abstract class LivingEntityRendererMixin