aboutsummaryrefslogtreecommitdiff
path: root/forge/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-03-23 00:02:16 +0800
committershedaniel <daniel@shedaniel.me>2021-03-23 00:02:16 +0800
commitc027169dfe9503a9d913589eb322cc11ddad0baa (patch)
treecea2db418d26b0ba9f054445891f272264ae3d30 /forge/src
parent7bbef49785f594dfe3d6eac0cfc6ee84841aae80 (diff)
downloadRoughlyEnoughItems-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.java20
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java22
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());
}
}
}