瀏覽代碼

v2.6.0.78

Unknown 6 年之前
父節點
當前提交
f85ac9b66d
共有 31 個文件被更改,包括 219 次插入177 次删除
  1. 6 1
      CHANGELOG.md
  2. 1 1
      gradle.properties
  3. 0 1
      src/main/java/me/shedaniel/rei/api/RecipeCategory.java
  4. 2 1
      src/main/java/me/shedaniel/rei/client/ConfigObject.java
  5. 1 2
      src/main/java/me/shedaniel/rei/client/ScreenHelper.java
  6. 104 31
      src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
  7. 5 4
      src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
  8. 1 1
      src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java
  9. 1 1
      src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java
  10. 4 4
      src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java
  11. 1 3
      src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java
  12. 1 1
      src/main/java/me/shedaniel/rei/gui/widget/LabelWidget.java
  13. 2 2
      src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java
  14. 1 1
      src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java
  15. 19 21
      src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java
  16. 2 1
      src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java
  17. 0 36
      src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableScreen.java
  18. 2 9
      src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryScreen.java
  19. 38 0
      src/main/java/me/shedaniel/rei/mixin/MixinGameRenderer.java
  20. 0 37
      src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryScreen.java
  21. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultBlastingCategory.java
  22. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultBrewingCategory.java
  23. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultCampfireCategory.java
  24. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java
  25. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java
  26. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultSmokingCategory.java
  27. 2 2
      src/main/java/me/shedaniel/rei/plugin/DefaultStoneCuttingCategory.java
  28. 9 1
      src/main/java/me/shedaniel/rei/utils/ClothRegistry.java
  29. 2 0
      src/main/resources/assets/roughlyenoughitems/lang/en_us.json
  30. 1 1
      src/main/resources/fabric.mod.json
  31. 2 3
      src/main/resources/roughlyenoughitems.client.json

+ 6 - 1
CHANGELOG.md

@@ -1,5 +1,10 @@
+## v2.6.0.78
+- Added config to force enable april fools
+- Fix crash related to `getTotalPage()`
+- Fix depth on overlay
+- Less mixins
 ## v2.6.0.77
-- fish
+- fish (April Fools [Download](https://minecraft.curseforge.com/projects/roughly-enough-items/files/2693786))
 ## v2.6.0.76
 - New DisplayVisibilityHandler
 - Fixed [#49](https://github.com/shedaniel/RoughlyEnoughItems/issues/49): REI Overlay added twice

+ 1 - 1
gradle.properties

@@ -1,4 +1,4 @@
-mod_version=2.6.0.77
+mod_version=2.6.0.78
 minecraft_version=19w13b
 yarn_version=19w13b.1
 fabric_version=0.2.6.117

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

@@ -1,6 +1,5 @@
 package me.shedaniel.rei.api;
 
-import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.gui.RecipeViewingScreen;
 import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
 import me.shedaniel.rei.gui.widget.Widget;

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

@@ -48,7 +48,8 @@ public class ConfigObject {
     @Comment("Enable support for old REI plugins which uses registerSpeedCraft")
     public boolean enableLegacySpeedCraftSupport = false;
     
-    public boolean fish = true;
+    @Comment("Force enable 2019 REI April Fools' joke")
+    public boolean aprilFoolsFish2019 = false;
     
     @Comment("The location of choose page dialog")
     public RelativePoint choosePageDialogPoint = new RelativePoint(.5, .5);

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

@@ -2,7 +2,6 @@ package me.shedaniel.rei.client;
 
 import com.google.common.collect.Lists;
 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;
@@ -17,7 +16,7 @@ import java.util.List;
 
 public class ScreenHelper implements ClientModInitializer {
     
-    public static TextFieldWidget searchField;
+    public static ContainerScreenOverlay.SearchFieldWidget searchField;
     public static List<ItemStack> inventoryStacks = Lists.newArrayList();
     private static boolean overlayVisible = true;
     private static ContainerScreenOverlay overlay;

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

@@ -10,6 +10,7 @@ import me.shedaniel.rei.client.Weather;
 import me.shedaniel.rei.gui.widget.*;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.audio.PositionedSoundInstance;
+import net.minecraft.client.font.TextRenderer;
 import net.minecraft.client.gui.*;
 import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.resource.language.I18n;
@@ -23,10 +24,8 @@ import net.minecraft.util.math.MathHelper;
 import net.minecraft.world.GameMode;
 
 import java.awt.*;
-import java.util.Collections;
-import java.util.LinkedList;
+import java.util.*;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 public class ContainerScreenOverlay extends AbstractParentElement implements Drawable {
@@ -108,8 +107,8 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
             }
             
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
-                super.render(mouseX, mouseY, partialTicks);
+            public void render(int mouseX, int mouseY, float delta) {
+                super.render(mouseX, mouseY, delta);
                 GuiLighting.disable();
                 if (ClientHelper.isCheating())
                     fill(getBounds().x, getBounds().y, getBounds().x + 20, getBounds().y + 20, new Color(255, 0, 0, 42).getRGB());
@@ -141,9 +140,9 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
                 }
                 
                 @Override
-                public void render(int mouseX, int mouseY, float partialTicks) {
+                public void render(int mouseX, int mouseY, float delta) {
                     text = getGameModeShortText(getCurrentGameMode());
-                    super.render(mouseX, mouseY, partialTicks);
+                    super.render(mouseX, mouseY, delta);
                 }
                 
                 @Override
@@ -162,8 +161,8 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
                 }
                 
                 @Override
-                public void render(int mouseX, int mouseY, float partialTicks) {
-                    super.render(mouseX, mouseY, partialTicks);
+                public void render(int mouseX, int mouseY, float delta) {
+                    super.render(mouseX, mouseY, delta);
                     GuiLighting.disable();
                     MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE);
                     GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
@@ -182,10 +181,10 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
         }
         widgets.add(new ClickableLabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
+            public void render(int mouseX, int mouseY, float delta) {
                 page = MathHelper.clamp(page, 0, getTotalPage());
                 this.text = String.format("%s/%s", page + 1, getTotalPage() + 1);
-                super.render(mouseX, mouseY, partialTicks);
+                super.render(mouseX, mouseY, delta);
             }
             
             @Override
@@ -205,16 +204,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
             }
         });
         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) {
-                        setText("");
-                        return true;
-                    }
-                    return super.mouseClicked(double_1, double_2, int_1);
-                }
-            };
+            ScreenHelper.searchField = new SearchFieldWidget(0, 0, 0, 0);
         ScreenHelper.searchField.setChangedListener(s -> {
             searchTerm = s;
             itemListOverlay.updateList(getItemListArea(), page, searchTerm);
@@ -229,6 +219,12 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
                     RoughlyEnoughItemsCore.getConfigManager().toggleCraftableOnly();
                     itemListOverlay.updateList(getItemListArea(), page, searchTerm);
                 }
+                
+                @Override
+                public void render(int mouseX, int mouseY, float delta) {
+                    blitOffset = 600f;
+                    super.render(mouseX, mouseY, delta);
+                }
             });
         
         this.itemListOverlay.updateList(getItemListArea(), page, searchTerm);
