From ea1780950c17262bb66e7e374b89574d25cad050 Mon Sep 17 00:00:00 2001 From: Vinrobot Date: Fri, 28 Jul 2023 22:04:25 +0200 Subject: [PATCH] Use Java spi to get emotes providers --- .../mcemote/client/MinecraftEmoteModClient.java | 12 ++++-------- .../vinrobot/mcemote/client/helpers/ListHelper.java | 13 +++++++++++++ .../mcemote/client/providers/IEmoteProvider.java | 11 ++++++++++- .../client/providers/STVGlobalEmoteProvider.java | 5 +++++ ...vinrobot.mcemote.client.providers.IEmoteProvider | 3 +++ 5 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 src/client/java/net/vinrobot/mcemote/client/helpers/ListHelper.java create mode 100644 src/client/resources/META-INF/services/net.vinrobot.mcemote.client.providers.IEmoteProvider diff --git a/src/client/java/net/vinrobot/mcemote/client/MinecraftEmoteModClient.java b/src/client/java/net/vinrobot/mcemote/client/MinecraftEmoteModClient.java index d81fc9a..20afbc9 100644 --- a/src/client/java/net/vinrobot/mcemote/client/MinecraftEmoteModClient.java +++ b/src/client/java/net/vinrobot/mcemote/client/MinecraftEmoteModClient.java @@ -3,10 +3,8 @@ import net.fabricmc.api.ClientModInitializer; import net.vinrobot.mcemote.MinecraftEmoteMod; import net.vinrobot.mcemote.client.font.Emote; -import net.vinrobot.mcemote.client.providers.FFZRoomEmoteProvider; +import net.vinrobot.mcemote.client.helpers.ListHelper; import net.vinrobot.mcemote.client.providers.IEmoteProvider; -import net.vinrobot.mcemote.client.providers.STVGlobalEmoteProvider; -import net.vinrobot.mcemote.client.providers.STVUserEmoteProvider; import net.vinrobot.mcemote.client.text.EmotesManager; import net.vinrobot.mcemote.config.Configuration; import net.vinrobot.mcemote.config.impl.ConfigurationImpl; @@ -15,6 +13,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.ServiceLoader; public class MinecraftEmoteModClient implements ClientModInitializer { public static final EmotesManager EMOTES_MANAGER = new EmotesManager(); @@ -29,11 +28,8 @@ public void onInitializeClient() { } final Configuration config = new ConfigurationImpl(); - final IEmoteProvider[] providers = new IEmoteProvider[]{ - new STVGlobalEmoteProvider(), - new STVUserEmoteProvider(), - new FFZRoomEmoteProvider(), - }; + final ServiceLoader serviceLoader = ServiceLoader.load(IEmoteProvider.class); + final List providers = ListHelper.sort(serviceLoader); int codePoint = 100; diff --git a/src/client/java/net/vinrobot/mcemote/client/helpers/ListHelper.java b/src/client/java/net/vinrobot/mcemote/client/helpers/ListHelper.java new file mode 100644 index 0000000..14ce627 --- /dev/null +++ b/src/client/java/net/vinrobot/mcemote/client/helpers/ListHelper.java @@ -0,0 +1,13 @@ +package net.vinrobot.mcemote.client.helpers; + +import com.google.common.collect.Lists; + +import java.util.List; + +public final class ListHelper { + public static > List sort(Iterable iterable) { + final List list = Lists.newArrayList(iterable); + list.sort(null); + return list; + } +} diff --git a/src/client/java/net/vinrobot/mcemote/client/providers/IEmoteProvider.java b/src/client/java/net/vinrobot/mcemote/client/providers/IEmoteProvider.java index 82d8e84..98d25fd 100644 --- a/src/client/java/net/vinrobot/mcemote/client/providers/IEmoteProvider.java +++ b/src/client/java/net/vinrobot/mcemote/client/providers/IEmoteProvider.java @@ -2,6 +2,15 @@ import net.vinrobot.mcemote.config.Configuration; -public interface IEmoteProvider { +public interface IEmoteProvider extends Comparable { + default int priority() { + return 50; + } + void registerEmotes(Configuration config, IEmoteRegistry registry) throws Exception; + + @Override + default int compareTo(IEmoteProvider other) { + return Integer.compare(this.priority(), other.priority()); + } } 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 0e354a7..1002e6a 100644 --- a/src/client/java/net/vinrobot/mcemote/client/providers/STVGlobalEmoteProvider.java +++ b/src/client/java/net/vinrobot/mcemote/client/providers/STVGlobalEmoteProvider.java @@ -7,6 +7,11 @@ import java.io.IOException; public class STVGlobalEmoteProvider implements IEmoteProvider { + @Override + public int priority() { + return 10; + } + @Override public void registerEmotes(Configuration config, IEmoteRegistry registry) throws IOException, InterruptedException { final SevenTVService service = new SevenTVService(); 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 new file mode 100644 index 0000000..4889b35 --- /dev/null +++ b/src/client/resources/META-INF/services/net.vinrobot.mcemote.client.providers.IEmoteProvider @@ -0,0 +1,3 @@ +net.vinrobot.mcemote.client.providers.STVGlobalEmoteProvider +net.vinrobot.mcemote.client.providers.STVUserEmoteProvider +net.vinrobot.mcemote.client.providers.FFZRoomEmoteProvider