aboutsummaryrefslogtreecommitdiff
path: root/forge/src/main/java/me
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-04-16 23:57:18 +0800
committershedaniel <daniel@shedaniel.me>2021-04-16 23:57:18 +0800
commit77082b06c2ad72ffa2271588d4f4e26919c2e9f9 (patch)
tree8317e9e862369114ba64fed381a243a49dae145e /forge/src/main/java/me
parent2118580fc418b272723766e080209f06bdf9a2a9 (diff)
downloadRoughlyEnoughItems-77082b06c2ad72ffa2271588d4f4e26919c2e9f9.tar.gz
RoughlyEnoughItems-77082b06c2ad72ffa2271588d4f4e26919c2e9f9.tar.bz2
RoughlyEnoughItems-77082b06c2ad72ffa2271588d4f4e26919c2e9f9.zip
Support JEIGuiIngredientGroup#setBackground, delay JEI plugins initialization
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'forge/src/main/java/me')
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java10
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java20
2 files changed, 19 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 733aaa0f2..7f31c7670 100644
--- a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java
+++ b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java
@@ -70,14 +70,14 @@ public class PluginDetectorImpl {
public static void detectServerPlugins() {
PluginView.getServerInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new DefaultPlugin()));
RoughlyEnoughItemsForge.<REIPlugin, REIServerPlugin>scanAnnotation(REIPlugin.class, REIServerPlugin.class::isAssignableFrom, (modId, plugin) -> {
- ((PluginView<REIServerPlugin>) PluginManager.getServerInstance()).registerPlugin(wrapPlugin(modId, plugin));
+ ((PluginView<REIServerPlugin>) PluginManager.getServerInstance()).registerPlugin(wrapPlugin(modId, plugin.get()));
});
}
public static void detectCommonPlugins() {
EventBuses.registerModEventBus("roughlyenoughitems", FMLJavaModLoadingContext.get().getModEventBus());
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(wrapPlugin(modId, plugin));
+ ((PluginView) PluginManager.getInstance()).registerPlugin(wrapPlugin(modId, plugin.get()));
});
}
@@ -86,7 +86,7 @@ public class PluginDetectorImpl {
PluginView.getClientInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new DefaultClientPlugin()));
PluginView.getClientInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new DefaultClientRuntimePlugin()));
RoughlyEnoughItemsForge.<REIPlugin, REIClientPlugin>scanAnnotation(REIPlugin.class, REIClientPlugin.class::isAssignableFrom, (modId, plugin) -> {
- ((PluginView<REIClientPlugin>) PluginManager.getClientInstance()).registerPlugin(wrapPlugin(modId, plugin));
+ ((PluginView<REIClientPlugin>) PluginManager.getClientInstance()).registerPlugin(wrapPlugin(modId, plugin.get()));
});
ClientInternals.attachInstance((Supplier<List<String>>) () -> {
List<String> modIds = new ArrayList<>();
@@ -97,7 +97,7 @@ public class PluginDetectorImpl {
}
return modIds;
}, "jeiCompatMods");
- JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, clazz -> true, (BiConsumer<List<String>, Object>) consumer),
- PluginView.getClientInstance()::registerPlugin);
+ JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, clazz -> true,
+ (BiConsumer<List<String>, Supplier<Object>>) (BiConsumer) 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 7f035c134..8aea48ca0 100644
--- a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java
+++ b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java
@@ -38,9 +38,11 @@ import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.ApiStatus;
import org.objectweb.asm.Type;
+import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Predicate;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
@Mod("roughlyenoughitems")
@@ -53,12 +55,12 @@ public class RoughlyEnoughItemsForge {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> RoughlyEnoughItemsInitializer::onInitializeClient);
}
- public static <A, T> void scanAnnotation(Class<A> clazz, Predicate<Class<T>> predicate, BiConsumer<List<String>, T> consumer) {
+ public static <A, T> void scanAnnotation(Class<A> clazz, Predicate<Class<T>> predicate, BiConsumer<List<String>, Supplier<T>> consumer) {
scanAnnotation(Type.getType(clazz), predicate, 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();
+ public static <T> void scanAnnotation(Type annotationType, Predicate<Class<T>> predicate, BiConsumer<List<String>, Supplier<T>> consumer) {
+ List<Pair<List<String>, Supplier<T>>> instances = Lists.newArrayList();
for (ModFileScanData data : ModList.get().getAllScanData()) {
List<String> modIds = data.getIModInfoData().stream()
.flatMap(info -> info.getMods().stream())
@@ -69,8 +71,14 @@ public class RoughlyEnoughItemsForge {
try {
Class<T> clazz = (Class<T>) Class.forName(annotation.getMemberName());
if (predicate.test(clazz)) {
- T instance = clazz.getDeclaredConstructor().newInstance();
- instances.add(new ImmutablePair<>(modIds, instance));
+ instances.add(new ImmutablePair<>(modIds, () -> {
+ try {
+ return clazz.getDeclaredConstructor().newInstance();
+ } catch (Throwable throwable) {
+ LOGGER.error("Failed to load plugin: " + annotation.getMemberName(), throwable);
+ return null;
+ }
+ }));
}
} catch (Throwable throwable) {
LOGGER.error("Failed to load plugin: " + annotation.getMemberName(), throwable);
@@ -79,7 +87,7 @@ public class RoughlyEnoughItemsForge {
}
}
- for (Pair<List<String>, T> pair : instances) {
+ for (Pair<List<String>, Supplier<T>> pair : instances) {
consumer.accept(pair.getLeft(), pair.getRight());
}
}