Procházet zdrojové kódy

20w22a

Signed-off-by: shedaniel <daniel@shedaniel.me>
shedaniel před 5 roky
rodič
revize
ff292186a5

+ 7 - 7
gradle.properties

@@ -1,13 +1,13 @@
 org.gradle.jvmargs=-Xmx3G
 org.gradle.jvmargs=-Xmx3G
-mod_version=4.3.12-unstable
-supported_version=20w21a
-minecraft_version=20w21a
-yarn_version=20w21a+build.7+legacy.20w09a+build.8
+mod_version=4.3.13-unstable
+supported_version=20w22a
+minecraft_version=20w22a
+yarn_version=20w22a+build.1+legacy.20w09a+build.8
 fabricloader_version=0.8.4+build.198
 fabricloader_version=0.8.4+build.198
 cloth_events_version=2.2.0-unstable
 cloth_events_version=2.2.0-unstable
-cloth_config_version=4.3.2-unstable
-modmenu_version=1.11.4+build.9
-fabric_api=0.10.10+build.347-1.16
+cloth_config_version=4.4.1-unstable
+modmenu_version=1.11.7+build.12
+fabric_api=0.10.11+build.348-1.16
 autoconfig1u=3.0.1-unstable
 autoconfig1u=3.0.1-unstable
 api_include=me.shedaniel.cloth:cloth-events,me.shedaniel.cloth:config-2,me.sargunvohra.mcmods:autoconfig1u
 api_include=me.shedaniel.cloth:cloth-events,me.shedaniel.cloth:config-2,me.sargunvohra.mcmods:autoconfig1u
 api_exculde=
 api_exculde=

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

@@ -34,6 +34,7 @@ import me.shedaniel.rei.gui.config.RecipeScreenType;
 import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.WidgetWithBounds;
 import me.shedaniel.rei.gui.widget.WidgetWithBounds;
 import me.shedaniel.rei.impl.ScreenHelper;
 import me.shedaniel.rei.impl.ScreenHelper;
