Bläddra i källkod

Fix #395

Signed-off-by: shedaniel <daniel@shedaniel.me>
shedaniel 4 år sedan
förälder
incheckning
99fcc77c3f

+ 40 - 0
RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java

@@ -0,0 +1,40 @@
+package me.shedaniel.rei.api;
+
+import me.shedaniel.rei.impl.Internals;
+import net.minecraft.item.ItemStack;
+import net.minecraft.recipe.Ingredient;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.function.UnaryOperator;
+
+public interface BuiltinPlugin {
+    Identifier CRAFTING = new Identifier("minecraft", "plugins/crafting");
+    Identifier SMELTING = new Identifier("minecraft", "plugins/smelting");
+    Identifier SMOKING = new Identifier("minecraft", "plugins/smoking");
+    Identifier BLASTING = new Identifier("minecraft", "plugins/blasting");
+    Identifier CAMPFIRE = new Identifier("minecraft", "plugins/campfire");
+    Identifier STONE_CUTTING = new Identifier("minecraft", "plugins/stone_cutting");
+    Identifier STRIPPING = new Identifier("minecraft", "plugins/stripping");
+    Identifier BREWING = new Identifier("minecraft", "plugins/brewing");
+    Identifier PLUGIN = new Identifier("roughlyenoughitems", "default_plugin");
+    Identifier COMPOSTING = new Identifier("minecraft", "plugins/composting");
+    Identifier FUEL = new Identifier("minecraft", "plugins/fuel");
+    Identifier SMITHING = new Identifier("minecraft", "plugins/smithing");
+    Identifier BEACON = new Identifier("minecraft", "plugins/beacon");
+    Identifier INFO = new Identifier("roughlyenoughitems", "plugins/information");
+    
+    static BuiltinPlugin getInstance() {
+        return Internals.getBuiltinPlugin();
+    }
+    
+    void registerBrewingRecipe(ItemStack input, Ingredient ingredient, ItemStack output);
+    
+    void registerInformation(List<EntryStack> entryStacks, Text name, UnaryOperator<List<Text>> textBuilder);
+    
+    default void registerInformation(EntryStack entryStack, Text name, UnaryOperator<List<Text>> textBuilder) {
+        registerInformation(Collections.singletonList(entryStack), name, textBuilder);
+    }
+}

+ 28 - 0
RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java

@@ -42,6 +42,7 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import java.lang.reflect.Field;
 import java.util.Collection;
 import java.util.function.BiFunction;
 import java.util.function.Supplier;
