Unknown 6 anos atrás
pai
commit
6096914328
27 arquivos alterados com 227 adições e 214 exclusões
  1. 4 4
      build.gradle
  2. 4 3
      src/main/java/me/shedaniel/rei/api/IRecipeCategory.java
  3. 5 5
      src/main/java/me/shedaniel/rei/api/IRecipeCategoryCraftable.java
  4. 3 3
      src/main/java/me/shedaniel/rei/api/SpeedCraftFunctional.java
  5. 9 9
      src/main/java/me/shedaniel/rei/client/ClientHelper.java
  6. 20 20
      src/main/java/me/shedaniel/rei/client/GuiHelper.java
  7. 7 9
      src/main/java/me/shedaniel/rei/client/RecipeHelper.java
  8. 20 20
      src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
  9. 5 5
      src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java
  10. 26 19
      src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidgetScreen.java
  11. 7 8
      src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java
  12. 2 2
      src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java
  13. 9 9
      src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java
  14. 3 3
      src/main/java/me/shedaniel/rei/listeners/IMixinContainerScreen.java
  15. 14 14
      src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java
  16. 5 5
      src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableScreen.java
  17. 5 5
      src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java
  18. 5 5
      src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryScreen.java
  19. 3 1
      src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java
  20. 3 1
      src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java
  21. 5 4
      src/main/java/me/shedaniel/rei/plugin/DefaultCampfireCategory.java
  22. 6 5
      src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java
  23. 39 40
      src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
  24. 5 4
      src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java
  25. 5 4
      src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java
  26. 4 3
      src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingCategory.java
  27. 4 4
      src/main/resources/roughlyenoughitems.client.json

+ 4 - 4
build.gradle

@@ -6,10 +6,10 @@ sourceCompatibility = 1.8
 targetCompatibility = 1.8
 
 archivesBaseName = "RoughlyEnoughItems"
-version = "2.2.0.46"
+version = "2.2.0.47"
 
-def minecraftVersion = "19w04a"
-def yarnVersion = "19w04a.2"
+def minecraftVersion = "19w04b"
+def yarnVersion = "19w04b.5"
 def fabricVersion = "0.1.5.83"
 def pluginLoaderVersion = "1.14-1.0.6-8"
 
