Unknown 6 жил өмнө
parent
commit
97305b9110
34 өөрчлөгдсөн 301 нэмэгдсэн , 438 устгасан
  1. 3 3
      CHANGELOG.md
  2. 5 5
      gradle.properties
  3. 2 2
      src/main/java/me/shedaniel/rei/api/RecipeCategory.java
  4. 11 11
      src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
  5. 52 44
      src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
  6. 3 13
      src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java
  7. 29 59
      src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java
  8. 10 14
      src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
  9. 45 20
      src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java
  10. 32 11
      src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java
  11. 6 5
      src/main/java/me/shedaniel/rei/gui/widget/DraggableWidget.java
  12. 5 5
      src/main/java/me/shedaniel/rei/gui/widget/HighlightableWidget.java
  13. 0 40
      src/main/java/me/shedaniel/rei/gui/widget/IWidget.java
  14. 7 8
      src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
  15. 10 9
      src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java
  16. 12 5
      src/main/java/me/shedaniel/rei/gui/widget/LabelWidget.java
  17. 4 4
      src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java
  18. 9 8
      src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java
  19. 0 113
      src/main/java/me/shedaniel/rei/gui/widget/RecipePageLabelWidget.java
  20. 1 1
      src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java
  21. 4 5
      src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java
  22. 16 16
      src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java
  23. 9 0
      src/main/java/me/shedaniel/rei/gui/widget/Widget.java
  24. 2 2
      src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableScreen.java
  25. 2 2
      src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryScreen.java
  26. 3 3
      src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java
  27. 3 3
      src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java
  28. 3 3
      src/main/java/me/shedaniel/rei/plugin/DefaultCampfireCategory.java
  29. 3 3
      src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java
  30. 3 3
      src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java
  31. 3 3
      src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java
  32. 3 3
      src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingCategory.java
  33. 0 11
      src/main/java/me/shedaniel/rei/utils/ClothRegistry.java
  34. 1 1
      src/main/resources/fabric.mod.json

+ 3 - 3
CHANGELOG.md

