From 9e64b2332ee23d224e1a1bea53a489711f3486c3 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Wed, 18 Jun 2025 13:47:50 -0500 Subject: [PATCH] added keystrokes --- .../saturnclient/modules/ModDimensions.java | 3 + .../org/saturnclient/modules/ModManager.java | 7 +- .../saturnclient/modules/mods/Keystrokes.java | 77 ++++++++++++++++++ .../modules/mods/PotionDisplay.java | 2 +- .../textures/gui/mod/keystrokes.png | Bin 0 -> 3226 bytes 5 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/saturnclient/modules/mods/Keystrokes.java create mode 100644 src/main/resources/assets/saturnclient/textures/gui/mod/keystrokes.png diff --git a/src/main/java/org/saturnclient/modules/ModDimensions.java b/src/main/java/org/saturnclient/modules/ModDimensions.java index 2db4d34..b0bdb4f 100644 --- a/src/main/java/org/saturnclient/modules/ModDimensions.java +++ b/src/main/java/org/saturnclient/modules/ModDimensions.java @@ -13,6 +13,7 @@ public class ModDimensions { 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; @@ -29,6 +30,8 @@ public class ModDimensions { )).named("In-Game Display"); } + public ModDimensions() {} + public ModDimensions(int width, int height) { 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 index 6ac6e2a..c1fd76a 100644 --- a/src/main/java/org/saturnclient/modules/ModManager.java +++ b/src/main/java/org/saturnclient/modules/ModManager.java @@ -19,7 +19,8 @@ public class ModManager { new Fps(), new PotionDisplay(), new Coordinates(), - new Freelook() + new Freelook(), + new Keystrokes() }; public static void init() { @@ -49,7 +50,9 @@ public class ModManager { renderScope.matrices.scale(dim.scale.value, dim.scale.value, 1.0f); - renderScope.drawRoundedRectangle(0, 0, dim.width, dim.height, dim.radius.value, dim.bgColor.value); + if (dim.renderBackground) { + renderScope.drawRoundedRectangle(0, 0, dim.width, dim.height, dim.radius.value, dim.bgColor.value); + } renderScope.setRenderLayer(RenderLayer::getGuiTextured); diff --git a/src/main/java/org/saturnclient/modules/mods/Keystrokes.java b/src/main/java/org/saturnclient/modules/mods/Keystrokes.java new file mode 100644 index 0000000..a344ff2 --- /dev/null +++ b/src/main/java/org/saturnclient/modules/mods/Keystrokes.java @@ -0,0 +1,77 @@ +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.saturnclient.config.Property; +import org.saturnclient.ui2.RenderScope; +import org.saturnclient.modules.ModuleDetails; + +public class Keystrokes extends Module implements HudMod { + public static Property enabled = Property.bool(false); + public static ModDimensions dimensions = new ModDimensions(78, 52); + private boolean w = false; + private boolean a = false; + private boolean s = false; + private boolean d = false; + + private static Property clickBg = Property.color(0xFFCCCCCC); + private static Property clickFg = Property.color(0xFFFFFFFF); + + public Keystrokes() { + super(new ModuleDetails("Keystrokes", "keystrokes") + .description("Displays the keystrokes for movement") + .version("v0.1.0") + .tags("Utility"), + + enabled.named("Enabled"), + dimensions.prop()); + + 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(); + } + + @Override + public void renderHud(RenderScope scope) { + renderKey(scope, w, 'W', (dimensions.width - 24) / 2, 0); + renderKey(scope, a, 'A', 0, dimensions.height - 24); + renderKey(scope, s, 'S', (dimensions.width - 24) / 2, dimensions.height - 24); + renderKey(scope, d, 'D', dimensions.width - 24, dimensions.height - 24); + } + + @Override + public void renderDummy(RenderScope scope) { + renderKey(scope, false, 'W', (dimensions.width - 24) / 2, 0); + renderKey(scope, false, 'A', 0, dimensions.height - 24); + renderKey(scope, false, 'S', (dimensions.width - 24) / 2, dimensions.height - 24); + renderKey(scope, false, 'D', dimensions.width - 24, dimensions.height - 24); + } + + private void renderKey(RenderScope scope, boolean isPressed, char c, int x, int y) { + scope.drawRoundedRectangle(x, y, 24, 24, dimensions.radius.value, isPressed ? clickBg.value : dimensions.bgColor.value); + scope.drawText(0.6f, String.valueOf(c), x + 9, y + 7, dimensions.font.value, isPressed ? clickFg.value : dimensions.fgColor.value); + } + + @Override + public boolean isEnabled() { + return enabled.value; + } + + @Override + public ModDimensions getDimensions() { + return dimensions; + } + + @Override + public void setEnabled(boolean e) { + enabled.value = e; + } +} \ No newline at end of file diff --git a/src/main/java/org/saturnclient/modules/mods/PotionDisplay.java b/src/main/java/org/saturnclient/modules/mods/PotionDisplay.java index 28a1b93..0097a2d 100644 --- a/src/main/java/org/saturnclient/modules/mods/PotionDisplay.java +++ b/src/main/java/org/saturnclient/modules/mods/PotionDisplay.java @@ -50,7 +50,7 @@ public class PotionDisplay extends Module implements HudMod { RegistryEntry registryEntry = effect.getEffectType(); Sprite sprite = statusEffectSpriteManager.getSprite(registryEntry); scope.drawSpriteStretched(sprite, 0, 18 * row, 16, 16); - scope.drawText(0.5f, getDurationAsString(effect), 20, 18 * row + 3, dimensions.font.value, -1); + scope.drawText(0.5f, getDurationAsString(effect), 18, 18 * row + 3, dimensions.font.value, -1); row++; } } diff --git a/src/main/resources/assets/saturnclient/textures/gui/mod/keystrokes.png b/src/main/resources/assets/saturnclient/textures/gui/mod/keystrokes.png new file mode 100644 index 0000000000000000000000000000000000000000..da20fcdf594e6824899c2a52b07b0e3614437159 GIT binary patch literal 3226 zcmb_ec{o)49v{n)wf7>H89Xb2YX`F`g|G%!U^6va4 zyZkscoAlV`_Qk@U`m$TJNk)@f=MB8EjEqck(qYwlfr!3{?+I~Bg=0xm)xj~CfiFz7 ziNhPlVopnNGUMiwNArZ}_`6>$yu}tG-{DvK(Mb+$#Rj~Iq?C(d>f^guUI)(m0^)Si zB9uyWzMWl^Wek7%-Ijs9VN;thlGOANHU6yqDYcO;`>aB-en`y1Yns=JGqE=%ey7Q9 zkEAW>{&;GkbI*Kt$=Iop<{rO&Gh#bcYDhvDa&%1jBpwfF_0uKVgiQ=4ZKCyF=68xA zpT{m?EMC$-w1tf%Io3^!*lu+i_J_YFMe8%#4I@g!N2=kvo)jtKHO95loQtqe_TDB< zQnGgHaDhu!Nj(3CXT!8`X6<0cXiqc0QU9i9IUncx>Z{IHl=YdY0Hh z80G$isq_7@t4g}Mi6)=oGLz4wk{6K2JakCcLC~|0muB-p0FDbxAEG8n_-Vm$YUy~c z^*1=~%7blA7mhphV4IVM!66Vmr~ zTZiNL0@c>U_t22G<(E}7KW8hC9Bp`k7@eTQwD$fA5vplt_$xl8`QygYHGI+I;;& z?;Vwa8{B^IIa_c*r5}2l)e`eDxuxXtK2==f91xzFw)JMmrJz9NCC`$eH(6O}>IQ;; z`eOeD)?8>M|8nSI*SY17?mlx&UZAOY!I!+i>J|6#i^U5@U&%52yR|;rIk{m;L*av# zj6DSx*&U9ioi_>!7Z-h2$jkSJ($sta-v(f6ujUJ9kVQYU=i8e?rE% z){*&G?*h5(x)rGUH^^kNuARDtcL6oB3phCv;az7t^dcd%UeN2;S((y;61K>)6y8v#LvUcDdzvcnC(T*}s$0i;5BaBf4_&;U@ zWb$5r7h+SZ*$|a9717LD^!JOEa_LDu7)w&$LUyrjXVLhJU%HQ*3%*p7wA-h0a+*n9U_S1PnoA}Tj(+@^kQ zQXB*Y(a9Vuwv;vn&3SI#b4H1MU8+<3Wb~N2o|&%eAm~bi+&5()_v(&Xxv%~$*kbA<>D=DqW+VkCmpOV`w&$SA&cg#x{U|P%f4iuNDP?3xGdmM49EB4txFR zFG>rlvH>idSTzTl0RDrhRQ-cLMJQ^bfOw~sIoJWfXAB06C)qNY z^Ope4Zrpkyp-xaXr)ccfTkOdaL-YjI3sFJ12n>G4dY`OjOt<%j&5sT{r>BaI()L$( zvcL|x5rU6dD|6fm*m)MG2o4{R9EY68t3j*GXTG zNJkqyFk6G`K5oD1#rrB~DA!R($tfb~tr`Y+u#f`_+B}}Akg`^y(hwjLXd2U@8j&7D z9QvUL94@m=cXag@!C%kMFSPseqd7rZ$;l&0RZ})fL&?bzGKyE^&)1glI(QqE zgsCUEimxu6%G)WNvkVL zH;X>~GDttt!l!D2YO5suB`p$7aN^4>D0Eqg3&Vi#w*nn~Et@Ba<=ZJzTtcSDp%mf> zCzn4`C~p+B_2&KB*kCBieS>8Bu1Vy21!0a)t;1A0Q}4P_>liq^MLE)-MhaN6={esz zh7Aks+bB3S?+}<6OGN14N{&ONY#fHJu~H-H?rEE;w_jPq$c|~O=XT6F#3ja#n@Hjw zY{!IRYtE}tU+->Xa$_{*M}yb1PR%uz@@Nq4(&`%~xaTzxk5O+}vQ_ireV$kvQN(3MRkMQW8q~_(>bNG-esMVlPOtHA8)X$ z?=Y6$)7sNw|chCw!EiYWYzjWVr zr1<5b9&tA}K8tPJ?dq0qsK7!)BFJrS1H@O3%AW?-AJA!?_pTNj@G)g*S^+UtD)rFt zqAhA8-4=mp)b7^7`VTGez2?5f}( z^HHvY3|od)hR=Q)pM%HKFEKY6Xh=(y@W$iwU2k}{CbwEdGZ*xx((V;=l%Z%#rmfNV z41%`XY=}+e^c@;+2Q`>=oPsZOm<4Z9_k($L zW=}bdHc^Iw1I?2kPy$aub4KgQqm$zJh~_xishTfk9E#UK5YZI)iz)fPQm