diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-03-23 00:02:16 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-03-23 00:02:16 +0800 |
| commit | c027169dfe9503a9d913589eb322cc11ddad0baa (patch) | |
| tree | cea2db418d26b0ba9f054445891f272264ae3d30 /forge/src | |
| parent | 7bbef49785f594dfe3d6eac0cfc6ee84841aae80 (diff) | |
| download | RoughlyEnoughItems-c027169dfe9503a9d913589eb322cc11ddad0baa.tar.gz RoughlyEnoughItems-c027169dfe9503a9d913589eb322cc11ddad0baa.tar.bz2 RoughlyEnoughItems-c027169dfe9503a9d913589eb322cc11ddad0baa.zip | |
Improve UncertainDisplayViewingScreen
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 | 20 | ||||
| -rw-r--r-- | forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java | 22 |
2 files changed, 31 insertions, 11 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 747a6d790..1a529311c 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java @@ -23,16 +23,19 @@ package me.shedaniel.rei.forge; -import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.plugins.PluginManager; import me.shedaniel.rei.gui.plugin.DefaultRuntimePlugin; +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 net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import java.util.function.Consumer; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiConsumer; +import java.util.function.Supplier; public class PluginDetectorImpl { public static void detectServerPlugins() { @@ -43,10 +46,19 @@ public class PluginDetectorImpl { public static void detectClientPlugins() { PluginManager.getInstance().registerPlugin(new DefaultPlugin()); PluginManager.getInstance().registerPlugin(new DefaultRuntimePlugin()); - RoughlyEnoughItemsForge.scanAnnotation(REIPlugin.class, plugin -> { + RoughlyEnoughItemsForge.scanAnnotation(REIPlugin.class, (modId, plugin) -> { PluginManager.getInstance().registerPlugin(((me.shedaniel.rei.api.plugins.REIPlugin) plugin)); }); - JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, (Consumer<Object>) consumer), + 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); + } + } + return modIds; + }, "jeiCompatMods"); + JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, (BiConsumer<List<String>, Object>) consumer), PluginManager.getInstance()::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 61b99c72e..3501970c3 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java @@ -31,14 +31,18 @@ import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.forgespi.language.IModInfo; import net.minecraftforge.forgespi.language.ModFileScanData; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.ApiStatus; import org.objectweb.asm.Type; import java.util.List; -import java.util.function.Consumer; +import java.util.function.BiConsumer; +import java.util.stream.Collectors; @Mod("roughlyenoughitems") @ApiStatus.Internal @@ -51,18 +55,22 @@ public class RoughlyEnoughItemsForge { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> RoughlyEnoughItemsInitializer::onInitializeClient); } - public static <T> void scanAnnotation(Class<T> clazz, Consumer<T> consumer) { + public static <T> void scanAnnotation(Class<T> clazz, BiConsumer<List<String>, T> consumer) { scanAnnotation(Type.getType(clazz), consumer); } - public static <T> void scanAnnotation(Type annotationType, Consumer<T> consumer) { - List<T> instances = Lists.newArrayList(); + public static <T> void scanAnnotation(Type annotationType, 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() + .flatMap(info -> info.getMods().stream()) + .map(IModInfo::getModId) + .collect(Collectors.toList()); for (ModFileScanData.AnnotationData annotation : data.getAnnotations()) { if (annotationType.equals(annotation.getAnnotationType())) { try { T instance = (T) Class.forName(annotation.getMemberName()).getDeclaredConstructor().newInstance(); - instances.add(instance); + instances.add(new ImmutablePair<>(modIds, instance)); } catch (Throwable throwable) { LOGGER.error("Failed to load plugin: " + annotation.getMemberName(), throwable); } @@ -70,8 +78,8 @@ public class RoughlyEnoughItemsForge { } } - for (T instance : instances) { - consumer.accept(instance); + for (Pair<List<String>, T> pair : instances) { + consumer.accept(pair.getLeft(), pair.getRight()); } } } |
