瀏覽代碼

Catch StackOverflow

Unknown 6 年之前
父節點
當前提交
f9ab5d6c3f

+ 1 - 1
gradle.properties

@@ -1,4 +1,4 @@
-modVersion=2.4.0.58
+modVersion=2.4.0.59
 minecraftVersion=19w09a
 yarnVersion=19w09a.4
 fabricVersion=0.2.3.108

+ 2 - 1
src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java

@@ -6,6 +6,7 @@ import me.shedaniel.rei.api.PluginDisabler;
 import me.shedaniel.rei.api.REIPlugin;
 import me.shedaniel.rei.api.RecipeHelper;
 import me.shedaniel.rei.client.*;
+import me.shedaniel.rei.gui.widget.ItemListOverlay;
 import me.shedaniel.rei.plugin.DefaultPlugin;
 import net.fabricmc.api.ClientModInitializer;
 import net.fabricmc.api.ModInitializer;
@@ -98,7 +99,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
             ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
             ItemStack stack = packetByteBuf.readItemStack();
             if (player.inventory.insertStack(stack.copy()))
-                player.addChatMessage(new StringTextComponent(I18n.translate("text.rei.cheat_items").replaceAll("\\{item_name}", stack.copy().getDisplayName().getFormattedText()).replaceAll("\\{item_count}", stack.copy().getAmount() + "").replaceAll("\\{player_name}", player.getEntityName())), false);
+                player.addChatMessage(new StringTextComponent(I18n.translate("text.rei.cheat_items").replaceAll("\\{item_name}", ItemListOverlay.tryGetItemStackName(stack.copy())).replaceAll("\\{item_count}", stack.copy().getAmount() + "").replaceAll("\\{player_name}", player.getEntityName())), false);
             else
                 player.addChatMessage(new TranslatableTextComponent("text.rei.failed_cheat_items"), false);
         });

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

@@ -77,7 +77,7 @@ public class ClientHelper implements ClientModInitializer {
     }
     
     public static void sendDeletePacket() {
-        if (GuiHelper.getLastContainerScreen() instanceof CreativePlayerInventoryScreen) {
+        if (ScreenHelper.getLastContainerScreen() instanceof CreativePlayerInventoryScreen) {
             MinecraftClient.getInstance().player.inventory.setCursorStack(ItemStack.EMPTY);
             return;
         }
@@ -107,14 +107,14 @@ public class ClientHelper implements ClientModInitializer {
         }
     }
     
-    public static boolean executeRecipeKeyBind(ContainerScreenOverlay overlay, ItemStack stack) {
+    public static boolean executeRecipeKeyBind(ItemStack stack) {
         Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getRecipesFor(stack);
         if (map.keySet().size() > 0)
             MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map));
         return map.keySet().size() > 0;
     }
     
-    public static boolean executeUsageKeyBind(ContainerScreenOverlay overlay, ItemStack stack) {
+    public static boolean executeUsageKeyBind(ItemStack stack) {
         Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getUsagesFor(stack);
         if (map.keySet().size() > 0)
             MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map));
@@ -135,7 +135,7 @@ public class ClientHelper implements ClientModInitializer {
         return inventoryStacks;
     }
     
-    public static boolean executeViewAllRecipesKeyBind(ContainerScreenOverlay lastOverlay) {
+    public static boolean executeViewAllRecipesKeyBind() {
         Map<RecipeCategory, List<RecipeDisplay>> map = RecipeHelper.getInstance().getAllRecipes();
         if (map.keySet().size() > 0)
             MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(MinecraftClient.getInstance().window, map));

+ 12 - 2
src/main/java/me/shedaniel/rei/client/GuiHelper.java → src/main/java/me/shedaniel/rei/client/ScreenHelper.java

@@ -5,6 +5,8 @@ import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.gui.ContainerScreenOverlay;
 import me.shedaniel.rei.gui.widget.TextFieldWidget;
 import me.shedaniel.rei.listeners.ContainerScreenHooks;
+import net.fabricmc.api.ClientModInitializer;
+import net.fabricmc.fabric.api.event.client.ClientTickCallback;
 import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.InputListener;
 import net.minecraft.client.gui.widget.ButtonWidget;
@@ -13,7 +15,7 @@ import net.minecraft.item.ItemStack;
 
 import java.util.List;
 
-public class GuiHelper {
+public class ScreenHelper implements ClientModInitializer {
     
     public static TextFieldWidget searchField;
     public static List<ItemStack> inventoryStacks = Lists.newArrayList();
@@ -56,11 +58,19 @@ public class GuiHelper {
     }
     
     public static void setLastContainerScreen(ContainerScreen lastContainerScreen) {
-        GuiHelper.lastContainerScreen = lastContainerScreen;
+        ScreenHelper.lastContainerScreen = lastContainerScreen;
     }
     
     public static ContainerScreenHooks getLastContainerScreenHooks() {
         return (ContainerScreenHooks) lastContainerScreen;
     }
     
+    @Override
+    public void onInitializeClient() {
+        ClientTickCallback.EVENT.register(client -> {
+            if (lastContainerScreen != client.currentScreen && client.currentScreen instanceof ContainerScreen)
+                lastContainerScreen = (ContainerScreen) client.currentScreen;
+        });
+    }
+    
 }

+ 32 - 32
src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java

@@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import me.shedaniel.rei.client.Weather;
 import me.shedaniel.rei.gui.credits.CreditsScreen;
 import me.shedaniel.rei.gui.widget.*;
@@ -80,7 +80,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
                     ClientHelper.setCheating(!ClientHelper.isCheating());
                     return;
                 }
-                ClientHelper.openConfigWindow(GuiHelper.getLastContainerScreen());
+                ClientHelper.openConfigWindow(ScreenHelper.getLastContainerScreen());
             }
             
             @Override