@@ -1,18 +1,18 @@
+# v2.4.1.66
+- Removed Mod Menu hooks, will hook into Mod Menu itself in the future
+- Improved gui widgets
 # v2.4.1.65
 - [Cloth](https://minecraft.curseforge.com/projects/cloth) is now required for REI to run
 - Update to 19w11a
-
 # v2.4.0.63
 - First implementation of [Cloth](https://minecraft.curseforge.com/projects/cloth), [Cloth](https://minecraft.curseforge.com/projects/cloth) is still not required for REI to boot but it will be a must have dependency when 19w11a comes.
 - Used [Cloth](https://minecraft.curseforge.com/projects/cloth) for hooking up [Mod Menu](https://minecraft.curseforge.com/projects/modmenu/) config. Example: [https://streamable.com/ivbsj](https://streamable.com/ivbsj)
 - Changed config `true / false` to `Yes / No`
-
 # v2.4.0.61
 - Config with comments
 - Fix creative inventory even more
 - No longer uses Fabric internals
 - Config to disable Recipe Book
 - Fixes [Issue #27: Second page react as first page recipes](https://github.com/shedaniel/RoughlyEnoughItems/issues/27)
-
 # v2.3.2.56
 - Removed Plugin Update Checker

+ 5 - 5
gradle.properties

@@ -1,9 +1,9 @@
-mod_version=2.4.1.65
-minecraft_version=19w11a
-yarn_version=19w11a.1
-fabric_version=0.2.3.110
+mod_version=2.4.2.66
+minecraft_version=19w11b
+yarn_version=19w11b.4
+fabric_version=0.2.3.111
 fabricloader_version=0.3.7.109
 pluginloader_version=1.14-1.0.6-8
 developermode_version=1.0.3
 jankson_version=1.1.0
-cloth_version=0.1.1.6
+cloth_version=0.1.1.7

+ 2 - 2
src/main/java/me/shedaniel/rei/api/RecipeCategory.java

@@ -1,7 +1,7 @@
 package me.shedaniel.rei.api;
 
 import me.shedaniel.rei.gui.RecipeViewingScreen;
-import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.item.ItemStack;
@@ -21,7 +21,7 @@ public interface RecipeCategory<T extends RecipeDisplay> {
     
     String getCategoryName();
     
-    default List<IWidget> setupDisplay(Supplier<T> recipeDisplaySupplier, Rectangle bounds) {
+    default List<Widget> setupDisplay(Supplier<T> recipeDisplaySupplier, Rectangle bounds) {
         return Collections.singletonList(new RecipeBaseWidget(bounds));
     }
     

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

@@ -39,7 +39,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
     public static String searchTerm = "";
     private static int page = 0;
     private static ItemListOverlay itemListOverlay;
-    private final List<IWidget> widgets = Lists.newArrayList();
+    private final List<Widget> widgets = Lists.newArrayList();
     private Rectangle rectangle;
     private Window window;
     private ButtonWidget buttonLeft, buttonRight;
@@ -56,7 +56,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
         
         widgets.add(buttonLeft = new ButtonWidget(rectangle.x, rectangle.y + 5, 16, 16, new TranslatableTextComponent("text.rei.left_arrow")) {
             @Override
-            public void onPressed(int button, double mouseX, double mouseY) {
+            public void onPressed() {
                 page--;
                 if (page < 0)
                     page = getTotalPage();
@@ -65,7 +65,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
         });
         widgets.add(buttonRight = new ButtonWidget(rectangle.x + rectangle.width - 18, rectangle.y + 5, 16, 16, new TranslatableTextComponent("text.rei.right_arrow")) {
             @Override
-            public void onPressed(int button, double mouseX, double mouseY) {
+            public void onPressed() {
                 page++;
                 if (page > getTotalPage())
                     page = 0;
@@ -75,7 +75,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
         page = MathHelper.clamp(page, 0, getTotalPage());
         widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel ? window.getScaledWidth() - 30 : 10, 10, 20, 20, "") {
             @Override
-            public void onPressed(int button, double mouseX, double mouseY) {
+            public void onPressed() {
                 if (Screen.isShiftPressed()) {
                     ClientHelper.setCheating(!ClientHelper.isCheating());
                     return;
@@ -106,14 +106,14 @@ public class ContainerScreenOverlay extends ScreenComponent {
         if (!RoughlyEnoughItemsCore.getConfigManager().getConfig().disableCreditsButton)
             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) {
+                public void onPressed() {
                     MinecraftClient.getInstance().openScreen(new CreditsScreen(ScreenHelper.getLastContainerScreen()));
                 }
             });
         if (RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons) {
             widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel ? window.getScaledWidth() - 55 : 35, 10, 20, 20, "") {
                 @Override
-                public void onPressed(int button, double mouseX, double mouseY) {
+                public void onPressed() {
                     MinecraftClient.getInstance().player.sendChatMessage(RoughlyEnoughItemsCore.getConfigManager().getConfig().gamemodeCommand.replaceAll("\\{gamemode}", getNextGameMode().getName()));
                 }
                 
@@ -127,7 +127,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
             });
             widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel ? window.getScaledWidth() - 80 : 60, 10, 20, 20, "") {
                 @Override
-                public void onPressed(int button, double mouseX, double mouseY) {
+                public void onPressed() {
                     MinecraftClient.getInstance().player.sendChatMessage(RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand.replaceAll("\\{weather}", getNextWeather().getName().toLowerCase()));
                 }
                 
@@ -181,7 +181,7 @@ public class ContainerScreenOverlay extends ScreenComponent {
         if (RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton)
             this.widgets.add(new CraftableToggleButtonWidget(getCraftableToggleArea()) {
                 @Override
-                public void onPressed(int button, double mouseX, double mouseY) {
+                public void onPressed() {
                     RoughlyEnoughItemsCore.getConfigManager().toggleCraftableOnly();
                     itemListOverlay.updateList(getItemListArea(), page, searchTerm);
                 }
@@ -369,14 +369,14 @@ public class ContainerScreenOverlay extends ScreenComponent {
             return false;
         if (rectangle.contains(ClientHelper.getMouseLocation())) {
             if (amount > 0 && buttonLeft.enabled)
-                buttonLeft.onPressed(0, 0, 0);
+                buttonLeft.onPressed();
             else if (amount < 0 && buttonRight.enabled)
-                buttonRight.onPressed(0, 0, 0);
+                buttonRight.onPressed();
             else
                 return false;
             return true;
         }
-        for(IWidget widget : widgets)
+        for(Widget widget : widgets)
             if (widget.mouseScrolled(i, j, amount))
                 return true;
         return false;

+ 52 - 44
src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java

@@ -32,7 +32,7 @@ public class RecipeViewingScreen extends Screen {
     public static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
     public static final Color SUB_COLOR = new Color(159, 159, 159);
     private static final Identifier CREATIVE_INVENTORY_TABS = new Identifier("textures/gui/container/creative_inventory/tabs.png");
-    private final List<IWidget> widgets;
+    private final List<Widget> widgets;
     private final List<TabWidget> tabs;
     private final Map<RecipeCategory, List<RecipeDisplay>> categoriesMap;
     private final List<RecipeCategory> categories;
@@ -83,14 +83,18 @@ public class RecipeViewingScreen extends Screen {
             ScreenHelper.getLastOverlay().onInitialized();
             return true;
         }
+        if (int_1 == 258) {
+            if (isShiftPressed())
+                this.method_19354();
+            else
+                this.focusNext();
+            return true;
+        }
         if (choosePageActivated) {
             if (recipeChoosePageWidget.keyPressed(int_1, int_2, int_3))
                 return true;
             return false;
         }
-        for(InputListener listener : listeners)
-            if (listener.keyPressed(int_1, int_2, int_3))
-                return true;
         return super.keyPressed(int_1, int_2, int_3);
     }
     
@@ -114,7 +118,7 @@ public class RecipeViewingScreen extends Screen {
         
         widgets.add(categoryBack = new ButtonWidget((int) bounds.getX() + 5, (int) bounds.getY() + 5, 12, 12, new TranslatableTextComponent("text.rei.left_arrow")) {
             @Override
-            public void onPressed(int button, double mouseX, double mouseY) {
+            public void onPressed() {
                 int currentCategoryIndex = categories.indexOf(selectedCategory);
                 currentCategoryIndex--;
                 if (currentCategoryIndex < 0)
@@ -125,9 +129,26 @@ public class RecipeViewingScreen extends Screen {
                 RecipeViewingScreen.this.onInitialized();
             }
         });
+        widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 7, "") {
+            @Override
+            public void draw(int mouseX, int mouseY, float partialTicks) {
+                this.text = selectedCategory.getCategoryName();
+                super.draw(mouseX, mouseY, partialTicks);
+                if (isHighlighted(mouseX, mouseY))
+                    ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.view_all_categories").split("\n")));
+                else if (focused)
+                    ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(new Point(x, y), 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();
+            }
+        });
         widgets.add(categoryNext = new ButtonWidget((int) bounds.getMaxX() - 17, (int) bounds.getY() + 5, 12, 12, new TranslatableTextComponent("text.rei.right_arrow")) {
             @Override
-            public void onPressed(int button, double mouseX, double mouseY) {
+            public void onPressed() {
                 int currentCategoryIndex = categories.indexOf(selectedCategory);
                 currentCategoryIndex++;
                 if (currentCategoryIndex >= categories.size())
@@ -143,40 +164,13 @@ public class RecipeViewingScreen extends Screen {
         
         widgets.add(recipeBack = new ButtonWidget((int) bounds.getX() + 5, (int) bounds.getY() + 21, 12, 12, new TranslatableTextComponent("text.rei.left_arrow")) {
             @Override
-            public void onPressed(int button, double mouseX, double mouseY) {
+            public void onPressed() {
                 page--;
                 if (page < 0)
                     page = getTotalPages(selectedCategory) - 1;
                 RecipeViewingScreen.this.onInitialized();
             }
         });
-        widgets.add(recipeNext = new ButtonWidget((int) bounds.getMaxX() - 17, (int) bounds.getY() + 21, 12, 12, new TranslatableTextComponent("text.rei.right_arrow")) {
-            @Override
-            public void onPressed(int button, double mouseX, double mouseY) {
-                page++;
-                if (page >= getTotalPages(selectedCategory))
-                    page = 0;
-                RecipeViewingScreen.this.onInitialized();
-            }
-        });
-        recipeBack.enabled = categoriesMap.get(selectedCategory).size() > getRecipesPerPage();
-        recipeNext.enabled = categoriesMap.get(selectedCategory).size() > getRecipesPerPage();
-        
-        widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 7, "") {
-            @Override
-            public void draw(int mouseX, int mouseY, float partialTicks) {
-                this.text = selectedCategory.getCategoryName();
-                super.draw(mouseX, mouseY, partialTicks);
-                if (isHighlighted(mouseX, mouseY))
-                    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();
-            }
-        });
         widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 23, "") {
             @Override
             public void draw(int mouseX, int mouseY, float partialTicks) {
@@ -184,6 +178,8 @@ public class RecipeViewingScreen extends Screen {
                 super.draw(mouseX, mouseY, partialTicks);
                 if (isHighlighted(mouseX, mouseY))
                     ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(I18n.translate("text.rei.choose_page").split("\n")));
+                else if (focused)
+                    ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(new Point(x, y), I18n.translate("text.rei.choose_page").split("\n")));
             }
             
             @Override
@@ -193,13 +189,25 @@ public class RecipeViewingScreen extends Screen {
                 RecipeViewingScreen.this.onInitialized();
             }
         });
+        widgets.add(recipeNext = new ButtonWidget((int) bounds.getMaxX() - 17, (int) bounds.getY() + 21, 12, 12, new TranslatableTextComponent("text.rei.right_arrow")) {
+            @Override
+            public void onPressed() {
+                page++;
+                if (page >= getTotalPages(selectedCategory))
+                    page = 0;
+                RecipeViewingScreen.this.onInitialized();
+            }
+        });
+        recipeBack.enabled = categoriesMap.get(selectedCategory).size() > getRecipesPerPage();
+        recipeNext.enabled = categoriesMap.get(selectedCategory).size() > getRecipesPerPage();
+        
         for(int i = 0; i < 6; i++) {
             int j = i + categoryPages * 6;
             if (categories.size() > j) {
                 TabWidget tab;
                 tabs.add(tab = new TabWidget(i, this, new Rectangle(bounds.x + 4 + 28 * i, bounds.y - 28, 28, 28)) {
                     @Override
-                    public boolean onMouseClick(int button, double mouseX, double mouseY) {
+                    public boolean mouseClicked(double mouseX, double mouseY, int button) {
                         if (getBounds().contains(mouseX, mouseY)) {
                             MinecraftClient.getInstance().getSoundLoader().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
                             if (getId() + categoryPages * 6 == categories.indexOf(selectedCategory))
@@ -238,7 +246,7 @@ public class RecipeViewingScreen extends Screen {
         listeners.addAll(widgets);
     }
     
-    public List<IWidget> getWidgets() {
+    public List<Widget> getWidgets() {
         return widgets;
     }
     
@@ -354,15 +362,15 @@ public class RecipeViewingScreen extends Screen {
                 return true;
         if (getBounds().contains(ClientHelper.getMouseLocation())) {
             if (amount > 0 && recipeBack.enabled)
-                recipeBack.onPressed(0, 0, 0);
+                recipeBack.onPressed();
             else if (amount < 0 && recipeNext.enabled)
-                recipeNext.onPressed(0, 0, 0);
+                recipeNext.onPressed();
         }
         if ((new Rectangle(bounds.x, bounds.y - 28, bounds.width, 28)).contains(ClientHelper.getMouseLocation())) {
             if (amount > 0 && categoryBack.enabled)
-                categoryBack.onPressed(0, 0, 0);
+                categoryBack.onPressed();
             else if (amount < 0 && categoryNext.enabled)
-                categoryNext.onPressed(0, 0, 0);
+                categoryNext.onPressed();
         }
         return super.mouseScrolled(i, j, amount);
     }
@@ -383,17 +391,17 @@ public class RecipeViewingScreen extends Screen {
             if (entry.mouseClicked(double_1, double_2, int_1)) {
                 focusOn(entry);
                 if (int_1 == 0)
-                    method_1966(true); //setActive
+                    setActive(true);
                 return true;
             }
         return false;
     }
     
-    @Override //getFocused
-    public InputListener method_19357() {
+    @Override
+    public InputListener getFocused() {
         if (choosePageActivated)
             return recipeChoosePageWidget;
-        return super.method_19357();
+        return super.getFocused();
     }
     
 }

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

@@ -4,11 +4,9 @@ import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.gui.widget.ButtonWidget;
 import me.shedaniel.rei.gui.widget.TextFieldWidget;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.audio.PositionedSoundInstance;
 import net.minecraft.client.font.TextRenderer;
 import net.minecraft.client.gui.widget.EntryListWidget;
 import net.minecraft.client.util.Window;
-import net.minecraft.sound.SoundEvents;
 import net.minecraft.text.Style;
 import net.minecraft.text.TextComponent;
 
@@ -26,17 +24,9 @@ public abstract class ConfigEntry extends EntryListWidget.Entry<ConfigEntry> {
             this.buttonProvider = buttonProvider;
             this.buttonWidget = new ButtonWidget(0, 0, 150, 20, "") {
                 @Override
-                public boolean onMouseClick(int button, double mouseX, double mouseY) {
-                    if (getBounds().contains(mouseX, mouseY) && enabled)
-                        if (buttonProvider.onPressed(button, mouseX, mouseY)) {
-                            MinecraftClient.getInstance().getSoundLoader().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
-                            return true;
-                        }
-                    return false;
+                public void onPressed() {
+                    buttonProvider.onPressed();
                 }
-                
-                @Override
-                public void onPressed(int button, double mouseX, double mouseY) {}
             };
         }
         
@@ -65,7 +55,7 @@ public abstract class ConfigEntry extends EntryListWidget.Entry<ConfigEntry> {
         
         interface ConfigEntryButtonProvider {
             
-            public boolean onPressed(int button, double mouseX, double mouseY);
+            public void onPressed();
             
             public String getText();
             

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

@@ -7,10 +7,9 @@ import me.shedaniel.rei.client.ItemListOrdering;
 import me.shedaniel.rei.client.ScreenHelper;
 import me.shedaniel.rei.gui.widget.QueuedTooltip;
 import me.shedaniel.rei.gui.widget.TextFieldWidget;
-import net.minecraft.class_4185;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.InputListener;
 import net.minecraft.client.gui.Screen;
+import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.text.TranslatableTextComponent;
@@ -35,14 +34,13 @@ public class ConfigScreen extends Screen {
     
     @Override
     public boolean keyPressed(int int_1, int int_2, int int_3) {
-        if (int_1 == 256 && this.doesEscapeKeyClose()) {
+        if (int_1 == 256) {
             MinecraftClient.getInstance().openScreen(parent);
             if (initOverlay)
                 ScreenHelper.getLastOverlay().onInitialized();
             return true;
-        } else {
-            return super.keyPressed(int_1, int_2, int_3);
         }
+        return super.keyPressed(int_1, int_2, int_3);
     }
     
     @Override
@@ -52,10 +50,8 @@ public class ConfigScreen extends Screen {
         entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.general")));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.cheating"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
-                if (button == 0)
-                    ClientHelper.setCheating(!ClientHelper.isCheating());
-                return true;
+            public void onPressed() {
+                ClientHelper.setCheating(!ClientHelper.isCheating());
             }
             
             @Override
@@ -66,16 +62,13 @@ public class ConfigScreen extends Screen {
         entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.appearance")));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.side_search_box"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
-                if (button == 0)
-                    RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField = !RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField;
+            public void onPressed() {
+                RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField = !RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField;
                 try {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
                     e.printStackTrace();
-                    return false;
                 }
-                return true;
             }
             
             @Override
@@ -85,7 +78,7 @@ public class ConfigScreen extends Screen {
         }));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.list_ordering"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
+            public void onPressed() {
                 int index = Arrays.asList(ItemListOrdering.values()).indexOf(RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering) + 1;
                 if (index >= ItemListOrdering.values().length) {
                     index = 0;
@@ -96,9 +89,7 @@ public class ConfigScreen extends Screen {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
                     e.printStackTrace();
-                    return false;
                 }
-                return true;
             }
             
             @Override
@@ -108,16 +99,13 @@ public class ConfigScreen extends Screen {
         }));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.mirror_rei"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
-                if (button == 0)
-                    RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel = !RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel;
+            public void onPressed() {
+                RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel = !RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel;
                 try {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
                     e.printStackTrace();
-                    return false;
                 }
-                return true;
             }
             
             @Override
@@ -128,16 +116,13 @@ public class ConfigScreen extends Screen {
         entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.modules")));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.enable_craftable_only"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
-                if (button == 0)
-                    RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton = !RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton;
+            public void onPressed() {
+                RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton = !RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton;
                 try {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
                     e.printStackTrace();
-                    return false;
                 }
-                return true;
             }
             
             @Override
@@ -147,16 +132,13 @@ public class ConfigScreen extends Screen {
         }));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.load_default_plugin"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
-                if (button == 0)
-                    RoughlyEnoughItemsCore.getConfigManager().getConfig().loadDefaultPlugin = !RoughlyEnoughItemsCore.getConfigManager().getConfig().loadDefaultPlugin;
+            public void onPressed() {
+                RoughlyEnoughItemsCore.getConfigManager().getConfig().loadDefaultPlugin = !RoughlyEnoughItemsCore.getConfigManager().getConfig().loadDefaultPlugin;
                 try {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
                     e.printStackTrace();
-                    return false;
                 }
-                return true;
             }
             
             @Override
@@ -174,16 +156,13 @@ public class ConfigScreen extends Screen {
         }));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.disable_credits_button"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
-                if (button == 0)
-                    RoughlyEnoughItemsCore.getConfigManager().getConfig().disableCreditsButton = !RoughlyEnoughItemsCore.getConfigManager().getConfig().disableCreditsButton;
+            public void onPressed() {
+                RoughlyEnoughItemsCore.getConfigManager().getConfig().disableCreditsButton = !RoughlyEnoughItemsCore.getConfigManager().getConfig().disableCreditsButton;
                 try {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
                     e.printStackTrace();
-                    return false;
                 }
-                return true;
             }
             
             @Override
@@ -193,16 +172,13 @@ public class ConfigScreen extends Screen {
         }));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.enable_util_buttons"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
-                if (button == 0)
-                    RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons = !RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons;
+            public void onPressed() {
+                RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons = !RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons;
                 try {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
                     e.printStackTrace();
-                    return false;
                 }
-                return true;
             }
             
             @Override
@@ -212,16 +188,13 @@ public class ConfigScreen extends Screen {
         }));
         entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.disable_recipe_book"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
             @Override
-            public boolean onPressed(int button, double mouseX, double mouseY) {
-                if (button == 0)
-                    RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook = !RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook;
+            public void onPressed() {
+                RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook = !RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook;
                 try {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
                     e.printStackTrace();
-                    return false;
                 }
-                return true;
             }
             
             @Override
@@ -334,9 +307,9 @@ public class ConfigScreen extends Screen {
                 return false;
             }
         }));
-        addButton(new class_4185(screenWidth / 2 - 100, screenHeight - 26, I18n.translate("gui.done")) {
+        addButton(new ButtonWidget(screenWidth / 2 - 100, screenHeight - 26, I18n.translate("gui.done")) {
             @Override
-            public void method_1826() {
+            public void onPressed() {
                 try {
                     RoughlyEnoughItemsCore.getConfigManager().saveConfig();
                 } catch (IOException e) {
@@ -354,6 +327,13 @@ public class ConfigScreen extends Screen {
         return String.format("%s%s", showCraftableOnlyButton ? "§a" : "§c", showCraftableOnlyButton ? I18n.translate("text.rei.enabled") : I18n.translate("text.rei.disabled"));
     }
     
+    @Override
+    public boolean mouseScrolled(double double_1, double double_2, double double_3) {
+        if (entryListWidget.mouseScrolled(double_1, double_2, double_3))
+            return true;
+        return super.mouseScrolled(double_1, double_2, double_3);
+    }
+    
     @Override
     public void draw(int int_1, int int_2, float float_1) {
         this.drawTextureBackground(0);
@@ -366,14 +346,4 @@ public class ConfigScreen extends Screen {
         GuiLighting.disable();
     }
     
-    @Override
-    public boolean isPauseScreen() {
-        return false;
-    }
-    
-    @Override
-    public InputListener method_19357() {
-        return entryListWidget;
-    }
-    
 }

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

@@ -1,10 +1,10 @@
 package me.shedaniel.rei.gui.credits;
 
 import me.shedaniel.rei.client.ScreenHelper;
-import net.minecraft.class_4185;
 import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.InputListener;
 import net.minecraft.client.gui.Screen;
+import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.text.StringTextComponent;
 
@@ -34,32 +34,28 @@ public class CreditsScreen extends Screen {
         for(String line : I18n.translate("text.rei.credit.text").split("\n"))
             entryListWidget.creditsAddEntry(new CreditsEntry(new StringTextComponent(line)));
         entryListWidget.creditsAddEntry(new CreditsEntry(new StringTextComponent("")));
-        addButton(new class_4185(screenWidth / 2 - 100, screenHeight - 26, I18n.translate("gui.done")) {
+        addButton(new ButtonWidget(screenWidth / 2 - 100, screenHeight - 26, I18n.translate("gui.done")) {
             @Override
-            public void method_1826() {
+            public void onPressed() {
                 CreditsScreen.this.client.openScreen(parent);
                 ScreenHelper.getLastOverlay().onInitialized();
             }
         });
     }
     
+    @Override
+    public boolean mouseScrolled(double double_1, double double_2, double double_3) {
+        if (entryListWidget.mouseScrolled(double_1, double_2, double_3))
+            return true;
+        return super.mouseScrolled(double_1, double_2, double_3);
+    }
+    
     @Override
     public void draw(int int_1, int int_2, float float_1) {
-        //draw
         this.drawTextureBackground(0);
         this.entryListWidget.draw(int_1, int_2, float_1);
         this.drawStringCentered(this.fontRenderer, I18n.translate("text.rei.credits"), this.screenWidth / 2, 16, 16777215);
         super.draw(int_1, int_2, float_1);
     }
     
-    @Override
-    public boolean isPauseScreen() {
-        return false;
-    }
-    
-    @Override
-    public InputListener method_19357() {
-        return entryListWidget;
-    }
-    
 }

+ 45 - 20
src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java

@@ -4,24 +4,22 @@ import com.mojang.blaze3d.platform.GlStateManager;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.audio.PositionedSoundInstance;
 import net.minecraft.client.font.TextRenderer;
-import net.minecraft.client.gui.DrawableHelper;
+import net.minecraft.client.gui.InputListener;
+import net.minecraft.client.gui.widget.AbstractButtonWidget;
 import net.minecraft.sound.SoundEvents;
 import net.minecraft.text.TextComponent;
-import net.minecraft.util.Identifier;
 import net.minecraft.util.math.MathHelper;
 
 import java.awt.*;
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
-public abstract class ButtonWidget extends DrawableHelper implements HighlightableWidget {
+public abstract class ButtonWidget extends HighlightableWidget {
     
-    protected static final Identifier WIDGET_TEX = new Identifier("textures/gui/widgets.png");
     public String text;
     public boolean enabled;
     public boolean visible;
-    protected boolean hovered;
-    private boolean pressed;
+    private boolean focused;
     private Rectangle bounds;
     
     public ButtonWidget(Rectangle rectangle, TextComponent text) {
@@ -58,21 +56,15 @@ public abstract class ButtonWidget extends DrawableHelper implements Highlightab
         return int_1;
     }
     
-    @Override
-    public List<IWidget> getListeners() {
-        return new ArrayList<>();
-    }
-    
     @Override
     public void draw(int mouseX, int mouseY, float partialTicks) {
         if (this.visible) {
             int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
             MinecraftClient client = MinecraftClient.getInstance();
             TextRenderer textRenderer = client.textRenderer;
-            client.getTextureManager().bindTexture(WIDGET_TEX);
+            client.getTextureManager().bindTexture(AbstractButtonWidget.WIDGET_TEX);
             GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
-            this.hovered = bounds.contains(mouseX, mouseY);
-            int textureOffset = this.getTextureId(this.hovered);
+            int textureOffset = this.getTextureId(isHovered(mouseX, mouseY));
             GlStateManager.enableBlend();
             GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
             GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
@@ -94,7 +86,7 @@ public abstract class ButtonWidget extends DrawableHelper implements Highlightab
             int colour = 14737632;
             if (!this.enabled) {
                 colour = 10526880;
-            } else if (this.hovered) {
+            } else if (isHovered(mouseX, mouseY)) {
                 colour = 16777120;
             }
             
@@ -102,16 +94,49 @@ public abstract class ButtonWidget extends DrawableHelper implements Highlightab
         }
     }
     
+    public boolean isHovered(int mouseX, int mouseY) {
+        return bounds.contains(mouseX, mouseY) || focused;
+    }
+    
+    @Override
+    public boolean hasFocus() {
+        return visible && enabled;
+    }
+    
+    @Override
+    public void setHasFocus(boolean boolean_1) {
+        focused = boolean_1;
+    }
+    
     @Override
-    public boolean onMouseClick(int button, double mouseX, double mouseY) {
-        if (bounds.contains(mouseX, mouseY) && enabled) {
+    public List<? extends InputListener> getInputListeners() {
+        return Collections.emptyList();
+    }
+    
+    @Override
+    public boolean mouseClicked(double mouseX, double mouseY, int button) {
+        if (bounds.contains(mouseX, mouseY) && enabled && button == 0) {
             MinecraftClient.getInstance().getSoundLoader().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
-            onPressed(button, mouseX, mouseY);
+            onPressed();
             return true;
         }
         return false;
     }
     
-    public abstract void onPressed(int button, double mouseX, double mouseY);
+    @Override
+    public boolean keyPressed(int int_1, int int_2, int int_3) {
+        if (this.enabled && this.visible) {
+            if (int_1 != 257 && int_1 != 32 && int_1 != 335) {
+                return false;
+            } else {
+                MinecraftClient.getInstance().getSoundLoader().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
+                this.onPressed();
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    public abstract void onPressed();
     
 }

+ 32 - 11
src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java

@@ -2,28 +2,25 @@ package me.shedaniel.rei.gui.widget;
 
 import java.awt.*;
 
-public abstract class ClickableLabelWidget extends LabelWidget implements HighlightableWidget {
+public abstract class ClickableLabelWidget extends LabelWidget {
+    
+    private static final int hoveredColor = (new Color(102, 255, 204)).getRGB();
+    protected boolean focused;
     
     public ClickableLabelWidget(int x, int y, String text) {
         super(x, y, text);
     }
     
-    @Override
-    public Rectangle getBounds() {
-        int width = textRenderer.getStringWidth(text);
-        return new Rectangle(x - width / 2 - 1, y - 5, width + 2, 14);
-    }
-    
     @Override
     public void draw(int mouseX, int mouseY, float partialTicks) {
         int colour = -1;
-        if (isHighlighted(mouseX, mouseY))
-            colour = 16777120;
-        drawStringCentered(textRenderer, (isHighlighted(mouseX, mouseY) ? "§n" : "") + text, x, y, colour);
+        if (isHovered(mouseX, mouseY))
+            colour = hoveredColor;
+        drawStringCentered(textRenderer, (isHovered(mouseX, mouseY) ? "§n" : "") + text, x, y, colour);
     }
     
     @Override
-    public boolean onMouseClick(int button, double mouseX, double mouseY) {
+    public boolean mouseClicked(double mouseX, double mouseY, int button) {
         if (button == 0 && isHighlighted(mouseX, mouseY)) {
             onLabelClicked();
             return true;
@@ -31,6 +28,30 @@ public abstract class ClickableLabelWidget extends LabelWidget implements Highli
         return false;
     }
     
+    @Override
+    public boolean keyPressed(int int_1, int int_2, int int_3) {
+        if (int_1 != 257 && int_1 != 32 && int_1 != 335) {
+            return false;
+        } else {
+            this.onLabelClicked();
+            return true;
+        }
+    }
+    
+    @Override
+    public boolean hasFocus() {
+        return true;
+    }
+    
+    public boolean isHovered(int mouseX, int mouseY) {
+        return isHighlighted(mouseX, mouseY) || focused;
+    }
+    
+    @Override
+    public void setHasFocus(boolean boolean_1) {
+        focused = boolean_1;
+    }
+    
     public abstract void onLabelClicked();
     
 }

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

@@ -2,11 +2,12 @@ package me.shedaniel.rei.gui.widget;
 
 import me.shedaniel.rei.client.ClientHelper;
 import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.InputListener;
 import net.minecraft.client.util.Window;
 
 import java.awt.*;
 
-public abstract class DraggableWidget implements HighlightableWidget {
+public abstract class DraggableWidget extends HighlightableWidget {
     
     protected boolean dragged = false;
     private Point midPoint, startPoint;
@@ -50,8 +51,8 @@ public abstract class DraggableWidget implements HighlightableWidget {
             }
             return true;
         }
-        for(IWidget widget : getListeners())
-            if (widget.mouseDragged(double_1, double_2, int_1, double_3, double_4))
+        for(InputListener listener : getInputListeners())
+            if (listener.mouseDragged(double_1, double_2, int_1, double_3, double_4))
                 return true;
         return false;
     }
@@ -66,8 +67,8 @@ public abstract class DraggableWidget implements HighlightableWidget {
                 onMouseReleaseMidPoint(getMidPoint());
                 return true;
             }
-        for(IWidget widget : getListeners())
-            if (widget.mouseReleased(double_1, double_2, int_1))
+        for(InputListener listener : getInputListeners())
+            if (listener.mouseReleased(double_1, double_2, int_1))
                 return true;
         return false;
     }

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

@@ -2,19 +2,19 @@ package me.shedaniel.rei.gui.widget;
 
 import java.awt.*;
 
-public interface HighlightableWidget extends IWidget {
+public abstract class HighlightableWidget extends Widget {
     
-    public Rectangle getBounds();
+    abstract public Shape getBounds();
     
-    default boolean isHighlighted(int mouseX, int mouseY) {
+    public boolean isHighlighted(int mouseX, int mouseY) {
         return getBounds().contains(mouseX, mouseY);
     }
     
-    default boolean isHighlighted(Point point) {
+    public boolean isHighlighted(Point point) {
         return this.isHighlighted(point.x, point.y);
     }
     
-    default boolean isHighlighted(double mouseX, double mouseY) {
+    public boolean isHighlighted(double mouseX, double mouseY) {
         return this.isHighlighted((int) mouseX, (int) mouseY);
     }
     

+ 0 - 40
src/main/java/me/shedaniel/rei/gui/widget/IWidget.java

@@ -1,40 +0,0 @@
-package me.shedaniel.rei.gui.widget;
-
-import net.minecraft.client.gui.Drawable;
-import net.minecraft.client.gui.InputListener;
-
-import java.util.List;
-
-public interface IWidget extends InputListener, Drawable {
-    
-    public List<IWidget> getListeners();
-    
-    @Override
-    default boolean mouseClicked(double double_1, double double_2, int int_1) {
-        if (onMouseClick(int_1, double_1, double_2))
-            return true;
-        for(IWidget widget : getListeners())
-            if (widget.mouseClicked(double_1, double_2, int_1))
-                return true;
-        return false;
-    }
-    
-    default boolean onMouseClick(int button, double mouseX, double mouseY) {
-        return false;
-    }
-    
-    default boolean onMouseScrolled(double amount) {
-        return false;
-    }
-    
-    @Override
-    default boolean mouseScrolled(double i, double j, double amount) {
-        if (onMouseScrolled(amount))
-            return true;
-        for(IWidget widget : getListeners())
-            if (widget.mouseScrolled(i, j, amount))
-                return true;
-        return false;
-    }
-    
-}

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

@@ -8,7 +8,6 @@ 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;
@@ -24,10 +23,10 @@ import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-public class ItemListOverlay extends DrawableHelper implements IWidget {
+public class ItemListOverlay extends Widget {
     
     private static List<Item> searchBlacklisted = Lists.newArrayList();
-    private List<IWidget> widgets;
+    private List<Widget> widgets;
     private int width, height, page;
     private Rectangle rectangle, listArea;
     private List<ItemStack> currentDisplayed;
@@ -78,7 +77,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
             ScreenHelper.getLastOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.rei.delete_items"))));
     }
     
-    public List<IWidget> getWidgets() {
+    public List<Widget> getWidgets() {
         return widgets;
     }
     
@@ -104,7 +103,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
                 }
                 
                 @Override
-                public boolean onMouseClick(int button, double mouseX, double mouseY) {
+                public boolean mouseClicked(double mouseX, double mouseY, int button) {
                     if (isHighlighted(mouseX, mouseY)) {
                         if (ClientHelper.isCheating()) {
                             if (getCurrentStack() != null && !getCurrentStack().isEmpty()) {
@@ -127,7 +126,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
     
     @Override
     public boolean keyPressed(int int_1, int int_2, int int_3) {
-        for(IWidget widget : widgets)
+        for(Widget widget : widgets)
             if (widget.keyPressed(int_1, int_2, int_3))
                 return true;
         return false;
@@ -248,7 +247,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
             }
             if (!player.inventory.getCursorStack().isEmpty() && MinecraftClient.getInstance().isInSingleplayer())
                 return false;
-            for(IWidget widget : getListeners())
+            for(Widget widget : getInputListeners())
                 if (widget.mouseClicked(double_1, double_2, int_1))
                     return true;
         }
@@ -256,7 +255,7 @@ public class ItemListOverlay extends DrawableHelper implements IWidget {
     }
     
     @Override
-    public List<IWidget> getListeners() {
+    public List<Widget> getInputListeners() {
         return widgets;
     }
     

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

@@ -5,7 +5,7 @@ import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.ScreenHelper;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.DrawableHelper;
+import net.minecraft.client.gui.InputListener;
 import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.render.item.ItemRenderer;
 import net.minecraft.item.ItemStack;
@@ -14,10 +14,11 @@ import net.minecraft.util.Identifier;
 import net.minecraft.util.math.MathHelper;
 
 import java.awt.*;
-import java.util.*;
+import java.util.Collections;
+import java.util.LinkedList;
 import java.util.List;
 
-public class ItemSlotWidget extends DrawableHelper implements HighlightableWidget {
+public class ItemSlotWidget extends HighlightableWidget {
     
     private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
     private List<ItemStack> itemList = new LinkedList<>();
@@ -43,6 +44,11 @@ public class ItemSlotWidget extends DrawableHelper implements HighlightableWidge
         this.clickToMoreRecipes = clickToMoreRecipes;
     }
     
+    @Override
+    public List<? extends InputListener> getInputListeners() {
+        return Collections.emptyList();
+    }
+    
     public void setDrawHighlightedBackground(boolean drawHighlightedBackground) {
         this.drawHighlightedBackground = drawHighlightedBackground;
     }
@@ -51,11 +57,6 @@ public class ItemSlotWidget extends DrawableHelper implements HighlightableWidge
         return drawBackground;
     }
     
-    @Override
-    public List<IWidget> getListeners() {
-        return new ArrayList<>();
-    }
-    
     @Override
     public void draw(int mouseX, int mouseY, float partialTicks) {
         final ItemStack itemStack = getCurrentStack();
@@ -125,7 +126,7 @@ public class ItemSlotWidget extends DrawableHelper implements HighlightableWidge
     }
     
     @Override
-    public boolean onMouseClick(int button, double mouseX, double mouseY) {
+    public boolean mouseClicked(double mouseX, double mouseY, int button) {
         if (!clickToMoreRecipes)
             return false;
         if (getBounds().contains(mouseX, mouseY))

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

@@ -2,12 +2,13 @@ package me.shedaniel.rei.gui.widget;
 
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.font.TextRenderer;
-import net.minecraft.client.gui.DrawableHelper;
+import net.minecraft.client.gui.InputListener;
 
-import java.util.ArrayList;
+import java.awt.*;
+import java.util.Collections;
 import java.util.List;
 
-public class LabelWidget extends DrawableHelper implements IWidget {
+public class LabelWidget extends HighlightableWidget {
     
     public int x;
     public int y;
@@ -22,8 +23,14 @@ public class LabelWidget extends DrawableHelper implements IWidget {
     }
     
     @Override
-    public List<IWidget> getListeners() {
-        return new ArrayList<>();
+    public Rectangle getBounds() {
+        int width = textRenderer.getStringWidth(text);
+        return new Rectangle(x - width / 2 - 1, y - 5, width + 2, 14);
+    }
+    
+    @Override
+    public List<? extends InputListener> getInputListeners() {
+        return Collections.emptyList();
     }
     
     @Override

+ 4 - 4
src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java

@@ -8,10 +8,10 @@ import net.minecraft.util.Identifier;
 import net.minecraft.util.math.MathHelper;
 
 import java.awt.*;
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
-public class RecipeBaseWidget extends DrawableHelper implements HighlightableWidget {
+public class RecipeBaseWidget extends HighlightableWidget {
     
     private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
     private static final Color INNER_COLOR = new Color(198, 198, 198);
@@ -28,8 +28,8 @@ public class RecipeBaseWidget extends DrawableHelper implements HighlightableWid
     }
     
     @Override
-    public List<IWidget> getListeners() {
-        return new ArrayList<>();
+    public List<Widget> getInputListeners() {
+        return Collections.emptyList();
     }
     
     @Override

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

@@ -14,6 +14,7 @@ import net.minecraft.util.math.MathHelper;
 
 import java.awt.*;
 import java.io.IOException;
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -22,7 +23,7 @@ public class RecipeChoosePageWidget extends DraggableWidget {
     private int currentPage;
     private int maxPage;
     private Rectangle bounds, grabBounds, dragBounds;
-    private List<IWidget> widgets;
+    private List<Widget> widgets;
     private RecipeViewingScreen recipeViewingScreen;
     private TextFieldWidget textFieldWidget;
     private RecipeBaseWidget base1, base2;
@@ -81,10 +82,10 @@ public class RecipeChoosePageWidget extends DraggableWidget {
         this.widgets = Lists.newArrayList();
         this.widgets.add(base1 = new RecipeBaseWidget(new Rectangle(bounds.x + bounds.width - 50, bounds.y + bounds.height - 6, 50, 36)));
         this.widgets.add(base2 = new RecipeBaseWidget(bounds));
-        this.widgets.add(new IWidget() {
+        this.widgets.add(new Widget() {
             @Override
-            public List<IWidget> getListeners() {
-                return Lists.newArrayList();
+            public List<Widget> getInputListeners() {
+                return Collections.emptyList();
             }
             
             @Override
@@ -114,7 +115,7 @@ public class RecipeChoosePageWidget extends DraggableWidget {
         textFieldWidget.setText(String.valueOf(currentPage + 1));
         widgets.add(btnDone = new ButtonWidget(bounds.x + bounds.width - 45, bounds.y + bounds.height + 3, 40, 20, I18n.translate("gui.done")) {
             @Override
-            public void onPressed(int button, double mouseX, double mouseY) {
+            public void onPressed() {
                 recipeViewingScreen.page = MathHelper.clamp(getIntFromString(textFieldWidget.getText()).orElse(0) - 1, 0, recipeViewingScreen.getTotalPages(recipeViewingScreen.getSelectedCategory()) - 1);
                 recipeViewingScreen.choosePageActivated = false;
                 recipeViewingScreen.onInitialized();
@@ -129,7 +130,7 @@ public class RecipeChoosePageWidget extends DraggableWidget {
     }
     
     @Override
-    public List<IWidget> getListeners() {
+    public List<Widget> getInputListeners() {
         return widgets;
     }
     
@@ -145,7 +146,7 @@ public class RecipeChoosePageWidget extends DraggableWidget {
     
     @Override
     public boolean charTyped(char char_1, int int_1) {
-        for(IWidget widget : widgets)
+        for(Widget widget : widgets)
             if (widget.charTyped(char_1, int_1))
                 return true;
         return false;
@@ -159,7 +160,7 @@ public class RecipeChoosePageWidget extends DraggableWidget {
             recipeViewingScreen.onInitialized();
             return true;
         }
-        for(IWidget widget : widgets)
+        for(Widget widget : widgets)
             if (widget.keyPressed(int_1, int_2, int_3))
                 return true;
         return false;

+ 0 - 113
src/main/java/me/shedaniel/rei/gui/widget/RecipePageLabelWidget.java

@@ -1,113 +0,0 @@
-package me.shedaniel.rei.gui.widget;
-
-import net.minecraft.client.gui.DrawableHelper;
-
-import java.awt.*;
-
-public class RecipePageLabelWidget extends TextFieldWidget {
-    
-    private Point middlePoint;
-    private int maximumPage;
-    
-    public RecipePageLabelWidget(int x, int y, int currentPage, int maximumPage) {
-        super(new Rectangle(0, 0, 40, 20));
-        this.middlePoint = new Point(x, y);
-        this.maximumPage = maximumPage;
-        this.setHasBorder(false);
-        setChangedListener(s -> updateSize());
-        this.setText(String.valueOf(currentPage + 1));
-        stripInvaild = s -> {
-            StringBuilder stringBuilder_1 = new StringBuilder();
-            char[] var2 = s.toCharArray();
-            int var3 = var2.length;
-            
-            for(int var4 = 0; var4 < var3; ++var4) {
-                char char_1 = var2[var4];
-                if (Character.isDigit(char_1))
-                    stringBuilder_1.append(char_1);
-            }
-            
-            return stringBuilder_1.toString();
-        };
-        setMaxLength(String.valueOf(maximumPage).length());
-    }
-    
-    public void updateSize() {
-        this.getBounds().setLocation(middlePoint.x - 40, middlePoint.y);
-    }
-    
-    @Override
-    public void draw(int int_1, int int_2, float float_1) {
-        setEditableColor(isInvaildPage(getText()) ? -1 : Color.RED.getRGB());
-        if (this.isVisible()) {
-            if (this.hasBorder()) {
-                drawRect(this.getBounds().x - 1, this.getBounds().y - 1, this.getBounds().x + this.getBounds().width + 1, this.getBounds().y + this.getBounds().height + 1, -6250336);
-                drawRect(this.getBounds().x, this.getBounds().y, this.getBounds().x + this.getBounds().width, this.getBounds().y + this.getBounds().height, -16777216);
-            }
-            
-            int color = this.editable ? this.editableColor : this.notEditableColor;
-            int int_4 = this.cursorMax - this.field_2103;
-            int int_5 = this.cursorMin - this.field_2103;
-            String string_1 = this.getText(); //this.textRenderer.trimToWidth(this.getText().substring(this.field_2103), this.getWidth());
-            boolean boolean_1 = int_4 >= 0 && int_4 <= string_1.length();
-            boolean boolean_2 = this.isFocused() && this.focusedTicks / 6 % 2 == 0 && boolean_1;
-            int int_6 = this.hasBorder() ? this.getBounds().x + 4 : this.getBounds().x;
-            int int_7 = this.hasBorder() ? this.getBounds().y + (this.getBounds().height - 8) / 2 : this.getBounds().y;
-            int int_8 = int_6;
-            if (int_5 > string_1.length()) {
-                int_5 = string_1.length();
-            }
-            
-            if (!string_1.isEmpty()) {
-                String string_2 = boolean_1 ? string_1.substring(0, int_4) : string_1;
-                int_8 = this.textRenderer.drawWithShadow(this.renderTextProvider.apply(string_2, this.field_2103), (float) getBounds().x + getBounds().width - textRenderer.getStringWidth(string_2.substring(1)), (float) int_7, color);
-            }
-            
-            boolean boolean_3 = this.cursorMax < this.getText().length() || this.getText().length() >= this.getMaxLength();
-            int int_9 = int_8;
-            if (!boolean_1) {
-                int_9 = int_4 > 0 ? int_6 + this.getBounds().width : int_6;
-            } else if (boolean_3) {
-                int_9 = int_8 - 1;
-                --int_8;
-            }
-            
-            if (!string_1.isEmpty() && boolean_1 && int_4 < string_1.length()) {
-                this.textRenderer.drawWithShadow((String) this.renderTextProvider.apply(string_1.substring(int_4), this.cursorMax), (float) int_8, (float) int_7, color);
-            }
-            
-            if (!boolean_3 && getText().isEmpty() && this.getSuggestion() != null) {
-                this.textRenderer.drawWithShadow(this.textRenderer.trimToWidth(this.getSuggestion(), this.getWidth()), (float) int_6, (float) int_7, -8355712);
-            }
-            
-            if (boolean_2)
-                if (boolean_3) {
-                    int var10001 = int_7 - 1;
-                    int var10002 = int_9 + 1;
-                    int var10003 = int_7 + 1;
-                    this.textRenderer.getClass();
-                    DrawableHelper.drawRect(int_9, var10001, var10002, var10003 + 9, -3092272);
-                }
-            
-            if (int_5 != int_4) {
-                int int_10 = int_6 + this.textRenderer.getStringWidth(string_1.substring(0, int_5));
-                int var10002 = int_7 - 1;
-                int var10003 = int_10 - 1;
-                int var10004 = int_7 + 1;
-                this.textRenderer.getClass();
-                this.method_1886(int_9, var10002, var10003, var10004 + 9);
-            }
-        }
-        textRenderer.drawWithShadow(" /" + maximumPage, getBounds().x + getBounds().width + 2, getBounds().y, -1);
-    }
-    
-    private boolean isInvaildPage(String text) {
-        try {
-            int page = Integer.valueOf(text);
-            return page >= 1 && page <= maximumPage;
-        } catch (Exception e) {
-        }
-        return false;
-    }
-    
-}

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

@@ -23,7 +23,7 @@ public class SpeedCraftingButtonWidget extends ButtonWidget {
     }
     
     @Override
-    public void onPressed(int button, double mouseX, double mouseY) {
+    public void onPressed() {
         MinecraftClient.getInstance().openScreen(ScreenHelper.getLastContainerScreen());
         ScreenHelper.getLastOverlay().onInitialized();
         functional.performAutoCraft(ScreenHelper.getLastContainerScreen(), displaySupplier.get());

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

@@ -1,12 +1,10 @@
 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.ScreenHelper;
 import me.shedaniel.rei.gui.RecipeViewingScreen;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.render.item.ItemRenderer;
 import net.minecraft.item.ItemStack;
@@ -14,9 +12,10 @@ import net.minecraft.util.Identifier;
 
 import java.awt.*;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
-public class TabWidget extends DrawableHelper implements HighlightableWidget {
+public class TabWidget extends HighlightableWidget {
     
     private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
     
@@ -64,8 +63,8 @@ public class TabWidget extends DrawableHelper implements HighlightableWidget {
     }
     
     @Override
-    public List<IWidget> getListeners() {
-        return Lists.newArrayList();
+    public List<Widget> getInputListeners() {
+        return Collections.emptyList();
     }
     
     @Override

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

@@ -13,36 +13,36 @@ import net.minecraft.client.render.VertexFormats;
 import net.minecraft.util.math.MathHelper;
 
 import java.awt.*;
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
-public class TextFieldWidget extends DrawableHelper implements HighlightableWidget {
+public class TextFieldWidget extends HighlightableWidget {
     
     protected final TextRenderer textRenderer;
     public Function<String, String> stripInvaild;
-    private Rectangle bounds;
-    private String text;
-    private int maxLength;
     protected int focusedTicks;
-    private boolean hasBorder;
-    private boolean field_2096;
-    private boolean focused;
     protected boolean editable;
-    private boolean field_17037;
     protected int field_2103;
     protected int cursorMax;
     protected int cursorMin;
     protected int editableColor;
     protected int notEditableColor;
+    protected BiFunction<String, Integer, String> renderTextProvider;
+    private Rectangle bounds;
+    private String text;
+    private int maxLength;
+    private boolean hasBorder;
+    private boolean field_2096;
+    private boolean focused;
+    private boolean field_17037;
     private boolean visible;
     private String suggestion;
     private Consumer<String> changedListener;
     private Predicate<String> textPredicate;
-    protected BiFunction<String, Integer, String> renderTextProvider;
     
     public TextFieldWidget(Rectangle rectangle) {
         this.text = "";
@@ -70,6 +70,10 @@ public class TextFieldWidget extends DrawableHelper implements HighlightableWidg
         return suggestion;
     }
     
+    public void setSuggestion(String string_1) {
+        this.suggestion = string_1;
+    }
+    
     @Override
     public Rectangle getBounds() {
         return bounds;
@@ -349,8 +353,8 @@ public class TextFieldWidget extends DrawableHelper implements HighlightableWidg
     }
     
     @Override
-    public List<IWidget> getListeners() {
-        return new ArrayList<>();
+    public List<Widget> getInputListeners() {
+        return Collections.emptyList();
     }
     
     public boolean mouseClicked(double double_1, double double_2, int int_1) {
@@ -585,10 +589,6 @@ public class TextFieldWidget extends DrawableHelper implements HighlightableWidg
         this.visible = boolean_1;
     }
     
-    public void setSuggestion(String string_1) {
-        this.suggestion = string_1;
-    }
-    
     public int method_1889(int int_1) {
         return int_1 > this.text.length() ? this.bounds.x : this.bounds.x + this.textRenderer.getStringWidth(this.text.substring(0, int_1));
     }

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

@@ -0,0 +1,9 @@
+package me.shedaniel.rei.gui.widget;
+
+import net.minecraft.client.gui.Drawable;
+import net.minecraft.client.gui.DrawableHelper;
+import net.minecraft.client.gui.ScreenComponent;
+
+public abstract class Widget extends ScreenComponent implements Drawable {
+
+}

+ 2 - 2
src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableScreen.java

@@ -26,8 +26,8 @@ public abstract class MixinCraftingTableScreen extends ContainerScreen {
     }
     
     @Override
-    public InputListener method_19357() {
-        return super.method_19357();
+    public InputListener getFocused() {
+        return super.getFocused();
     }
     
     @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)

+ 2 - 2
src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryScreen.java

@@ -27,8 +27,8 @@ public abstract class MixinPlayerInventoryScreen extends AbstractPlayerInventory
     }
     
     @Override
-    public InputListener method_19357() {
-        return super.method_19357();
+    public InputListener getFocused() {
+        return super.getFocused();
     }
     
     @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)

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

@@ -2,7 +2,7 @@ package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.api.RecipeCategory;
-import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import net.minecraft.block.Blocks;
@@ -39,10 +39,10 @@ public class DefaultBlastingCategory implements RecipeCategory<DefaultBlastingDi
     }
     
     @Override
-    public List<IWidget> setupDisplay(Supplier<DefaultBlastingDisplay> recipeDisplaySupplier, Rectangle bounds) {
+    public List<Widget> 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) {
+        List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
             public void draw(int mouseX, int mouseY, float partialTicks) {
                 super.draw(mouseX, mouseY, partialTicks);

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

@@ -2,7 +2,7 @@ package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.api.RecipeCategory;
-import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import net.minecraft.block.Blocks;
@@ -40,10 +40,10 @@ public class DefaultBrewingCategory implements RecipeCategory<DefaultBrewingDisp
     }
     
     @Override
-    public List<IWidget> setupDisplay(Supplier<DefaultBrewingDisplay> recipeDisplaySupplier, Rectangle bounds) {
+    public List<Widget> 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) {
+        List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
             public void draw(int mouseX, int mouseY, float partialTicks) {
                 super.draw(mouseX, mouseY, partialTicks);

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

@@ -2,7 +2,7 @@ package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.api.RecipeCategory;
-import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import net.minecraft.block.Blocks;
@@ -39,9 +39,9 @@ public class DefaultCampfireCategory implements RecipeCategory<DefaultCampfireDi
     }
     
     @Override
-    public List<IWidget> setupDisplay(Supplier<DefaultCampfireDisplay> recipeDisplaySupplier, Rectangle bounds) {
+    public List<Widget> 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) {
+        List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
             public void draw(int mouseX, int mouseY, float partialTicks) {
                 super.draw(mouseX, mouseY, partialTicks);

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

@@ -3,7 +3,7 @@ package me.shedaniel.rei.plugin;
 import com.google.common.collect.Lists;
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.api.RecipeCategory;
-import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import net.minecraft.block.Blocks;
@@ -39,9 +39,9 @@ public class DefaultCraftingCategory implements RecipeCategory<DefaultCraftingDi
     }
     
     @Override
-    public List<IWidget> setupDisplay(Supplier<DefaultCraftingDisplay> recipeDisplaySupplier, Rectangle bounds) {
+    public List<Widget> 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) {
+        List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
             public void draw(int mouseX, int mouseY, float partialTicks) {
                 super.draw(mouseX, mouseY, partialTicks);

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

@@ -2,7 +2,7 @@ package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.api.RecipeCategory;
-import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import net.minecraft.block.Blocks;
@@ -39,9 +39,9 @@ public class DefaultSmeltingCategory implements RecipeCategory<DefaultSmeltingDi
     }
     
     @Override
-    public List<IWidget> setupDisplay(Supplier<DefaultSmeltingDisplay> recipeDisplaySupplier, Rectangle bounds) {
+    public List<Widget> 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) {
+        List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
             public void draw(int mouseX, int mouseY, float partialTicks) {
                 super.draw(mouseX, mouseY, partialTicks);

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

@@ -2,7 +2,7 @@ package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.api.RecipeCategory;
-import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import net.minecraft.block.Blocks;
@@ -39,9 +39,9 @@ public class DefaultSmokingCategory implements RecipeCategory<DefaultSmokingDisp
     }
     
     @Override
-    public List<IWidget> setupDisplay(Supplier<DefaultSmokingDisplay> recipeDisplaySupplier, Rectangle bounds) {
+    public List<Widget> 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) {
+        List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
             public void draw(int mouseX, int mouseY, float partialTicks) {
                 super.draw(mouseX, mouseY, partialTicks);

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

@@ -2,7 +2,7 @@ package me.shedaniel.rei.plugin;
 
 import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.api.RecipeCategory;
-import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.ItemSlotWidget;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import net.minecraft.block.Blocks;
@@ -38,9 +38,9 @@ public class DefaultStoneCuttingCategory implements RecipeCategory<DefaultStoneC
     }
     
     @Override
-    public List<IWidget> setupDisplay(Supplier<DefaultStoneCuttingDisplay> recipeDisplaySupplier, Rectangle bounds) {
+    public List<Widget> 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) {
+        List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
             public void draw(int mouseX, int mouseY, float partialTicks) {
                 super.draw(mouseX, mouseY, partialTicks);

+ 0 - 11
src/main/java/me/shedaniel/rei/utils/ClothRegistry.java

@@ -2,13 +2,10 @@ package me.shedaniel.rei.utils;
 
 import me.shedaniel.cloth.api.EventPriority;
 import me.shedaniel.cloth.hooks.ClothHooks;
-import me.shedaniel.cloth.hooks.ClothModMenuHooks;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.TabGetter;
-import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.RecipeHelperImpl;
 import me.shedaniel.rei.client.ScreenHelper;
-import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
 import net.minecraft.client.gui.widget.RecipeBookButtonWidget;
@@ -17,14 +14,6 @@ import net.minecraft.item.ItemGroup;
 public class ClothRegistry {
     
     public static void register() {
-        Runnable configRunnable = () -> ClientHelper.openConfigWindow(MinecraftClient.getInstance().currentScreen, false);
-        ClothModMenuHooks.CONFIG_BUTTON_EVENT.registerListener(event -> {
-            if (event.getModContainer() != null && event.getModContainer().getMetadata().getId().equalsIgnoreCase("roughlyenoughitems")) {
-                event.setEnabled(true);
-                event.setClickedRunnable(configRunnable);
-                event.setCancelled(true);
-            }
-        }, EventPriority.LOWEST);
         ClothHooks.CLIENT_SYNC_RECIPES.registerListener(event -> {
             ((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(event.getManager());
         });

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

@@ -2,7 +2,7 @@
   "id": "roughlyenoughitems",
   "name": "RoughlyEnoughItems",
   "description": "To allow players to view items and recipes. Version: ${version}",
-  "version": "2.4.1",
+  "version": "2.4.2",
   "side": "client",
   "authors": [
     "Danielshe"