aboutsummaryrefslogtreecommitdiff
path: root/forge/src
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-03-25 02:50:16 +0800
committershedaniel <daniel@shedaniel.me>2021-03-25 02:50:16 +0800
commit23c820ea583052744232e84a6c99114223c43a69 (patch)
tree8bcf639d79f33d9b4d110f1eb5002a550cedeb11 /forge/src
parentc027169dfe9503a9d913589eb322cc11ddad0baa (diff)
downloadRoughlyEnoughItems-23c820ea583052744232e84a6c99114223c43a69.tar.gz
RoughlyEnoughItems-23c820ea583052744232e84a6c99114223c43a69.tar.bz2
RoughlyEnoughItems-23c820ea583052744232e84a6c99114223c43a69.zip
Refactor MenuInfo, split client and server apis, new dual PluginManager system, remove @NotNull
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'forge/src')
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java41
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java14
2 files changed, 36 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 1a529311c..214b76930 100644
--- a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java
+++ b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java
@@ -23,12 +23,16 @@
package me.shedaniel.rei.forge;
-import me.shedaniel.rei.api.plugins.PluginManager;
-import me.shedaniel.rei.gui.plugin.DefaultRuntimePlugin;
+import me.shedaniel.rei.api.client.plugins.REIClientPlugin;
+import me.shedaniel.rei.api.common.plugins.PluginManager;
+import me.shedaniel.rei.api.common.plugins.PluginView;
+import me.shedaniel.rei.api.common.plugins.REIPluginProvider;
+import me.shedaniel.rei.api.common.plugins.REIServerPlugin;
+import me.shedaniel.rei.gui.plugin.DefaultClientRuntimePlugin;
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 me.shedaniel.rei.plugin.client.DefaultClientPlugin;
+import me.shedaniel.rei.plugin.common.DefaultPlugin;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@@ -39,26 +43,35 @@ import java.util.function.Supplier;
public class PluginDetectorImpl {
public static void detectServerPlugins() {
- new DefaultServerContainerPlugin().run();
+ PluginView.getServerInstance().registerPlugin(new DefaultPlugin());
+ RoughlyEnoughItemsForge.<REIPlugin, REIServerPlugin>scanAnnotation(REIPlugin.class, REIServerPlugin.class::isAssignableFrom, (modId, plugin) -> {
+ ((PluginView<REIServerPlugin>) PluginManager.getServerInstance()).registerPlugin(plugin);
+ });
+ }
+
+ public static void detectCommonPlugins() {
+ 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(plugin);
+ });
}
@OnlyIn(Dist.CLIENT)
public static void detectClientPlugins() {
- PluginManager.getInstance().registerPlugin(new DefaultPlugin());
- PluginManager.getInstance().registerPlugin(new DefaultRuntimePlugin());
- RoughlyEnoughItemsForge.scanAnnotation(REIPlugin.class, (modId, plugin) -> {
- PluginManager.getInstance().registerPlugin(((me.shedaniel.rei.api.plugins.REIPlugin) plugin));
+ PluginView.getClientInstance().registerPlugin(new DefaultClientPlugin());
+ PluginView.getClientInstance().registerPlugin(new DefaultClientRuntimePlugin());
+ RoughlyEnoughItemsForge.<REIPlugin, REIClientPlugin>scanAnnotation(REIPlugin.class, REIClientPlugin.class::isAssignableFrom, (modId, plugin) -> {
+ ((PluginView<REIClientPlugin>) PluginManager.getClientInstance()).registerPlugin(plugin);
});
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);
+ for (REIPluginProvider<REIClientPlugin> plugin : PluginManager.getClientInstance().getPluginProviders()) {
+ if (plugin instanceof JEIPluginDetector.JEIPluginProvider) {
+ modIds.addAll(((JEIPluginDetector.JEIPluginProvider) plugin).wrapper.modIds);
}
}
return modIds;
}, "jeiCompatMods");
- JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, (BiConsumer<List<String>, Object>) consumer),
- PluginManager.getInstance()::registerPlugin);
+ JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, clazz -> true, (BiConsumer<List<String>, Object>) 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 3501970c3..c3430c559 100644
--- a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java
+++ b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java
@@ -42,6 +42,7 @@ import org.objectweb.asm.Type;
import java.util.List;
import java.util.function.BiConsumer;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
@Mod("roughlyenoughitems")
@@ -55,11 +56,11 @@ public class RoughlyEnoughItemsForge {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> RoughlyEnoughItemsInitializer::onInitializeClient);
}
- public static <T> void scanAnnotation(Class<T> clazz, BiConsumer<List<String>, T> consumer) {
- scanAnnotation(Type.getType(clazz), consumer);
+ public static <A, T> void scanAnnotation(Class<A> clazz, Predicate<Class<T>> predicate, BiConsumer<List<String>, T> consumer) {
+ scanAnnotation(Type.getType(clazz), predicate, consumer);
}
- public static <T> void scanAnnotation(Type annotationType, BiConsumer<List<String>, T> 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();
for (ModFileScanData data : ModList.get().getAllScanData()) {
List<String> modIds = data.getIModInfoData().stream()
@@ -69,8 +70,11 @@ public class RoughlyEnoughItemsForge {
for (ModFileScanData.AnnotationData annotation : data.getAnnotations()) {
if (annotationType.equals(annotation.getAnnotationType())) {
try {
- T instance = (T) Class.forName(annotation.getMemberName()).getDeclaredConstructor().newInstance();
- instances.add(new ImmutablePair<>(modIds, instance));
+ Class<T> clazz = (Class<T>) Class.forName(annotation.getMemberName());
+ if (predicate.test(clazz)) {
+ T instance = clazz.getDeclaredConstructor().newInstance();
+ instances.add(new ImmutablePair<>(modIds, instance));
+ }
} catch (Throwable throwable) {
LOGGER.error("Failed to load plugin: " + annotation.getMemberName(), throwable);
}