@@ -107,7 +107,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
             widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel ? window.getScaledWidth() - 50 : 10, window.getScaledHeight() - 30, 40, 20, I18n.translate("text.rei.credits")) {
                 @Override
                 public void onPressed(int button, double mouseX, double mouseY) {
-                    MinecraftClient.getInstance().openScreen(new CreditsScreen(GuiHelper.getLastContainerScreen()));
+                    MinecraftClient.getInstance().openScreen(new CreditsScreen(ScreenHelper.getLastContainerScreen()));
                 }
             });
         if (RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons) {
@@ -160,8 +160,8 @@ public class ContainerScreenOverlay extends ScreenComponent {
                 itemListOverlay.updateList(getItemListArea(), page, searchTerm);
             }
         });
-        if (GuiHelper.searchField == null)
-            GuiHelper.searchField = new TextFieldWidget(0, 0, 0, 0) {
+        if (ScreenHelper.searchField == null)
+            ScreenHelper.searchField = new TextFieldWidget(0, 0, 0, 0) {
                 @Override
                 public boolean mouseClicked(double double_1, double double_2, int int_1) {
                     if (isVisible() && getBounds().contains(double_1, double_2) && int_1 == 1) {
@@ -171,13 +171,13 @@ public class ContainerScreenOverlay extends ScreenComponent {
                     return super.mouseClicked(double_1, double_2, int_1);
                 }
             };
-        GuiHelper.searchField.setChangedListener(s -> {
+        ScreenHelper.searchField.setChangedListener(s -> {
             searchTerm = s;
             itemListOverlay.updateList(getItemListArea(), page, searchTerm);
         });
-        GuiHelper.searchField.getBounds().setBounds(getTextFieldArea());
-        this.widgets.add(GuiHelper.searchField);
-        GuiHelper.searchField.setText(searchTerm);
+        ScreenHelper.searchField.getBounds().setBounds(getTextFieldArea());
+        this.widgets.add(ScreenHelper.searchField);
+        ScreenHelper.searchField.setText(searchTerm);
         if (RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton)
             this.widgets.add(new CraftableToggleButtonWidget(getCraftableToggleArea()) {
                 @Override
@@ -263,7 +263,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
             RecipeViewingScreen widget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen;
             return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18);
         }
-        return new Rectangle(GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastContainerScreenHooks().rei_getContainerWidth() - widthRemoved, 18);
+        return new Rectangle(ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft(), window.getScaledHeight() - 22, ScreenHelper.getLastContainerScreenHooks().rei_getContainerWidth() - widthRemoved, 18);
     }
     
     private Rectangle getCraftableToggleArea() {
@@ -289,8 +289,8 @@ public class ContainerScreenOverlay extends ScreenComponent {
         List<ItemStack> currentStacks = ClientHelper.getInventoryItemsTypes();
         if (getLeft() != lastLeft)
             onInitialized();
-        else if (RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() && (!hasSameListContent(new LinkedList<>(GuiHelper.inventoryStacks), currentStacks) || (currentStacks.size() != GuiHelper.inventoryStacks.size()))) {
-            GuiHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes();
+        else if (RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() && (!hasSameListContent(new LinkedList<>(ScreenHelper.inventoryStacks), currentStacks) || (currentStacks.size() != ScreenHelper.inventoryStacks.size()))) {
+            ScreenHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes();
             itemListOverlay.updateList(getItemListArea(), page, searchTerm);
         }
         GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
@@ -306,15 +306,15 @@ public class ContainerScreenOverlay extends ScreenComponent {
     
     private boolean hasSameListContent(List<ItemStack> list1, List<ItemStack> list2) {
         Collections.sort(list1, (itemStack, t1) -> {
-            return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText());
+            return ItemListOverlay.tryGetItemStackName(itemStack).compareToIgnoreCase(ItemListOverlay.tryGetItemStackName(t1));
         });
         Collections.sort(list2, (itemStack, t1) -> {
-            return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText());
+            return ItemListOverlay.tryGetItemStackName(itemStack).compareToIgnoreCase(ItemListOverlay.tryGetItemStackName(t1));
         });
         String lastString = String.join("", list1.stream().map(itemStack -> {
-            return itemStack.getDisplayName().getFormattedText();
+            return ItemListOverlay.tryGetItemStackName(itemStack);
         }).collect(Collectors.toList())), currentString = String.join("", list2.stream().map(itemStack -> {
-            return itemStack.getDisplayName().getFormattedText();
+            return ItemListOverlay.tryGetItemStackName(itemStack);
         }).collect(Collectors.toList()));
         return lastString.equals(currentString);
     }
@@ -324,7 +324,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
     }
     
     public void draw(int int_1, int int_2, float float_1) {
-        if (!GuiHelper.isOverlayVisible())
+        if (!ScreenHelper.isOverlayVisible())
             return;
         buttonLeft.enabled = itemListOverlay.getWidgets().size() > 0;
         buttonRight.enabled = itemListOverlay.getWidgets().size() > 0;
@@ -337,7 +337,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
     
     private Rectangle calculateBoundary() {
         if (!RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel) {
-            int startX = GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft() + GuiHelper.getLastContainerScreenHooks().rei_getContainerWidth() + 10;
+            int startX = ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft() + ScreenHelper.getLastContainerScreenHooks().rei_getContainerWidth() + 10;
             int width = window.getScaledWidth() - startX;
             if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen) {
                 RecipeViewingScreen widget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen;
@@ -355,8 +355,8 @@ public class ContainerScreenOverlay extends ScreenComponent {
             return widget.getBounds().x;
         }
         if (MinecraftClient.getInstance().player.getRecipeBook().isGuiOpen())
-            return GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft() - 147 - 30;
-        return GuiHelper.getLastContainerScreenHooks().rei_getContainerLeft();
+            return ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft() - 147 - 30;
+        return ScreenHelper.getLastContainerScreenHooks().rei_getContainerLeft();
     }
     
     private int getTotalPage() {
@@ -365,7 +365,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
     
     @Override
     public boolean mouseScrolled(double amount) {
-        if (!GuiHelper.isOverlayVisible())
+        if (!ScreenHelper.isOverlayVisible())
             return false;
         if (rectangle.contains(ClientHelper.getMouseLocation())) {
             if (amount > 0 && buttonLeft.enabled)
@@ -388,10 +388,10 @@ public class ContainerScreenOverlay extends ScreenComponent {
             if (listener.keyPressed(int_1, int_2, int_3))
                 return true;
         if (ClientHelper.HIDE.matchesKey(int_1, int_2)) {
-            GuiHelper.toggleOverlayVisible();
+            ScreenHelper.toggleOverlayVisible();
             return true;
         }
-        if (!GuiHelper.isOverlayVisible())
+        if (!ScreenHelper.isOverlayVisible())
             return false;
         Point point = ClientHelper.getMouseLocation();
         ItemStack itemStack = null;
@@ -402,27 +402,27 @@ public class ContainerScreenOverlay extends ScreenComponent {
             }
         if (itemStack == null && MinecraftClient.getInstance().currentScreen instanceof RecipeViewingScreen) {
             RecipeViewingScreen recipeViewingWidget = (RecipeViewingScreen) MinecraftClient.getInstance().currentScreen;
-            for(InputListener listener : recipeViewingWidget.getInputListeners())
-                if (listener instanceof ItemSlotWidget && ((HighlightableWidget) listener).isHighlighted(point.x, point.y)) {
-                    itemStack = ((ItemSlotWidget) listener).getCurrentStack();
+            for(IWidget widget : recipeViewingWidget.getWidgets())
+                if (widget instanceof ItemSlotWidget && ((HighlightableWidget) widget).isHighlighted(point.x, point.y)) {
+                    itemStack = ((ItemSlotWidget) widget).getCurrentStack();
                     break;
                 }
         }
         if (itemStack == null && MinecraftClient.getInstance().currentScreen instanceof ContainerScreen)
-            if (GuiHelper.getLastContainerScreenHooks().rei_getHoveredSlot() != null)
-                itemStack = GuiHelper.getLastContainerScreenHooks().rei_getHoveredSlot().getStack();
+            if (ScreenHelper.getLastContainerScreenHooks().rei_getHoveredSlot() != null)
+                itemStack = ScreenHelper.getLastContainerScreenHooks().rei_getHoveredSlot().getStack();
         if (itemStack != null && !itemStack.isEmpty()) {
             if (ClientHelper.RECIPE.matchesKey(int_1, int_2))
-                return ClientHelper.executeRecipeKeyBind(this, itemStack);
+                return ClientHelper.executeRecipeKeyBind(itemStack);
             else if (ClientHelper.USAGE.matchesKey(int_1, int_2))
-                return ClientHelper.executeUsageKeyBind(this, itemStack);
+                return ClientHelper.executeUsageKeyBind(itemStack);
         }
         return false;
     }
     
     @Override
     public boolean charTyped(char char_1, int int_1) {
-        if (!GuiHelper.isOverlayVisible())
+        if (!ScreenHelper.isOverlayVisible())
             return false;
         for(InputListener listener : getInputListeners())
             if (listener.charTyped(char_1, int_1))
@@ -437,7 +437,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
     
     @Override
     public boolean mouseClicked(double double_1, double double_2, int int_1) {
-        if (!GuiHelper.isOverlayVisible())
+        if (!ScreenHelper.isOverlayVisible())
             return false;
         return super.mouseClicked(double_1, double_2, int_1);
     }

+ 18 - 14
src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java

@@ -5,7 +5,7 @@ import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.*;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import me.shedaniel.rei.gui.widget.*;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.audio.PositionedSoundInstance;
@@ -79,8 +79,8 @@ public class RecipeViewingScreen extends Screen {
             return true;
         }
         if ((int_1 == 256 || this.client.options.keyInventory.matchesKey(int_1, int_2)) && this.doesEscapeKeyClose()) {
-            MinecraftClient.getInstance().openScreen(GuiHelper.getLastContainerScreen());
-            GuiHelper.getLastOverlay().onInitialized();
+            MinecraftClient.getInstance().openScreen(ScreenHelper.getLastContainerScreen());
+            ScreenHelper.getLastOverlay().onInitialized();
             return true;
         }
         if (choosePageActivated) {
@@ -103,7 +103,7 @@ public class RecipeViewingScreen extends Screen {
     public void onInitialized() {
         super.onInitialized();
         this.tabs.clear();
-        this.widgets.clear();
+        this.widgets = Lists.newLinkedList();
         this.largestWidth = window.getScaledWidth() - 100;
         this.largestHeight = window.getScaledHeight() - 40;
         this.guiWidth = MathHelper.clamp(getCurrentDisplayed().stream().map(display -> selectedCategory.getDisplayWidth(display)).max(Integer::compareTo).orElse(150) + 30, 0, largestWidth);
@@ -120,6 +120,7 @@ public class RecipeViewingScreen extends Screen {
                     currentCategoryIndex = categories.size() - 1;
                 selectedCategory = categories.get(currentCategoryIndex);
                 categoryPages = MathHelper.floor(currentCategoryIndex / 6d);
+                page = 0;
                 RecipeViewingScreen.this.onInitialized();
             }
         });
@@ -132,6 +133,7 @@ public class RecipeViewingScreen extends Screen {
                     currentCategoryIndex = 0;
                 selectedCategory = categories.get(currentCategoryIndex);
                 categoryPages = MathHelper.floor(currentCategoryIndex / 6d);
+                page = 0;
                 RecipeViewingScreen.this.onInitialized();
             }
         });
@@ -165,13 +167,13 @@ public class RecipeViewingScreen extends Screen {
                 this.text = selectedCategory.getCategoryName();
                 super.draw(mouseX, mouseY, partialTicks);
                 if (isHighlighted(mouseX, mouseY))
-                    GuiHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.view_all_categories").split("\n")));
+                    ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.view_all_categories").split("\n")));
             }
             
             @Override
             public void onLabelClicked() {
                 MinecraftClient.getInstance().getSoundLoader().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
-                ClientHelper.executeViewAllRecipesKeyBind(GuiHelper.getLastOverlay());
+                ClientHelper.executeViewAllRecipesKeyBind();
             }
         });
         widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 23, "") {
@@ -180,7 +182,7 @@ public class RecipeViewingScreen extends Screen {
                 this.text = String.format("%d/%d", page + 1, getTotalPages(selectedCategory));
                 super.draw(mouseX, mouseY, partialTicks);
                 if (isHighlighted(mouseX, mouseY))
-                    GuiHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.choose_page").split("\n")));
+                    ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.choose_page").split("\n")));
             }
             
             @Override
@@ -213,14 +215,12 @@ public class RecipeViewingScreen extends Screen {
             }
         }
         Optional<ButtonAreaSupplier> supplier = RecipeHelper.getInstance().getSpeedCraftButtonArea(selectedCategory);
-        final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(GuiHelper.getLastContainerScreen(), selectedCategory);
+        final SpeedCraftFunctional functional = getSpeedCraftFunctionalByCategory(ScreenHelper.getLastContainerScreen(), selectedCategory);
         int recipeHeight = selectedCategory.getDisplayHeight();
         List<RecipeDisplay> currentDisplayed = getCurrentDisplayed();
         for(int i = 0; i < currentDisplayed.size(); i++) {
             int finalI = i;
-            final Supplier<RecipeDisplay> displaySupplier = () -> {
-                return currentDisplayed.get(finalI);
-            };
+            final Supplier<RecipeDisplay> displaySupplier = () -> currentDisplayed.get(finalI);
             int displayWidth = selectedCategory.getDisplayWidth(displaySupplier.get());
             final Rectangle displayBounds = new Rectangle((int) getBounds().getCenterX() - displayWidth / 2, getBounds().y + 40 + recipeHeight * i + 7 * i, displayWidth, recipeHeight);
             widgets.addAll(selectedCategory.setupDisplay(displaySupplier, displayBounds));
@@ -232,12 +232,16 @@ public class RecipeViewingScreen extends Screen {
         else
             recipeChoosePageWidget = null;
         
-        GuiHelper.getLastOverlay().onInitialized();
+        ScreenHelper.getLastOverlay().onInitialized();
         listeners.addAll(tabs);
-        listeners.add(GuiHelper.getLastOverlay());
+        listeners.add(ScreenHelper.getLastOverlay());
         listeners.addAll(widgets);
     }
     
+    public List<IWidget> getWidgets() {
+        return widgets;
+    }
+    
     public List<RecipeDisplay> getCurrentDisplayed() {
         List<RecipeDisplay> list = Lists.newArrayList();
         int recipesPerPage = getRecipesPerPage();
@@ -293,7 +297,7 @@ public class RecipeViewingScreen extends Screen {
         GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
         GuiLighting.disable();
         tabs.stream().filter(TabWidget::isSelected).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, delta));
-        GuiHelper.getLastOverlay().drawOverlay(mouseX, mouseY, delta);
+        ScreenHelper.getLastOverlay().drawOverlay(mouseX, mouseY, delta);
         if (choosePageActivated) {
             zOffset = 500.0f;
             this.drawGradientRect(0, 0, this.screenWidth, this.screenHeight, -1072689136, -804253680);

+ 3 - 3
src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java

@@ -3,7 +3,7 @@ package me.shedaniel.rei.gui.config;
 import com.google.common.collect.Lists;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import me.shedaniel.rei.client.ItemListOrdering;
 import me.shedaniel.rei.gui.widget.QueuedTooltip;
 import me.shedaniel.rei.gui.widget.TextFieldWidget;
@@ -35,7 +35,7 @@ public class ConfigScreen extends Screen {
     public boolean keyPressed(int int_1, int int_2, int int_3) {
         if (int_1 == 256 && this.doesEscapeKeyClose()) {
             MinecraftClient.getInstance().openScreen(parent);
-            GuiHelper.getLastOverlay().onInitialized();
+            ScreenHelper.getLastOverlay().onInitialized();
             return true;
         } else {
             return super.keyPressed(int_1, int_2, int_3);
@@ -340,7 +340,7 @@ public class ConfigScreen extends Screen {
                     e.printStackTrace();
                 }
                 ConfigScreen.this.client.openScreen(parent);
-                GuiHelper.getLastOverlay().onInitialized();
+                ScreenHelper.getLastOverlay().onInitialized();
             }
         });
         super.onInitialized();

+ 3 - 3
src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java

@@ -1,6 +1,6 @@
 package me.shedaniel.rei.gui.credits;
 
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.InputListener;
 import net.minecraft.client.gui.Screen;
@@ -21,7 +21,7 @@ public class CreditsScreen extends Screen {
     public boolean keyPressed(int int_1, int int_2, int int_3) {
         if (int_1 == 256 && this.doesEscapeKeyClose()) {
             this.client.openScreen(parent);
-            GuiHelper.getLastOverlay().onInitialized();
+            ScreenHelper.getLastOverlay().onInitialized();
             return true;
         }
         return super.keyPressed(int_1, int_2, int_3);
@@ -38,7 +38,7 @@ public class CreditsScreen extends Screen {
             @Override
             public void onPressed(double double_1, double double_2) {
                 CreditsScreen.this.client.openScreen(parent);
-                GuiHelper.getLastOverlay().onInitialized();
+                ScreenHelper.getLastOverlay().onInitialized();
             }
         });
     }

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

@@ -3,7 +3,7 @@ package me.shedaniel.rei.gui.widget;
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import net.minecraft.block.Blocks;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.render.GuiLighting;
@@ -48,7 +48,7 @@ public abstract class CraftableToggleButtonWidget extends ButtonWidget {
     }
     
     private void drawTooltip() {
-        GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate(RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() ? "text.rei.showing_craftable" : "text.rei.showing_all"))));
+        ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate(RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() ? "text.rei.showing_craftable" : "text.rei.showing_all"))));
     }
     
 }

+ 38 - 8
src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java

@@ -4,16 +4,18 @@ import com.google.common.collect.Lists;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.RecipeHelper;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
 import me.shedaniel.rei.client.ItemListOrdering;
+import me.shedaniel.rei.client.ScreenHelper;
 import me.shedaniel.rei.client.SearchArgument;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.network.ClientPlayerEntity;
 import net.minecraft.client.resource.language.I18n;
+import net.minecraft.item.Item;
 import net.minecraft.item.ItemGroup;
 import net.minecraft.item.ItemStack;
 import net.minecraft.util.math.MathHelper;
+import net.minecraft.util.registry.Registry;
 import org.apache.commons.lang3.StringUtils;
 
 import java.awt.*;
@@ -24,6 +26,7 @@ import java.util.stream.Stream;
 
 public class ItemListOverlay extends DrawableHelper implements IWidget {
     
+    private static List<Item> searchBlacklisted = Lists.newArrayList();
     private List<IWidget> widgets;
     private int width, height, page;
     private Rectangle rectangle, listArea;
@@ -36,6 +39,33 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
         this.page = page;
     }
     
+    public static List<String> tryGetItemStackToolTip(ItemStack itemStack) {
+        if (!searchBlacklisted.contains(itemStack.getItem()))
+            try {
+                return MinecraftClient.getInstance().currentScreen.getStackTooltip(itemStack);
+            } catch (Throwable e) {
+                e.printStackTrace();
+                searchBlacklisted.add(itemStack.getItem());
+            }
+        return Collections.singletonList(tryGetItemStackName(itemStack));
+    }
+    
+    public static String tryGetItemStackName(ItemStack stack) {
+        if (!searchBlacklisted.contains(stack.getItem()))
+            try {
+                return stack.getDisplayName().getFormattedText();
+            } catch (Throwable e) {
+                e.printStackTrace();
+                searchBlacklisted.add(stack.getItem());
+            }
+        try {
+            return I18n.translate("item." + Registry.ITEM.getId(stack.getItem()).toString().replace(":", "."));
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+        return "ERROR";
+    }
+    
     public int getTotalSlotsPerPage() {
         return width * height;
     }
@@ -45,7 +75,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
         widgets.forEach(widget -> widget.draw(int_1, int_2, float_1));
         ClientPlayerEntity player = MinecraftClient.getInstance().player;
         if (rectangle.contains(ClientHelper.getMouseLocation()) && ClientHelper.isCheating() && !player.inventory.getCursorStack().isEmpty() && MinecraftClient.getInstance().isInSingleplayer())
-            GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.rei.delete_items"))));
+            ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.rei.delete_items"))));
     }
     
     public List<IWidget> getWidgets() {
@@ -55,7 +85,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
     public void updateList(Rectangle bounds, int page, String searchTerm) {
         this.rectangle = bounds;
         this.widgets = Lists.newLinkedList();
-        currentDisplayed = processSearchTerm(searchTerm, RoughlyEnoughItemsCore.getItemRegisterer().getItemList(), GuiHelper.inventoryStacks);
+        currentDisplayed = processSearchTerm(searchTerm, RoughlyEnoughItemsCore.getItemRegisterer().getItemList(), ScreenHelper.inventoryStacks);
         this.page = page;
         calculateListSize(rectangle);
         double startX = rectangle.getCenterX() - width * 9;
@@ -83,9 +113,9 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
                                 return ClientHelper.tryCheatingStack(cheatedStack);
                             }
                         } else if (button == 0)
-                            return ClientHelper.executeRecipeKeyBind(GuiHelper.getLastOverlay(), getCurrentStack().copy());
+                            return ClientHelper.executeRecipeKeyBind(getCurrentStack().copy());
                         else if (button == 1)
-                            return ClientHelper.executeUsageKeyBind(GuiHelper.getLastOverlay(), getCurrentStack().copy());
+                            return ClientHelper.executeUsageKeyBind(getCurrentStack().copy());
                     }
                     return false;
                 }
@@ -107,7 +137,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
         if (ordering != ItemListOrdering.registry)
             Collections.sort(os, (itemStack, t1) -> {
                 if (ordering.equals(ItemListOrdering.name))
-                    return itemStack.getDisplayName().getFormattedText().compareToIgnoreCase(t1.getDisplayName().getFormattedText());
+                    return tryGetItemStackName(itemStack).compareToIgnoreCase(tryGetItemStackName(t1));
                 if (ordering.equals(ItemListOrdering.item_groups))
                     return itemGroups.indexOf(itemStack.getItem().getItemGroup()) - itemGroups.indexOf(t1.getItem().getItemGroup());
                 return 0;
@@ -154,9 +184,9 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
     
     private boolean filterItem(ItemStack itemStack, List<SearchArgument> arguments) {
         String mod = ClientHelper.getModFromItemStack(itemStack);
-        List<String> toolTipsList = MinecraftClient.getInstance().currentScreen.getStackTooltip(itemStack);
+        List<String> toolTipsList = tryGetItemStackToolTip(itemStack);
         String toolTipsMixed = toolTipsList.stream().skip(1).collect(Collectors.joining()).toLowerCase();
-        String allMixed = Stream.of(itemStack.getDisplayName().getFormattedText(), toolTipsMixed).collect(Collectors.joining()).toLowerCase();
+        String allMixed = Stream.of(tryGetItemStackName(itemStack), toolTipsMixed).collect(Collectors.joining()).toLowerCase();
         for(SearchArgument searchArgument : arguments.stream().filter(searchArgument -> !searchArgument.isInclude()).collect(Collectors.toList())) {
             if (searchArgument.getArgumentType().equals(SearchArgument.ArgumentType.MOD))
                 if (mod.toLowerCase().contains(searchArgument.getText().toLowerCase()))

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

@@ -3,7 +3,7 @@ package me.shedaniel.rei.gui.widget;
 import com.google.common.collect.Lists;
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.render.GuiLighting;
@@ -18,7 +18,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.stream.Collectors;
 
 public class ItemSlotWidget extends DrawableHelper implements HighlightableWidget {
     
@@ -89,20 +88,17 @@ public class ItemSlotWidget extends DrawableHelper implements HighlightableWidge
     
     protected void drawToolTip(ItemStack itemStack) {
         List<String> toolTip = getTooltip(itemStack);
-        GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), toolTip));
+        ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), toolTip));
     }
     
     protected List<String> getTooltip(ItemStack itemStack) {
         final String modString = "§9§o" + ClientHelper.getModFromItemStack(itemStack);
         MinecraftClient mc = MinecraftClient.getInstance();
-        List<String> toolTip = Lists.newArrayList();
-        try {
-            toolTip = MinecraftClient.getInstance().currentScreen.getStackTooltip(itemStack).stream().filter(s -> !s.equals(modString)).collect(Collectors.toList());
-        } catch (Exception e) {
-            e.printStackTrace();
-            toolTip.add(itemStack.getDisplayName().getFormattedText());
-        }
+        List<String> toolTip = Lists.newArrayList(ItemListOverlay.tryGetItemStackToolTip(itemStack));
         toolTip.addAll(getExtraToolTips(itemStack));
+        for(String s : Lists.newArrayList(toolTip))
+            if (s.equalsIgnoreCase(modString))
+                toolTip.remove(s);
         toolTip.add(modString);
         return toolTip;
     }
