diff --git a/build.gradle b/build.gradle index eec78e0..0f8fb81 100644 --- a/build.gradle +++ b/build.gradle @@ -8,4 +8,5 @@ java { dependencies { implementation "dev.selimaj:session-java:0.2.0" + implementation "org.saturnclient:emotes-core:${emotes_version}" } \ No newline at end of file diff --git a/src/main/java/org/saturnclient/cosmetics/Emotes.java b/src/main/java/org/saturnclient/cosmetics/Emotes.java index bc0353b..b4f00dd 100644 --- a/src/main/java/org/saturnclient/cosmetics/Emotes.java +++ b/src/main/java/org/saturnclient/cosmetics/Emotes.java @@ -1,17 +1,45 @@ package org.saturnclient.cosmetics; +import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import org.saturnclient.common.provider.Providers; +import org.saturnclient.emotes.core.Emote; +import org.saturnclient.emotes.core.EmoteRegistry; + +/** + * Saturn's emotes, loaded from {@code assets/saturnclient/player_animations/.json} (Emotecraft + * format). They live in Saturn's own registry rather than the emote library's shared one, so another + * mod using the library can't replace them. + */ public class Emotes { + private static final List IDS = List.of("tpose", "back_flip", "facepalm", "cry", "giga_chad", + "front_flip"); + + private static final EmoteRegistry REGISTRY = new EmoteRegistry(); + + /** The emotes that loaded, in wheel order. */ public static List availableEmotes = new ArrayList<>(); public static void initialize() { - availableEmotes.add("tpose"); - availableEmotes.add("back_flip"); - availableEmotes.add("facepalm"); - availableEmotes.add("cry"); - availableEmotes.add("giga_chad"); - availableEmotes.add("front_flip"); + for (String id : IDS) { + String path = "/assets/saturnclient/player_animations/" + id + ".json"; + try (InputStream in = Emotes.class.getResourceAsStream(path)) { + if (in == null) { + Providers.saturn.logError("Missing emote " + path); + continue; + } + REGISTRY.loadEmotecraft(id, in); + availableEmotes.add(id); + } catch (Exception e) { + Providers.saturn.logError("Failed to load emote " + id, e); + } + } + } + + public static Optional get(String id) { + return REGISTRY.get(id); } } diff --git a/src/main/java/org/saturnclient/ui/screens/EmoteWheel.java b/src/main/java/org/saturnclient/ui/screens/EmoteWheel.java index 80ad62c..2a870ec 100644 --- a/src/main/java/org/saturnclient/ui/screens/EmoteWheel.java +++ b/src/main/java/org/saturnclient/ui/screens/EmoteWheel.java @@ -83,6 +83,7 @@ public class EmoteWheel extends SaturnScreen { emoteStagger.draw( new TextureButton(Textures.getEmotePreview(emote), () -> { Providers.saturn.playEmote(ServiceClient.uuid, emote); + ServiceClient.emote(emote); provider.close(); }) .dimensions(70, 70)