@@ -310,7 +306,7 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
     }
     
     @Override
-    public void render(int mouseX, int mouseY, float partialTicks) {
+    public void render(int mouseX, int mouseY, float delta) {
         List<ItemStack> currentStacks = ClientHelper.getInventoryItemsTypes();
         if (getLeft() != lastLeft)
             init(true);
@@ -320,17 +316,66 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
         }
         GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
         GuiLighting.disable();
-        this.renderWidgets(mouseX, mouseY, partialTicks);
-        GuiLighting.disable();
+        this.renderWidgets(mouseX, mouseY, delta);
+    }
+    
+    public void lateRender(int mouseX, int mouseY, float delta) {
+        ScreenHelper.searchField.laterRender(mouseX, mouseY, delta);
         Screen currentScreen = MinecraftClient.getInstance().currentScreen;
         if (!(currentScreen instanceof RecipeViewingScreen) || !((RecipeViewingScreen) currentScreen).choosePageActivated)
-            QUEUED_TOOLTIPS.stream().filter(queuedTooltip -> queuedTooltip != null).forEach(queuedTooltip -> {
-                GlStateManager.translatef(0, 0, 600);
-                MinecraftClient.getInstance().currentScreen.renderTooltip(queuedTooltip.getText(), queuedTooltip.getLocation().x, queuedTooltip.getLocation().y);
-                GlStateManager.translatef(0, 0, -600);
-            });
+            QUEUED_TOOLTIPS.stream().filter(queuedTooltip -> queuedTooltip != null).forEach(queuedTooltip -> renderTooltip(queuedTooltip.getText(), queuedTooltip.getLocation().x, queuedTooltip.getLocation().y));
         QUEUED_TOOLTIPS.clear();
-        GuiLighting.disable();
+    }
+    
+    public void renderTooltip(List<String> list_1, int int_1, int int_2) {
+        TextRenderer font = MinecraftClient.getInstance().textRenderer;
+        Window window = MinecraftClient.getInstance().window;
+        if (!list_1.isEmpty()) {
+            GlStateManager.disableRescaleNormal();
+            GuiLighting.disable();
+            GlStateManager.disableLighting();
+            int int_3 = 0;
+            Iterator var5 = list_1.iterator();
+            while (var5.hasNext()) {
+                String string_1 = (String) var5.next();
+                int int_4 = font.getStringWidth(string_1);
+                if (int_4 > int_3)
+                    int_3 = int_4;
+            }
+            int int_5 = int_1 + 12;
+            int int_6 = int_2 - 12;
+            int int_8 = 8;
+            if (list_1.size() > 1)
+                int_8 += 2 + (list_1.size() - 1) * 10;
+            if (int_5 + int_3 > window.getScaledWidth())
+                int_5 -= 28 + int_3;
+            if (int_6 + int_8 + 6 > window.getScaledHeight())
+                int_6 = window.getScaledHeight() - int_8 - 6;
+            
+            this.blitOffset = 1000f;
+            this.fillGradient(int_5 - 3, int_6 - 4, int_5 + int_3 + 3, int_6 - 3, -267386864, -267386864);
+            this.fillGradient(int_5 - 3, int_6 + int_8 + 3, int_5 + int_3 + 3, int_6 + int_8 + 4, -267386864, -267386864);
+            this.fillGradient(int_5 - 3, int_6 - 3, int_5 + int_3 + 3, int_6 + int_8 + 3, -267386864, -267386864);
+            this.fillGradient(int_5 - 4, int_6 - 3, int_5 - 3, int_6 + int_8 + 3, -267386864, -267386864);
+            this.fillGradient(int_5 + int_3 + 3, int_6 - 3, int_5 + int_3 + 4, int_6 + int_8 + 3, -267386864, -267386864);
+            this.fillGradient(int_5 - 3, int_6 - 3 + 1, int_5 - 3 + 1, int_6 + int_8 + 3 - 1, 1347420415, 1344798847);
+            this.fillGradient(int_5 + int_3 + 2, int_6 - 3 + 1, int_5 + int_3 + 3, int_6 + int_8 + 3 - 1, 1347420415, 1344798847);
+            this.fillGradient(int_5 - 3, int_6 - 3, int_5 + int_3 + 3, int_6 - 3 + 1, 1347420415, 1347420415);
+            this.fillGradient(int_5 - 3, int_6 + int_8 + 2, int_5 + int_3 + 3, int_6 + int_8 + 3, 1344798847, 1344798847);
+            
+            for(int int_12 = 0; int_12 < list_1.size(); ++int_12) {
+                GlStateManager.disableDepthTest();
+                font.drawWithShadow(list_1.get(int_12), (float) int_5, (float) int_6, -1);
+                GlStateManager.enableDepthTest();
+                if (int_12 == 0)
+                    int_6 += 2;
+                int_6 += 10;
+            }
+            this.blitOffset = 0.0F;
+            GlStateManager.enableLighting();
+            GuiLighting.enable();
+            GlStateManager.enableRescaleNormal();
+        }
     }
     
     private boolean hasSameListContent(List<ItemStack> list1, List<ItemStack> list2) {
@@ -389,7 +434,9 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
     }
     
     private int getTotalPage() {
-        return MathHelper.ceil(itemListOverlay.getCurrentDisplayed().size() / itemListOverlay.getTotalSlotsPerPage());
+        if (itemListOverlay.getTotalSlotsPerPage() > 0)
+            return MathHelper.ceil(itemListOverlay.getCurrentDisplayed().size() / itemListOverlay.getTotalSlotsPerPage());
+        return 0;
     }
     
     @Override