@@ -135,10 +131,11 @@ public class ItemSlotWidget extends DrawableHelper implements HighlightableWidge
         if (!clickToMoreRecipes)
             return false;
         if (getBounds().contains(mouseX, mouseY)) {
+            System.out.println(ItemListOverlay.tryGetItemStackName(getCurrentStack()));
             if (button == 0)
-                return ClientHelper.executeRecipeKeyBind(GuiHelper.getLastOverlay(), getCurrentStack().copy());
+                return ClientHelper.executeRecipeKeyBind(getCurrentStack().copy());
             else if (button == 1)
-                return ClientHelper.executeUsageKeyBind(GuiHelper.getLastOverlay(), getCurrentStack().copy());
+                return ClientHelper.executeUsageKeyBind(getCurrentStack().copy());
         }
         return false;
     }

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

@@ -3,7 +3,7 @@ package me.shedaniel.rei.gui.widget;
 import me.shedaniel.rei.api.RecipeDisplay;
 import me.shedaniel.rei.api.SpeedCraftFunctional;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.resource.language.I18n;
 
@@ -24,20 +24,20 @@ public class SpeedCraftingButtonWidget extends ButtonWidget {
     
     @Override
     public void onPressed(int button, double mouseX, double mouseY) {
-        MinecraftClient.getInstance().openScreen(GuiHelper.getLastContainerScreen());
-        GuiHelper.getLastOverlay().onInitialized();
-        functional.performAutoCraft(GuiHelper.getLastContainerScreen(), displaySupplier.get());
+        MinecraftClient.getInstance().openScreen(ScreenHelper.getLastContainerScreen());
+        ScreenHelper.getLastOverlay().onInitialized();
+        functional.performAutoCraft(ScreenHelper.getLastContainerScreen(), displaySupplier.get());
     }
     
     @Override
     public void draw(int mouseX, int mouseY, float partialTicks) {
-        this.enabled = functional != null && functional.acceptRecipe(GuiHelper.getLastContainerScreen(), displaySupplier.get());
+        this.enabled = functional != null && functional.acceptRecipe(ScreenHelper.getLastContainerScreen(), displaySupplier.get());
         super.draw(mouseX, mouseY, partialTicks);
         if (getBounds().contains(mouseX, mouseY))
             if (enabled)
-                GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.speed_craft.move_items"))));
+                ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.speed_craft.move_items"))));
             else
-                GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.speed_craft.failed_move_items"))));
+                ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.speed_craft.failed_move_items"))));
     }
     
 }

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

