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 | |
| 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')
4 files changed, 88 insertions, 23 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); + } + } } diff --git a/forge/src/main/resources/META-INF/accesstransformer.cfg b/forge/src/main/resources/META-INF/accesstransformer.cfg index f4a298c9e..2648dd607 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -1,23 +1,31 @@ -public net.minecraft.client.gui.recipebook.RecipeBookGui field_191915_z #ghostRecipe -public net.minecraft.client.gui.AbstractGui func_238461_a_(Lnet/minecraft/util/math/vector/Matrix4f;IIIIIFFFF)V #innerBlit -public net.minecraft.client.gui.screen.Screen field_230710_m_ #buttons -public net.minecraft.entity.player.PlayerInventory field_184440_g #compartments -public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147007_t #isQuickCrafting -public net.minecraft.client.gui.widget.button.ImageButton field_191750_o #resourceLocation -public net.minecraft.item.ItemGroup field_78034_o #langId -public net.minecraft.item.crafting.SmithingRecipe field_234837_a_ #base -public net.minecraft.item.crafting.SmithingRecipe field_234838_b_ #addition -public net.minecraft.client.gui.DisplayEffectsScreen field_147045_u #doRenderEffects -public net.minecraft.client.gui.recipebook.RecipeBookGui field_193018_j #tabButtons -public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147006_u #hoveredSlot -public net.minecraft.client.renderer.RenderState field_228520_l_ #SMOOTH_SHADE -public net.minecraft.client.renderer.RenderState field_228528_t_ #LIGHTMAP -public net.minecraft.client.renderer.RenderState field_228515_g_ #TRANSLUCENT_TRANSPARENCY -public net.minecraft.potion.PotionBrewing field_185213_a #POTION_MIXES -public net.minecraft.potion.PotionBrewing field_185214_b #CONTAINER_MIXES -public net.minecraft.potion.PotionBrewing field_185215_c #ALLOWED_CONTAINERS -public net.minecraft.util.text.CharacterManager field_238347_a_ #widthProvider -public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147003_i # leftPos -public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147009_r # topPos -public net.minecraft.client.gui.screen.inventory.ContainerScreen field_146999_f # imageWidth -public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147000_g # imageHeight
\ No newline at end of file +public net.minecraft.client.gui.FontRenderer$CharacterRenderer +public net.minecraft.potion.PotionBrewing$MixPredicate +public net.minecraft.client.gui.widget.button.ImageButton field_191750_o +public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147006_u +public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147000_g +public net.minecraft.client.gui.screen.inventory.ContainerScreen field_146999_f +public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147007_t +public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147003_i +public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147009_r +public net.minecraft.client.gui.DisplayEffectsScreen field_147045_u +public net.minecraft.client.gui.recipebook.RecipeBookGui field_191915_z +public net.minecraft.client.gui.recipebook.RecipeBookGui field_193962_q +public net.minecraft.client.gui.recipebook.RecipeBookGui field_193018_j +public net.minecraft.util.text.CharacterManager field_238347_a_ +public net.minecraft.entity.player.PlayerInventory field_184440_g +public net.minecraft.potion.PotionBrewing field_185215_c +public net.minecraft.potion.PotionBrewing field_185214_b +public net.minecraft.potion.PotionBrewing field_185213_a +public net.minecraft.potion.PotionBrewing$MixPredicate field_185198_a +public net.minecraft.potion.PotionBrewing$MixPredicate field_185199_b +public net.minecraft.potion.PotionBrewing$MixPredicate field_185200_c +public net.minecraft.item.BucketItem field_77876_a +public net.minecraft.item.crafting.SmithingRecipe field_234838_b_ +public net.minecraft.item.crafting.SmithingRecipe field_234837_a_ +public net.minecraft.item.ItemGroup field_78034_o +public net.minecraft.client.gui.AbstractGui func_238461_a_(Lnet/minecraft/util/math/vector/Matrix4f;IIIIIFFFF)V +public net.minecraft.client.gui.screen.Screen func_230480_a_(Lnet/minecraft/client/gui/widget/Widget;)Lnet/minecraft/client/gui/widget/Widget; +public net.minecraft.client.gui.screen.Screen func_230481_d_(Lnet/minecraft/client/gui/IGuiEventListener;)Lnet/minecraft/client/gui/IGuiEventListener; +public net.minecraft.client.gui.screen.Screen func_231160_c_()V +public net.minecraft.client.gui.screen.Screen func_231155_a_(Ljava/lang/String;Z)V +public net.minecraft.client.gui.screen.Screen func_231154_a_(Ljava/lang/String;CI)Z
\ No newline at end of file |
