aboutsummaryrefslogtreecommitdiff
path: root/forge/src/main
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-03-09 21:30:12 +0800
committershedaniel <daniel@shedaniel.me>2021-03-09 21:30:12 +0800
commit64bc9937d6ec04c6d66240a84b4fb345026c0b12 (patch)
tree62e055c5cc64875300bdf69ac9a4400fb4b28dd9 /forge/src/main
parent69d386214f5d3471a3ef1e5533037cdc32648c57 (diff)
downloadRoughlyEnoughItems-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')
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java9
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/REIPlugin.java11
-rw-r--r--forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java37
-rw-r--r--forge/src/main/resources/META-INF/accesstransformer.cfg54
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