From f5237fa0d14057bbf3c37166380d5fa436dca0d7 Mon Sep 17 00:00:00 2001 From: Vinrobot Date: Tue, 22 Aug 2023 00:55:26 +0200 Subject: [PATCH] Add FrankerFaceZ global emotes --- .../{font/impl => providers}/FFZEmote.java | 2 +- .../providers/FFZGlobalEmoteProvider.java | 28 +++++++++++++++++++ .../providers/FFZRoomEmoteProvider.java | 1 - .../providers/STVGlobalEmoteProvider.java | 1 - .../providers/STVUserEmoteProvider.java | 1 - .../impl => providers}/SevenTVEmote.java | 2 +- ...ot.mcemote.client.providers.IEmoteProvider | 1 + .../mcemote/api/FrankerFaceZService.java | 12 ++++++++ .../mcemote/api/ffz/GlobalEmoteSets.java | 9 ++++++ 9 files changed, 52 insertions(+), 5 deletions(-) rename src/client/java/net/vinrobot/mcemote/client/{font/impl => providers}/FFZEmote.java (96%) create mode 100644 src/client/java/net/vinrobot/mcemote/client/providers/FFZGlobalEmoteProvider.java rename src/client/java/net/vinrobot/mcemote/client/{font/impl => providers}/SevenTVEmote.java (97%) create mode 100644 src/main/java/net/vinrobot/mcemote/api/ffz/GlobalEmoteSets.java diff --git a/src/client/java/net/vinrobot/mcemote/client/font/impl/FFZEmote.java b/src/client/java/net/vinrobot/mcemote/client/providers/FFZEmote.java similarity index 96% rename from src/client/java/net/vinrobot/mcemote/client/font/impl/FFZEmote.java rename to src/client/java/net/vinrobot/mcemote/client/providers/FFZEmote.java index 26ecacb..438ce61 100644 --- a/src/client/java/net/vinrobot/mcemote/client/font/impl/FFZEmote.java +++ b/src/client/java/net/vinrobot/mcemote/client/providers/FFZEmote.java @@ -1,4 +1,4 @@ -package net.vinrobot.mcemote.client.font.impl; +package net.vinrobot.mcemote.client.providers; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/src/client/java/net/vinrobot/mcemote/client/providers/FFZGlobalEmoteProvider.java b/src/client/java/net/vinrobot/mcemote/client/providers/FFZGlobalEmoteProvider.java new file mode 100644 index 0000000..0f877fd --- /dev/null +++ b/src/client/java/net/vinrobot/mcemote/client/providers/FFZGlobalEmoteProvider.java @@ -0,0 +1,28 @@ +package net.vinrobot.mcemote.client.providers; + +import net.vinrobot.mcemote.api.FrankerFaceZService; +import net.vinrobot.mcemote.api.ffz.GlobalEmoteSets; +import net.vinrobot.mcemote.config.Configuration; + +import java.util.Arrays; + +public class FFZGlobalEmoteProvider implements IEmoteProvider { + @Override + public int priority() { + return 10; + } + + @Override + public void registerEmotes(final Configuration config, final IEmoteRegistry registry) throws Exception { + final FrankerFaceZService service = new FrankerFaceZService(); + + final GlobalEmoteSets emoteSets = service.fetchGlobalEmoteSet(); + + Arrays.stream(emoteSets.default_sets()) + .mapToObj(Integer::toString) + .map(emoteSets.sets()::get) + .flatMap((emoteSet) -> emoteSet.emoticons().stream()) + .map(FFZEmote::new) + .forEach(registry::registerEmote); + } +} diff --git a/src/client/java/net/vinrobot/mcemote/client/providers/FFZRoomEmoteProvider.java b/src/client/java/net/vinrobot/mcemote/client/providers/FFZRoomEmoteProvider.java index 5074dac..6f5fbd3 100644 --- a/src/client/java/net/vinrobot/mcemote/client/providers/FFZRoomEmoteProvider.java +++ b/src/client/java/net/vinrobot/mcemote/client/providers/FFZRoomEmoteProvider.java @@ -2,7 +2,6 @@ import net.vinrobot.mcemote.api.FrankerFaceZService; import net.vinrobot.mcemote.api.ffz.Platform; -import net.vinrobot.mcemote.client.font.impl.FFZEmote; import net.vinrobot.mcemote.config.Configuration; import java.io.IOException; diff --git a/src/client/java/net/vinrobot/mcemote/client/providers/STVGlobalEmoteProvider.java b/src/client/java/net/vinrobot/mcemote/client/providers/STVGlobalEmoteProvider.java index 1002e6a..49fcf58 100644 --- a/src/client/java/net/vinrobot/mcemote/client/providers/STVGlobalEmoteProvider.java +++ b/src/client/java/net/vinrobot/mcemote/client/providers/STVGlobalEmoteProvider.java @@ -1,7 +1,6 @@ package net.vinrobot.mcemote.client.providers; import net.vinrobot.mcemote.api.SevenTVService; -import net.vinrobot.mcemote.client.font.impl.SevenTVEmote; import net.vinrobot.mcemote.config.Configuration; import java.io.IOException; diff --git a/src/client/java/net/vinrobot/mcemote/client/providers/STVUserEmoteProvider.java b/src/client/java/net/vinrobot/mcemote/client/providers/STVUserEmoteProvider.java index d0dab36..c4692d9 100644 --- a/src/client/java/net/vinrobot/mcemote/client/providers/STVUserEmoteProvider.java +++ b/src/client/java/net/vinrobot/mcemote/client/providers/STVUserEmoteProvider.java @@ -2,7 +2,6 @@ import net.vinrobot.mcemote.api.SevenTVService; import net.vinrobot.mcemote.api.seventv.Platform; -import net.vinrobot.mcemote.client.font.impl.SevenTVEmote; import net.vinrobot.mcemote.config.Configuration; import java.io.IOException; diff --git a/src/client/java/net/vinrobot/mcemote/client/font/impl/SevenTVEmote.java b/src/client/java/net/vinrobot/mcemote/client/providers/SevenTVEmote.java similarity index 97% rename from src/client/java/net/vinrobot/mcemote/client/font/impl/SevenTVEmote.java rename to src/client/java/net/vinrobot/mcemote/client/providers/SevenTVEmote.java index ee3817c..cdf3a00 100644 --- a/src/client/java/net/vinrobot/mcemote/client/font/impl/SevenTVEmote.java +++ b/src/client/java/net/vinrobot/mcemote/client/providers/SevenTVEmote.java @@ -1,4 +1,4 @@ -package net.vinrobot.mcemote.client.font.impl; +package net.vinrobot.mcemote.client.providers; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/src/client/resources/META-INF/services/net.vinrobot.mcemote.client.providers.IEmoteProvider b/src/client/resources/META-INF/services/net.vinrobot.mcemote.client.providers.IEmoteProvider index 4889b35..24b6846 100644 --- a/src/client/resources/META-INF/services/net.vinrobot.mcemote.client.providers.IEmoteProvider +++ b/src/client/resources/META-INF/services/net.vinrobot.mcemote.client.providers.IEmoteProvider @@ -1,3 +1,4 @@ net.vinrobot.mcemote.client.providers.STVGlobalEmoteProvider net.vinrobot.mcemote.client.providers.STVUserEmoteProvider +net.vinrobot.mcemote.client.providers.FFZGlobalEmoteProvider net.vinrobot.mcemote.client.providers.FFZRoomEmoteProvider diff --git a/src/main/java/net/vinrobot/mcemote/api/FrankerFaceZService.java b/src/main/java/net/vinrobot/mcemote/api/FrankerFaceZService.java index 26bf5cd..678f508 100644 --- a/src/main/java/net/vinrobot/mcemote/api/FrankerFaceZService.java +++ b/src/main/java/net/vinrobot/mcemote/api/FrankerFaceZService.java @@ -1,6 +1,7 @@ package net.vinrobot.mcemote.api; import com.google.gson.Gson; +import net.vinrobot.mcemote.api.ffz.GlobalEmoteSets; import net.vinrobot.mcemote.api.ffz.Platform; import net.vinrobot.mcemote.api.ffz.RoomResponse; @@ -12,6 +13,7 @@ public class FrankerFaceZService { public static final String BASE_API = "https://api.frankerfacez.com/v1"; + public static final URI GLOBAL_EMOTE_SET_URI = URI.create(BASE_API + "/set/global"); private final HttpClient httpClient; private final Gson gson = new Gson(); @@ -24,6 +26,16 @@ public FrankerFaceZService(HttpClient httpClient) { this.httpClient = httpClient; } + public GlobalEmoteSets fetchGlobalEmoteSet() throws IOException, InterruptedException { + final HttpRequest httpRequest = HttpRequest.newBuilder() + .uri(GLOBAL_EMOTE_SET_URI) + .build(); + + final HttpResponse httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); + + return gson.fromJson(httpResponse.body(), GlobalEmoteSets.class); + } + public RoomResponse fetchRoom(Platform platform, String roomId) throws IOException, InterruptedException { HttpRequest httpRequest = HttpRequest.newBuilder() .uri(URI.create(BASE_API + "/room/" + platform.path + "/" + roomId)) diff --git a/src/main/java/net/vinrobot/mcemote/api/ffz/GlobalEmoteSets.java b/src/main/java/net/vinrobot/mcemote/api/ffz/GlobalEmoteSets.java new file mode 100644 index 0000000..bc82a03 --- /dev/null +++ b/src/main/java/net/vinrobot/mcemote/api/ffz/GlobalEmoteSets.java @@ -0,0 +1,9 @@ +package net.vinrobot.mcemote.api.ffz; + +import java.util.Map; + +public record GlobalEmoteSets( + int[] default_sets, + Map sets +) { +}