@@ -30,7 +30,7 @@ repositories {
 dependencies {
 	minecraft "com.mojang:minecraft:${minecraftVersion}"
 	mappings "net.fabricmc:yarn:${yarnVersion}"
-	modCompile "net.fabricmc:fabric-loader:0.3.3.102"
+	modCompile "net.fabricmc:fabric-loader:0.3.4.104"
 
 	// Fabric API. This is technically optional, but you probably want it anyway.
 	modCompile "net.fabricmc:fabric:${fabricVersion}"

+ 4 - 3
src/main/java/me/shedaniel/rei/api/IRecipeCategory.java

@@ -3,7 +3,7 @@ package me.shedaniel.rei.api;
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.gui.widget.IWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
-import me.shedaniel.rei.gui.widget.RecipeViewingWidget;
+import me.shedaniel.rei.gui.widget.RecipeViewingWidgetScreen;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Drawable;
 import net.minecraft.client.render.GuiLighting;
@@ -13,6 +13,7 @@ import net.minecraft.util.Identifier;
 import java.awt.*;
 import java.util.Arrays;
 import java.util.List;
+import java.util.function.Supplier;
 
 
 public interface IRecipeCategory<T extends IRecipeDisplay> {
@@ -27,14 +28,14 @@ public interface IRecipeCategory<T extends IRecipeDisplay> {
         return false;
     }
     
-    default public List<IWidget> setupDisplay(T recipeDisplay, Rectangle bounds) {
+    default public List<IWidget> setupDisplay(Supplier<T> recipeDisplaySupplier, Rectangle bounds) {
         return Arrays.asList(new RecipeBaseWidget(bounds));
     }
     
     default public void drawCategoryBackground(Rectangle bounds) {
         GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
         GuiLighting.disable();
-        MinecraftClient.getInstance().getTextureManager().bindTexture(RecipeViewingWidget.CHEST_GUI_TEXTURE);
+        MinecraftClient.getInstance().getTextureManager().bindTexture(RecipeViewingWidgetScreen.CHEST_GUI_TEXTURE);
         new Drawable() {
         
         }.drawTexturedRect((int) bounds.getX(), (int) bounds.getY(), 0, 0, (int) bounds.getWidth(), (int) bounds.getHeight());

+ 5 - 5
src/main/java/me/shedaniel/rei/api/IRecipeCategoryCraftable.java

@@ -1,18 +1,18 @@
 package me.shedaniel.rei.api;
 
 import me.shedaniel.rei.gui.widget.IWidget;
-import me.shedaniel.rei.listeners.IMixinContainerGui;
-import net.minecraft.client.gui.Gui;
+import me.shedaniel.rei.listeners.IMixinContainerScreen;
+import net.minecraft.client.gui.Screen;
 
 import java.awt.*;
 import java.util.List;
 
 public interface IRecipeCategoryCraftable<T extends IRecipeDisplay> {
     
-    public boolean canAutoCraftHere(Class<? extends Gui> guiClass, T recipe);
+    public boolean canAutoCraftHere(Class<? extends Screen> screenClasses, T recipe);
     
-    public boolean performAutoCraft(Gui gui, T recipe);
+    public boolean performAutoCraft(Screen gui, T recipe);
     
-    public void registerAutoCraftButton(List<IWidget> widgets, Rectangle rectangle, IMixinContainerGui parentGui, T recipe);
+    public void registerAutoCraftButton(List<IWidget> widgets, Rectangle rectangle, IMixinContainerScreen parentScreen, T recipe);
     
 }

+ 3 - 3
src/main/java/me/shedaniel/rei/api/SpeedCraftFunctional.java

@@ -1,13 +1,13 @@
 package me.shedaniel.rei.api;
 
-import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.Screen;
 
 public interface SpeedCraftFunctional<T extends IRecipeDisplay> {
     
     public Class[] getFunctioningFor();
     
-    public boolean performAutoCraft(Gui gui, T recipe);
+    public boolean performAutoCraft(Screen screen, T recipe);
     
-    public boolean acceptRecipe(Gui gui, T recipe);
+    public boolean acceptRecipe(Screen screen, T recipe);
     
 }

+ 9 - 9
src/main/java/me/shedaniel/rei/client/ClientHelper.java

@@ -6,16 +6,16 @@ import io.netty.buffer.Unpooled;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.IRecipeCategory;
 import me.shedaniel.rei.api.IRecipeDisplay;
-import me.shedaniel.rei.gui.ContainerGuiOverlay;
+import me.shedaniel.rei.gui.ContainerScreenOverlay;
 import me.shedaniel.rei.gui.widget.ConfigWidget;
-import me.shedaniel.rei.gui.widget.RecipeViewingWidget;
+import me.shedaniel.rei.gui.widget.RecipeViewingWidgetScreen;
 import net.fabricmc.api.ClientModInitializer;
 import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding;
 import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl;
 import net.fabricmc.loader.FabricLoader;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.Mouse;
-import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.Screen;
 import net.minecraft.client.util.InputUtil;
 import net.minecraft.enchantment.Enchantment;
 import net.minecraft.enchantment.EnchantmentHelper;
@@ -115,22 +115,22 @@ public class ClientHelper implements ClientModInitializer {
         }
     }
     
-    public static boolean executeRecipeKeyBind(ContainerGuiOverlay overlay, ItemStack stack) {
+    public static boolean executeRecipeKeyBind(ContainerScreenOverlay overlay, ItemStack stack) {
         Map<IRecipeCategory, List<IRecipeDisplay>> map = RecipeHelper.getInstance().getRecipesFor(stack);
         if (map.keySet().size() > 0)
-            MinecraftClient.getInstance().openGui(new RecipeViewingWidget(MinecraftClient.getInstance().window, map));
+            MinecraftClient.getInstance().openScreen(new RecipeViewingWidgetScreen(MinecraftClient.getInstance().window, map));
         return map.keySet().size() > 0;
     }
     
-    public static boolean executeUsageKeyBind(ContainerGuiOverlay overlay, ItemStack stack) {
+    public static boolean executeUsageKeyBind(ContainerScreenOverlay overlay, ItemStack stack) {
         Map<IRecipeCategory, List<IRecipeDisplay>> map = RecipeHelper.getInstance().getUsagesFor(stack);
         if (map.keySet().size() > 0)
-            MinecraftClient.getInstance().openGui(new RecipeViewingWidget(MinecraftClient.getInstance().window, map));
+            MinecraftClient.getInstance().openScreen(new RecipeViewingWidgetScreen(MinecraftClient.getInstance().window, map));
         return map.keySet().size() > 0;
     }
     
-    public static void openConfigWindow(Gui parent) {
-        MinecraftClient.getInstance().openGui(new ConfigWidget(parent));
+    public static void openConfigWindow(Screen parent) {
+        MinecraftClient.getInstance().openScreen(new ConfigWidget(parent));
     }
     
     public static List<ItemStack> getInventoryItemsTypes() {

+ 20 - 20
src/main/java/me/shedaniel/rei/client/GuiHelper.java

@@ -1,11 +1,11 @@
 package me.shedaniel.rei.client;
 
 import com.google.common.collect.Lists;
-import me.shedaniel.rei.gui.ContainerGuiOverlay;
+import me.shedaniel.rei.gui.ContainerScreenOverlay;
 import me.shedaniel.rei.gui.widget.TextFieldWidget;
-import me.shedaniel.rei.listeners.IMixinContainerGui;
+import me.shedaniel.rei.listeners.IMixinContainerScreen;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.ContainerGui;
+import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.item.ItemStack;
 
 import java.util.List;
@@ -13,11 +13,11 @@ import java.util.List;
 public class GuiHelper {
     
     public static TextFieldWidget searchField;
-    private static boolean overlayVisible = true;
-    private static ContainerGuiOverlay overlay;
     public static List<ItemStack> inventoryStacks = Lists.newArrayList();
-    private static ContainerGui lastContainerGui;
-    private static IMixinContainerGui lastMixinContainerGui;
+    private static boolean overlayVisible = true;
+    private static ContainerScreenOverlay overlay;
+    private static ContainerScreen lastContainerScreen;
+    private static IMixinContainerScreen lastMixinContainerScreen;
     
     public static boolean isOverlayVisible() {
         return overlayVisible;
@@ -27,36 +27,36 @@ public class GuiHelper {
         overlayVisible = !overlayVisible;
     }
     
-    public static ContainerGuiOverlay getLastOverlay() {
+    public static ContainerScreenOverlay getLastOverlay() {
         return overlay;
     }
     
-    public static void setOverlay(ContainerGuiOverlay overlay) {
+    public static void setOverlay(ContainerScreenOverlay overlay) {
         GuiHelper.overlay = overlay;
         overlay.onInitialized();
     }
     
     public static void onTick(MinecraftClient client) {
-        if (client.currentGui instanceof ContainerGui && lastContainerGui != client.currentGui) {
-            GuiHelper.lastContainerGui = (ContainerGui) client.currentGui;
-            GuiHelper.lastMixinContainerGui = (IMixinContainerGui) lastContainerGui;
+        if (client.currentScreen instanceof ContainerScreen && lastContainerScreen != client.currentScreen) {
+            GuiHelper.lastContainerScreen = (ContainerScreen) client.currentScreen;
+            GuiHelper.lastMixinContainerScreen = (IMixinContainerScreen) lastContainerScreen;
         }
     }
     
-    public static ContainerGui getLastContainerGui() {
-        return lastContainerGui;
+    public static ContainerScreen getLastContainerScreen() {
+        return lastContainerScreen;
     }
     
-    public static IMixinContainerGui getLastMixinContainerGui() {
-        return lastMixinContainerGui;
+    public static void setLastContainerScreen(ContainerScreen lastContainerScreen) {
+        GuiHelper.lastContainerScreen = lastContainerScreen;
     }
     
-    public static void setLastContainerGui(ContainerGui lastContainerGui) {
-        GuiHelper.lastContainerGui = lastContainerGui;
+    public static IMixinContainerScreen getLastMixinContainerScreen() {
+        return lastMixinContainerScreen;
     }
     
-    public static void setLastMixinContainerGui(IMixinContainerGui lastMixinContainerGui) {
-        GuiHelper.lastMixinContainerGui = lastMixinContainerGui;
+    public static void setLastMixinContainerScreen(IMixinContainerScreen lastMixinContainerScreen) {
+        GuiHelper.lastMixinContainerScreen = lastMixinContainerScreen;
     }
     
 }

+ 7 - 9
src/main/java/me/shedaniel/rei/client/RecipeHelper.java

@@ -56,7 +56,7 @@ public class RecipeHelper {
     
     public void registerCategory(IRecipeCategory category) {
         categories.add(category);
-        recipeCategoryListMap.put(category.getIdentifier(), Lists.newArrayList());
+        recipeCategoryListMap.put(category.getIdentifier(), Lists.newLinkedList());
     }
     
     public void registerRecipe(Identifier categoryIdentifier, IRecipeDisplay display) {
@@ -67,7 +67,7 @@ public class RecipeHelper {
     
     public Map<IRecipeCategory, List<IRecipeDisplay>> getRecipesFor(ItemStack stack) {
         Map<Identifier, List<IRecipeDisplay>> categoriesMap = new HashMap<>();
-        categories.forEach(f -> categoriesMap.put(f.getIdentifier(), new LinkedList<>()));
+        categories.forEach(f -> categoriesMap.put(f.getIdentifier(), Lists.newArrayList()));
         for(Map.Entry<Identifier, List<IRecipeDisplay>> entry : recipeCategoryListMap.entrySet()) {
             IRecipeCategory category = getCategory(entry.getKey());
             for(IRecipeDisplay recipeDisplay : entry.getValue())
@@ -75,10 +75,9 @@ public class RecipeHelper {
                     if (category.checkTags() ? ItemStack.areEqual(stack, outputStack) : ItemStack.areEqualIgnoreTags(stack, outputStack))
                         categoriesMap.get(recipeDisplay.getRecipeCategory()).add(recipeDisplay);
         }
-        categoriesMap.keySet().removeIf(f -> categoriesMap.get(f).isEmpty());
-        Map<IRecipeCategory, List<IRecipeDisplay>> recipeCategoryListMap = Maps.newHashMap();
+        Map<IRecipeCategory, List<IRecipeDisplay>> recipeCategoryListMap = Maps.newLinkedHashMap();
         categories.forEach(category -> {
-            if (categoriesMap.containsKey(category.getIdentifier()))
+            if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty())
                 recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()));
         });
         return recipeCategoryListMap;
@@ -94,7 +93,7 @@ public class RecipeHelper {
     
     public Map<IRecipeCategory, List<IRecipeDisplay>> getUsagesFor(ItemStack stack) {
         Map<Identifier, List<IRecipeDisplay>> categoriesMap = new HashMap<>();
-        categories.forEach(f -> categoriesMap.put(f.getIdentifier(), new LinkedList<>()));
+        categories.forEach(f -> categoriesMap.put(f.getIdentifier(), Lists.newArrayList()));
         for(Map.Entry<Identifier, List<IRecipeDisplay>> entry : recipeCategoryListMap.entrySet()) {
             IRecipeCategory category = getCategory(entry.getKey());
             for(IRecipeDisplay recipeDisplay : entry.getValue()) {
@@ -112,10 +111,9 @@ public class RecipeHelper {
                 }
             }
         }
-        categoriesMap.keySet().removeIf(f -> categoriesMap.get(f).isEmpty());
-        Map<IRecipeCategory, List<IRecipeDisplay>> recipeCategoryListMap = Maps.newHashMap();
+        Map<IRecipeCategory, List<IRecipeDisplay>> recipeCategoryListMap = Maps.newLinkedHashMap();
         categories.forEach(category -> {
-            if (categoriesMap.containsKey(category.getIdentifier()))
+            if (categoriesMap.containsKey(category.getIdentifier()) && !categoriesMap.get(category.getIdentifier()).isEmpty())
                 recipeCategoryListMap.put(category, categoriesMap.get(category.getIdentifier()));
         });
         return recipeCategoryListMap;

+ 20 - 20
src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java → src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java

@@ -7,9 +7,9 @@ import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.GuiHelper;
 import me.shedaniel.rei.gui.widget.*;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.ContainerGui;
-import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.GuiEventListener;
+import net.minecraft.client.gui.Screen;
 import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.client.util.Window;
@@ -22,7 +22,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 
-public class ContainerGuiOverlay extends Gui {
+public class ContainerScreenOverlay extends Screen {
     
     private static final List<QueuedTooltip> QUEUED_TOOLTIPS = Lists.newArrayList();
     public static String searchTerm = "";
@@ -77,7 +77,7 @@ public class ContainerGuiOverlay extends Gui {
         widgets.add(new ButtonWidget(10, 35, 40, 20, I18n.translate("text.rei.config")) {
             @Override
             public void onPressed(int button, double mouseX, double mouseY) {
-                ClientHelper.openConfigWindow(GuiHelper.getLastContainerGui());
+                ClientHelper.openConfigWindow(GuiHelper.getLastContainerScreen());
             }
         });
         this.widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") {
@@ -123,11 +123,11 @@ public class ContainerGuiOverlay extends Gui {
         int widthRemoved = RoughlyEnoughItemsCore.getConfigHelper().showCraftableOnlyButton() ? 22 : 0;
         if (RoughlyEnoughItemsCore.getConfigHelper().sideSearchField())
             return new Rectangle(rectangle.x + 2, window.getScaledHeight() - 22, rectangle.width - 6 - widthRemoved, 18);
-        if (MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) {
-            RecipeViewingWidget widget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui;
+        if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingWidgetScreen) {
+            RecipeViewingWidgetScreen widget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
             return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18);
         }
-        return new Rectangle(GuiHelper.getLastMixinContainerGui().getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinContainerGui().getContainerWidth() - widthRemoved, 18);
+        return new Rectangle(GuiHelper.getLastMixinContainerScreen().getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinContainerScreen().getContainerWidth() - widthRemoved, 18);
     }
     
     private Rectangle getCraftableToggleArea() {
@@ -161,7 +161,7 @@ public class ContainerGuiOverlay extends Gui {
         GuiLighting.disable();
         this.draw(mouseX, mouseY, partialTicks);
         GuiLighting.disable();
-        QUEUED_TOOLTIPS.stream().filter(queuedTooltip -> queuedTooltip != null).forEach(queuedTooltip -> MinecraftClient.getInstance().currentGui.drawTooltip(queuedTooltip.text, queuedTooltip.mouse.x, queuedTooltip.mouse.y));
+        QUEUED_TOOLTIPS.stream().filter(queuedTooltip -> queuedTooltip != null).forEach(queuedTooltip -> MinecraftClient.getInstance().currentScreen.drawTooltip(queuedTooltip.text, queuedTooltip.mouse.x, queuedTooltip.mouse.y));
         QUEUED_TOOLTIPS.clear();
         GuiLighting.disable();
     }
@@ -200,10 +200,10 @@ public class ContainerGuiOverlay extends Gui {
     }
     
     private Rectangle calculateBoundary() {
-        int startX = GuiHelper.getLastMixinContainerGui().getContainerLeft() + GuiHelper.getLastMixinContainerGui().getContainerWidth() + 10;
+        int startX = GuiHelper.getLastMixinContainerScreen().getContainerLeft() + GuiHelper.getLastMixinContainerScreen().getContainerWidth() + 10;
         int width = window.getScaledWidth() - startX;
-        if (MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) {
-            RecipeViewingWidget widget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui;
+        if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingWidgetScreen) {
+            RecipeViewingWidgetScreen widget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
             startX = widget.getBounds().x + widget.getBounds().width + 10;
             width = window.getScaledWidth() - startX;
         }
@@ -211,11 +211,11 @@ public class ContainerGuiOverlay extends Gui {
     }
     
     private int getLeft() {
-        if (MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) {
-            RecipeViewingWidget widget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui;
+        if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingWidgetScreen) {
+            RecipeViewingWidgetScreen widget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
             return widget.getBounds().x;
         }
-        return GuiHelper.getLastMixinContainerGui().getContainerLeft();
+        return GuiHelper.getLastMixinContainerScreen().getContainerLeft();
     }
     
     private int getTotalPage() {
@@ -251,17 +251,17 @@ public class ContainerGuiOverlay extends Gui {
                 itemStack = ((ItemSlotWidget) widget).getCurrentStack();
                 break;
             }
-        if (itemStack == null && MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) {
-            RecipeViewingWidget recipeViewingWidget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui;
+        if (itemStack == null && MinecraftClient.getInstance().currentScreen instanceof RecipeViewingWidgetScreen) {
+            RecipeViewingWidgetScreen recipeViewingWidget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
             for(GuiEventListener entry : recipeViewingWidget.getEntries())
-                if (entry instanceof ItemSlotWidget && ((ItemSlotWidget) entry).isHighlighted(point.x, point.y)) {
+                if (entry instanceof ItemSlotWidget && ((HighlightableWidget) entry).isHighlighted(point.x, point.y)) {
                     itemStack = ((ItemSlotWidget) entry).getCurrentStack();
                     break;
                 }
         }
-        if (itemStack == null && MinecraftClient.getInstance().currentGui instanceof ContainerGui)
-            if (GuiHelper.getLastMixinContainerGui().getHoveredSlot() != null)
-                itemStack = GuiHelper.getLastMixinContainerGui().getHoveredSlot().getStack();
+        if (itemStack == null && MinecraftClient.getInstance().currentScreen instanceof ContainerScreen)
+            if (GuiHelper.getLastMixinContainerScreen().getHoveredSlot() != null)
+                itemStack = GuiHelper.getLastMixinContainerScreen().getHoveredSlot().getStack();
         if (itemStack != null && !itemStack.isEmpty()) {
             if (ClientHelper.RECIPE.matchesKey(int_1, int_2))
                 return ClientHelper.executeRecipeKeyBind(this, itemStack);

+ 5 - 5
src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java

@@ -4,8 +4,8 @@ import com.google.common.collect.Lists;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.client.REIItemListOrdering;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.Gui;
 import net.minecraft.client.gui.GuiEventListener;
+import net.minecraft.client.gui.Screen;
 import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.client.util.Window;
@@ -14,12 +14,12 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
 
-public class ConfigWidget extends Gui {
+public class ConfigWidget extends Screen {
     
     private List<IWidget> widgets;
-    private Gui parent;
+    private Screen parent;
     
-    public ConfigWidget(Gui parent) {
+    public ConfigWidget(Screen parent) {
         this.parent = parent;
         this.widgets = Lists.newArrayList();
     }
@@ -27,7 +27,7 @@ public class ConfigWidget extends Gui {
     @Override
     public boolean keyPressed(int int_1, int int_2, int int_3) {
         if (int_1 == 256 && this.doesEscapeKeyClose()) {
-            MinecraftClient.getInstance().openGui(parent);
+            MinecraftClient.getInstance().openScreen(parent);
             return true;
         } else {
             return super.keyPressed(int_1, int_2, int_3);

+ 26 - 19
src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java → src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidgetScreen.java

@@ -11,9 +11,9 @@ import me.shedaniel.rei.client.GuiHelper;
 import me.shedaniel.rei.client.RecipeHelper;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.audio.PositionedSoundInstance;
-import net.minecraft.client.gui.ContainerGui;
-import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.GuiEventListener;
+import net.minecraft.client.gui.Screen;
 import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.util.Window;
 import net.minecraft.sound.SoundEvents;
@@ -24,8 +24,9 @@ import java.awt.*;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Supplier;
 
-public class RecipeViewingWidget extends Gui {
+public class RecipeViewingWidgetScreen extends Screen {
     
     public static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
     private static final Identifier CREATIVE_INVENTORY_TABS = new Identifier("textures/gui/container/creative_inventory/tabs.png");
@@ -42,7 +43,7 @@ public class RecipeViewingWidget extends Gui {
     private int page, categoryPages;
     private ButtonWidget recipeBack, recipeNext, categoryBack, categoryNext;
     
-    public RecipeViewingWidget(Window window, Map<IRecipeCategory, List<IRecipeDisplay>> categoriesMap) {
+    public RecipeViewingWidgetScreen(Window window, Map<IRecipeCategory, List<IRecipeDisplay>> categoriesMap) {
         this.categoryPages = 0;
         this.window = window;
         this.widgets = Lists.newArrayList();
@@ -57,10 +58,10 @@ public class RecipeViewingWidget extends Gui {
         this.tabs = new ArrayList<>();
     }
     
-    public static SpeedCraftFunctional getSpeedCraftFunctionalByCategory(ContainerGui containerGui, IRecipeCategory category) {
+    public static SpeedCraftFunctional getSpeedCraftFunctionalByCategory(ContainerScreen containerScreen, IRecipeCategory category) {
         for(SpeedCraftFunctional functional : RecipeHelper.getInstance().getSpeedCraftFunctional(category))
             for(Class aClass : functional.getFunctioningFor())
-                if (containerGui.getClass().isAssignableFrom(aClass))
+                if (containerScreen.getClass().isAssignableFrom(aClass))
                     return functional;
         return null;
     }
@@ -68,7 +69,7 @@ public class RecipeViewingWidget extends Gui {
     @Override
     public boolean keyPressed(int int_1, int int_2, int int_3) {
         if ((int_1 == 256 || this.client.options.keyInventory.matchesKey(int_1, int_2)) && this.doesEscapeKeyClose()) {
-            MinecraftClient.getInstance().openGui(GuiHelper.getLastContainerGui());
+            MinecraftClient.getInstance().openScreen(GuiHelper.getLastContainerScreen());
             return true;
         }
         for(GuiEventListener listener : listeners)
@@ -98,7 +99,7 @@ public class RecipeViewingWidget extends Gui {
                     currentCategoryIndex = categories.size() - 1;
                 selectedCategory = categories.get(currentCategoryIndex);
                 categoryPages = MathHelper.floor(currentCategoryIndex / 6d);
-                RecipeViewingWidget.this.onInitialized();
+                RecipeViewingWidgetScreen.this.onInitialized();
             }
         });
         widgets.add(categoryNext = new ButtonWidget((int) bounds.getX() + 159, (int) bounds.getY() + 5, 12, 12, ">") {
@@ -110,7 +111,7 @@ public class RecipeViewingWidget extends Gui {
                     currentCategoryIndex = 0;
                 selectedCategory = categories.get(currentCategoryIndex);
                 categoryPages = MathHelper.floor(currentCategoryIndex / 6d);
-                RecipeViewingWidget.this.onInitialized();
+                RecipeViewingWidgetScreen.this.onInitialized();
             }
         });
         categoryBack.enabled = categories.size() > 1;
@@ -122,7 +123,7 @@ public class RecipeViewingWidget extends Gui {
                 page--;
                 if (page < 0)
                     page = getTotalPages(selectedCategory) - 1;
-                RecipeViewingWidget.this.onInitialized();
+                RecipeViewingWidgetScreen.this.onInitialized();
             }
         });
         widgets.add(recipeNext = new ButtonWidget((int) bounds.getX() + 159, (int) bounds.getY() + 21, 12, 12, ">") {
@@ -131,7 +132,7 @@ public class RecipeViewingWidget extends Gui {
                 page++;
                 if (page >= getTotalPages(selectedCategory))
                     page = 0;
-                RecipeViewingWidget.this.onInitialized();
+                RecipeViewingWidgetScreen.this.onInitialized();
             }
         });
         recipeBack.enabled = categoriesMap.get(selectedCategory).size() > getRecipesPerPage();
@@ -164,7 +165,7 @@ public class RecipeViewingWidget extends Gui {
                                 return false;
                             selectedCategory = categories.get(getId() + categoryPages * 6);
                             page = 0;
-                            RecipeViewingWidget.this.onInitialized();
+                            RecipeViewingWidgetScreen.this.onInitialized();
                             return true;
                         }
                         return false;
@@ -174,17 +175,23 @@ public class RecipeViewingWidget extends Gui {
             }
         }
         SpeedCraftAreaSupplier supplier = RecipeHelper.getInstance().getSpeedCraftButtonArea(selectedCategory);
-        final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(GuiHelper.getLastContainerGui(), selectedCategory);
+        final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(GuiHelper.getLastContainerScreen(), selectedCategory);
         if (page * getRecipesPerPage() < categoriesMap.get(selectedCategory).size()) {
-            final IRecipeDisplay topDisplay = categoriesMap.get(selectedCategory).get(page * getRecipesPerPage());
-            widgets.addAll(selectedCategory.setupDisplay(topDisplay, new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 40, 150, selectedCategory.usesFullPage() ? 140 : 66)));
+            final Supplier<IRecipeDisplay> topDisplaySupplier = () -> {
+                return categoriesMap.get(selectedCategory).get(page * getRecipesPerPage());
+            };
+            final Rectangle topBounds = new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 40, 150, selectedCategory.usesFullPage() ? 140 : 66);
+            widgets.addAll(selectedCategory.setupDisplay(topDisplaySupplier, topBounds));
             if (supplier != null)
-                widgets.add(new SpeedCraftingButtonWidget(supplier.get(new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 40, 150, selectedCategory.usesFullPage() ? 140 : 66)), supplier.getButtonText(), functional, topDisplay));
+                widgets.add(new SpeedCraftingButtonWidget(supplier.get(topBounds), supplier.getButtonText(), functional, topDisplaySupplier));
             if (!selectedCategory.usesFullPage() && page * getRecipesPerPage() + 1 < categoriesMap.get(selectedCategory).size()) {
-                final IRecipeDisplay middleDisplay = categoriesMap.get(selectedCategory).get(page * getRecipesPerPage() + 1);
-                widgets.addAll(selectedCategory.setupDisplay(middleDisplay, new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 113, 150, 66)));
+                final Supplier<IRecipeDisplay> middleDisplaySupplier = () -> {
+                    return categoriesMap.get(selectedCategory).get(page * getRecipesPerPage() + 1);
+                };
+                final Rectangle middleBounds = new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 113, 150, 66);
+                widgets.addAll(selectedCategory.setupDisplay(middleDisplaySupplier, middleBounds));
                 if (supplier != null)
-                    widgets.add(new SpeedCraftingButtonWidget(supplier.get(new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 113, 150, 66)), supplier.getButtonText(), functional, middleDisplay));
+                    widgets.add(new SpeedCraftingButtonWidget(supplier.get(middleBounds), supplier.getButtonText(), functional, middleDisplaySupplier));
             }
         }
         

+ 7 - 8
src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java

@@ -11,29 +11,28 @@ import net.minecraft.item.ItemStack;
 
 import java.awt.*;
 import java.util.Arrays;
+import java.util.function.Supplier;
 
 public class SpeedCraftingButtonWidget extends ButtonWidget {
     
-    private final IRecipeDisplay display;
+    private final Supplier<IRecipeDisplay> displaySupplier;
     private final SpeedCraftFunctional functional;
     
-    public SpeedCraftingButtonWidget(Rectangle rectangle, String text, SpeedCraftFunctional functional, IRecipeDisplay display) {
+    public SpeedCraftingButtonWidget(Rectangle rectangle, String text, SpeedCraftFunctional functional, Supplier<IRecipeDisplay> displaySupplier) {
         super(rectangle, text);
-        this.display = display;
-        //RoughlyEnoughItemsCore.LOGGER.info("Registered %s.", ((ItemStack) this.display.getOutput().get(0)).getDisplayName().getFormattedText());
+        this.displaySupplier = displaySupplier;
         this.functional = functional;
     }
     
     @Override
     public void onPressed(int button, double mouseX, double mouseY) {
-        //RoughlyEnoughItemsCore.LOGGER.info("Crafting %s.", ((ItemStack) this.display.getOutput().get(0)).getDisplayName().getFormattedText());
-        MinecraftClient.getInstance().openGui(GuiHelper.getLastContainerGui());
-        functional.performAutoCraft(GuiHelper.getLastContainerGui(), display);
+        MinecraftClient.getInstance().openScreen(GuiHelper.getLastContainerScreen());
+        functional.performAutoCraft(GuiHelper.getLastContainerScreen(), displaySupplier.get());
     }
     
     @Override
     public void draw(int mouseX, int mouseY, float partialTicks) {
-        this.enabled = functional != null && functional.acceptRecipe(GuiHelper.getLastContainerGui(), display);
+        this.enabled = functional != null && functional.acceptRecipe(GuiHelper.getLastContainerScreen(), displaySupplier.get());
         super.draw(mouseX, mouseY, partialTicks);
         if (getBounds().contains(mouseX, mouseY))
             if (enabled)

+ 2 - 2
src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java

@@ -22,12 +22,12 @@ public class TabWidget extends Drawable implements HighlightableWidget {
     private boolean shown = false, selected = false;
     private ItemStack item;
     private int id;
-    private RecipeViewingWidget recipeViewingWidget;
+    private RecipeViewingWidgetScreen recipeViewingWidget;
     private String categoryName;
     private Rectangle bounds;
     private ItemRenderer itemRenderer;
     
-    public TabWidget(int id, RecipeViewingWidget recipeViewingWidget, Rectangle bounds) {
+    public TabWidget(int id, RecipeViewingWidgetScreen recipeViewingWidget, Rectangle bounds) {
         this.id = id;
         this.recipeViewingWidget = recipeViewingWidget;
         this.bounds = bounds;

+ 9 - 9
src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java

@@ -6,7 +6,7 @@ import net.minecraft.SharedConstants;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.font.FontRenderer;
 import net.minecraft.client.gui.Drawable;
-import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.Screen;
 import net.minecraft.client.render.BufferBuilder;
 import net.minecraft.client.render.Tessellator;
 import net.minecraft.client.render.VertexFormats;
@@ -158,7 +158,7 @@ public class TextFieldWidget extends Drawable implements IWidget {
     }
     
     private void method_16873(int int_1) {
-        if (Gui.isControlPressed()) {
+        if (Screen.isControlPressed()) {
             this.method_1877(int_1);
         } else {
             this.method_1878(int_1);
@@ -266,21 +266,21 @@ public class TextFieldWidget extends Drawable implements IWidget {
     
     public boolean keyPressed(int int_1, int int_2, int int_3) {
         if (this.isVisible() && this.isFocused()) {
-            this.field_17037 = Gui.isShiftPressed();
-            if (Gui.isSelectAllShortcutPressed(int_1)) {
+            this.field_17037 = Screen.isShiftPressed();
+            if (Screen.isSelectAllShortcutPressed(int_1)) {
                 this.method_1872();
                 this.method_1884(0);
                 return true;
-            } else if (Gui.isCopyShortcutPressed(int_1)) {
+            } else if (Screen.isCopyShortcutPressed(int_1)) {
                 MinecraftClient.getInstance().keyboard.setClipboard(this.getSelectedText());
                 return true;
-            } else if (Gui.isPasteShortcutPressed(int_1)) {
+            } else if (Screen.isPasteShortcutPressed(int_1)) {
                 if (this.editable) {
                     this.addText(MinecraftClient.getInstance().keyboard.getClipboard());
                 }
                 
                 return true;
-            } else if (Gui.isCutShortcutPressed(int_1)) {
+            } else if (Screen.isCutShortcutPressed(int_1)) {
                 MinecraftClient.getInstance().keyboard.setClipboard(this.getSelectedText());
                 if (this.editable) {
                     this.addText("");
@@ -309,7 +309,7 @@ public class TextFieldWidget extends Drawable implements IWidget {
                         
                         return true;
                     case 262:
-                        if (Gui.isControlPressed()) {
+                        if (Screen.isControlPressed()) {
                             this.method_1883(this.method_1853(1));
                         } else {
                             this.moveCursor(1);
@@ -317,7 +317,7 @@ public class TextFieldWidget extends Drawable implements IWidget {
                         
                         return true;
                     case 263:
-                        if (Gui.isControlPressed()) {
+                        if (Screen.isControlPressed()) {
                             this.method_1883(this.method_1853(-1));
                         } else {
                             this.moveCursor(-1);

+ 3 - 3
src/main/java/me/shedaniel/rei/listeners/IMixinContainerGui.java → src/main/java/me/shedaniel/rei/listeners/IMixinContainerScreen.java

@@ -1,10 +1,10 @@
 package me.shedaniel.rei.listeners;
 
-import me.shedaniel.rei.gui.ContainerGuiOverlay;
+import me.shedaniel.rei.gui.ContainerScreenOverlay;
 import net.minecraft.container.Slot;
 import net.minecraft.item.ItemStack;
 
-public interface IMixinContainerGui {
+public interface IMixinContainerScreen {
     
     public int getContainerLeft();
     
@@ -18,6 +18,6 @@ public interface IMixinContainerGui {
     
     public Slot getHoveredSlot();
     
-    public void setOverlay(ContainerGuiOverlay overlay);
+    public void setOverlay(ContainerScreenOverlay overlay);
     
 }

+ 14 - 14
src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java → src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java

@@ -2,14 +2,14 @@ package me.shedaniel.rei.mixin;
 
 import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.GuiHelper;
-import me.shedaniel.rei.gui.ContainerGuiOverlay;
-import me.shedaniel.rei.listeners.IMixinContainerGui;
+import me.shedaniel.rei.gui.ContainerScreenOverlay;
+import me.shedaniel.rei.listeners.IMixinContainerScreen;
 import me.shedaniel.rei.listeners.IMixinTabGetter;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.ContainerGui;
-import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.GuiEventListener;
-import net.minecraft.client.gui.ingame.CreativePlayerInventoryGui;
+import net.minecraft.client.gui.Screen;
+import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
 import net.minecraft.container.Slot;
 import net.minecraft.item.ItemGroup;
 import net.minecraft.item.ItemStack;
@@ -20,8 +20,8 @@ import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 
-@Mixin(ContainerGui.class)
-public class MixinContainerGui extends Gui implements IMixinContainerGui {
+@Mixin(ContainerScreen.class)
+public class MixinContainerScreen extends Screen implements IMixinContainerScreen {
     
     @Shadow
     protected int left;
@@ -57,22 +57,22 @@ public class MixinContainerGui extends Gui implements IMixinContainerGui {
     }
     
     @Override
-    public void setOverlay(ContainerGuiOverlay overlay) {
+    public void setOverlay(ContainerScreenOverlay overlay) {
         GuiHelper.setOverlay(overlay);
     }
     
     @Inject(method = "onInitialized()V", at = @At("RETURN"))
     protected void onInitialized(CallbackInfo info) {
-        GuiHelper.setLastContainerGui((ContainerGui) (Object) this);
-        GuiHelper.setLastMixinContainerGui((IMixinContainerGui) this);
-        GuiHelper.setOverlay(new ContainerGuiOverlay());
+        GuiHelper.setLastContainerScreen((ContainerScreen) (Object) this);
+        GuiHelper.setLastMixinContainerScreen((IMixinContainerScreen) this);
+        GuiHelper.setOverlay(new ContainerScreenOverlay());
         this.listeners.add(GuiHelper.getLastOverlay());
     }
     
     @Inject(method = "draw(IIF)V", at = @At("RETURN"))
     public void draw(int int_1, int int_2, float float_1, CallbackInfo info) {
-        if (MinecraftClient.getInstance().currentGui instanceof CreativePlayerInventoryGui) {
-            IMixinTabGetter tabGetter = (IMixinTabGetter) MinecraftClient.getInstance().currentGui;
+        if (MinecraftClient.getInstance().currentScreen instanceof CreativePlayerInventoryScreen) {
+            IMixinTabGetter tabGetter = (IMixinTabGetter) MinecraftClient.getInstance().currentScreen;
             if (tabGetter.getSelectedTab() != ItemGroup.INVENTORY.getId())
                 return;
         }
@@ -91,7 +91,7 @@ public class MixinContainerGui extends Gui implements IMixinContainerGui {
     
     @Override
     public boolean mouseScrolled(double double_1) {
-        ContainerGuiOverlay overlay = GuiHelper.getLastOverlay();
+        ContainerScreenOverlay overlay = GuiHelper.getLastOverlay();
         if (GuiHelper.isOverlayVisible() && overlay.getRectangle().contains(ClientHelper.getMouseLocation()))
             for(GuiEventListener entry : this.getEntries())
                 if (entry.mouseScrolled(double_1))

+ 5 - 5
src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableGui.java → src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableScreen.java

@@ -1,8 +1,8 @@
 package me.shedaniel.rei.mixin;
 
-import net.minecraft.client.gui.ContainerGui;
+import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.GuiEventListener;
-import net.minecraft.client.gui.container.CraftingTableGui;
+import net.minecraft.client.gui.container.CraftingTableScreen;
 import net.minecraft.client.gui.recipebook.RecipeBookGui;
 import net.minecraft.container.Container;
 import net.minecraft.entity.player.PlayerInventory;
@@ -14,14 +14,14 @@ import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 
-@Mixin(CraftingTableGui.class)
-public abstract class MixinCraftingTableGui extends ContainerGui {
+@Mixin(CraftingTableScreen.class)
+public abstract class MixinCraftingTableScreen extends ContainerScreen {
     
     @Shadow
     @Final
     private RecipeBookGui recipeBookGui;
     
-    public MixinCraftingTableGui(Container container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
+    public MixinCraftingTableScreen(Container container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
         super(container_1, playerInventory_1, textComponent_1);
     }
     

+ 5 - 5
src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryGui.java → src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java

@@ -1,8 +1,8 @@
 package me.shedaniel.rei.mixin;
 
 import me.shedaniel.rei.listeners.IMixinTabGetter;
-import net.minecraft.client.gui.ingame.AbstractPlayerInventoryGui;
-import net.minecraft.client.gui.ingame.CreativePlayerInventoryGui;
+import net.minecraft.client.gui.ingame.AbstractPlayerInventoryScreen;
+import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
 import net.minecraft.entity.player.PlayerInventory;
 import net.minecraft.item.ItemGroup;
 import net.minecraft.text.TextComponent;
@@ -12,15 +12,15 @@ import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 
-@Mixin(CreativePlayerInventoryGui.class)
-public abstract class MixinCreativePlayerInventoryGui extends AbstractPlayerInventoryGui<CreativePlayerInventoryGui.CreativeContainer> implements IMixinTabGetter {
+@Mixin(CreativePlayerInventoryScreen.class)
+public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerInventoryScreen<CreativePlayerInventoryScreen.CreativeContainer> implements IMixinTabGetter {
     
     @Shadow
     private static int selectedTab;
     @Shadow
     private boolean field_2888;
     
-    public MixinCreativePlayerInventoryGui(CreativePlayerInventoryGui.CreativeContainer container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
+    public MixinCreativePlayerInventoryScreen(CreativePlayerInventoryScreen.CreativeContainer container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
         super(container_1, playerInventory_1, textComponent_1);
     }
     

+ 5 - 5
src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryGui.java → src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryScreen.java

@@ -1,8 +1,8 @@
 package me.shedaniel.rei.mixin;
 
 import net.minecraft.client.gui.GuiEventListener;
-import net.minecraft.client.gui.ingame.AbstractPlayerInventoryGui;
-import net.minecraft.client.gui.ingame.PlayerInventoryGui;
+import net.minecraft.client.gui.ingame.AbstractPlayerInventoryScreen;
+import net.minecraft.client.gui.ingame.PlayerInventoryScreen;
 import net.minecraft.client.gui.ingame.RecipeBookProvider;
 import net.minecraft.client.gui.recipebook.RecipeBookGui;
 import net.minecraft.container.PlayerContainer;
@@ -15,14 +15,14 @@ import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 
-@Mixin(PlayerInventoryGui.class)
-public abstract class MixinPlayerInventoryGui extends AbstractPlayerInventoryGui<PlayerContainer> implements RecipeBookProvider {
+@Mixin(PlayerInventoryScreen.class)
+public abstract class MixinPlayerInventoryScreen extends AbstractPlayerInventoryScreen<PlayerContainer> implements RecipeBookProvider {
     
     @Shadow
     @Final
     private RecipeBookGui recipeBook;
     
-    public MixinPlayerInventoryGui(PlayerContainer container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
+    public MixinPlayerInventoryScreen(PlayerContainer container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
         super(container_1, playerInventory_1, textComponent_1);
     }
     

+ 3 - 1
src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java

@@ -17,6 +17,7 @@ import java.awt.*;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.Supplier;
 
 public class DefaultBlastingCategory implements IRecipeCategory<DefaultBlastingDisplay> {
     
@@ -38,7 +39,8 @@ public class DefaultBlastingCategory implements IRecipeCategory<DefaultBlastingD
     }
     
     @Override
-    public List<IWidget> setupDisplay(DefaultBlastingDisplay recipeDisplay, Rectangle bounds) {
+    public List<IWidget> setupDisplay(Supplier<DefaultBlastingDisplay> recipeDisplaySupplier, Rectangle bounds) {
+        final DefaultBlastingDisplay recipeDisplay = recipeDisplaySupplier.get();
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
         List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override

+ 3 - 1
src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java

@@ -18,6 +18,7 @@ import java.awt.*;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.Supplier;
 
 public class DefaultBrewingCategory implements IRecipeCategory<DefaultBrewingDisplay> {
     
@@ -39,7 +40,8 @@ public class DefaultBrewingCategory implements IRecipeCategory<DefaultBrewingDis
     }
     
     @Override
-    public List<IWidget> setupDisplay(DefaultBrewingDisplay recipeDisplay, Rectangle bounds) {
+    public List<IWidget> setupDisplay(Supplier<DefaultBrewingDisplay> recipeDisplaySupplier, Rectangle bounds) {
+        final DefaultBrewingDisplay recipeDisplay = recipeDisplaySupplier.get();
         Point startPoint = new Point((int) bounds.getCenterX() - 52, (int) bounds.getCenterY() - 29);
         List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override

+ 5 - 4
src/main/java/me/shedaniel/rei/plugin/DefaultCampfireCategory.java

@@ -17,6 +17,7 @@ import java.awt.*;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.Supplier;
 
 public class DefaultCampfireCategory implements IRecipeCategory<DefaultCampfireDisplay> {
     
@@ -38,7 +39,7 @@ public class DefaultCampfireCategory implements IRecipeCategory<DefaultCampfireD
     }
     
     @Override
-    public List<IWidget> setupDisplay(DefaultCampfireDisplay recipeDisplay, Rectangle bounds) {
+    public List<IWidget> setupDisplay(Supplier<DefaultCampfireDisplay> recipeDisplaySupplier, Rectangle bounds) {
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
         List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
@@ -52,13 +53,13 @@ public class DefaultCampfireCategory implements IRecipeCategory<DefaultCampfireD
                 drawTexturedRect(startPoint.x + 2, startPoint.y + 31 + (14 - height), 82, 77 + (14 - height), 14, height);
                 int width = MathHelper.ceil((System.currentTimeMillis() / 250 % 24d) / 1f);
                 drawTexturedRect(startPoint.x + 24, startPoint.y + 19, 82, 92, width, 17);
-                String text = I18n.translate("category.rei.campfire.time", MathHelper.floor(recipeDisplay.getCookTime() / 20d));
+                String text = I18n.translate("category.rei.campfire.time", MathHelper.floor(recipeDisplaySupplier.get().getCookTime() / 20d));
                 int length = MinecraftClient.getInstance().fontRenderer.getStringWidth(text);
                 MinecraftClient.getInstance().fontRenderer.draw(text, bounds.x + bounds.width - length - 5, startPoint.y + 54 - 8, -1);
             }
         }));
-        widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 11, recipeDisplay.getInput().get(0), true, true, true));
-        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplay.getOutput(), false, true, true));
+        widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 11, recipeDisplaySupplier.get().getInput().get(0), true, true, true));
+        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplaySupplier.get().getOutput(), false, true, true));
         return widgets;
     }
     

+ 6 - 5
src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java

@@ -17,6 +17,7 @@ import java.awt.*;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.Supplier;
 
 public class DefaultCraftingCategory implements IRecipeCategory<DefaultCraftingDisplay> {
     
@@ -38,7 +39,7 @@ public class DefaultCraftingCategory implements IRecipeCategory<DefaultCraftingD
     }
     
     @Override
-    public List<IWidget> setupDisplay(DefaultCraftingDisplay recipeDisplay, Rectangle bounds) {
+    public List<IWidget> setupDisplay(Supplier<DefaultCraftingDisplay> recipeDisplaySupplier, Rectangle bounds) {
         Point startPoint = new Point((int) bounds.getCenterX() - 58, (int) bounds.getCenterY() - 27);
         List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
@@ -50,20 +51,20 @@ public class DefaultCraftingCategory implements IRecipeCategory<DefaultCraftingD
                 drawTexturedRect(startPoint.x, startPoint.y, 0, 0, 116, 54);
             }
         }));
-        List<List<ItemStack>> input = recipeDisplay.getInput();
+        List<List<ItemStack>> input = recipeDisplaySupplier.get().getInput();
         List<ItemSlotWidget> slots = Lists.newArrayList();
         for(int y = 0; y < 3; y++)
             for(int x = 0; x < 3; x++)
                 slots.add(new ItemSlotWidget(startPoint.x + 1 + x * 18, startPoint.y + 1 + y * 18, Lists.newArrayList(), true, true, true));
         for(int i = 0; i < input.size(); i++) {
-            if (recipeDisplay instanceof DefaultShapedDisplay) {
+            if (recipeDisplaySupplier.get() instanceof DefaultShapedDisplay) {
                 if (!input.get(i).isEmpty())
-                    slots.get(getSlotWithSize(recipeDisplay, i)).setItemList(input.get(i));
+                    slots.get(getSlotWithSize(recipeDisplaySupplier.get(), i)).setItemList(input.get(i));
             } else if (!input.get(i).isEmpty())
                 slots.get(i).setItemList(input.get(i));
         }
         widgets.addAll(slots);
-        widgets.add(new ItemSlotWidget(startPoint.x + 95, startPoint.y + 19, recipeDisplay.getOutput(), false, true, true) {
+        widgets.add(new ItemSlotWidget(startPoint.x + 95, startPoint.y + 19, recipeDisplaySupplier.get().getOutput(), false, true, true) {
             @Override
             protected String getItemCountOverlay(ItemStack currentStack) {
                 if (currentStack.getAmount() == 1)

+ 39 - 40
src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java

@@ -4,15 +4,14 @@ import com.google.common.collect.Lists;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.IRecipePlugin;
 import me.shedaniel.rei.api.SpeedCraftFunctional;
-import me.shedaniel.rei.client.RecipeHelper;
 import me.shedaniel.rei.listeners.IMixinRecipeBookGui;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.Gui;
-import net.minecraft.client.gui.container.BlastFurnaceGui;
-import net.minecraft.client.gui.container.CraftingTableGui;
-import net.minecraft.client.gui.container.FurnaceGui;
-import net.minecraft.client.gui.container.SmokerGui;
-import net.minecraft.client.gui.ingame.PlayerInventoryGui;
+import net.minecraft.client.gui.Screen;
+import net.minecraft.client.gui.container.BlastFurnaceScreen;
+import net.minecraft.client.gui.container.CraftingTableScreen;
+import net.minecraft.client.gui.container.FurnaceScreen;
+import net.minecraft.client.gui.container.SmokerScreen;
+import net.minecraft.client.gui.ingame.PlayerInventoryScreen;
 import net.minecraft.recipe.Recipe;
 import net.minecraft.recipe.StonecuttingRecipe;
 import net.minecraft.recipe.cooking.BlastingRecipe;
@@ -80,87 +79,87 @@ public class DefaultPlugin implements IRecipePlugin {
         RoughlyEnoughItemsCore.getRecipeHelper().registerSpeedCraftFunctional(DefaultPlugin.CRAFTING, new SpeedCraftFunctional<DefaultCraftingDisplay>() {
             @Override
             public Class[] getFunctioningFor() {
-                return new Class[]{PlayerInventoryGui.class, CraftingTableGui.class};
+                return new Class[]{PlayerInventoryScreen.class, CraftingTableScreen.class};
             }
             
             @Override
-            public boolean performAutoCraft(Gui gui, DefaultCraftingDisplay recipe) {
-                if (gui.getClass().isAssignableFrom(CraftingTableGui.class))
-                    ((IMixinRecipeBookGui) (((CraftingTableGui) gui).getRecipeBookGui())).getGhostSlots().reset();
-                else if (gui.getClass().isAssignableFrom(PlayerInventoryGui.class))
-                    ((IMixinRecipeBookGui) (((PlayerInventoryGui) gui).getRecipeBookGui())).getGhostSlots().reset();
+            public boolean performAutoCraft(Screen screen, DefaultCraftingDisplay recipe) {
+                if (screen.getClass().isAssignableFrom(CraftingTableScreen.class))
+                    ((IMixinRecipeBookGui) (((CraftingTableScreen) screen).getRecipeBookGui())).getGhostSlots().reset();
+                else if (screen.getClass().isAssignableFrom(PlayerInventoryScreen.class))
+                    ((IMixinRecipeBookGui) (((PlayerInventoryScreen) screen).getRecipeBookGui())).getGhostSlots().reset();
                 else
                     return false;
-                MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
+                MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Screen.isShiftPressed());
                 return true;
             }
             
             @Override
-            public boolean acceptRecipe(Gui gui, DefaultCraftingDisplay recipe) {
-                return gui instanceof CraftingTableGui || (gui instanceof PlayerInventoryGui && recipe.getHeight() < 3 && recipe.getWidth() < 3);
+            public boolean acceptRecipe(Screen screen, DefaultCraftingDisplay recipe) {
+                return screen instanceof CraftingTableScreen || (screen instanceof PlayerInventoryScreen && recipe.getHeight() < 3 && recipe.getWidth() < 3);
             }
         });
         RoughlyEnoughItemsCore.getRecipeHelper().registerSpeedCraftFunctional(DefaultPlugin.SMELTING, new SpeedCraftFunctional<DefaultSmeltingDisplay>() {
             @Override
             public Class[] getFunctioningFor() {
-                return new Class[]{FurnaceGui.class};
+                return new Class[]{FurnaceScreen.class};
             }
             
             @Override
-            public boolean performAutoCraft(Gui gui, DefaultSmeltingDisplay recipe) {
-                if (gui instanceof FurnaceGui)
-                    ((IMixinRecipeBookGui) (((FurnaceGui) gui).getRecipeBookGui())).getGhostSlots().reset();
+            public boolean performAutoCraft(Screen screen, DefaultSmeltingDisplay recipe) {
+                if (screen instanceof FurnaceScreen)
+                    ((IMixinRecipeBookGui) (((FurnaceScreen) screen).getRecipeBookGui())).getGhostSlots().reset();
                 else
                     return false;
-                MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
+                MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Screen.isShiftPressed());
                 return true;
             }
             
             @Override
-            public boolean acceptRecipe(Gui gui, DefaultSmeltingDisplay recipe) {
-                return gui instanceof FurnaceGui;
+            public boolean acceptRecipe(Screen screen, DefaultSmeltingDisplay recipe) {
+                return screen instanceof FurnaceScreen;
             }
         });
         RoughlyEnoughItemsCore.getRecipeHelper().registerSpeedCraftFunctional(DefaultPlugin.SMOKING, new SpeedCraftFunctional<DefaultSmokingDisplay>() {
             @Override
             public Class[] getFunctioningFor() {
-                return new Class[]{SmokerGui.class};
+                return new Class[]{SmokerScreen.class};
             }
             
             @Override
-            public boolean performAutoCraft(Gui gui, DefaultSmokingDisplay recipe) {
-                if (gui instanceof SmokerGui)
-                    ((IMixinRecipeBookGui) (((SmokerGui) gui).getRecipeBookGui())).getGhostSlots().reset();
+            public boolean performAutoCraft(Screen screen, DefaultSmokingDisplay recipe) {
+                if (screen instanceof SmokerScreen)
+                    ((IMixinRecipeBookGui) (((SmokerScreen) screen).getRecipeBookGui())).getGhostSlots().reset();
                 else
                     return false;
-                MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
+                MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Screen.isShiftPressed());
                 return true;
             }
             
             @Override
-            public boolean acceptRecipe(Gui gui, DefaultSmokingDisplay recipe) {
-                return gui instanceof SmokerGui;
+            public boolean acceptRecipe(Screen screen, DefaultSmokingDisplay recipe) {
+                return screen instanceof SmokerScreen;
             }
         });
         RoughlyEnoughItemsCore.getRecipeHelper().registerSpeedCraftFunctional(DefaultPlugin.BLASTING, new SpeedCraftFunctional<DefaultBlastingDisplay>() {
             @Override
             public Class[] getFunctioningFor() {
-                return new Class[]{BlastFurnaceGui.class};
+                return new Class[]{BlastFurnaceScreen.class};
             }
             
             @Override
-            public boolean performAutoCraft(Gui gui, DefaultBlastingDisplay recipe) {
-                if (gui instanceof BlastFurnaceGui)
-                    ((IMixinRecipeBookGui) (((BlastFurnaceGui) gui).getRecipeBookGui())).getGhostSlots().reset();
-                else
-                    return false;
-                MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
-                return true;
+            public boolean acceptRecipe(Screen screen, DefaultBlastingDisplay recipe) {
+                return screen instanceof BlastFurnaceScreen;
             }
             
             @Override
-            public boolean acceptRecipe(Gui gui, DefaultBlastingDisplay recipe) {
-                return gui instanceof BlastFurnaceGui;
+            public boolean performAutoCraft(Screen screen, DefaultBlastingDisplay recipe) {
+                if (screen instanceof BlastFurnaceScreen)
+                    ((IMixinRecipeBookGui) (((BlastFurnaceScreen) screen).getRecipeBookGui())).getGhostSlots().reset();
+                else
+                    return false;
+                MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Screen.isShiftPressed());
+                return true;
             }
         });
     }

+ 5 - 4
src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java

@@ -17,6 +17,7 @@ import java.awt.*;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.Supplier;
 
 public class DefaultSmeltingCategory implements IRecipeCategory<DefaultSmeltingDisplay> {
     
@@ -38,7 +39,7 @@ public class DefaultSmeltingCategory implements IRecipeCategory<DefaultSmeltingD
     }
     
     @Override
-    public List<IWidget> setupDisplay(DefaultSmeltingDisplay recipeDisplay, Rectangle bounds) {
+    public List<IWidget> setupDisplay(Supplier<DefaultSmeltingDisplay> recipeDisplaySupplier, Rectangle bounds) {
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
         List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
@@ -54,15 +55,15 @@ public class DefaultSmeltingCategory implements IRecipeCategory<DefaultSmeltingD
                 drawTexturedRect(startPoint.x + 24, startPoint.y + 19, 82, 92, width, 17);
             }
         }));
-        List<List<ItemStack>> input = recipeDisplay.getInput();
+        List<List<ItemStack>> input = recipeDisplaySupplier.get().getInput();
         widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 1, input.get(0), true, true, true));
-        widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplay.getFuel(), true, true, true) {
+        widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplaySupplier.get().getFuel(), true, true, true) {
             @Override
             protected List<String> getExtraToolTips(ItemStack stack) {
                 return Arrays.asList(I18n.translate("category.rei.smelting.fuel"));
             }
         });
-        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplay.getOutput(), false, true, true));
+        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplaySupplier.get().getOutput(), false, true, true));
         return widgets;
     }
     

+ 5 - 4
src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java

@@ -17,6 +17,7 @@ import java.awt.*;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.Supplier;
 
 public class DefaultSmokingCategory implements IRecipeCategory<DefaultSmokingDisplay> {
     
@@ -38,7 +39,7 @@ public class DefaultSmokingCategory implements IRecipeCategory<DefaultSmokingDis
     }
     
     @Override
-    public List<IWidget> setupDisplay(DefaultSmokingDisplay recipeDisplay, Rectangle bounds) {
+    public List<IWidget> setupDisplay(Supplier<DefaultSmokingDisplay> recipeDisplaySupplier, Rectangle bounds) {
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
         List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
@@ -54,15 +55,15 @@ public class DefaultSmokingCategory implements IRecipeCategory<DefaultSmokingDis
                 drawTexturedRect(startPoint.x + 24, startPoint.y + 19, 82, 92, width, 17);
             }
         }));
-        List<List<ItemStack>> input = recipeDisplay.getInput();
+        List<List<ItemStack>> input = recipeDisplaySupplier.get().getInput();
         widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 1, input.get(0), true, true, true));
-        widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplay.getFuel(), true, true, true) {
+        widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplaySupplier.get().getFuel(), true, true, true) {
             @Override
             protected List<String> getExtraToolTips(ItemStack stack) {
                 return Arrays.asList(I18n.translate("category.rei.smelting.fuel"));
             }
         });
-        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplay.getOutput(), false, true, true));
+        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplaySupplier.get().getOutput(), false, true, true));
         return widgets;
     }
     

+ 4 - 3
src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingCategory.java

@@ -16,6 +16,7 @@ import java.awt.*;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.Supplier;
 
 public class DefaultStoneCuttingCategory implements IRecipeCategory<DefaultStoneCuttingDisplay> {
     
@@ -37,7 +38,7 @@ public class DefaultStoneCuttingCategory implements IRecipeCategory<DefaultStone
     }
     
     @Override
-    public List<IWidget> setupDisplay(DefaultStoneCuttingDisplay recipeDisplay, Rectangle bounds) {
+    public List<IWidget> setupDisplay(Supplier<DefaultStoneCuttingDisplay> recipeDisplaySupplier, Rectangle bounds) {
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 13);
         List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
@@ -49,8 +50,8 @@ public class DefaultStoneCuttingCategory implements IRecipeCategory<DefaultStone
                 drawTexturedRect(startPoint.x, startPoint.y, 0, 221, 82, 26);
             }
         }));
-        widgets.add(new ItemSlotWidget(startPoint.x + 4, startPoint.y + 5, recipeDisplay.getInput().get(0), true, true, true));
-        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 5, recipeDisplay.getOutput(), false, true, true));
+        widgets.add(new ItemSlotWidget(startPoint.x + 4, startPoint.y + 5, recipeDisplaySupplier.get().getInput().get(0), true, true, true));
+        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 5, recipeDisplaySupplier.get().getOutput(), false, true, true));
         return widgets;
     }
     

+ 4 - 4
src/main/resources/roughlyenoughitems.client.json

@@ -3,11 +3,11 @@
   "package": "me.shedaniel.rei.mixin",
   "compatibilityLevel": "JAVA_8",
   "mixins": [
-    "MixinContainerGui",
+    "MixinContainerScreen",
     "MixinClientPlayNetworkHandler",
-    "MixinPlayerInventoryGui",
-    "MixinCraftingTableGui",
-    "MixinCreativePlayerInventoryGui",
+    "MixinPlayerInventoryScreen",
+    "MixinCraftingTableScreen",
+    "MixinCreativePlayerInventoryScreen",
     "MixinBrewingRecipeRegistry",
     "MixinRecipeBookGui"
   ],