@@ -3,7 +3,7 @@ package me.shedaniel.rei.gui.widget;
 import com.google.common.collect.Lists;
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import me.shedaniel.rei.gui.RecipeViewingScreen;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
@@ -91,7 +91,7 @@ public class TabWidget extends DrawableHelper implements HighlightableWidget {
     }
     
     private void drawTooltip() {
-        GuiHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(categoryName)));
+        ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(categoryName)));
     }
     
     @Override

+ 7 - 9
src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java

@@ -1,16 +1,14 @@
 package me.shedaniel.rei.mixin;
 
-import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.TabGetter;
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import me.shedaniel.rei.gui.ContainerScreenOverlay;
 import me.shedaniel.rei.listeners.ContainerScreenHooks;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.Screen;
 import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
-import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.container.Slot;
 import net.minecraft.item.ItemGroup;
 import org.spongepowered.asm.mixin.Mixin;
@@ -61,8 +59,8 @@ public class MixinContainerScreen extends Screen implements ContainerScreenHooks
             if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
                 return;
         }
-        GuiHelper.setLastContainerScreen((ContainerScreen) (Object) this);
-        this.listeners.add(GuiHelper.getLastOverlay(true));
+        ScreenHelper.setLastContainerScreen((ContainerScreen) (Object) this);
+        this.listeners.add(ScreenHelper.getLastOverlay(true));
     }
     
     @Inject(method = "draw(IIF)V", at = @At("RETURN"))
