From 08cee2172cb5b26fdc0090dc01bb776a9b2036eb Mon Sep 17 00:00:00 2001 From: Kleo Dev Date: Sat, 16 Aug 2025 14:17:55 +0200 Subject: [PATCH 1/4] Removed the reload system --- .../saturnclient/saturnclient/auth/Auth.java | 46 +++----------- .../saturnclient/cosmetics/Hats.java | 1 - .../saturnclient/cosmetics/cloaks/Cloaks.java | 1 - .../saturnclient/mixin/SaturnReload.java | 62 ------------------- .../saturnclient/ui2/screens/EmoteWheel.java | 2 - src/main/resources/saturnclient.mixins.json | 1 - 6 files changed, 7 insertions(+), 106 deletions(-) delete mode 100644 src/main/java/org/saturnclient/saturnclient/mixin/SaturnReload.java diff --git a/src/main/java/org/saturnclient/saturnclient/auth/Auth.java b/src/main/java/org/saturnclient/saturnclient/auth/Auth.java index 680850f..4a77d78 100644 --- a/src/main/java/org/saturnclient/saturnclient/auth/Auth.java +++ b/src/main/java/org/saturnclient/saturnclient/auth/Auth.java @@ -98,7 +98,7 @@ public class Auth { playerNames.entrySet().removeIf(entry -> entry.getValue().equals(uuid)); } break; - + case "successful_transaction": String cloak = parser.getStringOrNull("cloak"); String hat = parser.getStringOrNull("hat"); @@ -115,7 +115,10 @@ public class Auth { if (SaturnClient.client.currentScreen instanceof SaturnScreen) { String[] a = parser.error.replace("!", "").split(": "); - ((SaturnScreen) SaturnClient.client.currentScreen).draw(new Notification(SaturnClient.client.currentScreen.width, SaturnClient.client.currentScreen.height, NotificationKind.Error, a[0], a[1])); + ((SaturnScreen) SaturnClient.client.currentScreen) + .draw(new Notification(SaturnClient.client.currentScreen.width, + SaturnClient.client.currentScreen.height, NotificationKind.Error, + a[0], a[1])); } } break; @@ -179,7 +182,7 @@ public class Auth { public static void setCloak(String cloakName) { try { - Network.write("set_cloak@cloak=" + cloakName); + Network.write("set_cloak@cloak=" + cloakName + "@notify=" + "d362a04228bd49e1a807ae74dbe8aba9"); } catch (Exception e) { SaturnClient.LOGGER.error("Request failed", e); } @@ -187,7 +190,7 @@ public class Auth { public static void setHat(String hatName) { try { - Network.write("set_hat@hat=" + hatName); + Network.write("set_hat@hat=" + hatName + "@notify=" + "d362a04228bd49e1a807ae74dbe8aba9"); } catch (Exception e) { SaturnClient.LOGGER.error("Request failed", e); } @@ -202,41 +205,6 @@ public class Auth { } } - public static void sendReload() { - for (Map.Entry player : playerNames.entrySet()) { - if (players.containsKey(player.getValue()) && !player.getValue().equals(uuid)) { - SaturnClient.client.player.networkHandler - .sendChatCommand("msg " + player.getKey() + " " - + "$SATURN_RELOAD if you are seeing this as a player, please report this to https://github.com/saturnclientmc/saturnclient/issues"); - ; - } - } - } - - public static void sendEmote(String emote) { - String uuid = SaturnClient.client.player.getUuidAsString().replace("-", ""); - for (Map.Entry player : playerNames.entrySet()) { - if (players.containsKey(player.getValue()) && !player.getValue().equals(uuid)) { - SaturnClient.client.player.networkHandler - .sendChatCommand("msg " + player.getKey() + " " - + "$SATURN_EMOTE&@"+uuid+"&@"+emote+"&@ if you are seeing this as a player, please report this to https://github.com/saturnclientmc/saturnclient/issues"); - ; - } - } - } - - public static void cancelEmote() { - String uuid = SaturnClient.client.player.getUuidAsString().replace("-", ""); - for (Map.Entry player : playerNames.entrySet()) { - if (players.containsKey(player.getValue()) && !player.getValue().equals(uuid)) { - SaturnClient.client.player.networkHandler - .sendChatCommand("msg " + player.getKey() + " " - + "$SATURN_CANCEL_EMOTE&@"+uuid+"&@ if you are seeing this as a player, please report this to https://github.com/saturnclientmc/saturnclient/issues"); - ; - } - } - } - public static void buyCloak(String name) { try { Network.write("buy_cloak@cloak=" + name); diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/Hats.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/Hats.java index 408da52..ea30e6f 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/Hats.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/Hats.java @@ -16,7 +16,6 @@ public class Hats { public static void setHat(String uuid, String hatName) { setHatSilent(uuid, hatName); Auth.setHat(hatName); - Auth.sendReload(); } public static void setHatSilent(String uuid, String hatName) { diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java index 88ddce9..91b9670 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java @@ -45,7 +45,6 @@ public class Cloaks { public static void setCloak(String uuid, String cloakName) { Auth.setCloak(cloakName); setCloakSilent(uuid, cloakName); - Auth.sendReload(); SaturnClient.LOGGER.info("Cloak set to " + cloakName); } diff --git a/src/main/java/org/saturnclient/saturnclient/mixin/SaturnReload.java b/src/main/java/org/saturnclient/saturnclient/mixin/SaturnReload.java deleted file mode 100644 index db2c3cb..0000000 --- a/src/main/java/org/saturnclient/saturnclient/mixin/SaturnReload.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.saturnclient.saturnclient.mixin; - -import java.util.Map; -import org.jetbrains.annotations.Nullable; -import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.saturnclient.auth.Auth; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import dev.kosmx.playerAnim.api.layered.AnimationStack; -import dev.kosmx.playerAnim.minecraftApi.PlayerAnimationAccess; -import dev.kosmx.playerAnim.minecraftApi.PlayerAnimationRegistry; -import net.minecraft.client.gui.hud.ChatHud; -import net.minecraft.client.gui.hud.MessageIndicator; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.network.message.MessageSignatureData; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - -@Mixin(ChatHud.class) -public class SaturnReload { - @Inject(method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)V", at = @At("HEAD"), cancellable = true) - public void onAddMessage(Text message, @Nullable MessageSignatureData signatureData, - @Nullable MessageIndicator indicator, CallbackInfo ci) { - try { - String msg = message.toString(); - if (msg.contains("$SATURN_RELOAD")) { - for (Map.Entry player : Auth.playerNames.entrySet()) { - String name = player.getKey(); - if (msg.contains(name)) { - Auth.player(name, player.getValue()); - } - ci.cancel(); - } - } else if (msg.contains("$SATURN_EMOTE")) { - String[] args = msg.split("&@"); - for (AbstractClientPlayerEntity player : SaturnClient.client.world.getPlayers()) { - if (player.getUuidAsString().replace("-", "").equals(args[1])) { - AnimationStack animationStack = PlayerAnimationAccess.getPlayerAnimLayer(player); - animationStack.addAnimLayer(1000, PlayerAnimationRegistry.getAnimation(Identifier.of("saturnclient", args[2])).playAnimation()); - ci.cancel(); - break; - } - } - } else if (msg.contains("$SATURN_CANCEL_EMOTE")) { - String[] args = msg.split("&@"); - for (AbstractClientPlayerEntity player : SaturnClient.client.world.getPlayers()) { - if (player.getUuidAsString().replace("-", "").equals(args[1])) { - AnimationStack animationStack = PlayerAnimationAccess.getPlayerAnimLayer(player); - animationStack.removeLayer(1000); - ci.cancel(); - break; - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java b/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java index 8897f31..c122dda 100644 --- a/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java +++ b/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java @@ -64,10 +64,8 @@ public class EmoteWheel extends SaturnScreen { AnimationStack animationStack = PlayerAnimationAccess.getPlayerAnimLayer(SaturnClient.client.player); if (animationStack.isActive() && animationStack.getPriority() == 1000) { animationStack.removeLayer(1000); - // Auth.cancelEmote(); } animationStack.addAnimLayer(1000, PlayerAnimationRegistry.getAnimation(Identifier.of("saturnclient", emote)).playAnimation()); - // Auth.sendEmote(emote); close(); }).dimensions(70, 70).centerOffset(width, height, -80 + (col * 80), -35 + (row * 80)).animation(new Fade(700))); diff --git a/src/main/resources/saturnclient.mixins.json b/src/main/resources/saturnclient.mixins.json index bd16a89..8327a69 100644 --- a/src/main/resources/saturnclient.mixins.json +++ b/src/main/resources/saturnclient.mixins.json @@ -8,7 +8,6 @@ "NameTagMixin", "PlayerEntityRendererMixin", "WhoAmI", - "SaturnReload", "DrawContextAccessor", "TitleScreenMixin" ], From 01a8ea15a01b8b2f44f0bae9cade16bf38b4d878 Mon Sep 17 00:00:00 2001 From: Kleo Dev Date: Sat, 16 Aug 2025 16:05:44 +0200 Subject: [PATCH 2/4] Better cosmetic update system --- .../saturnclient/saturnclient/auth/Auth.java | 31 +++++++++++++++++-- .../saturnclient/auth/Network.java | 2 +- .../saturnclient/cosmetics/cloaks/Cloaks.java | 15 ++++++--- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/saturnclient/saturnclient/auth/Auth.java b/src/main/java/org/saturnclient/saturnclient/auth/Auth.java index 4a77d78..5c82980 100644 --- a/src/main/java/org/saturnclient/saturnclient/auth/Auth.java +++ b/src/main/java/org/saturnclient/saturnclient/auth/Auth.java @@ -104,11 +104,34 @@ public class Auth { String hat = parser.getStringOrNull("hat"); if (cloak != null) { Cloaks.availableCloaks.add(cloak); + } if (hat != null) { Hats.availableHats.add(hat); } + case "update_cloak": + String targetUuid = parser.getStringOrNull("uuid"); + String targetCloak = parser.getStringOrNull("cloak"); + if (targetUuid != null && targetCloak != null) { + SaturnPlayer player = players.get(targetUuid); + if (player != null) { + player.cloak = targetCloak; + } + } + break; + + case "update_hat": + targetUuid = parser.getStringOrNull("uuid"); + String targetHat = parser.getStringOrNull("hat"); + if (targetUuid != null && targetHat != null) { + SaturnPlayer player = players.get(targetUuid); + if (player != null) { + player.hat = targetHat; + } + } + break; + default: if (parser.error != null) { SaturnClient.LOGGER.error("Error from the server: " + parser.error); @@ -182,7 +205,7 @@ public class Auth { public static void setCloak(String cloakName) { try { - Network.write("set_cloak@cloak=" + cloakName + "@notify=" + "d362a04228bd49e1a807ae74dbe8aba9"); + Network.write("set_cloak@cloak=" + cloakName + "@notify=" + stringifyPlayers()); } catch (Exception e) { SaturnClient.LOGGER.error("Request failed", e); } @@ -190,12 +213,16 @@ public class Auth { public static void setHat(String hatName) { try { - Network.write("set_hat@hat=" + hatName + "@notify=" + "d362a04228bd49e1a807ae74dbe8aba9"); + Network.write("set_hat@hat=" + hatName + "@notify=" + stringifyPlayers()); } catch (Exception e) { SaturnClient.LOGGER.error("Request failed", e); } } + public static String stringifyPlayers() { + return String.join("$", players.keySet()); + } + public static void player(String name, String uuid) { try { playerNames.put(name, uuid.replaceAll("-", "")); diff --git a/src/main/java/org/saturnclient/saturnclient/auth/Network.java b/src/main/java/org/saturnclient/saturnclient/auth/Network.java index 4a61515..5c43931 100644 --- a/src/main/java/org/saturnclient/saturnclient/auth/Network.java +++ b/src/main/java/org/saturnclient/saturnclient/auth/Network.java @@ -37,7 +37,7 @@ public class Network { // Generate AES key new SecureRandom().nextBytes(key); - socket = new Socket("77.247.92.168", 8080); + socket = new Socket("localhost", 8080); // out = new DataOutputStream(socket.getOutputStream()); out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java index 91b9670..071e621 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/cloaks/Cloaks.java @@ -112,20 +112,25 @@ public class Cloaks { List animatedFrames = new ArrayList<>(); for (int i = 0; i < frameCount; i++) { String frameId = fileName.replace(".gif", "") + "_frame_" + i; - Identifier frameIdentifier = Identifier.of(SaturnClient.MOD_ID, "cloaks_" + frameId); - IdentifierUtils.registerBufferedImageTexture(frameIdentifier, frames.get(i)); + Identifier frameIdentifier = Identifier.of(SaturnClient.MOD_ID, + "cloaks_" + frameId); + IdentifierUtils.registerBufferedImageTexture(frameIdentifier, + frames.get(i)); animatedFrames.add(new AnimatedCloakData(frameIdentifier, delays.get(i))); } animatedCloaks.put(uuid, animatedFrames); lastFrameTime.put(uuid, System.currentTimeMillis()); - SaturnClient.LOGGER.info("Loaded " + frames.size() + " frames for animated cloak: " + fileName); + SaturnClient.LOGGER.info( + "Loaded " + frames.size() + " frames for animated cloak: " + fileName); } catch (Exception e) { - SaturnClient.LOGGER.error("Failed to register animated cloak textures: " + fileName, e); + SaturnClient.LOGGER + .error("Failed to register animated cloak textures: " + fileName, e); } }); } } catch (IOException e) { - SaturnClient.LOGGER.error("Failed to load animated cloak from resources: " + player.cloak + ".gif", e); + SaturnClient.LOGGER + .error("Failed to load animated cloak from resources: " + player.cloak + ".gif", e); } }).start(); } else { From 997fbbe9a94a8e9c21878fc9ad66563cc105b2bd Mon Sep 17 00:00:00 2001 From: Kleo Dev Date: Sat, 16 Aug 2025 16:29:48 +0200 Subject: [PATCH 3/4] Working emote system --- .../saturnclient/saturnclient/auth/Auth.java | 44 ++++++++++++++++++- .../saturnclient/event/KeyInputHandler.java | 4 +- .../saturnclient/ui2/screens/EmoteWheel.java | 17 ++++--- 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/saturnclient/saturnclient/auth/Auth.java b/src/main/java/org/saturnclient/saturnclient/auth/Auth.java index 5c82980..5ecdf8c 100644 --- a/src/main/java/org/saturnclient/saturnclient/auth/Auth.java +++ b/src/main/java/org/saturnclient/saturnclient/auth/Auth.java @@ -2,12 +2,22 @@ package org.saturnclient.saturnclient.auth; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; + import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; +import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.util.Identifier; + import org.saturnclient.saturnclient.cosmetics.Hats; import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; import org.saturnclient.ui2.SaturnScreen; import org.saturnclient.ui2.elements.Notification; import org.saturnclient.ui2.elements.Notification.NotificationKind; + +import dev.kosmx.playerAnim.api.layered.AnimationStack; +import dev.kosmx.playerAnim.minecraftApi.PlayerAnimationAccess; +import dev.kosmx.playerAnim.minecraftApi.PlayerAnimationRegistry; + import org.saturnclient.saturnclient.SaturnClient; public class Auth { @@ -132,6 +142,28 @@ public class Auth { } break; + case "emote": + targetUuid = parser.getStringOrNull("uuid"); + String emote = parser.getStringOrNull("name"); + + for (AbstractClientPlayerEntity player : SaturnClient.client.world.getPlayers()) { + if (player.getUuidAsString().replace("-", "").equals(targetUuid)) { + AnimationStack animationStack = PlayerAnimationAccess.getPlayerAnimLayer(player); + if (emote != null && !emote.isEmpty()) { + if (animationStack.isActive() && animationStack.getPriority() == 1000) { + animationStack.removeLayer(1000); + } + animationStack.addAnimLayer(1000, + PlayerAnimationRegistry + .getAnimation(Identifier.of("saturnclient", emote)) + .playAnimation()); + } else { + animationStack.removeLayer(1000); + } + } + } + break; + default: if (parser.error != null) { SaturnClient.LOGGER.error("Error from the server: " + parser.error); @@ -219,8 +251,18 @@ public class Auth { } } + public static void emote(String name) { + try { + Network.write("emote@name=" + name + "@notify=" + stringifyPlayers()); + } catch (Exception e) { + SaturnClient.LOGGER.error("Request failed", e); + } + } + public static String stringifyPlayers() { - return String.join("$", players.keySet()); + return players.keySet().stream() + .filter(key -> key != uuid) + .collect(Collectors.joining("$")); } public static void player(String name, String uuid) { diff --git a/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java b/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java index de995b4..12db7dd 100644 --- a/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java +++ b/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java @@ -7,7 +7,7 @@ import net.minecraft.client.util.InputUtil; import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClientConfig; -// import org.saturnclient.saturnclient.auth.Auth; +import org.saturnclient.saturnclient.auth.Auth; import org.saturnclient.ui2.screens.EmoteWheel; import org.saturnclient.ui2.screens.ShiftMenu; @@ -47,7 +47,7 @@ public class KeyInputHandler { AnimationStack animationStack = PlayerAnimationAccess.getPlayerAnimLayer(SaturnClient.client.player); if (animationStack.isActive() && animationStack.getPriority() == 1000) { animationStack.removeLayer(1000); - // Auth.cancelEmote(); + Auth.emote(""); } } }); diff --git a/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java b/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java index c122dda..73ba8d4 100644 --- a/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java +++ b/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java @@ -2,6 +2,7 @@ package org.saturnclient.ui2.screens; import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClientConfig; +import org.saturnclient.saturnclient.auth.Auth; // import org.saturnclient.saturnclient.auth.Auth; import org.saturnclient.saturnclient.cosmetics.Emotes; import org.saturnclient.ui2.SaturnScreen; @@ -29,8 +30,10 @@ public class EmoteWheel extends SaturnScreen { int row = 0; int col = 0; - draw(new ImageTexture(Textures.LOGO_TEXT).dimensions(98, 10).centerOffset(width, height, 0, -105).animation(new Fade(700))); - draw(new ImageTexture(SaturnClientConfig.getLogo()).dimensions(98, 98).centerOffset(width, height, 0, -149).animation(new SlideY(700, -20))); + draw(new ImageTexture(Textures.LOGO_TEXT).dimensions(98, 10).centerOffset(width, height, 0, -105) + .animation(new Fade(700))); + draw(new ImageTexture(SaturnClientConfig.getLogo()).dimensions(98, 98).centerOffset(width, height, 0, -149) + .animation(new SlideY(700, -20))); draw(new TextureButton(Textures.LEFT, () -> { if (page > 1) { @@ -47,7 +50,7 @@ public class EmoteWheel extends SaturnScreen { ui(); } }).dimensions(30, 30).centerOffset(width, height, 20, 45).animation(new Fade(700))); - + while (row < 3) { int idx = (row * 3 + col) * page; @@ -65,9 +68,13 @@ public class EmoteWheel extends SaturnScreen { if (animationStack.isActive() && animationStack.getPriority() == 1000) { animationStack.removeLayer(1000); } - animationStack.addAnimLayer(1000, PlayerAnimationRegistry.getAnimation(Identifier.of("saturnclient", emote)).playAnimation()); + animationStack.addAnimLayer(1000, + PlayerAnimationRegistry.getAnimation(Identifier.of("saturnclient", + emote)).playAnimation()); + Auth.emote(emote); close(); - }).dimensions(70, 70).centerOffset(width, height, -80 + (col * 80), -35 + (row * 80)).animation(new Fade(700))); + }).dimensions(70, 70).centerOffset(width, height, -80 + (col * 80), -35 + (row * 80)) + .animation(new Fade(700))); if (col < 2) { col++; From 6fb38e4f9b0a4321d56f5f18214b1628a77c9f4f Mon Sep 17 00:00:00 2001 From: Kleo Dev Date: Sat, 16 Aug 2025 16:33:19 +0200 Subject: [PATCH 4/4] Updated ip --- src/main/java/org/saturnclient/saturnclient/auth/Network.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/saturnclient/saturnclient/auth/Network.java b/src/main/java/org/saturnclient/saturnclient/auth/Network.java index 5c43931..4a61515 100644 --- a/src/main/java/org/saturnclient/saturnclient/auth/Network.java +++ b/src/main/java/org/saturnclient/saturnclient/auth/Network.java @@ -37,7 +37,7 @@ public class Network { // Generate AES key new SecureRandom().nextBytes(key); - socket = new Socket("localhost", 8080); + socket = new Socket("77.247.92.168", 8080); // out = new DataOutputStream(socket.getOutputStream()); out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream()));