aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-08-09 01:10:48 +0800
committershedaniel <daniel@shedaniel.me>2020-08-09 01:10:48 +0800
commita88baa93b687a85a15c0911ee7b15d54b1d45cbb (patch)
tree926ec8287367aac0076b48162235e1e6df601e75
parent2489907c41ce77376e1e100acc56aebc6948b115 (diff)
downloadRoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.tar.gz
RoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.tar.bz2
RoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.zip
Fix #395
Signed-off-by: shedaniel <daniel@shedaniel.me>
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java40
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java28
-rw-r--r--RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java49
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java21
-rw-r--r--gradle.properties2
5 files changed, 105 insertions, 35 deletions
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java
new file mode 100644
index 000000000..aab927847
--- /dev/null
+++ b/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);
+ }
+}
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java
index 895d748a9..aaa8b4c53 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java
+++ b/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();
diff --git a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
index cd6fbfe95..81d0c8dd9 100644
--- a/RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
+++ b/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) {
@@ -127,6 +136,16 @@ public class DefaultPlugin implements REIPluginV0 {
}
@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;
}
diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index 2bc92aff8..3a28fa405 100644
--- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/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
*
diff --git a/gradle.properties b/gradle.properties
index 9ea5f5060..a2380f226 100644
--- a/gradle.properties
+++ b/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