diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-03-25 02:50:16 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-03-25 02:50:16 +0800 |
| commit | 23c820ea583052744232e84a6c99114223c43a69 (patch) | |
| tree | 8bcf639d79f33d9b4d110f1eb5002a550cedeb11 /forge/src | |
| parent | c027169dfe9503a9d913589eb322cc11ddad0baa (diff) | |
| download | RoughlyEnoughItems-23c820ea583052744232e84a6c99114223c43a69.tar.gz RoughlyEnoughItems-23c820ea583052744232e84a6c99114223c43a69.tar.bz2 RoughlyEnoughItems-23c820ea583052744232e84a6c99114223c43a69.zip | |
Refactor MenuInfo, split client and server apis, new dual PluginManager system, remove @NotNull
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'forge/src')
| -rw-r--r-- | forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java | 41 | ||||
| -rw-r--r-- | forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java | 14 |
2 files changed, 36 insertions, 19 deletions
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.<REIPlugin, REIServerPlugin>scanAnnotation(REIPlugin.class, REIServerPlugin.class::isAssignableFrom, (modId, plugin) -> { + ((PluginView<REIServerPlugin>) PluginManager.getServerInstance()).registerPlugin(plugin); + }); + } + + public static void detectCommonPlugins() { + RoughlyEnoughItemsForge.<REIPlugin, me.shedaniel.rei.api.common.plugins.REIPlugin<?>>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.<REIPlugin, REIClientPlugin>scanAnnotation(REIPlugin.class, REIClientPlugin.class::isAssignableFrom, (modId, plugin) -> { + ((PluginView<REIClientPlugin>) PluginManager.getClientInstance()).registerPlugin(plugin); }); Internals.attachInstance((Supplier<List<String>>) () -> { List<String> 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<REIClientPlugin> 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<Object>) aClass, (BiConsumer<List<String>, Object>) consumer), - PluginManager.getInstance()::registerPlugin); + JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, clazz -> true, (BiConsumer<List<String>, 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 <T> void scanAnnotation(Class<T> clazz, BiConsumer<List<String>, T> consumer) { - scanAnnotation(Type.getType(clazz), consumer); + public static <A, T> void scanAnnotation(Class<A> clazz, Predicate<Class<T>> predicate, BiConsumer<List<String>, T> consumer) { + scanAnnotation(Type.getType(clazz), predicate, consumer); } - public static <T> void scanAnnotation(Type annotationType, BiConsumer<List<String>, T> consumer) { + public static <T> void scanAnnotation(Type annotationType, Predicate<Class<T>> predicate, BiConsumer<List<String>, T> consumer) { List<Pair<List<String>, T>> instances = Lists.newArrayList(); for (ModFileScanData data : ModList.get().getAllScanData()) { List<String> 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<T> clazz = (Class<T>) 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); } |
