diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-04-16 23:57:18 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-04-16 23:57:18 +0800 |
| commit | 77082b06c2ad72ffa2271588d4f4e26919c2e9f9 (patch) | |
| tree | 8317e9e862369114ba64fed381a243a49dae145e /forge | |
| parent | 2118580fc418b272723766e080209f06bdf9a2a9 (diff) | |
| download | RoughlyEnoughItems-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')
| -rw-r--r-- | forge/build.gradle | 2 | ||||
| -rw-r--r-- | forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java | 10 | ||||
| -rw-r--r-- | forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java | 20 |
3 files changed, 21 insertions, 11 deletions
diff --git a/forge/build.gradle b/forge/build.gradle index 736e12434..c7ccec31c 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -55,6 +55,8 @@ dependencies { modRuntime("curse.maven:mekanism-268560:3206392") modRuntime("curse.maven:refined-storage-243076:3196167") modRuntime("appeng:appliedenergistics2:8.2.0") + modRuntime("curse.maven:tcon-74072:3273213") + modRuntime("curse.maven:mantle-74924:3273201") } shadowJar { 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()); } } |
