From 23c820ea583052744232e84a6c99114223c43a69 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Thu, 25 Mar 2021 02:50:16 +0800 Subject: Refactor MenuInfo, split client and server apis, new dual PluginManager system, remove @NotNull Signed-off-by: shedaniel --- .../me/shedaniel/rei/forge/PluginDetectorImpl.java | 41 ++++++++++++++-------- .../rei/forge/RoughlyEnoughItemsForge.java | 14 +++++--- 2 files changed, 36 insertions(+), 19 deletions(-) (limited to 'forge/src/main/java') diff --git a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java index 1a529311c..214b76930 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java @@ -23,12 +23,16 @@ package me.shedaniel.rei.forge; -import me.shedaniel.rei.api.plugins.PluginManager; -import me.shedaniel.rei.gui.plugin.DefaultRuntimePlugin; +import me.shedaniel.rei.api.client.plugins.REIClientPlugin; +import me.shedaniel.rei.api.common.plugins.PluginManager; +import me.shedaniel.rei.api.common.plugins.PluginView; +import me.shedaniel.rei.api.common.plugins.REIPluginProvider; +import me.shedaniel.rei.api.common.plugins.REIServerPlugin; +import me.shedaniel.rei.gui.plugin.DefaultClientRuntimePlugin; import me.shedaniel.rei.impl.Internals; import me.shedaniel.rei.jeicompat.JEIPluginDetector; -import me.shedaniel.rei.plugin.DefaultPlugin; -import me.shedaniel.rei.plugin.DefaultServerContainerPlugin; +import me.shedaniel.rei.plugin.client.DefaultClientPlugin; +import me.shedaniel.rei.plugin.common.DefaultPlugin; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -39,26 +43,35 @@ import java.util.function.Supplier; public class PluginDetectorImpl { public static void detectServerPlugins() { - new DefaultServerContainerPlugin().run(); + PluginView.getServerInstance().registerPlugin(new DefaultPlugin()); + RoughlyEnoughItemsForge.scanAnnotation(REIPlugin.class, REIServerPlugin.class::isAssignableFrom, (modId, plugin) -> { + ((PluginView) PluginManager.getServerInstance()).registerPlugin(plugin); + }); + } + + public static void detectCommonPlugins() { + RoughlyEnoughItemsForge.>scanAnnotation(REIPlugin.class, me.shedaniel.rei.api.common.plugins.REIPlugin.class::isAssignableFrom, (modId, plugin) -> { + ((PluginView) PluginManager.getInstance()).registerPlugin(plugin); + }); } @OnlyIn(Dist.CLIENT) public static void detectClientPlugins() { - PluginManager.getInstance().registerPlugin(new DefaultPlugin()); - PluginManager.getInstance().registerPlugin(new DefaultRuntimePlugin()); - RoughlyEnoughItemsForge.scanAnnotation(REIPlugin.class, (modId, plugin) -> { - PluginManager.getInstance().registerPlugin(((me.shedaniel.rei.api.plugins.REIPlugin) plugin)); + PluginView.getClientInstance().registerPlugin(new DefaultClientPlugin()); + PluginView.getClientInstance().registerPlugin(new DefaultClientRuntimePlugin()); + RoughlyEnoughItemsForge.scanAnnotation(REIPlugin.class, REIClientPlugin.class::isAssignableFrom, (modId, plugin) -> { + ((PluginView) PluginManager.getClientInstance()).registerPlugin(plugin); }); Internals.attachInstance((Supplier>) () -> { List modIds = new ArrayList<>(); - for (me.shedaniel.rei.api.plugins.REIPlugin plugin : PluginManager.getInstance().getPlugins()) { - if (plugin instanceof JEIPluginDetector.JEIPluginWrapper) { - modIds.addAll(((JEIPluginDetector.JEIPluginWrapper) plugin).modIds); + for (REIPluginProvider plugin : PluginManager.getClientInstance().getPluginProviders()) { + if (plugin instanceof JEIPluginDetector.JEIPluginProvider) { + modIds.addAll(((JEIPluginDetector.JEIPluginProvider) plugin).wrapper.modIds); } } return modIds; }, "jeiCompatMods"); - JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class) aClass, (BiConsumer, Object>) consumer), - PluginManager.getInstance()::registerPlugin); + JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class) aClass, clazz -> true, (BiConsumer, Object>) consumer), + PluginView.getClientInstance()::registerPlugin); } } diff --git a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java index 3501970c3..c3430c559 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java @@ -42,6 +42,7 @@ import org.objectweb.asm.Type; import java.util.List; import java.util.function.BiConsumer; +import java.util.function.Predicate; import java.util.stream.Collectors; @Mod("roughlyenoughitems") @@ -55,11 +56,11 @@ public class RoughlyEnoughItemsForge { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> RoughlyEnoughItemsInitializer::onInitializeClient); } - public static void scanAnnotation(Class clazz, BiConsumer, T> consumer) { - scanAnnotation(Type.getType(clazz), consumer); + public static void scanAnnotation(Class clazz, Predicate> predicate, BiConsumer, T> consumer) { + scanAnnotation(Type.getType(clazz), predicate, consumer); } - public static void scanAnnotation(Type annotationType, BiConsumer, T> consumer) { + public static void scanAnnotation(Type annotationType, Predicate> predicate, BiConsumer, T> consumer) { List, T>> instances = Lists.newArrayList(); for (ModFileScanData data : ModList.get().getAllScanData()) { List modIds = data.getIModInfoData().stream() @@ -69,8 +70,11 @@ public class RoughlyEnoughItemsForge { for (ModFileScanData.AnnotationData annotation : data.getAnnotations()) { if (annotationType.equals(annotation.getAnnotationType())) { try { - T instance = (T) Class.forName(annotation.getMemberName()).getDeclaredConstructor().newInstance(); - instances.add(new ImmutablePair<>(modIds, instance)); + Class clazz = (Class) Class.forName(annotation.getMemberName()); + if (predicate.test(clazz)) { + T instance = clazz.getDeclaredConstructor().newInstance(); + instances.add(new ImmutablePair<>(modIds, instance)); + } } catch (Throwable throwable) { LOGGER.error("Failed to load plugin: " + annotation.getMemberName(), throwable); } -- cgit