diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-03-09 21:30:12 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-03-09 21:30:12 +0800 |
| commit | 64bc9937d6ec04c6d66240a84b4fb345026c0b12 (patch) | |
| tree | 62e055c5cc64875300bdf69ac9a4400fb4b28dd9 /forge/src/main/java/me | |
| parent | 69d386214f5d3471a3ef1e5533037cdc32648c57 (diff) | |
| download | RoughlyEnoughItems-64bc9937d6ec04c6d66240a84b4fb345026c0b12.tar.gz RoughlyEnoughItems-64bc9937d6ec04c6d66240a84b4fb345026c0b12.tar.bz2 RoughlyEnoughItems-64bc9937d6ec04c6d66240a84b4fb345026c0b12.zip | |
Very primitive background rendering for JEI plugins
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'forge/src/main/java/me')
3 files changed, 57 insertions, 0 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 044bfd081..4aace1982 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java @@ -1,11 +1,15 @@ package me.shedaniel.rei.forge; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.gui.plugin.DefaultRuntimePlugin; +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 static me.shedaniel.rei.RoughlyEnoughItemsCore.registerPlugin; public class PluginDetectorImpl { @@ -17,5 +21,10 @@ public class PluginDetectorImpl { public static void detectClientPlugins() { registerPlugin(new DefaultPlugin()); registerPlugin(new DefaultRuntimePlugin()); + RoughlyEnoughItemsForge.scanAnnotation(REIPlugin.class, plugin -> { + registerPlugin(((me.shedaniel.rei.api.plugins.REIPlugin) plugin)); + }); + JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, (Consumer<Object>) consumer), + RoughlyEnoughItemsCore::registerPlugin); } } diff --git a/forge/src/main/java/me/shedaniel/rei/forge/REIPlugin.java b/forge/src/main/java/me/shedaniel/rei/forge/REIPlugin.java new file mode 100644 index 000000000..a4acbaa46 --- /dev/null +++ b/forge/src/main/java/me/shedaniel/rei/forge/REIPlugin.java @@ -0,0 +1,11 @@ +package me.shedaniel.rei.forge; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface REIPlugin { +} 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 9147eb8f2..d96afb6b4 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java @@ -1,17 +1,54 @@ package me.shedaniel.rei.forge; +import com.google.common.collect.Lists; import me.shedaniel.architectury.platform.forge.EventBuses; import me.shedaniel.rei.RoughlyEnoughItemsInitializer; import net.minecraftforge.api.distmarker.Dist; 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.ModFileScanData; +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; @Mod("roughlyenoughitems") +@ApiStatus.Internal public class RoughlyEnoughItemsForge { + public static final Logger LOGGER = LogManager.getFormatterLogger("REI"); + public RoughlyEnoughItemsForge() { EventBuses.registerModEventBus("roughlyenoughitems", FMLJavaModLoadingContext.get().getModEventBus()); RoughlyEnoughItemsInitializer.onInitialize(); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> RoughlyEnoughItemsInitializer::onInitializeClient); } + + public static <T> void scanAnnotation(Class<T> clazz, Consumer<T> consumer) { + scanAnnotation(Type.getType(clazz), consumer); + } + + public static <T> void scanAnnotation(Type annotationType, Consumer<T> consumer) { + List<T> instances = Lists.newArrayList(); + for (ModFileScanData data : ModList.get().getAllScanData()) { + for (ModFileScanData.AnnotationData annotation : data.getAnnotations()) { + if (annotationType.equals(annotation.getAnnotationType())) { + try { + T instance = (T) Class.forName(annotation.getMemberName()).getDeclaredConstructor().newInstance(); + instances.add(instance); + } catch (Throwable throwable) { + LOGGER.error("Failed to load plugin: " + annotation.getMemberName(), throwable); + } + } + } + } + + for (T instance : instances) { + consumer.accept(instance); + } + } } |