@@ -467,4 +514,30 @@ public class ContainerScreenOverlay extends AbstractParentElement implements Dra
         return false;
     }
     
+    public static class SearchFieldWidget extends TextFieldWidget {
+        public SearchFieldWidget(int x, int y, int width, int height) {
+            super(x, y, width, height);
+        }
+        
+        public void laterRender(int int_1, int int_2, float float_1) {
+            GuiLighting.disable();
+            GlStateManager.disableDepthTest();
+            super.render(int_1, int_2, float_1);
+            GlStateManager.enableDepthTest();
+        }
+        
+        @Override
+        public boolean mouseClicked(double double_1, double double_2, int int_1) {
+            if (isVisible() && getBounds().contains(double_1, double_2) && int_1 == 1) {
+                setText("");
+                return true;
+            }
+            return super.mouseClicked(double_1, double_2, int_1);
+        }
+        
+        @Override
+        public void render(int int_1, int int_2, float float_1) {
+        }
+    }
+    
 }

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

@@ -141,9 +141,9 @@ public class RecipeViewingScreen extends Screen {
         });
         widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 7, "") {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
+            public void render(int mouseX, int mouseY, float delta) {
                 this.text = selectedCategory.getCategoryName();
-                super.render(mouseX, mouseY, partialTicks);
+                super.render(mouseX, mouseY, delta);
             }
             
             @Override
@@ -194,9 +194,9 @@ public class RecipeViewingScreen extends Screen {
         });
         widgets.add(new ClickableLabelWidget((int) bounds.getCenterX(), (int) bounds.getY() + 23, "") {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
+            public void render(int mouseX, int mouseY, float delta) {
                 this.text = String.format("%d/%d", page + 1, getTotalPages(selectedCategory));
-                super.render(mouseX, mouseY, partialTicks);
+                super.render(mouseX, mouseY, delta);
             }
             
             @Override
@@ -334,6 +334,7 @@ public class RecipeViewingScreen extends Screen {
         GuiLighting.disable();
         tabs.stream().filter(TabWidget::isSelected).forEach(tabWidget -> tabWidget.render(mouseX, mouseY, delta));
         ScreenHelper.getLastOverlay().render(mouseX, mouseY, delta);
+        ScreenHelper.getLastOverlay().lateRender(mouseX, mouseY, delta);
         if (choosePageActivated) {
             blitOffset = 500.0f;
             this.fillGradient(0, 0, this.width, this.height, -1072689136, -804253680);

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

@@ -56,7 +56,7 @@ public abstract class ButtonWidget extends HighlightableWidget {
     }
     
     @Override
-    public void render(int mouseX, int mouseY, float partialTicks) {
+    public void render(int mouseX, int mouseY, float delta) {
         int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
         TextRenderer textRenderer = minecraft.textRenderer;
         minecraft.getTextureManager().bindTexture(AbstractButtonWidget.WIDGETS_LOCATION);

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

@@ -15,7 +15,7 @@ public abstract class ClickableLabelWidget extends LabelWidget {
     }
     
     @Override
-    public void render(int mouseX, int mouseY, float partialTicks) {
+    public void render(int mouseX, int mouseY, float delta) {
         int colour = -1;
         if (isHovered(mouseX, mouseY))
             colour = hoveredColor;

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

@@ -28,18 +28,18 @@ public abstract class CraftableToggleButtonWidget extends ButtonWidget {
     }
     
     @Override
-    public void render(int mouseX, int mouseY, float partialTicks) {
+    public void render(int mouseX, int mouseY, float delta) {
         GuiLighting.disable();
-        super.render(mouseX, mouseY, partialTicks);
+        super.render(mouseX, mouseY, delta);
         
         GuiLighting.enableForItems();
-        this.itemRenderer.zOffset = 0.0F;
+        this.itemRenderer.zOffset = this.blitOffset;
         this.itemRenderer.renderGuiItem(new ItemStack(Blocks.CRAFTING_TABLE), getBounds().x + 2, getBounds().y + 2);
         this.itemRenderer.zOffset = 0.0F;
         GuiLighting.disable();
         MinecraftClient.getInstance().getTextureManager().bindTexture(CHEST_GUI_TEXTURE);
         GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
-        this.blitOffset = 100f;
+        this.blitOffset += 100f;
         this.blit(getBounds().x, getBounds().y, (56 + (RoughlyEnoughItemsCore.getConfigManager().isCraftableOnlyEnabled() ? 0 : 20)), 202, 20, 20);
         this.blitOffset = 0f;
     }

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

@@ -16,13 +16,11 @@ import net.minecraft.util.math.MathHelper;
 
 import java.awt.*;
 import java.util.Collections;
-import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 
 public class ItemSlotWidget extends HighlightableWidget {
     
-    private static final Date DATE = new Date();
     private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
     private List<ItemStack> itemList = new LinkedList<>();
     private boolean drawBackground, showToolTips, clickToMoreRecipes, drawHighlightedBackground;
@@ -77,7 +75,7 @@ public class ItemSlotWidget extends HighlightableWidget {
             GlStateManager.enableDepthTest();
         }
         if (!itemStack.isEmpty()) {
-            if (!isHighlighted(mouseX, mouseY) && DATE.getMonth() == 3 && DATE.getDay() == 1 && RoughlyEnoughItemsCore.getConfigManager().getConfig().fish)
+            if (RoughlyEnoughItemsCore.getConfigManager().getConfig().aprilFoolsFish2019 && !isHighlighted(mouseX, mouseY))
                 itemStack = Items.TROPICAL_FISH.getDefaultStack();
             GuiLighting.enableForItems();
             ItemRenderer itemRenderer = minecraft.getItemRenderer();

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

@@ -33,7 +33,7 @@ public class LabelWidget extends HighlightableWidget {
     }
     
     @Override
-    public void render(int mouseX, int mouseY, float partialTicks) {
+    public void render(int mouseX, int mouseY, float delta) {
         drawCenteredString(textRenderer, text, x, y, -1);
     }
     

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

@@ -28,9 +28,9 @@ public class SpeedCraftingButtonWidget extends ButtonWidget {
     }
     
     @Override
-    public void render(int mouseX, int mouseY, float partialTicks) {
+    public void render(int mouseX, int mouseY, float delta) {
         this.enabled = functional != null && functional.acceptRecipe(ScreenHelper.getLastContainerScreen(), displaySupplier.get());
-        super.render(mouseX, mouseY, partialTicks);
+        super.render(mouseX, mouseY, delta);
     }
     
     @Override

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

@@ -65,7 +65,7 @@ public class TabWidget extends HighlightableWidget {
     }
     
     @Override
-    public void render(int mouseX, int mouseY, float partialTicks) {
+    public void render(int mouseX, int mouseY, float delta) {
         if (shown) {
             int l = (int) this.bounds.getCenterX() - 8, i1 = (int) this.bounds.getCenterY() - 6;
             

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

@@ -20,7 +20,7 @@ import java.util.function.Predicate;
 
 public class TextFieldWidget extends HighlightableWidget {
     
-    protected final TextRenderer textRenderer;
+    protected final TextRenderer font;
     public Function<String, String> stripInvaild;
     protected int focusedTicks;
     protected boolean editable;
@@ -55,7 +55,7 @@ public class TextFieldWidget extends HighlightableWidget {
         this.renderTextProvider = (string_1, integer_1) -> {
             return string_1;
         };
-        this.textRenderer = minecraft.textRenderer;
+        this.font = minecraft.textRenderer;
         this.bounds = rectangle;
         this.stripInvaild = s -> SharedConstants.stripInvalidChars(s);
     }
@@ -371,8 +371,8 @@ public class TextFieldWidget extends HighlightableWidget {
                     int_2 -= 4;
                 }
                 
-                String string_1 = this.textRenderer.trimToWidth(this.text.substring(this.field_2103), this.getWidth());
-                this.method_1883(this.textRenderer.trimToWidth(string_1, int_2).length() + this.field_2103);
+                String string_1 = this.font.trimToWidth(this.text.substring(this.field_2103), this.getWidth());
+                this.method_1883(this.font.trimToWidth(string_1, int_2).length() + this.field_2103);
                 return true;
             } else {
                 return false;
@@ -390,7 +390,7 @@ public class TextFieldWidget extends HighlightableWidget {
             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.textRenderer.trimToWidth(this.text.substring(this.field_2103), this.getWidth());
+            String string_1 = this.font.trimToWidth(this.text.substring(this.field_2103), this.getWidth());
             boolean boolean_1 = int_4 >= 0 && int_4 <= string_1.length();
             boolean boolean_2 = this.focused && this.focusedTicks / 6 % 2 == 0 && boolean_1;
             int int_6 = this.hasBorder ? this.bounds.x + 4 : this.bounds.x;
@@ -402,7 +402,7 @@ public class TextFieldWidget extends HighlightableWidget {
             
             if (!string_1.isEmpty()) {
                 String string_2 = boolean_1 ? string_1.substring(0, int_4) : string_1;
-                int_8 = this.textRenderer.drawWithShadow((String) this.renderTextProvider.apply(string_2, this.field_2103), (float) int_6, (float) int_7, color);
+                int_8 = this.font.drawWithShadow((String) this.renderTextProvider.apply(string_2, this.field_2103), (float) int_6, (float) int_7, color);
             }
             
             boolean boolean_3 = this.cursorMax < this.text.length() || this.text.length() >= this.getMaxLength();
@@ -415,11 +415,11 @@ public class TextFieldWidget extends HighlightableWidget {
             }
             
             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);
+                this.font.drawWithShadow((String) this.renderTextProvider.apply(string_1.substring(int_4), this.cursorMax), (float) int_8, (float) int_7, color);
             }
             
             if (!boolean_3 && text.isEmpty() && this.suggestion != null) {
-                this.textRenderer.drawWithShadow(this.textRenderer.trimToWidth(this.suggestion, this.getWidth()), (float) int_6, (float) int_7, -8355712);
+                this.font.drawWithShadow(this.font.trimToWidth(this.suggestion, this.getWidth()), (float) int_6, (float) int_7, -8355712);
             }
             
             int var10002;
@@ -429,22 +429,20 @@ public class TextFieldWidget extends HighlightableWidget {
                     int var10001 = int_7 - 1;
                     var10002 = int_9 + 1;
                     var10003 = int_7 + 1;
-                    this.textRenderer.getClass();
+                    this.font.getClass();
                     fill(int_9, var10001, var10002, var10003 + 9, -3092272);
                 } else {
-                    this.textRenderer.drawWithShadow("_", (float) int_9, (float) int_7, color);
+                    this.font.drawWithShadow("_", (float) int_9, (float) int_7, color);
                 }
             }
             
             if (int_5 != int_4) {
-                int int_10 = int_6 + this.textRenderer.getStringWidth(string_1.substring(0, int_5));
+                int int_10 = int_6 + this.font.getStringWidth(string_1.substring(0, int_5));
                 var10002 = int_7 - 1;
                 var10003 = int_10 - 1;
                 int var10004 = int_7 + 1;
-                this.textRenderer.getClass();
                 this.method_1886(int_9, var10002, var10003, var10004 + 9);
             }
-            
         }
     }
     
@@ -477,10 +475,10 @@ public class TextFieldWidget extends HighlightableWidget {
         GlStateManager.enableColorLogicOp();
         GlStateManager.logicOp(GlStateManager.LogicOp.OR_REVERSE);
         bufferBuilder_1.begin(7, VertexFormats.POSITION);
-        bufferBuilder_1.vertex((double) int_1, (double) int_4, 0.0D).next();
-        bufferBuilder_1.vertex((double) int_3, (double) int_4, 0.0D).next();
-        bufferBuilder_1.vertex((double) int_3, (double) int_2, 0.0D).next();
-        bufferBuilder_1.vertex((double) int_1, (double) int_2, 0.0D).next();
+        bufferBuilder_1.vertex((double) int_1, (double) int_4, blitOffset + 50d).next();
+        bufferBuilder_1.vertex((double) int_3, (double) int_4, blitOffset + 50d).next();
+        bufferBuilder_1.vertex((double) int_3, (double) int_2, blitOffset + 50d).next();
+        bufferBuilder_1.vertex((double) int_1, (double) int_2, blitOffset + 50d).next();
         tessellator_1.draw();
         GlStateManager.disableColorLogicOp();
         GlStateManager.enableTexture();
@@ -554,16 +552,16 @@ public class TextFieldWidget extends HighlightableWidget {
     public void method_1884(int int_1) {
         int int_2 = this.text.length();
         this.cursorMin = MathHelper.clamp(int_1, 0, int_2);
-        if (this.textRenderer != null) {
+        if (this.font != null) {
             if (this.field_2103 > int_2) {
                 this.field_2103 = int_2;
             }
             
             int int_3 = this.getWidth();
-            String string_1 = this.textRenderer.trimToWidth(this.text.substring(this.field_2103), int_3);
+            String string_1 = this.font.trimToWidth(this.text.substring(this.field_2103), int_3);
             int int_4 = string_1.length() + this.field_2103;
             if (this.cursorMin == this.field_2103) {
-                this.field_2103 -= this.textRenderer.trimToWidth(this.text, int_3, true).length();
+                this.field_2103 -= this.font.trimToWidth(this.text, int_3, true).length();
             }
             
             if (this.cursorMin > int_4) {
@@ -590,7 +588,7 @@ public class TextFieldWidget extends HighlightableWidget {
     }
     
     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));
+        return int_1 > this.text.length() ? this.bounds.x : this.bounds.x + this.font.getStringWidth(this.text.substring(0, int_1));
     }
     
 }

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

@@ -1,8 +1,8 @@
 package me.shedaniel.rei.mixin;
 
-import me.shedaniel.rei.listeners.CreativePlayerInventoryScreenHooks;
 import me.shedaniel.rei.client.ScreenHelper;
 import me.shedaniel.rei.listeners.ContainerScreenHooks;
+import me.shedaniel.rei.listeners.CreativePlayerInventoryScreenHooks;
 import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.Screen;
 import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
@@ -58,6 +58,7 @@ public class MixinContainerScreen extends Screen implements ContainerScreenHooks
         return focusedSlot;
     }
     
+    // TODO: Make into Cloth events
     @Inject(method = "keyPressed(III)Z", at = @At("HEAD"), cancellable = true)
     public void keyPressed(int int_1, int int_2, int int_3, CallbackInfoReturnable<Boolean> ci) {
         if (minecraft.currentScreen instanceof CreativePlayerInventoryScreen) {

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

@@ -1,36 +0,0 @@
-package me.shedaniel.rei.mixin;
-
-import net.minecraft.client.gui.ContainerScreen;
-import net.minecraft.client.gui.container.CraftingTableScreen;
-import net.minecraft.client.gui.recipebook.RecipeBookGui;
-import net.minecraft.container.Container;
-import net.minecraft.entity.player.PlayerInventory;
-import net.minecraft.text.TextComponent;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
-
-@Mixin(CraftingTableScreen.class)
-public abstract class MixinCraftingTableScreen extends ContainerScreen {
-    
-    @Shadow
-    @Final
-    private RecipeBookGui recipeBookGui;
-    
-    public MixinCraftingTableScreen(Container container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
-        super(container_1, playerInventory_1, textComponent_1);
-    }
-    
-    @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
-    public void mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> ci) {
-        if (recipeBookGui.mouseClicked(mouseX, mouseY, button)) {
-            method_20084(recipeBookGui);
-            ci.setReturnValue(true);
-            ci.cancel();
-        }
-    }
-    
-}

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

@@ -43,6 +43,8 @@ public abstract class MixinCreativePlayerInventoryScreen extends AbstractPlayerI
         return field_2888;
     }
     
+    // Inject to fix pressing T to switch tab
+    // TODO: Make into Cloth events
     @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())
@@ -52,13 +54,4 @@ 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 (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().mouseClicked(i, j, k)) {
-                ci.setReturnValue(true);
-                ci.cancel();
-            }
-    }
-    
 }

+ 38 - 0
src/main/java/me/shedaniel/rei/mixin/MixinGameRenderer.java

@@ -0,0 +1,38 @@
+package me.shedaniel.rei.mixin;
+
+import me.shedaniel.cloth.api.ClientUtils;
+import me.shedaniel.rei.client.ScreenHelper;
+import me.shedaniel.rei.listeners.CreativePlayerInventoryScreenHooks;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.ContainerScreen;
+import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
+import net.minecraft.client.render.GameRenderer;
+import net.minecraft.item.ItemGroup;
+import net.minecraft.resource.SynchronousResourceReloadListener;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(GameRenderer.class)
+public abstract class MixinGameRenderer implements AutoCloseable, SynchronousResourceReloadListener {
+    
+    @Shadow
+    @Final
+    private MinecraftClient client;
+    
+    // TODO: Move to Cloth next snapshot
+    @Inject(method = "render(FJZ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Screen;render(IIF)V", shift = At.Shift.AFTER, ordinal = 0))
+    public void renderScreen(float float_1, long long_1, boolean boolean_1, CallbackInfo ci) {
+        if (client.currentScreen instanceof ContainerScreen) {
+            if (client.currentScreen instanceof CreativePlayerInventoryScreen) {
+                CreativePlayerInventoryScreenHooks creativePlayerInventoryScreenHooks = (CreativePlayerInventoryScreenHooks) client.currentScreen;
+                if (creativePlayerInventoryScreenHooks.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
+                    return;
+            }
+            ScreenHelper.getLastOverlay().lateRender((int) ClientUtils.getInstance().getMouseX(), (int) ClientUtils.getInstance().getMouseY(), client.getLastFrameDuration());
+        }
+    }
+}

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

@@ -1,37 +0,0 @@
-package me.shedaniel.rei.mixin;
-
-import net.minecraft.client.gui.ingame.AbstractPlayerInventoryScreen;
-import net.minecraft.client.gui.ingame.PlayerInventoryScreen;
-import net.minecraft.client.gui.ingame.RecipeBookProvider;
-import net.minecraft.client.gui.recipebook.RecipeBookGui;
-import net.minecraft.container.PlayerContainer;
-import net.minecraft.entity.player.PlayerInventory;
-import net.minecraft.text.TextComponent;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
-
-@Mixin(PlayerInventoryScreen.class)
-public abstract class MixinPlayerInventoryScreen extends AbstractPlayerInventoryScreen<PlayerContainer> implements RecipeBookProvider {
-    
-    @Shadow
-    @Final
-    private RecipeBookGui recipeBook;
-    
-    public MixinPlayerInventoryScreen(PlayerContainer container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
-        super(container_1, playerInventory_1, textComponent_1);
-    }
-    
-    @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
-    public void mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> ci) {
-        if (recipeBook.mouseClicked(mouseX, mouseY, button)) {
-            method_20084(recipeBook);
-            ci.setReturnValue(true);
-            ci.cancel();
-        }
-    }
-    
-}

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

@@ -44,8 +44,8 @@ public class DefaultBlastingCategory implements RecipeCategory<DefaultBlastingDi
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
         List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
-                super.render(mouseX, mouseY, partialTicks);
+            public void render(int mouseX, int mouseY, float delta) {
+                super.render(mouseX, mouseY, delta);
                 GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
                 GuiLighting.disable();
                 MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE);

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

@@ -45,8 +45,8 @@ public class DefaultBrewingCategory implements RecipeCategory<DefaultBrewingDisp
         Point startPoint = new Point((int) bounds.getCenterX() - 52, (int) bounds.getCenterY() - 29);
         List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
-                super.render(mouseX, mouseY, partialTicks);
+            public void render(int mouseX, int mouseY, float delta) {
+                super.render(mouseX, mouseY, delta);
                 GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
                 GuiLighting.disable();
                 MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE);

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

@@ -43,8 +43,8 @@ public class DefaultCampfireCategory implements RecipeCategory<DefaultCampfireDi
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
         List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
-                super.render(mouseX, mouseY, partialTicks);
+            public void render(int mouseX, int mouseY, float delta) {
+                super.render(mouseX, mouseY, delta);
                 GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
                 GuiLighting.disable();
                 MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE);

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

@@ -43,8 +43,8 @@ public class DefaultCraftingCategory implements RecipeCategory<DefaultCraftingDi
         Point startPoint = new Point((int) bounds.getCenterX() - 58, (int) bounds.getCenterY() - 27);
         List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
-                super.render(mouseX, mouseY, partialTicks);
+            public void render(int mouseX, int mouseY, float delta) {
+                super.render(mouseX, mouseY, delta);
                 GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
                 GuiLighting.disable();
                 MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE);

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

@@ -43,8 +43,8 @@ public class DefaultSmeltingCategory implements RecipeCategory<DefaultSmeltingDi
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
         List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
-                super.render(mouseX, mouseY, partialTicks);
+            public void render(int mouseX, int mouseY, float delta) {
+                super.render(mouseX, mouseY, delta);
                 GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
                 GuiLighting.disable();
                 MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE);

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

@@ -43,8 +43,8 @@ public class DefaultSmokingCategory implements RecipeCategory<DefaultSmokingDisp
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
         List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
-                super.render(mouseX, mouseY, partialTicks);
+            public void render(int mouseX, int mouseY, float delta) {
+                super.render(mouseX, mouseY, delta);
                 GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
                 GuiLighting.disable();
                 MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE);

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

@@ -42,8 +42,8 @@ public class DefaultStoneCuttingCategory implements RecipeCategory<DefaultStoneC
         Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 13);
         List<Widget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
             @Override
-            public void render(int mouseX, int mouseY, float partialTicks) {
-                super.render(mouseX, mouseY, partialTicks);
+            public void render(int mouseX, int mouseY, float delta) {
+                super.render(mouseX, mouseY, delta);
                 GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
                 GuiLighting.disable();
                 MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE);

+ 9 - 1
src/main/java/me/shedaniel/rei/utils/ClothRegistry.java

@@ -68,6 +68,13 @@ public class ClothRegistry {
                 ScreenHelper.getLastOverlay().render(i, i1, v);
             }
         });
+        ClothClientHooks.SCREEN_MOUSE_CLICKED.register((minecraftClient, screen, v, v1, i) -> {
+            if (screen instanceof CreativePlayerInventoryScreen)
+                if (((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() == ItemGroup.INVENTORY.getIndex())
+                    if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().mouseClicked(v, v1, i))
+                        return ActionResult.SUCCESS;
+            return ActionResult.PASS;
+        });
         ClothClientHooks.SCREEN_MOUSE_SCROLLED.register((minecraftClient, screen, v, v1, v2) -> {
             if (screen instanceof ContainerScreen)
                 if (screen instanceof CreativePlayerInventoryScreen) {
@@ -99,7 +106,6 @@ public class ClothRegistry {
     public static void openConfigScreen(Screen parent) {
         ConfigScreenBuilder builder = new ClothConfigScreen.Builder(parent, I18n.translate("text.rei.config.title"), null);
         builder.addCategory("text.rei.config.general").addOption(new BooleanListEntry("text.rei.config.cheating", RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating = bool));
-        builder.getCategory("text.rei.config.general").addOption(new BooleanListEntry("fish is good", RoughlyEnoughItemsCore.getConfigManager().getConfig().fish, "text.cloth.reset_value", () -> true, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().fish = bool));
         ConfigScreenBuilder.CategoryBuilder appearance = builder.addCategory("text.rei.config.appearance");
         appearance.addOption(new BooleanListEntry("text.rei.config.side_search_box", RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField = bool));
         appearance.addOption(new ItemListOrderingEntry("text.rei.config.list_ordering", new Pair<>(RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering, RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending)));
@@ -115,6 +121,8 @@ public class ClothRegistry {
         advanced.addOption(new StringListEntry("text.rei.weather_command", RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand, "text.cloth.reset_value", () -> "/weather {weather}", s -> RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand = s));
         advanced.addOption(new BooleanListEntry("text.rei.config.prefer_visible_recipes", RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes = bool));
         advanced.addOption(new BooleanListEntry("text.rei.config.enable_legacy_speedcraft_support", RoughlyEnoughItemsCore.getConfigManager().getConfig().enableLegacySpeedCraftSupport, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().enableLegacySpeedCraftSupport = bool));
+        ConfigScreenBuilder.CategoryBuilder aprilFools = builder.addCategory("text.rei.config.april_fools");
+        aprilFools.addOption(new BooleanListEntry("text.rei.config.april_fools.2019", RoughlyEnoughItemsCore.getConfigManager().getConfig().aprilFoolsFish2019, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().aprilFoolsFish2019 = bool));
         builder.setOnSave(savedConfig -> {
             try {
                 RoughlyEnoughItemsCore.getConfigManager().saveConfig();

+ 2 - 0
src/main/resources/assets/roughlyenoughitems/lang/en_us.json

@@ -75,6 +75,8 @@
   "text.rei.config.prefer_visible_recipes": "Prefer Visible Recipes: ",
   "text.rei.config.title": "Roughly Enough Items Config",
   "text.rei.config.enable_legacy_speedcraft_support": "Enable Legacy Plugin Support: ",
+  "text.rei.config.april_fools": "April Fools",
+  "text.rei.config.april_fools.2019": "Force 2019 REI April Fools' joke: ",
   "_comment": "Don't change / translate the credit down below if you are doing it :)",
   "text.rei.credit.text": "§lRoughly Enough Items\n§7Originally a fork for Almost Enough Items.\n\n§lDevelopers\n  - Originally by ZenDarva\n  - Created by Danielshe\n  - Plugin Support by TehNut\n\n§lLanguage Translation\n  English - Danielshe\n  Simplified Chinese - Danielshe\n  Traditional Chinese - hugoalh & Danielshe\n  French - Yanis48\n  German - MelanX\n  Estonian - Madis0\n  Portuguese - thiagokenis\n  LOLCAT - Danielshe\n  Upside Down - Danielshe\n\n§lLicense\n§7Roughly Enough Items is using MIT."
 }

+ 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.5.1",
+  "version": "2.6",
   "side": "client",
   "authors": [
     "Danielshe"

+ 2 - 3
src/main/resources/roughlyenoughitems.client.json

@@ -5,11 +5,10 @@
   "compatibilityLevel": "JAVA_8",
   "mixins": [
     "MixinContainerScreen",
-    "MixinPlayerInventoryScreen",
-    "MixinCraftingTableScreen",
     "MixinCreativePlayerInventoryScreen",
     "MixinBrewingRecipeRegistry",
-    "MixinRecipeBookGui"
+    "MixinRecipeBookGui",
+    "MixinGameRenderer"
   ],
   "injectors": {
     "defaultRequire": 1