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 | |
| parent | 2489907c41ce77376e1e100acc56aebc6948b115 (diff) | |
| download | RoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.tar.gz RoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.tar.bz2 RoughlyEnoughItems-a88baa93b687a85a15c0911ee7b15d54b1d45cbb.zip | |
Fix #395
Signed-off-by: shedaniel <daniel@shedaniel.me>
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 |
