diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-08-09 01:10:48 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-08-09 01:10:48 +0800 |
| commit | a88baa93b687a85a15c0911ee7b15d54b1d45cbb (patch) | |
| tree | 926ec8287367aac0076b48162235e1e6df601e75 /RoughlyEnoughItems-api/src/main/java | |
| parent | 2489907c41ce77376e1e100acc56aebc6948b115 (diff) | |
| download | RoughlyEnoughItems-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.java | 40 | ||||
| -rw-r--r-- | RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java | 28 |
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(); |
