aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-api/src/main/java
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 /RoughlyEnoughItems-api/src/main/java
parent2489907c41ce77376e1e100acc56aebc6948b115 (diff)
downloadRoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.tar.gz
RoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.tar.bz2
RoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.zip
Fix #395
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'RoughlyEnoughItems-api/src/main/java')
-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
2 files changed, 68 insertions, 0 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();