From 997fbbe9a94a8e9c21878fc9ad66563cc105b2bd Mon Sep 17 00:00:00 2001 From: Kleo Dev Date: Sat, 16 Aug 2025 16:29:48 +0200 Subject: [PATCH] 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++;