@@ -60,6 +61,7 @@ public final class Internals {
     private static Supplier<WidgetsProvider> widgetsProvider = Internals::throwNotSetup;
     private static Supplier<ClientHelper.ViewSearchBuilder> viewSearchBuilder = Internals::throwNotSetup;
     private static BiFunction<@Nullable Point, Collection<Text>, Tooltip> tooltipProvider = (point, texts) -> throwNotSetup();
+    private static Supplier<BuiltinPlugin> builtinPlugin = Internals::throwNotSetup;
     
     private static <T> T throwNotSetup() {
         throw new AssertionError("REI Internals have not been initialized!");
@@ -126,6 +128,32 @@ public final class Internals {
         return tooltipProvider.apply(point, texts);
     }
     
+    @NotNull
+    public static BuiltinPlugin getBuiltinPlugin() {
+        return builtinPlugin.get();
+    }
+    
+    @ApiStatus.Internal
+    public static <T> void attachInstance(T instance, Class<T> clazz) {
+        attachInstance((Supplier<T>) () -> instance, clazz.getSimpleName());
+    }
+    
+    @ApiStatus.Internal
+    public static <T> void attachInstance(T instance, String name) {
+        try {
+            for (Field field : Internals.class.getDeclaredFields()) {
+                if (field.getName().equalsIgnoreCase(name)) {
+                    field.setAccessible(true);
+                    field.set(null, instance);
+                    return;
+                }
+            }
+            throw new RuntimeException("Failed to attach " + instance + " with field name: " + name);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
     public interface EntryStackProvider {
         EntryStack empty();
         

+ 34 - 15
RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java

@@ -75,6 +75,7 @@ import net.minecraft.potion.PotionUtil;
 import net.minecraft.recipe.*;
 import net.minecraft.tag.BlockTags;
 import net.minecraft.tag.Tag;
+import net.minecraft.text.Text;
 import net.minecraft.util.Identifier;
 import net.minecraft.util.Lazy;
 import net.minecraft.util.math.MathHelper;
@@ -85,24 +86,28 @@ import org.jetbrains.annotations.ApiStatus;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.*;
+import java.util.function.Consumer;
+import java.util.function.UnaryOperator;
+
+import static me.shedaniel.rei.impl.Internals.attachInstance;
 
 @Environment(EnvType.CLIENT)
-public class DefaultPlugin implements REIPluginV0 {
+public class DefaultPlugin implements REIPluginV0, BuiltinPlugin {
     private static final Logger LOGGER = LogManager.getFormatterLogger("REI/DefaultPlugin");
-    public static final Identifier CRAFTING = new Identifier("minecraft", "plugins/crafting");
-    public static final Identifier SMELTING = new Identifier("minecraft", "plugins/smelting");
-    public static final Identifier SMOKING = new Identifier("minecraft", "plugins/smoking");
-    public static final Identifier BLASTING = new Identifier("minecraft", "plugins/blasting");
-    public static final Identifier CAMPFIRE = new Identifier("minecraft", "plugins/campfire");
-    public static final Identifier STONE_CUTTING = new Identifier("minecraft", "plugins/stone_cutting");
-    public static final Identifier STRIPPING = new Identifier("minecraft", "plugins/stripping");
-    public static final Identifier BREWING = new Identifier("minecraft", "plugins/brewing");
-    public static final Identifier PLUGIN = new Identifier("roughlyenoughitems", "default_plugin");
-    public static final Identifier COMPOSTING = new Identifier("minecraft", "plugins/composting");
-    public static final Identifier FUEL = new Identifier("minecraft", "plugins/fuel");
-    public static final Identifier SMITHING = new Identifier("minecraft", "plugins/smithing");
-    public static final Identifier BEACON = new Identifier("minecraft", "plugins/beacon");
-    public static final Identifier INFO = new Identifier("roughlyenoughitems", "plugins/information");
+    public static final Identifier CRAFTING = BuiltinPlugin.CRAFTING;
+    public static final Identifier SMELTING = BuiltinPlugin.SMELTING;
+    public static final Identifier SMOKING = BuiltinPlugin.SMOKING;
+    public static final Identifier BLASTING = BuiltinPlugin.BLASTING;
+    public static final Identifier CAMPFIRE = BuiltinPlugin.CAMPFIRE;
+    public static final Identifier STONE_CUTTING = BuiltinPlugin.STONE_CUTTING;
+    public static final Identifier STRIPPING = BuiltinPlugin.STRIPPING;
+    public static final Identifier BREWING = BuiltinPlugin.BREWING;
+    public static final Identifier PLUGIN = BuiltinPlugin.PLUGIN;
+    public static final Identifier COMPOSTING = BuiltinPlugin.COMPOSTING;
+    public static final Identifier FUEL = BuiltinPlugin.FUEL;
+    public static final Identifier SMITHING = BuiltinPlugin.SMITHING;
+    public static final Identifier BEACON = BuiltinPlugin.BEACON;
+    public static final Identifier INFO = BuiltinPlugin.INFO;
     private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
     private static final Identifier DISPLAY_TEXTURE_DARK = new Identifier("roughlyenoughitems", "textures/gui/display_dark.png");
     private static final List<Lazy<DefaultBrewingDisplay>> BREWING_DISPLAYS = Lists.newArrayList();
@@ -112,6 +117,10 @@ public class DefaultPlugin implements REIPluginV0 {
         return REIHelper.getInstance().getDefaultDisplayTexture();
     }
     
+    public DefaultPlugin() {
+        attachInstance(this, BuiltinPlugin.class);
+    }
+    
     @Deprecated
     @ApiStatus.ScheduledForRemoval
     public static void registerBrewingDisplay(DefaultBrewingDisplay recipe) {
@@ -126,6 +135,16 @@ public class DefaultPlugin implements REIPluginV0 {
         INFO_DISPLAYS.add(display);
     }
     
+    @Override
+    public void registerBrewingRecipe(ItemStack input, Ingredient ingredient, ItemStack output) {
+        registerBrewingRecipe(new RegisteredBrewingRecipe(input, ingredient, output));
+    }
+    
+    @Override
+    public void registerInformation(List<EntryStack> entryStacks, Text name, UnaryOperator<List<Text>> textBuilder) {
+        registerInfoDisplay(DefaultInformationDisplay.createFromEntries(entryStacks, name).lines(textBuilder.apply(Lists.newArrayList())));
+    }
+    
     @Override
     public Identifier getPluginIdentifier() {
         return PLUGIN;

+ 2 - 19
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java

@@ -89,6 +89,8 @@ import java.util.concurrent.Executors;
 import java.util.function.BiFunction;
 import java.util.function.Supplier;
 
+import static me.shedaniel.rei.impl.Internals.attachInstance;
+
 @ApiStatus.Internal
 @Environment(EnvType.CLIENT)
 public class RoughlyEnoughItemsCore implements ClientModInitializer {
@@ -180,25 +182,6 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
         attachInstance((BiFunction<@Nullable Point, Collection<Text>, Tooltip>) QueuedTooltip::create, "tooltipProvider");
     }
     
-    public static <T> void attachInstance(T instance, Class<T> clazz) {
-        attachInstance((Supplier<T>) () -> instance, clazz.getSimpleName());
-    }
-    
-    public static <T> void attachInstance(T instance, String name) {
-        try {
-            for (Field field : Internals.class.getDeclaredFields()) {
-                if (field.getName().equalsIgnoreCase(name)) {
-                    field.setAccessible(true);
-                    field.set(null, instance);
-                    return;
-                }
-            }
-            throw new RuntimeException("Failed to attach " + instance + " with field name: " + name);
-        } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
     /**
      * Registers a REI plugin
      *

+ 1 - 1
gradle.properties

@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx3G
-mod_version=5.2.0
+mod_version=5.2.1
 supported_version=1.16.2
 minecraft_version=1.16.2-rc1
 yarn_version=1.16.2-rc1+build.4+legacy.20w09a+build.8