diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-03-09 21:30:12 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-03-09 21:30:12 +0800 |
| commit | 64bc9937d6ec04c6d66240a84b4fb345026c0b12 (patch) | |
| tree | 62e055c5cc64875300bdf69ac9a4400fb4b28dd9 | |
| parent | 69d386214f5d3471a3ef1e5533037cdc32648c57 (diff) | |
| download | RoughlyEnoughItems-64bc9937d6ec04c6d66240a84b4fb345026c0b12.tar.gz RoughlyEnoughItems-64bc9937d6ec04c6d66240a84b4fb345026c0b12.tar.bz2 RoughlyEnoughItems-64bc9937d6ec04c6d66240a84b4fb345026c0b12.zip | |
Very primitive background rendering for JEI plugins
Signed-off-by: shedaniel <daniel@shedaniel.me>
32 files changed, 646 insertions, 269 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/REIOverlay.java b/api/src/main/java/me/shedaniel/rei/api/REIOverlay.java index 24eaf15bd..c9dc4c16e 100644 --- a/api/src/main/java/me/shedaniel/rei/api/REIOverlay.java +++ b/api/src/main/java/me/shedaniel/rei/api/REIOverlay.java @@ -23,9 +23,12 @@ package me.shedaniel.rei.api; +import me.shedaniel.rei.api.gui.drag.DraggingContext; import org.jetbrains.annotations.ApiStatus; @ApiStatus.Experimental public interface REIOverlay { void queueReloadOverlay(); + + DraggingContext getDraggingContext(); } diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStack.java b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStack.java new file mode 100644 index 000000000..8d38fb4c8 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStack.java @@ -0,0 +1,17 @@ +package me.shedaniel.rei.api.gui.drag; + +import com.mojang.blaze3d.vertex.PoseStack; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.ingredient.EntryStack; + +public interface DraggableStack { + EntryStack<?> getStack(); + + void drag(); + + void release(boolean accepted); + + default void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) { + getStack().render(matrices, bounds, mouseX, mouseY, delta); + } +}
\ No newline at end of file diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackProvider.java b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackProvider.java new file mode 100644 index 000000000..7b799b26a --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackProvider.java @@ -0,0 +1,21 @@ +package me.shedaniel.rei.api.gui.drag; + +import org.jetbrains.annotations.Nullable; + +import java.util.function.Supplier; + +@FunctionalInterface +public interface DraggableStackProvider { + static DraggableStackProvider from(Supplier<Iterable<DraggableStackProvider>> providers) { + return (context, mouseX, mouseY) -> { + for (DraggableStackProvider provider : providers.get()) { + DraggableStack stack = provider.getHoveredStack(context, mouseX, mouseY); + if (stack != null) return stack; + } + return null; + }; + } + + @Nullable + DraggableStack getHoveredStack(DraggingContext context, double mouseX, double mouseY); +}
\ No newline at end of file diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackVisitor.java b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackVisitor.java new file mode 100644 index 000000000..e0e64bf9a --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggableStackVisitor.java @@ -0,0 +1,23 @@ +package me.shedaniel.rei.api.gui.drag; + +import java.util.Optional; +import java.util.function.Supplier; + +@FunctionalInterface +public interface DraggableStackVisitor { + static DraggableStackVisitor from(Supplier<Iterable<DraggableStackVisitor>> visitors) { + return (stack) -> { + for (DraggableStackVisitor visitor : visitors.get()) { + Optional<Acceptor> acceptor = visitor.visitDraggedStack(stack); + if (acceptor.isPresent()) return acceptor; + } + return Optional.empty(); + }; + } + + Optional<Acceptor> visitDraggedStack(DraggableStack stack); + + interface Acceptor { + void accept(DraggableStack stack); + } +} diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggingContext.java b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggingContext.java new file mode 100644 index 000000000..cd9bc3a32 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/gui/drag/DraggingContext.java @@ -0,0 +1,25 @@ +package me.shedaniel.rei.api.gui.drag; + +import me.shedaniel.math.Point; +import me.shedaniel.rei.api.REIHelper; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Supplier; + +public interface DraggingContext { + static DraggingContext getInstance() { + return REIHelper.getInstance().getOverlay().get().getDraggingContext(); + } + + default boolean isDraggingStack() { + return getCurrentStack() != null; + } + + @Nullable + DraggableStack getCurrentStack(); + + @Nullable + Point getCurrentPosition(); + + void registerRenderBackToPosition(DraggableStack stack, Supplier<Point> position); +} diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java b/api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java index abe4454ae..ddb4d0d26 100644 --- a/api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java +++ b/api/src/main/java/me/shedaniel/rei/api/gui/widgets/Widget.java @@ -75,6 +75,7 @@ public abstract class Widget extends AbstractContainerEventHandler implements ne } @Override + @Deprecated public void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta) { render(matrices, mouseX, mouseY, delta); } diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java b/api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java index 17b178bb3..b427d8a47 100644 --- a/api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java +++ b/api/src/main/java/me/shedaniel/rei/api/gui/widgets/WidgetWithBounds.java @@ -27,7 +27,6 @@ import me.shedaniel.math.Rectangle; import org.jetbrains.annotations.NotNull; public abstract class WidgetWithBounds extends Widget { - @NotNull public abstract Rectangle getBounds(); @@ -35,5 +34,4 @@ public abstract class WidgetWithBounds extends Widget { public boolean containsMouse(double mouseX, double mouseY) { return getBounds().contains(mouseX, mouseY); } - } diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java index 913dded0d..9e62eb9a1 100644 --- a/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java +++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java @@ -29,11 +29,11 @@ import com.mojang.serialization.Dynamic; import com.mojang.serialization.JsonOps; import me.shedaniel.architectury.utils.Fraction; import me.shedaniel.rei.api.gui.Renderer; -import me.shedaniel.rei.api.util.TextRepresentable; import me.shedaniel.rei.api.ingredient.entry.ComparisonContext; import me.shedaniel.rei.api.ingredient.entry.EntryDefinition; import me.shedaniel.rei.api.ingredient.entry.EntryRenderer; import me.shedaniel.rei.api.ingredient.entry.EntryType; +import me.shedaniel.rei.api.util.TextRepresentable; import me.shedaniel.rei.impl.Internals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -202,4 +202,9 @@ public interface EntryStack<T> extends TextRepresentable, Renderer { setAmount(getAmount().simplify()); return this; } + + @ApiStatus.NonExtendable + default <O> EntryStack<O> cast() { + return (EntryStack<O>) this; + } } diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java index dcb72f0fe..f2d22668f 100644 --- a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java +++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryDefinition.java @@ -49,7 +49,6 @@ public interface EntryDefinition<T> { boolean isEmpty(EntryStack<T> entry, T value); - @NotNull T copy(EntryStack<T> entry, T value); int hash(EntryStack<T> entry, T value, ComparisonContext context); diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java index 2fd9f0bbb..2397b46a5 100644 --- a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java +++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/EntryTypeRegistry.java @@ -25,11 +25,11 @@ package me.shedaniel.rei.api.ingredient.entry; import me.shedaniel.rei.api.plugins.PluginManager; import me.shedaniel.rei.api.registry.Reloadable; -import me.shedaniel.rei.impl.Internals; import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Set; + public interface EntryTypeRegistry extends Reloadable { static EntryTypeRegistry getInstance() { return PluginManager.getInstance().get(EntryTypeRegistry.class); @@ -75,6 +75,10 @@ public interface EntryTypeRegistry extends Reloadable { @Nullable EntryDefinition<?> get(ResourceLocation id); + Set<ResourceLocation> keySet(); + + Set<EntryDefinition<?>> values(); + <A, B> void registerBridge(EntryType<A> original, EntryType<B> destination, EntryTypeBridge<A, B> bridge); <A, B> Iterable<EntryTypeBridge<A, B>> getBridgesFor(EntryType<A> original, EntryType<B> destination); diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java index 0407ae215..bbd401247 100644 --- a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java +++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryIngredients.java @@ -24,10 +24,13 @@ package me.shedaniel.rei.api.ingredient.util; import com.google.common.collect.ImmutableList; +import me.shedaniel.architectury.fluid.FluidStack; import me.shedaniel.architectury.utils.Fraction; import me.shedaniel.rei.api.gui.Renderer; import me.shedaniel.rei.api.ingredient.EntryIngredient; import me.shedaniel.rei.api.ingredient.EntryStack; +import me.shedaniel.rei.api.ingredient.entry.EntryDefinition; +import me.shedaniel.rei.api.ingredient.entry.EntryType; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.ItemLike; @@ -65,10 +68,28 @@ public final class EntryIngredients { return EntryIngredient.of(EntryStacks.of(fluid, amount)); } + public static EntryIngredient of(FluidStack stack) { + return EntryIngredient.of(EntryStacks.of(stack)); + } + public static EntryIngredient of(Renderer renderer) { return EntryIngredient.of(EntryStacks.of(renderer)); } + public static <T> EntryIngredient of(EntryType<T> type, Collection<T> values) { + return of(type.getDefinition(), values); + } + + public static <T> EntryIngredient of(EntryDefinition<T> definition, Collection<T> values) { + if (values.size() == 0) return EntryIngredient.empty(); + if (values.size() == 1) return EntryIngredient.of(EntryStack.of(definition, values.iterator().next())); + List<EntryStack<T>> result = new ArrayList<>(values.size()); + for (T value : values) { + result.add(EntryStack.of(definition, value)); + } + return EntryIngredient.of(result); + } + public static EntryIngredient ofItems(Collection<ItemLike> stacks) { if (stacks.size() == 0) return EntryIngredient.empty(); if (stacks.size() == 1) return EntryIngredient.of(EntryStacks.of(stacks.iterator().next())); diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java index 18144e5df..30b6af005 100644 --- a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java +++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java @@ -26,9 +26,9 @@ package me.shedaniel.rei.api.ingredient.util; import com.google.common.collect.ImmutableList; import me.shedaniel.architectury.fluid.FluidStack; import me.shedaniel.architectury.utils.Fraction; +import me.shedaniel.rei.api.gui.Renderer; import me.shedaniel.rei.api.ingredient.EntryStack; import me.shedaniel.rei.api.ingredient.entry.*; -import me.shedaniel.rei.api.gui.Renderer; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; @@ -57,6 +57,10 @@ public final class EntryStacks { return EntryStack.of(VanillaEntryTypes.FLUID, FluidStack.create(fluid, amount)); } + public static EntryStack<FluidStack> of(FluidStack stack) { + return EntryStack.of(VanillaEntryTypes.FLUID, stack); + } + public static EntryStack<ItemStack> of(ItemStack stack) { return EntryStack.of(VanillaEntryTypes.ITEM, stack); } @@ -67,7 +71,7 @@ public final class EntryStacks { public static EntryStack<?> of(Renderer renderer) { if (renderer instanceof EntryStack) { - return (EntryStack<Renderer>) renderer; + return (EntryStack<?>) renderer; } return EntryStack.of(BuiltinEntryTypes.RENDERING, renderer); diff --git a/build.gradle b/build.gradle index 5c5d0c67c..be2737ac4 100755 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { - id("architectury-plugin") version("3.0.89") - id("forgified-fabric-loom") version("0.6.71") apply false + id("architectury-plugin") version("3.0.97") + id("forgified-fabric-loom") version("0.6-SNAPSHOT") apply false id("org.cadixdev.licenser") version("0.5.0") id("com.matthewprenger.cursegradle") version("1.4.0") id("java") @@ -37,15 +37,10 @@ allprojects { sourceCompatibility = targetCompatibility = 1.8 repositories { - mavenLocal() maven { url "https://maven.shedaniel.me" } maven { url "https://maven.terraformersmc.com/releases" } } - architectury { - transformerVersion = "2.1.9999" - } - license { header rootProject.file("HEADER") include "**/*.java" diff --git a/fabric/src/main/java/me/shedaniel/rei/fabric/RoughlyEnoughItemsFabric.java b/fabric/src/main/java/me/shedaniel/rei/fabric/RoughlyEnoughItemsFabric.java index 7172ec864..11266d68e 100644 --- a/fabric/src/main/java/me/shedaniel/rei/fabric/RoughlyEnoughItemsFabric.java +++ b/fabric/src/main/java/me/shedaniel/rei/fabric/RoughlyEnoughItemsFabric.java @@ -1,16 +1,16 @@ package me.shedaniel.rei.fabric; import me.shedaniel.rei.impl.IssuesDetector; -import net.fabricmc.api.ModInitializer; +import net.fabricmc.api.ClientModInitializer; import net.fabricmc.loader.api.FabricLoader; import org.apache.logging.log4j.Logger; import java.lang.reflect.Field; import java.util.Locale; -public class RoughlyEnoughItemsFabric implements ModInitializer { +public class RoughlyEnoughItemsFabric implements ClientModInitializer { @Override - public void onInitialize() { + public void onInitializeClient() { IssuesDetector.register(() -> { try { FabricLoader instance = FabricLoader.getInstance(); diff --git a/fabric/src/main/resources/roughlyenoughitems.accessWidener b/fabric/src/main/resources/roughlyenoughitems.accessWidener index 4a5503b87..8accdb958 100644 --- a/fabric/src/main/resources/roughlyenoughitems.accessWidener +++ b/fabric/src/main/resources/roughlyenoughitems.accessWidener @@ -30,4 +30,3 @@ accessible method net/minecraft/client/gui/screens/Screen accessible method net/minecraft/client/gui/screens/Screen init ()V accessible method net/minecraft/client/gui/screens/Screen insertText (Ljava/lang/String;Z)V accessible method net/minecraft/client/gui/screens/Screen isValidCharacterForName (Ljava/lang/String;CI)Z -accessible method net/minecraft/tags/TagContainer get (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/tags/TagCollection; diff --git a/forge/build.gradle b/forge/build.gradle index d81a635c2..ee643b74b 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -12,6 +12,10 @@ processResources { inputs.property "version", project.version } +repositories { + maven { url "https://www.cursemaven.com" } +} + dependencies { forge("net.minecraftforge:forge:${rootProject.minecraft_version}-${rootProject.forge_version}") modApi("me.shedaniel.cloth:cloth-config-forge:${cloth_config_version}") @@ -20,7 +24,13 @@ dependencies { implementation(project(path: ":api")) { transitive = false } implementation(project(path: ":default-plugin")) { transitive = false } implementation(project(path: ":runtime")) { transitive = false } + implementation(project(path: ":jei-compatibility-layer")) { transitive = false } developmentForge(project(path: ":api")) { transitive = false } developmentForge(project(path: ":default-plugin")) { transitive = false } developmentForge(project(path: ":runtime")) { transitive = false } + developmentForge(project(path: ":jei-compatibility-layer")) { transitive = false } + + modRuntime("curse.maven:chiselsbits-231095:3176033") + modRuntime("curse.maven:jumbofurnace-390880:3120970") + modRuntime("curse.maven:cyclic-239286:3221427") } diff --git a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java index 044bfd081..4aace1982 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/PluginDetectorImpl.java @@ -1,11 +1,15 @@ package me.shedaniel.rei.forge; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.gui.plugin.DefaultRuntimePlugin; +import me.shedaniel.rei.jeicompat.JEIPluginDetector; import me.shedaniel.rei.plugin.DefaultPlugin; import me.shedaniel.rei.plugin.DefaultServerContainerPlugin; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import java.util.function.Consumer; + import static me.shedaniel.rei.RoughlyEnoughItemsCore.registerPlugin; public class PluginDetectorImpl { @@ -17,5 +21,10 @@ public class PluginDetectorImpl { public static void detectClientPlugins() { registerPlugin(new DefaultPlugin()); registerPlugin(new DefaultRuntimePlugin()); + RoughlyEnoughItemsForge.scanAnnotation(REIPlugin.class, plugin -> { + registerPlugin(((me.shedaniel.rei.api.plugins.REIPlugin) plugin)); + }); + JEIPluginDetector.detect((aClass, consumer) -> RoughlyEnoughItemsForge.scanAnnotation((Class<Object>) aClass, (Consumer<Object>) consumer), + RoughlyEnoughItemsCore::registerPlugin); } } diff --git a/forge/src/main/java/me/shedaniel/rei/forge/REIPlugin.java b/forge/src/main/java/me/shedaniel/rei/forge/REIPlugin.java new file mode 100644 index 000000000..a4acbaa46 --- /dev/null +++ b/forge/src/main/java/me/shedaniel/rei/forge/REIPlugin.java @@ -0,0 +1,11 @@ +package me.shedaniel.rei.forge; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface REIPlugin { +} diff --git a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java index 9147eb8f2..d96afb6b4 100644 --- a/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java +++ b/forge/src/main/java/me/shedaniel/rei/forge/RoughlyEnoughItemsForge.java @@ -1,17 +1,54 @@ package me.shedaniel.rei.forge; +import com.google.common.collect.Lists; import me.shedaniel.architectury.platform.forge.EventBuses; import me.shedaniel.rei.RoughlyEnoughItemsInitializer; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.forgespi.language.ModFileScanData; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.ApiStatus; +import org.objectweb.asm.Type; + +import java.util.List; +import java.util.function.Consumer; @Mod("roughlyenoughitems") +@ApiStatus.Internal public class RoughlyEnoughItemsForge { + public static final Logger LOGGER = LogManager.getFormatterLogger("REI"); + public RoughlyEnoughItemsForge() { EventBuses.registerModEventBus("roughlyenoughitems", FMLJavaModLoadingContext.get().getModEventBus()); RoughlyEnoughItemsInitializer.onInitialize(); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> RoughlyEnoughItemsInitializer::onInitializeClient); } + + public static <T> void scanAnnotation(Class<T> clazz, Consumer<T> consumer) { + scanAnnotation(Type.getType(clazz), consumer); + } + + public static <T> void scanAnnotation(Type annotationType, Consumer<T> consumer) { + List<T> instances = Lists.newArrayList(); + for (ModFileScanData data : ModList.get().getAllScanData()) { + for (ModFileScanData.AnnotationData annotation : data.getAnnotations()) { + if (annotationType.equals(annotation.getAnnotationType())) { + try { + T instance = (T) Class.forName(annotation.getMemberName()).getDeclaredConstructor().newInstance(); + instances.add(instance); + } catch (Throwable throwable) { + LOGGER.error("Failed to load plugin: " + annotation.getMemberName(), throwable); + } + } + } + } + + for (T instance : instances) { + consumer.accept(instance); + } + } } diff --git a/forge/src/main/resources/META-INF/accesstransformer.cfg b/forge/src/main/resources/META-INF/accesstransformer.cfg index f4a298c9e..2648dd607 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -1,23 +1,31 @@ -public net.minecraft.client.gui.recipebook.RecipeBookGui field_191915_z #ghostRecipe -public net.minecraft.client.gui.AbstractGui func_238461_a_(Lnet/minecraft/util/math/vector/Matrix4f;IIIIIFFFF)V #innerBlit -public net.minecraft.client.gui.screen.Screen field_230710_m_ #buttons -public net.minecraft.entity.player.PlayerInventory field_184440_g #compartments -public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147007_t #isQuickCrafting -public net.minecraft.client.gui.widget.button.ImageButton field_191750_o #resourceLocation -public net.minecraft.item.ItemGroup field_78034_o #langId -public net.minecraft.item.crafting.SmithingRecipe field_234837_a_ #base -public net.minecraft.item.crafting.SmithingRecipe field_234838_b_ #addition -public net.minecraft.client.gui.DisplayEffectsScreen field_147045_u #doRenderEffects -public net.minecraft.client.gui.recipebook.RecipeBookGui field_193018_j #tabButtons -public net.minecraft.client.gui.screen.inventory.ContainerScreen field_147006_u #hoveredSlot -public net.minecraft.client.r |