+import net.minecraft.class_5348;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.gui.screen.Screen;
@@ -127,7 +128,7 @@ public class PreRecipeViewingScreen extends Screen {
         this.drawCenteredText(matrices, this.textRenderer, this.title, this.width / 2, 20, 16777215);
         this.drawCenteredText(matrices, this.textRenderer, this.title, this.width / 2, 20, 16777215);
         if (showTips) {
         if (showTips) {
             int i = 30;
             int i = 30;
-            for (Text s : this.textRenderer.wrapStringToWidthAsList(new TranslatableText("text.rei.recipe_screen_type.selection.sub").formatted(Formatting.GRAY), width - 30)) {
+            for (class_5348 s : this.textRenderer.wrapStringToWidthAsList(new TranslatableText("text.rei.recipe_screen_type.selection.sub").formatted(Formatting.GRAY), width - 30)) {
                 this.drawCenteredText(matrices, this.textRenderer, s, width / 2, i, -1);
                 this.drawCenteredText(matrices, this.textRenderer, s, width / 2, i, -1);
                 i += 10;
                 i += 10;
             }
             }

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

@@ -23,6 +23,7 @@
 
 
 package me.shedaniel.rei.gui;
 package me.shedaniel.rei.gui;
 
 
+import com.mojang.blaze3d.platform.GlStateManager;
 import com.mojang.blaze3d.systems.RenderSystem;
 import com.mojang.blaze3d.systems.RenderSystem;
 import me.shedaniel.math.Rectangle;
 import me.shedaniel.math.Rectangle;
 import me.shedaniel.rei.gui.toast.ExportRecipeIdentifierToast;
 import me.shedaniel.rei.gui.toast.ExportRecipeIdentifierToast;
@@ -75,7 +76,7 @@ public final class RecipeDisplayExporter extends Widget {
         RenderSystem.pushMatrix();
         RenderSystem.pushMatrix();
         MinecraftClient client = MinecraftClient.getInstance();
         MinecraftClient client = MinecraftClient.getInstance();
         Window window = client.getWindow();
         Window window = client.getWindow();
-        Framebuffer framebuffer = new Framebuffer(window.getFramebufferWidth(), window.getFramebufferHeight(), false, false);
+        Framebuffer framebuffer = new Framebuffer(window.getFramebufferWidth(), window.getFramebufferHeight(), true, false);
         framebuffer.beginWrite(true);
         framebuffer.beginWrite(true);
         RenderSystem.viewport(0, 0, window.getFramebufferWidth(), window.getFramebufferHeight());
         RenderSystem.viewport(0, 0, window.getFramebufferWidth(), window.getFramebufferHeight());
         RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);
         RenderSystem.clear(256, MinecraftClient.IS_SYSTEM_MAC);

+ 22 - 9
src/main/java/me/shedaniel/rei/gui/WarningAndErrorScreen.java

@@ -25,6 +25,7 @@ package me.shedaniel.rei.gui;
 
 
 import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
 import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
 import me.shedaniel.rei.RoughlyEnoughItemsState;
 import me.shedaniel.rei.RoughlyEnoughItemsState;
+import net.minecraft.class_5348;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.gui.screen.Screen;
@@ -32,9 +33,11 @@ import net.minecraft.client.gui.widget.AbstractButtonWidget;
 import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.sound.PositionedSoundInstance;
 import net.minecraft.client.sound.PositionedSoundInstance;
 import net.minecraft.client.util.NarratorManager;
 import net.minecraft.client.util.NarratorManager;
+import net.minecraft.client.util.TextCollector;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.sound.SoundEvents;
 import net.minecraft.sound.SoundEvents;
 import net.minecraft.text.LiteralText;
 import net.minecraft.text.LiteralText;
+import net.minecraft.text.Style;
 import net.minecraft.text.Text;
 import net.minecraft.text.Text;
 import net.minecraft.util.Formatting;
 import net.minecraft.util.Formatting;
 import net.minecraft.util.Lazy;
 import net.minecraft.util.Lazy;
@@ -44,6 +47,7 @@ import org.jetbrains.annotations.ApiStatus;
 
 
 import java.net.URI;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URISyntaxException;
+import java.util.Optional;
 
 
 @ApiStatus.Internal
 @ApiStatus.Internal
 public class WarningAndErrorScreen extends Screen {
 public class WarningAndErrorScreen extends Screen {
@@ -66,14 +70,14 @@ public class WarningAndErrorScreen extends Screen {
     }
     }
     
     
     private void addText(Text string) {
     private void addText(Text string) {
-        for (Text s : textRenderer.wrapStringToWidthAsList(string, width - 80)) {
+        for (class_5348 s : textRenderer.wrapStringToWidthAsList(string, width - 80)) {
             listWidget.creditsAddEntry(new TextItem(s));
             listWidget.creditsAddEntry(new TextItem(s));
         }
         }
     }
     }
     
     
     private void addLink(Text string, String link) {
     private void addLink(Text string, String link) {
-        for (Text s : textRenderer.wrapStringToWidthAsList(string, width - 80)) {
-            listWidget.creditsAddEntry(new LinkItem(s.getString(), link));
+        for (class_5348 s : textRenderer.wrapStringToWidthAsList(string, width - 80)) {
+            listWidget.creditsAddEntry(new LinkItem(s, link));
         }
         }
     }
     }
     
     
@@ -210,9 +214,9 @@ public class WarningAndErrorScreen extends Screen {
     }
     }
     
     
     private static class TextItem extends StringItem {
     private static class TextItem extends StringItem {
-        private Text text;
+        private class_5348 text;
         
         
-        public TextItem(Text text) {
+        public TextItem(class_5348 text) {
             this.text = text;
             this.text = text;
         }
         }
         
         
@@ -238,11 +242,11 @@ public class WarningAndErrorScreen extends Screen {
     }
     }
     
     
     private class LinkItem extends StringItem {
     private class LinkItem extends StringItem {
-        private String text;
+        private class_5348 text;
         private String link;
         private String link;
         private boolean contains;
         private boolean contains;
         
         
-        public LinkItem(String text, String link) {
+        public LinkItem(class_5348 text, String link) {
             this.text = text;
             this.text = text;
             this.link = link;
             this.link = link;
         }
         }
@@ -252,7 +256,16 @@ public class WarningAndErrorScreen extends Screen {
             contains = mouseX >= x && mouseX <= x + entryWidth && mouseY >= y && mouseY <= y + entryHeight;
             contains = mouseX >= x && mouseX <= x + entryWidth && mouseY >= y && mouseY <= y + entryHeight;
             if (contains) {
             if (contains) {
                 WarningAndErrorScreen.this.renderTooltip(matrices, new LiteralText("Click to open link."), mouseX, mouseY);
                 WarningAndErrorScreen.this.renderTooltip(matrices, new LiteralText("Click to open link."), mouseX, mouseY);
-                MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, "§n" + text, x + 5, y, 0xff1fc3ff);
+                class_5348 underlined = text.visit(new class_5348.StyledVisitor<class_5348>() {
+                    TextCollector collector = new TextCollector();
+                    
+                    @Override
+                    public Optional<class_5348> accept(Style style, String asString) {
+                        collector.add(class_5348.method_29431(asString, style));
+                        return Optional.of(collector.getCombined());
+                    }
+                }, Style.EMPTY.withFormatting(Formatting.UNDERLINE)).orElse(text);
+                MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, underlined, x + 5, y, 0xff1fc3ff);
             } else {
             } else {
                 MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, text, x + 5, y, 0xff1fc3ff);
                 MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, text, x + 5, y, 0xff1fc3ff);
             }
             }
@@ -270,7 +283,7 @@ public class WarningAndErrorScreen extends Screen {
         
         
         @Override
         @Override
         public int getWidth() {
         public int getWidth() {
-            return MinecraftClient.getInstance().textRenderer.getStringWidth(text) + 10;
+            return MinecraftClient.getInstance().textRenderer.getWidth(text) + 10;
         }
         }
         
         
         @Override
         @Override

+ 4 - 4
src/main/java/me/shedaniel/rei/gui/config/entry/FilteringEntry.java

@@ -29,7 +29,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
 import me.shedaniel.clothconfig2.ClothConfigInitializer;
 import me.shedaniel.clothconfig2.ClothConfigInitializer;
 import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
 import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
 import me.shedaniel.clothconfig2.api.ScrollingContainer;
 import me.shedaniel.clothconfig2.api.ScrollingContainer;
-import me.shedaniel.clothconfig2.gui.ClothConfigScreen;
+import me.shedaniel.clothconfig2.gui.widget.DynamicEntryListWidget;
 import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
 import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
 import me.shedaniel.math.Point;
 import me.shedaniel.math.Point;
 import me.shedaniel.math.Rectangle;
 import me.shedaniel.math.Rectangle;
@@ -87,7 +87,7 @@ public class FilteringEntry extends AbstractConfigListEntry<List<EntryStack>> {
     private List<EntryStack> defaultValue;
     private List<EntryStack> defaultValue;
     private List<EntryStack> configFiltered;
     private List<EntryStack> configFiltered;
     private Tooltip tooltip = null;
     private Tooltip tooltip = null;
-    @SuppressWarnings("rawtypes") private ClothConfigScreen.ListWidget lastList = null;
+    @SuppressWarnings("rawtypes") private DynamicEntryListWidget lastList = null;
     private List<EntryStack> entryStacks = null;
     private List<EntryStack> entryStacks = null;
     private Rectangle innerBounds;
     private Rectangle innerBounds;
     private List<EntryListEntry> entries = Collections.emptyList();
     private List<EntryListEntry> entries = Collections.emptyList();
@@ -163,7 +163,7 @@ public class FilteringEntry extends AbstractConfigListEntry<List<EntryStack>> {
     
     
     @SuppressWarnings("rawtypes")
     @SuppressWarnings("rawtypes")
     public Rectangle getBounds() {
     public Rectangle getBounds() {
-        ClothConfigScreen.ListWidget listWidget = getParent();
+        DynamicEntryListWidget listWidget = getParent();
         return new Rectangle(listWidget.left, listWidget.top, listWidget.right - listWidget.left, listWidget.bottom - listWidget.top);
         return new Rectangle(listWidget.left, listWidget.top, listWidget.right - listWidget.left, listWidget.bottom - listWidget.top);
     }
     }
     
     
@@ -191,7 +191,7 @@ public class FilteringEntry extends AbstractConfigListEntry<List<EntryStack>> {
     @SuppressWarnings("rawtypes")
     @SuppressWarnings("rawtypes")
     @Override
     @Override
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        ClothConfigScreen.ListWidget parent = getParent();
+        DynamicEntryListWidget parent = getParent();
         Rectangle bounds = getBounds();
         Rectangle bounds = getBounds();
         if (lastList != parent) {
         if (lastList != parent) {
             updateSearch(this.searchField.getText());
             updateSearch(this.searchField.getText());

+ 2 - 1
src/main/java/me/shedaniel/rei/gui/config/entry/NoFilteringEntry.java

@@ -25,6 +25,7 @@ package me.shedaniel.rei.gui.config.entry;
 
 
 import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
 import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
 import me.shedaniel.clothconfig2.gui.ClothConfigScreen;
 import me.shedaniel.clothconfig2.gui.ClothConfigScreen;
+import me.shedaniel.clothconfig2.gui.widget.DynamicEntryListWidget;
 import me.shedaniel.rei.api.EntryStack;
 import me.shedaniel.rei.api.EntryStack;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.Element;
@@ -69,7 +70,7 @@ public class NoFilteringEntry extends AbstractConfigListEntry<List<EntryStack>>
     @SuppressWarnings("rawtypes")
     @SuppressWarnings("rawtypes")
     @Override
     @Override
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-        ClothConfigScreen.ListWidget parent = getParent();
+        DynamicEntryListWidget parent = getParent();
         drawCenteredString(matrices, MinecraftClient.getInstance().textRenderer, I18n.translate("config.roughlyenoughitems.filteredEntries.loadWorldFirst"), (parent.right - parent.left) / 2 + parent.left, (parent.bottom - parent.top) / 2 + parent.top - 5, -1);
         drawCenteredString(matrices, MinecraftClient.getInstance().textRenderer, I18n.translate("config.roughlyenoughitems.filteredEntries.loadWorldFirst"), (parent.right - parent.left) / 2 + parent.left, (parent.bottom - parent.top) / 2 + parent.top - 5, -1);
     }
     }
     
     

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

@@ -24,6 +24,7 @@
 package me.shedaniel.rei.gui.credits;
 package me.shedaniel.rei.gui.credits;
 
 
 import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
 import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
+import net.minecraft.class_5348;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.client.util.math.MatrixStack;
@@ -108,7 +109,7 @@ public class CreditsEntryListWidget extends DynamicNewSmoothScrollingEntryListWi
     
     
     public static class TranslationCreditsItem extends CreditsItem {
     public static class TranslationCreditsItem extends CreditsItem {
         private Text language;
         private Text language;
-        private List<Text> translators;
+        private List<class_5348> translators;
         private int maxWidth;
         private int maxWidth;
         
         
         public TranslationCreditsItem(Text language, Text translators, int width, int maxWidth) {
         public TranslationCreditsItem(Text language, Text translators, int width, int maxWidth) {
@@ -121,7 +122,7 @@ public class CreditsEntryListWidget extends DynamicNewSmoothScrollingEntryListWi
         public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
         public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
             MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, language, x + 5, y + 5, -1);
             MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, language, x + 5, y + 5, -1);
             int yy = y + 5;
             int yy = y + 5;
-            for (Text translator : translators) {
+            for (class_5348 translator : translators) {
                 MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, translator, x + 5 + maxWidth, yy, -1);
                 MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, translator, x + 5 + maxWidth, yy, -1);
                 yy += 12;
                 yy += 12;
             }
             }

+ 0 - 43
src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java

@@ -23,7 +23,6 @@
 
 
 package me.shedaniel.rei.impl;
 package me.shedaniel.rei.impl;
 
 
-import com.google.common.collect.ImmutableList;
 import com.google.gson.Gson;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonElement;
@@ -37,12 +36,10 @@ import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.JsonObje
 import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.JsonPrimitive;
 import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.JsonPrimitive;
 import me.sargunvohra.mcmods.autoconfig1u.util.Utils;
 import me.sargunvohra.mcmods.autoconfig1u.util.Utils;
 import me.shedaniel.cloth.hooks.ScreenHooks;
 import me.shedaniel.cloth.hooks.ScreenHooks;
-import me.shedaniel.clothconfig2.ClothConfigInitializer;
 import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
 import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
 import me.shedaniel.clothconfig2.api.Modifier;
 import me.shedaniel.clothconfig2.api.Modifier;
 import me.shedaniel.clothconfig2.api.ModifierKeyCode;
 import me.shedaniel.clothconfig2.api.ModifierKeyCode;
 import me.shedaniel.clothconfig2.gui.entries.KeyCodeEntry;
 import me.shedaniel.clothconfig2.gui.entries.KeyCodeEntry;
-import me.shedaniel.clothconfig2.gui.entries.TooltipListEntry;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.*;
 import me.shedaniel.rei.api.*;
 import me.shedaniel.rei.gui.ConfigReloadingScreen;
 import me.shedaniel.rei.gui.ConfigReloadingScreen;
@@ -53,13 +50,9 @@ import me.shedaniel.rei.gui.config.entry.NoFilteringEntry;
 import me.shedaniel.rei.gui.config.entry.RecipeScreenTypeEntry;
 import me.shedaniel.rei.gui.config.entry.RecipeScreenTypeEntry;
 import me.shedaniel.rei.gui.credits.CreditsScreen;
 import me.shedaniel.rei.gui.credits.CreditsScreen;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.widget.AbstractButtonWidget;
-import net.minecraft.client.gui.widget.AbstractPressableButtonWidget;
 import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.util.InputUtil;
 import net.minecraft.client.util.InputUtil;
-import net.minecraft.client.util.Window;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.text.LiteralText;
 import net.minecraft.text.LiteralText;
 import net.minecraft.text.TranslatableText;
 import net.minecraft.text.TranslatableText;
@@ -69,7 +62,6 @@ import org.jetbrains.annotations.ApiStatus;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;
-import java.util.Optional;
 
 
 import static me.sargunvohra.mcmods.autoconfig1u.util.Utils.getUnsafely;
 import static me.sargunvohra.mcmods.autoconfig1u.util.Utils.getUnsafely;
 import static me.sargunvohra.mcmods.autoconfig1u.util.Utils.setUnsafely;
 import static me.sargunvohra.mcmods.autoconfig1u.util.Utils.setUnsafely;
@@ -164,41 +156,6 @@ public class ConfigManagerImpl implements ConfigManager {
             provider.setOptionFunction((baseI13n, field) -> field.isAnnotationPresent(ConfigObjectImpl.DontApplyFieldName.class) ? baseI13n : String.format("%s.%s", baseI13n, field.getName()));
             provider.setOptionFunction((baseI13n, field) -> field.isAnnotationPresent(ConfigObjectImpl.DontApplyFieldName.class) ? baseI13n : String.format("%s.%s", baseI13n, field.getName()));
             provider.setCategoryFunction((baseI13n, categoryName) -> String.format("%s.%s", baseI13n, categoryName));
             provider.setCategoryFunction((baseI13n, categoryName) -> String.format("%s.%s", baseI13n, categoryName));
             provider.setBuildFunction(builder -> {
             provider.setBuildFunction(builder -> {
-                builder.getOrCreateCategory(new TranslatableText("config.roughlyenoughitems.!general")).addEntry(new TooltipListEntry<Object>(new TranslatableText("config.roughlyenoughitems.smooth_scrolling"), null) {
-                    int width = 220;
-                    private AbstractButtonWidget buttonWidget = new AbstractPressableButtonWidget(0, 0, 0, 20, this.getFieldName()) {
-                        public void onPress() {
-                            Screen screen = ClothConfigInitializer.getConfigBuilder().setTitle(new LiteralText("Smooth Scrolling Settings")).build();
-                            MinecraftClient.getInstance().openScreen(screen);
-                        }
-                    };
-                    private List<Element> children = ImmutableList.of(this.buttonWidget);
-                    
-                    public Object getValue() {
-                        return null;
-                    }
-                    
-                    public Optional<Object> getDefaultValue() {
-                        return Optional.empty();
-                    }
-                    
-                    public void save() {
-                    }
-                    
-                    public List<? extends Element> children() {
-                        return this.children;
-                    }
-                    
-                    public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
-                        super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
-                        Window window = MinecraftClient.getInstance().getWindow();
-                        this.buttonWidget.active = this.isEditable();
-                        this.buttonWidget.y = y;
-                        this.buttonWidget.x = x + entryWidth / 2 - this.width / 2;
-                        this.buttonWidget.setWidth(this.width);
-                        this.buttonWidget.render(matrices, mouseX, mouseY, delta);
-                    }
-                });
                 return builder.setAfterInitConsumer(screen -> {
                 return builder.setAfterInitConsumer(screen -> {
                     if (MinecraftClient.getInstance().getNetworkHandler() != null && MinecraftClient.getInstance().getNetworkHandler().getRecipeManager() != null) {
                     if (MinecraftClient.getInstance().getNetworkHandler() != null && MinecraftClient.getInstance().getNetworkHandler().getRecipeManager() != null) {
                         ((ScreenHooks) screen).cloth_addButton(new net.minecraft.client.gui.widget.ButtonWidget(4, 4, 100, 20, new TranslatableText("text.rei.reload_config"), buttonWidget -> {
                         ((ScreenHooks) screen).cloth_addButton(new net.minecraft.client.gui.widget.ButtonWidget(4, 4, 100, 20, new TranslatableText("text.rei.reload_config"), buttonWidget -> {

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

@@ -27,6 +27,7 @@ import com.google.common.collect.Lists;
 import com.mojang.blaze3d.systems.RenderSystem;
 import com.mojang.blaze3d.systems.RenderSystem;
 import me.shedaniel.clothconfig2.ClothConfigInitializer;
 import me.shedaniel.clothconfig2.ClothConfigInitializer;
 import me.shedaniel.clothconfig2.api.ScissorsHandler;
 import me.shedaniel.clothconfig2.api.ScissorsHandler;
+import me.shedaniel.clothconfig2.api.ScrollingContainer;
 import me.shedaniel.math.Point;
 import me.shedaniel.math.Point;
 import me.shedaniel.math.Rectangle;
 import me.shedaniel.math.Rectangle;
 import me.shedaniel.rei.api.EntryStack;
 import me.shedaniel.rei.api.EntryStack;
@@ -34,11 +35,11 @@ import me.shedaniel.rei.api.REIHelper;
 import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.api.RecipeCategory;
 import me.shedaniel.rei.api.widgets.Widgets;
 import me.shedaniel.rei.api.widgets.Widgets;
 import me.shedaniel.rei.gui.entries.RecipeEntry;
 import me.shedaniel.rei.gui.entries.RecipeEntry;
-import me.shedaniel.clothconfig2.api.ScrollingContainer;
 import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.WidgetWithBounds;
 import me.shedaniel.rei.gui.widget.WidgetWithBounds;
 import me.shedaniel.rei.impl.RenderingEntry;
 import me.shedaniel.rei.impl.RenderingEntry;
 import me.shedaniel.rei.plugin.DefaultPlugin;
 import me.shedaniel.rei.plugin.DefaultPlugin;
+import net.minecraft.class_5348;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.render.BufferBuilder;
 import net.minecraft.client.render.BufferBuilder;
@@ -133,7 +134,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
     
     
     private static class ScrollableTextWidget extends WidgetWithBounds {
     private static class ScrollableTextWidget extends WidgetWithBounds {
         private Rectangle bounds;
         private Rectangle bounds;
-        private List<Text> texts;
+        private List<class_5348> texts;
         private final ScrollingContainer scrolling = new ScrollingContainer() {
         private final ScrollingContainer scrolling = new ScrollingContainer() {
             @Override
             @Override
             public Rectangle getBounds() {
             public Rectangle getBounds() {
@@ -144,7 +145,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
             @Override
             @Override
             public int getMaxScrollHeight() {
             public int getMaxScrollHeight() {
                 int i = 2;
                 int i = 2;
-                for (Text entry : texts) {
+                for (class_5348 entry : texts) {
                     i += entry == null ? 4 : font.fontHeight;
                     i += entry == null ? 4 : font.fontHeight;
                 }
                 }
                 return i;
                 return i;
@@ -154,7 +155,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
         public ScrollableTextWidget(Rectangle bounds, List<Text> texts) {
         public ScrollableTextWidget(Rectangle bounds, List<Text> texts) {
             this.bounds = Objects.requireNonNull(bounds);
             this.bounds = Objects.requireNonNull(bounds);
             this.texts = Lists.newArrayList();
             this.texts = Lists.newArrayList();
-            for (Text text : texts) {
+            for (class_5348 text : texts) {
                 if (!this.texts.isEmpty())
                 if (!this.texts.isEmpty())
                     this.texts.add(null);
                     this.texts.add(null);
                 this.texts.addAll(MinecraftClient.getInstance().textRenderer.wrapStringToWidthAsList(text, bounds.width - 11));
                 this.texts.addAll(MinecraftClient.getInstance().textRenderer.wrapStringToWidthAsList(text, bounds.width - 11));
@@ -196,7 +197,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
             Rectangle innerBounds = scrolling.getScissorBounds();
             Rectangle innerBounds = scrolling.getScissorBounds();
             ScissorsHandler.INSTANCE.scissor(innerBounds);
             ScissorsHandler.INSTANCE.scissor(innerBounds);
             int currentY = (int) -scrolling.scrollAmount + innerBounds.y;
             int currentY = (int) -scrolling.scrollAmount + innerBounds.y;
-            for (Text text : texts) {
+            for (class_5348 text : texts) {
                 if (text != null && currentY + font.fontHeight >= innerBounds.y && currentY <= innerBounds.getMaxY()) {
                 if (text != null && currentY + font.fontHeight >= innerBounds.y && currentY <= innerBounds.getMaxY()) {
                     font.draw(matrices, text, innerBounds.x + 2, currentY + 2, REIHelper.getInstance().isDarkThemeEnabled() ? 0xFFBBBBBB : 0xFF090909);
                     font.draw(matrices, text, innerBounds.x + 2, currentY + 2, REIHelper.getInstance().isDarkThemeEnabled() ? 0xFFBBBBBB : 0xFF090909);
                 }
                 }