@@ -72,7 +70,7 @@ public class MixinContainerScreen extends Screen implements ContainerScreenHooks
             if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
                 return;
         }
-        GuiHelper.getLastOverlay().drawOverlay(int_1, int_2, float_1);
+        ScreenHelper.getLastOverlay().drawOverlay(int_1, int_2, float_1);
     }
     
     @Override
@@ -87,8 +85,8 @@ public class MixinContainerScreen extends Screen implements ContainerScreenHooks
             if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
                 return super.mouseScrolled(double_1);
         }
-        ContainerScreenOverlay overlay = GuiHelper.getLastOverlay();
-        if (GuiHelper.isOverlayVisible() && overlay.getRectangle().contains(ClientHelper.getMouseLocation()))
+        ContainerScreenOverlay overlay = ScreenHelper.getLastOverlay();
+        if (ScreenHelper.isOverlayVisible() && overlay.getRectangle().contains(ClientHelper.getMouseLocation()))
             if (overlay.mouseScrolled(double_1))
                 return true;
         return super.mouseScrolled(double_1);
@@ -101,7 +99,7 @@ public class MixinContainerScreen extends Screen implements ContainerScreenHooks
             if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
                 return;
         }
-        if (GuiHelper.getLastOverlay().keyPressed(int_1, int_2, int_3)) {
+        if (ScreenHelper.getLastOverlay().keyPressed(int_1, int_2, int_3)) {
             ci.setReturnValue(true);
             ci.cancel();
         }

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

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.mixin;
 
 import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.ScreenHelper;
 import net.minecraft.client.gui.ingame.AbstractPlayerInventoryScreen;
 import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
 import net.minecraft.entity.player.PlayerInventory;
@@ -31,7 +31,7 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI
     @Inject(method = "mouseScrolled", at = @At("HEAD"), cancellable = true)
     public void mouseScrolled(double amount, CallbackInfoReturnable<Boolean> ci) {
         if (!doRenderScrollBar() && selectedTab == ItemGroup.INVENTORY.getIndex())
-            if (GuiHelper.isOverlayVisible() && GuiHelper.getLastOverlay().getRectangle().contains(ClientHelper.getMouseLocation()) && GuiHelper.getLastOverlay().mouseScrolled(amount)) {
+            if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().getRectangle().contains(ClientHelper.getMouseLocation()) && ScreenHelper.getLastOverlay().mouseScrolled(amount)) {
                 ci.setReturnValue(true);
                 ci.cancel();
             }
@@ -40,7 +40,7 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI
     @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true)
     public void keyPressed(int int_1, int int_2, int int_3, CallbackInfoReturnable<Boolean> ci) {
         if (selectedTab == ItemGroup.INVENTORY.getIndex())
-            if (GuiHelper.getLastOverlay().keyPressed(int_1, int_2, int_3)) {
+            if (ScreenHelper.getLastOverlay().keyPressed(int_1, int_2, int_3)) {
                 ci.setReturnValue(true);
                 ci.cancel();
             }
@@ -49,7 +49,7 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI
     @Inject(method = "charTyped", at = @At("HEAD"), cancellable = true)
     public void charTyped(char char_1, int int_1, CallbackInfoReturnable<Boolean> ci) {
         if (!this.field_2888 && selectedTab == ItemGroup.INVENTORY.getIndex())
-            if (GuiHelper.isOverlayVisible() && GuiHelper.getLastOverlay().charTyped(char_1, int_1)) {
+            if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().charTyped(char_1, int_1)) {
                 ci.setReturnValue(true);
                 ci.cancel();
             }
@@ -58,7 +58,7 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI
     @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
     public void mouseClicked(double i, double j, int k, CallbackInfoReturnable<Boolean> ci) {
         if (selectedTab == ItemGroup.INVENTORY.getIndex())
-            if (GuiHelper.isOverlayVisible() && GuiHelper.getLastOverlay().mouseClicked(i, j, k)) {
+            if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().mouseClicked(i, j, k)) {
                 ci.setReturnValue(true);
                 ci.cancel();
             }

+ 2 - 1
src/main/resources/fabric.mod.json

@@ -9,7 +9,8 @@
   ],
   "initializers": [
     "me.shedaniel.rei.RoughlyEnoughItemsCore",
-    "me.shedaniel.rei.client.ClientHelper"
+    "me.shedaniel.rei.client.ClientHelper",
+    "me.shedaniel.rei.client.ScreenHelper"
   ],
   "requires": {
     "fabric": "0.2.3"