diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-10-28 15:12:18 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-10-28 15:12:18 +0800 |
| commit | 6b44b3e633e009d9d3fdedfa02b46db34dd5b1ae (patch) | |
| tree | d00eaeabc27639a717593d0613c7a381fb341eb9 /forge/src/main/java | |
| parent | e3eebe08fac49d1924670565bc4e34b151ef395d (diff) | |
| parent | b68e07108e21e4f1f231dfccac6c095c22b9a695 (diff) | |
| download | RoughlyEnoughItems-6b44b3e633e009d9d3fdedfa02b46db34dd5b1ae.tar.gz RoughlyEnoughItems-6b44b3e633e009d9d3fdedfa02b46db34dd5b1ae.tar.bz2 RoughlyEnoughItems-6b44b3e633e009d9d3fdedfa02b46db34dd5b1ae.zip | |
Merge remote-tracking branch 'origin/6.x-1.17' into 7.x-1.18
# Conflicts:
# gradle.properties
# settings.gradle
Diffstat (limited to 'forge/src/main/java')
4 files changed, 43 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 cc7ea594d..aace5aa12 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java @@ -40,12 +40,12 @@ import me.shedaniel.rei.plugin.common.runtime.DefaultRuntimePlugin; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.apache.logging.log4j.util.TriConsumer; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.function.BiConsumer; import java.util.function.Supplier; public class PluginDetectorImpl { @@ -74,14 +74,14 @@ public class PluginDetectorImpl { PluginView.getServerInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new DefaultPlugin())); PluginView.getServerInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new DefaultRuntimePlugin())); PluginView.getServerInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new JEIExtraPlugin())); - RoughlyEnoughItemsForge.<REIPlugin, REIServerPlugin>scanAnnotation(REIPlugin.class, REIServerPlugin.class::isAssignableFrom, (modId, plugin) -> { + RoughlyEnoughItemsForge.<REIPlugin, REIServerPlugin>scanAnnotation(REIPlugin.class, REIServerPlugin.class::isAssignableFrom, (modId, plugin, clazz) -> { ((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) -> { + RoughlyEnoughItemsForge.<REIPlugin, me.shedaniel.rei.api.common.plugins.REIPlugin<?>>scanAnnotation(REIPlugin.class, me.shedaniel.rei.api.common.plugins.REIPlugin.class::isAssignableFrom, (modId, plugin, clazz) -> { ((PluginView) PluginManager.getInstance()).registerPlugin(wrapPlugin(modId, plugin.get())); }); } @@ -91,7 +91,7 @@ public class PluginDetectorImpl { PluginView.getClientInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new DefaultClientPlugin())); PluginView.getClientInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new DefaultClientRuntimePlugin())); PluginView.getClientInstance().registerPlugin(wrapPlugin(Collections.singletonList("roughlyenoughitems"), new JEIExtraClientPlugin())); - RoughlyEnoughItemsForge.<REIPlugin, REIClientPlugin>scanAnnotation(REIPlugin.class, REIClientPlugin.class::isAssignableFrom, (modId, plugin) -> { + RoughlyEnoughItemsForge.<REIPlugin, REIClientPlugin>scanAnnotation(REIPlugin.class, REIClientPlugin.class::isAssignableFrom, (modId, plugin, clazz) -> { ((PluginView<REIClientPlugin>) PluginManager.getClientInstance()).registerPlugin(wrapPlugin(modId, plugin.get())); }); ClientInternals.attachInstance((Supplier<List<String>>) () -> { @@ -103,7 +103,7 @@ public class PluginDetectorImpl { } return modIds; }, "jeiCompatMods"); - JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, clazz -> true, - (BiConsumer<List<String>, Supplier<Object>>) (BiConsumer) consumer), PluginView.getClientInstance()::registerPlugin); + JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, c -> true, + (TriConsumer<List<String>, Supplier<Object>, Class<Object>>) (TriConsumer) 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 db5da78bd..dd5824c70 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java @@ -31,16 +31,15 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; 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.commons.lang3.tuple.ImmutableTriple; +import org.apache.commons.lang3.tuple.Triple; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.util.TriConsumer; 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; @@ -55,12 +54,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>, Supplier<T>> consumer) { + public static <A, T> void scanAnnotation(Class<A> clazz, Predicate<Class<T>> predicate, TriConsumer<List<String>, Supplier<T>, Class<T>> consumer) { scanAnnotation(Type.getType(clazz), predicate, consumer); } - 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(); + public static <T> void scanAnnotation(Type annotationType, Predicate<Class<T>> predicate, TriConsumer<List<String>, Supplier<T>, Class<T>> consumer) { + List<Triple<List<String>, Supplier<T>, Class<T>>> instances = Lists.newArrayList(); for (ModFileScanData data : ModList.get().getAllScanData()) { List<String> modIds = data.getIModInfoData().stream() .flatMap(info -> info.getMods().stream()) @@ -71,14 +70,14 @@ public class RoughlyEnoughItemsForge { try { Class<T> clazz = (Class<T>) Class.forName(annotation.memberName()); if (predicate.test(clazz)) { - instances.add(new ImmutablePair<>(modIds, () -> { + instances.add(new ImmutableTriple<>(modIds, () -> { try { return clazz.getDeclaredConstructor().newInstance(); } catch (Throwable throwable) { LOGGER.error("Failed to load plugin: " + annotation.memberName(), throwable); return null; } - })); + }, clazz)); } } catch (Throwable throwable) { LOGGER.error("Failed to load plugin: " + annotation.memberName(), throwable); @@ -87,8 +86,8 @@ public class RoughlyEnoughItemsForge { } } - for (Pair<List<String>, Supplier<T>> pair : instances) { - consumer.accept(pair.getLeft(), pair.getRight()); + for (Triple<List<String>, Supplier<T>, Class<T>> pair : instances) { + consumer.accept(pair.getLeft(), pair.getMiddle(), pair.getRight()); } } } diff --git a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsInitializerImpl.java b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsInitializerImpl.java index 6baa7fd5c..868b10af5 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsInitializerImpl.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsInitializerImpl.java @@ -23,7 +23,9 @@ package me.shedaniel.rei.forge; +import me.shedaniel.rei.RoughlyEnoughItemsState; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.fml.loading.FMLLoader; @@ -33,6 +35,9 @@ public class RoughlyEnoughItemsInitializerImpl { } public static void checkMods() { + if (ModList.get().isLoaded("moreoverlays")) { + RoughlyEnoughItemsState.error("REI is not compatible with MoreOverlays, and actually contains Builtin Inventory Highlighting, other features can be installed via different mods!"); + } } public static boolean isDev() { diff --git a/forge/src/main/java/me/shedaniel/rei/impl/client/forge/ErrorDisplayerImpl.java b/forge/src/main/java/me/shedaniel/rei/impl/client/forge/ErrorDisplayerImpl.java index 5186c7884..0af11b1c0 100644 --- a/forge/src/main/java/me/shedaniel/rei/impl/client/forge/ErrorDisplayerImpl.java +++ b/forge/src/main/java/me/shedaniel/rei/impl/client/forge/ErrorDisplayerImpl.java @@ -24,10 +24,30 @@ package me.shedaniel.rei.impl.client.forge; import net.minecraft.client.gui.screens.Screen; +import net.minecraftforge.client.event.GuiOpenEvent; +import net.minecraftforge.common.MinecraftForge; -import java.util.function.Consumer; +import java.util.ArrayList; +import java.util.List; +import java.util.function.UnaryOperator; public class ErrorDisplayerImpl { - public static void registerGuiInit(Consumer<Screen> consumer) { + private static final List<UnaryOperator<Screen>> CONSUMERS = new ArrayList<>(); + + static { + MinecraftForge.EVENT_BUS.addListener(ErrorDisplayerImpl::onGuiOpen); + } + + public static void registerGuiInit(UnaryOperator<Screen> consumer) { + CONSUMERS.add(consumer); + } + + public static void onGuiOpen(GuiOpenEvent event) { + for (UnaryOperator<Screen> consumer : CONSUMERS) { + Screen screen = consumer.apply(event.getGui()); + if (screen != null) { + event.setGui(screen); + } + } } } |
