Bladeren bron

Fix duplicate mod id with hwyla

Signed-off-by: shedaniel <daniel@shedaniel.me>
shedaniel 4 jaren geleden
bovenliggende
commit
361f465a4b
24 gewijzigde bestanden met toevoegingen van 109 en 110 verwijderingen
  1. 4 4
      RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/widgets/Label.java
  2. 2 2
      RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java
  3. 1 1
      RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingCategory.java
  4. 1 1
      RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/fuel/DefaultFuelCategory.java
  5. 7 7
      RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/information/DefaultInformationCategory.java
  6. 2 2
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
  7. 6 6
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
  8. 3 3
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java
  9. 1 1
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java
  10. 11 11
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/WarningAndErrorScreen.java
  11. 9 9
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringAddRuleScreen.java
  12. 8 8
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringRuleOptionsScreen.java
  13. 9 11
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringRulesScreen.java
  14. 1 1
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringScreen.java
  15. 5 6
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java
  16. 4 4
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java
  17. 1 1
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
  18. 4 4
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/LabelWidget.java
  19. 1 1
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java
  20. 2 1
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java
  21. 2 1
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java
  22. 2 2
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/filtering/FilteringRule.java
  23. 15 15
      RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/widgets/LabelWidget.java
  24. 8 8
      gradle.properties

+ 4 - 4
RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/widgets/Label.java

@@ -28,7 +28,7 @@ import me.shedaniel.rei.api.REIHelper;
 import me.shedaniel.rei.gui.widget.WidgetWithBounds;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.text.LiteralText;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.StringVisitable;
 import net.minecraft.text.Text;
 import org.jetbrains.annotations.ApiStatus;
 import org.jetbrains.annotations.NotNull;
@@ -303,13 +303,13 @@ public abstract class Label extends WidgetWithBounds {
         return new LiteralText("");
     }
     
-    public abstract StringRenderable getMessage();
+    public abstract StringVisitable getMessage();
     
     public final void setText(@NotNull Text text) {
         setMessage(text);
     }
     
-    public abstract void setMessage(@NotNull StringRenderable message);
+    public abstract void setMessage(@NotNull StringVisitable message);
     
     @NotNull
     public final Label text(@NotNull Text text) {
@@ -318,7 +318,7 @@ public abstract class Label extends WidgetWithBounds {
     }
     
     @NotNull
-    public final Label message(@NotNull StringRenderable message) {
+    public final Label message(@NotNull StringVisitable message) {
         setMessage(message);
         return this;
     }

+ 2 - 2
RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java

@@ -35,7 +35,7 @@ import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
 import net.minecraft.fluid.Fluid;
 import net.minecraft.item.ItemStack;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.StringVisitable;
 import net.minecraft.text.Text;
 import net.minecraft.util.Identifier;
 import org.jetbrains.annotations.ApiStatus;
@@ -148,7 +148,7 @@ public final class Internals {
         
         Panel createPanelWidget(Rectangle bounds);
         
-        Label createLabel(Point point, StringRenderable text);
+        Label createLabel(Point point, StringVisitable text);
         
         Arrow createArrow(Rectangle rectangle);
         

+ 1 - 1
RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/composting/DefaultCompostingCategory.java

@@ -76,7 +76,7 @@ public class DefaultCompostingCategory implements RecipeCategory<DefaultComposti
             
             @Override
             public void render(MatrixStack matrices, Rectangle rectangle, int mouseX, int mouseY, float delta) {
-                MinecraftClient.getInstance().textRenderer.draw(matrices, text.method_30937(), rectangle.x + 5, rectangle.y + 6, -1);
+                MinecraftClient.getInstance().textRenderer.draw(matrices, text.asOrderedText(), rectangle.x + 5, rectangle.y + 6, -1);
             }
         };
     }

+ 1 - 1
RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/fuel/DefaultFuelCategory.java

@@ -110,7 +110,7 @@ public class DefaultFuelCategory implements RecipeCategory<DefaultFuelDisplay> {
                 slot.setZ(getZ() + 50);
                 slot.getBounds().setLocation(bounds.x + 4, bounds.y + 2);
                 slot.render(matrices, mouseX, mouseY, delta);
-                MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, text.method_30937(), bounds.x + 25, bounds.y + 8, -1);
+                MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, text.asOrderedText(), bounds.x + 25, bounds.y + 8, -1);
             }
         };
     }

+ 7 - 7
RoughlyEnoughItems-default-plugin/src/main/java/me/shedaniel/rei/plugin/information/DefaultInformationCategory.java

@@ -41,7 +41,6 @@ import me.shedaniel.rei.impl.RenderingEntry;
 import me.shedaniel.rei.plugin.DefaultPlugin;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
-import net.minecraft.class_5481;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.render.BufferBuilder;
@@ -50,7 +49,8 @@ import net.minecraft.client.render.Tessellator;
 import net.minecraft.client.render.VertexFormats;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.OrderedText;
+import net.minecraft.text.StringVisitable;
 import net.minecraft.text.Text;
 import net.minecraft.util.Identifier;
 import net.minecraft.util.math.Matrix4f;
@@ -86,7 +86,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
     
     @Override
     public RecipeEntry getSimpleRenderer(DefaultInformationDisplay recipe) {
-        class_5481 name = recipe.getName().method_30937();
+        OrderedText name = recipe.getName().asOrderedText();
         return new RecipeEntry() {
             @Override
             public int getHeight() {
@@ -138,7 +138,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
     
     private static class ScrollableTextWidget extends WidgetWithBounds {
         private Rectangle bounds;
-        private List<class_5481> texts;
+        private List<OrderedText> texts;
         private final ScrollingContainer scrolling = new ScrollingContainer() {
             @Override
             public Rectangle getBounds() {
@@ -149,7 +149,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
             @Override
             public int getMaxScrollHeight() {
                 int i = 2;
-                for (class_5481 entry : texts) {
+                for (OrderedText entry : texts) {
                     i += entry == null ? 4 : font.fontHeight;
                 }
                 return i;
@@ -159,7 +159,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
         public ScrollableTextWidget(Rectangle bounds, List<Text> texts) {
             this.bounds = Objects.requireNonNull(bounds);
             this.texts = Lists.newArrayList();
-            for (StringRenderable text : texts) {
+            for (StringVisitable text : texts) {
                 if (!this.texts.isEmpty())
                     this.texts.add(null);
                 this.texts.addAll(MinecraftClient.getInstance().textRenderer.wrapStringToWidthAsList(text, bounds.width - 11));
@@ -201,7 +201,7 @@ public class DefaultInformationCategory implements RecipeCategory<DefaultInforma
             Rectangle innerBounds = scrolling.getScissorBounds();
             ScissorsHandler.INSTANCE.scissor(innerBounds);
             int currentY = (int) -scrolling.scrollAmount + innerBounds.y;
-            for (class_5481 text : texts) {
+            for (OrderedText text : texts) {
                 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);
                 }

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

@@ -70,7 +70,7 @@ import net.minecraft.recipe.Ingredient;
 import net.minecraft.recipe.RecipeManager;
 import net.minecraft.screen.slot.Slot;
 import net.minecraft.text.LiteralText;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.StringVisitable;
 import net.minecraft.text.Text;
 import net.minecraft.util.ActionResult;
 import net.minecraft.util.Identifier;
@@ -153,7 +153,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
             }
             
             @Override
-            public Label createLabel(Point point, StringRenderable text) {
+            public Label createLabel(Point point, StringVisitable text) {
                 return new LabelWidget(point, text);
             }
             

+ 6 - 6
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java

@@ -44,7 +44,6 @@ import me.shedaniel.rei.impl.ScreenHelper;
 import me.shedaniel.rei.impl.Weather;
 import me.shedaniel.rei.utils.CollectionUtils;
 import net.minecraft.block.Blocks;
-import net.minecraft.class_5481;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.screen.Screen;
@@ -63,6 +62,7 @@ import net.minecraft.item.ItemStack;
 import net.minecraft.screen.slot.Slot;
 import net.minecraft.sound.SoundEvents;
 import net.minecraft.text.LiteralText;
+import net.minecraft.text.OrderedText;
 import net.minecraft.text.Text;
 import net.minecraft.text.TranslatableText;
 import net.minecraft.util.ActionResult;
@@ -91,7 +91,7 @@ public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverl
     public boolean shouldReInit = false;
     private int tooltipWidth;
     private int tooltipHeight;
-    private List<class_5481> tooltipLines;
+    private List<OrderedText> tooltipLines;
     public final TriConsumer<MatrixStack, Point, Float> renderTooltipCallback = (matrices, mouse, aFloat) -> {
         RenderSystem.disableRescaleNormal();
         RenderSystem.disableDepthTest();
@@ -564,14 +564,14 @@ public class ContainerScreenOverlay extends WidgetWithBounds implements REIOverl
     public void renderTooltip(MatrixStack matrices, List<Text> lines, int mouseX, int mouseY) {
         if (lines.isEmpty())
             return;
-        List<class_5481> characterVisitables = CollectionUtils.map(lines, Text::method_30937);
-        renderTooltipInner(matrices, characterVisitables, mouseX, mouseY);
+        List<OrderedText> orderedTexts = CollectionUtils.map(lines, Text::asOrderedText);
+        renderTooltipInner(matrices, orderedTexts, mouseX, mouseY);
     }
     
-    public void renderTooltipInner(MatrixStack matrices, List<class_5481> lines, int mouseX, int mouseY) {
+    public void renderTooltipInner(MatrixStack matrices, List<OrderedText> lines, int mouseX, int mouseY) {
         if (lines.isEmpty())
             return;
-        tooltipWidth = lines.stream().map(font::method_30880).max(Integer::compareTo).get();
+        tooltipWidth = lines.stream().map(font::getWidth).max(Integer::compareTo).get();
         tooltipHeight = lines.size() <= 1 ? 8 : lines.size() * 10;
         tooltipLines = lines;
         ScreenHelper.drawHoveringWidget(matrices, mouseX, mouseY, renderTooltipCallback, tooltipWidth, tooltipHeight, 0);

+ 3 - 3
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java

@@ -34,13 +34,13 @@ import me.shedaniel.rei.gui.config.RecipeScreenType;
 import me.shedaniel.rei.gui.widget.Widget;
 import me.shedaniel.rei.gui.widget.WidgetWithBounds;
 import me.shedaniel.rei.impl.ScreenHelper;
-import net.minecraft.class_5481;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.gui.screen.ingame.ContainerScreen;
 import net.minecraft.client.util.NarratorManager;
 import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.text.OrderedText;
 import net.minecraft.text.TranslatableText;
 import net.minecraft.util.Formatting;
 import net.minecraft.util.Identifier;
@@ -127,8 +127,8 @@ public class PreRecipeViewingScreen extends Screen {
         drawCenteredText(matrices, this.textRenderer, this.title, this.width / 2, 20, 16777215);
         if (showTips) {
             int i = 30;
-            for (class_5481 s : this.textRenderer.wrapStringToWidthAsList(new TranslatableText("text.rei.recipe_screen_type.selection.sub").formatted(Formatting.GRAY), width - 30)) {
-                textRenderer.drawWithShadow(matrices, s, width / 2 - textRenderer.method_30880(s) / 2, i, -1);
+            for (OrderedText s : this.textRenderer.wrapStringToWidthAsList(new TranslatableText("text.rei.recipe_screen_type.selection.sub").formatted(Formatting.GRAY), width - 30)) {
+                textRenderer.drawWithShadow(matrices, s, width / 2 - textRenderer.getWidth(s) / 2, i, -1);
                 i += 10;
             }
         }

+ 1 - 1
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java

@@ -442,7 +442,7 @@ public class RecipeViewingScreen extends Screen implements RecipeScreen {
                         matrices.push();
                         matrices.translate(0.0D, 0.0D, 480);
                         Matrix4f matrix4f = matrices.peek().getModel();
-                        textRenderer.draw(text.method_30937(), bounds.getCenterX() - textRenderer.getWidth(text) / 2f, bounds.getCenterY() - 4.5f, 0xff000000, false, matrix4f, immediate, false, 0, 15728880);
+                        textRenderer.draw(text.asOrderedText(), bounds.getCenterX() - textRenderer.getWidth(text) / 2f, bounds.getCenterY() - 4.5f, 0xff000000, false, matrix4f, immediate, false, 0, 15728880);
                         immediate.draw();
                         matrices.pop();
                     } else {

+ 11 - 11
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/WarningAndErrorScreen.java

@@ -25,7 +25,6 @@ package me.shedaniel.rei.gui;
 
 import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
 import me.shedaniel.rei.RoughlyEnoughItemsState;
-import net.minecraft.class_5481;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.gui.screen.Screen;
@@ -36,6 +35,7 @@ import net.minecraft.client.util.NarratorManager;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.sound.SoundEvents;
 import net.minecraft.text.LiteralText;
+import net.minecraft.text.OrderedText;
 import net.minecraft.text.Text;
 import net.minecraft.util.Formatting;
 import net.minecraft.util.Lazy;
@@ -67,13 +67,13 @@ public class WarningAndErrorScreen extends Screen {
     }
     
     private void addText(Text string) {
-        for (class_5481 s : textRenderer.wrapStringToWidthAsList(string, width - 80)) {
+        for (OrderedText s : textRenderer.wrapStringToWidthAsList(string, width - 80)) {
             listWidget.creditsAddEntry(new TextItem(s));
         }
     }
     
     private void addLink(Text string, String link) {
-        for (class_5481 s : textRenderer.wrapStringToWidthAsList(string, width - 80)) {
+        for (OrderedText s : textRenderer.wrapStringToWidthAsList(string, width - 80)) {
             listWidget.creditsAddEntry(new LinkItem(s, link));
         }
     }
@@ -85,7 +85,7 @@ public class WarningAndErrorScreen extends Screen {
         listWidget.creditsClearEntries();
         listWidget.creditsAddEntry(new EmptyItem());
         if (!RoughlyEnoughItemsState.getWarnings().isEmpty())
-            listWidget.creditsAddEntry(new TextItem(new LiteralText("Warnings:").formatted(Formatting.RED).method_30937()));
+            listWidget.creditsAddEntry(new TextItem(new LiteralText("Warnings:").formatted(Formatting.RED).asOrderedText()));
         for (Pair<String, String> pair : RoughlyEnoughItemsState.getWarnings()) {
             addText(new LiteralText(pair.getLeft()));
             if (pair.getRight() != null)
@@ -98,7 +98,7 @@ public class WarningAndErrorScreen extends Screen {
             listWidget.creditsAddEntry(new EmptyItem());
         }
         if (!RoughlyEnoughItemsState.getErrors().isEmpty())
-            listWidget.creditsAddEntry(new TextItem(new LiteralText("Errors:").formatted(Formatting.RED).method_30937()));
+            listWidget.creditsAddEntry(new TextItem(new LiteralText("Errors:").formatted(Formatting.RED).asOrderedText()));
         for (Pair<String, String> pair : RoughlyEnoughItemsState.getErrors()) {
             addText(new LiteralText(pair.getLeft()));
             if (pair.getRight() != null)
@@ -211,9 +211,9 @@ public class WarningAndErrorScreen extends Screen {
     }
     
     private static class TextItem extends StringItem {
-        private class_5481 text;
+        private OrderedText text;
         
-        public TextItem(class_5481 text) {
+        public TextItem(OrderedText text) {
             this.text = text;
         }
         
@@ -234,16 +234,16 @@ public class WarningAndErrorScreen extends Screen {
         
         @Override
         public int getWidth() {
-            return MinecraftClient.getInstance().textRenderer.method_30880(text) + 10;
+            return MinecraftClient.getInstance().textRenderer.getWidth(text) + 10;
         }
     }
     
     private class LinkItem extends StringItem {
-        private class_5481 text;
+        private OrderedText text;
         private String link;
         private boolean contains;
         
-        public LinkItem(class_5481 text, String link) {
+        public LinkItem(OrderedText text, String link) {
             this.text = text;
             this.link = link;
         }
@@ -273,7 +273,7 @@ public class WarningAndErrorScreen extends Screen {
         
         @Override
         public int getWidth() {
-            return MinecraftClient.getInstance().textRenderer.method_30880(text) + 10;
+            return MinecraftClient.getInstance().textRenderer.getWidth(text) + 10;
         }
         
         @Override

+ 9 - 9
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringAddRuleScreen.java

@@ -32,7 +32,7 @@ import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.text.LiteralText;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.StringVisitable;
 import net.minecraft.text.Text;
 import net.minecraft.text.TranslatableText;
 import net.minecraft.util.Identifier;
@@ -75,7 +75,7 @@ public class FilteringAddRuleScreen extends Screen {
     public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
         this.rulesList.render(matrices, mouseX, mouseY, delta);
         super.render(matrices, mouseX, mouseY, delta);
-        this.textRenderer.drawWithShadow(matrices, this.title.method_30937(), this.width / 2.0F - this.textRenderer.getWidth(this.title) / 2.0F, 12.0F, -1);
+        this.textRenderer.drawWithShadow(matrices, this.title.asOrderedText(), this.width / 2.0F - this.textRenderer.getWidth(this.title) / 2.0F, 12.0F, -1);
     }
     
     public static class RulesList extends DynamicElementListWidget<RuleEntry> {
@@ -151,7 +151,7 @@ public class FilteringAddRuleScreen extends Screen {
         public DefaultRuleEntry(Screen parent, FilteringEntry entry, FilteringRule<?> rule, BiFunction<FilteringEntry, Screen, Screen> screenFunction) {
             super(rule);
             this.screenFunction = (screenFunction == null ? rule.createEntryScreen().orElse(null) : screenFunction);
-            addButton = new ButtonWidget(0, 0, 20, 20, Text.method_30163(" + "), button -> {
+            addButton = new ButtonWidget(0, 0, 20, 20, Text.of(" + "), button -> {
                 entry.edited = true;
                 MinecraftClient.getInstance().openScreen(this.screenFunction.apply(entry, parent));
                 entry.rules.add(0, rule);
@@ -166,20 +166,20 @@ public class FilteringAddRuleScreen extends Screen {
                 Text title = getRule().getTitle();
                 int i = client.textRenderer.getWidth(title);
                 if (i > entryWidth - 28) {
-                    StringRenderable titleTrimmed = StringRenderable.concat(client.textRenderer.trimToWidth(title, entryWidth - 28 - client.textRenderer.getStringWidth("...")), StringRenderable.plain("..."));
-                    client.textRenderer.drawWithShadow(matrices, Language.getInstance().method_30934(titleTrimmed), x + 2, y + 1, 16777215);
+                    StringVisitable titleTrimmed = StringVisitable.concat(client.textRenderer.trimToWidth(title, entryWidth - 28 - client.textRenderer.getStringWidth("...")), StringVisitable.plain("..."));
+                    client.textRenderer.drawWithShadow(matrices, Language.getInstance().reorder(titleTrimmed), x + 2, y + 1, 16777215);
                 } else {
-                    client.textRenderer.drawWithShadow(matrices, title.method_30937(), x + 2, y + 1, 16777215);
+                    client.textRenderer.drawWithShadow(matrices, title.asOrderedText(), x + 2, y + 1, 16777215);
                 }
             }
             {
                 Text subtitle = getRule().getSubtitle();
                 int i = client.textRenderer.getWidth(subtitle);
                 if (i > entryWidth - 28) {
-                    StringRenderable subtitleTrimmed = StringRenderable.concat(client.textRenderer.trimToWidth(subtitle, entryWidth - 28 - client.textRenderer.getStringWidth("...")), StringRenderable.plain("..."));
-                    client.textRenderer.drawWithShadow(matrices, Language.getInstance().method_30934(subtitleTrimmed), x + 2, y + 12, 8421504);
+                    StringVisitable subtitleTrimmed = StringVisitable.concat(client.textRenderer.trimToWidth(subtitle, entryWidth - 28 - client.textRenderer.getStringWidth("...")), StringVisitable.plain("..."));
+                    client.textRenderer.drawWithShadow(matrices, Language.getInstance().reorder(subtitleTrimmed), x + 2, y + 12, 8421504);
                 } else {
-                    client.textRenderer.drawWithShadow(matrices, subtitle.method_30937(), x + 2, y + 12, 8421504);
+                    client.textRenderer.drawWithShadow(matrices, subtitle.asOrderedText(), x + 2, y + 12, 8421504);
                 }
             }
             addButton.x = x + entryWidth - 25;

+ 8 - 8
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringRuleOptionsScreen.java

@@ -25,14 +25,14 @@ package me.shedaniel.rei.gui.config.entry;
 
 import me.shedaniel.clothconfig2.gui.widget.DynamicElementListWidget;
 import me.shedaniel.rei.impl.filtering.FilteringRule;
-import net.minecraft.class_5481;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.client.gui.widget.TextFieldWidget;
 import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.OrderedText;
+import net.minecraft.text.StringVisitable;
 import net.minecraft.text.Text;
 import net.minecraft.text.TranslatableText;
 import net.minecraft.util.Identifier;
@@ -75,8 +75,8 @@ public abstract class FilteringRuleOptionsScreen<T extends FilteringRule<?>> ext
     
     public abstract void save();
     
-    public void addText(Consumer<RuleEntry> entryConsumer, StringRenderable text) {
-        for (class_5481 s : textRenderer.wrapStringToWidthAsList(text, width - 80)) {
+    public void addText(Consumer<RuleEntry> entryConsumer, StringVisitable text) {
+        for (OrderedText s : textRenderer.wrapStringToWidthAsList(text, width - 80)) {
             entryConsumer.accept(new TextRuleEntry(rule, s));
         }
     }
@@ -89,7 +89,7 @@ public abstract class FilteringRuleOptionsScreen<T extends FilteringRule<?>> ext
     public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
         this.rulesList.render(matrices, mouseX, mouseY, delta);
         super.render(matrices, mouseX, mouseY, delta);
-        this.textRenderer.drawWithShadow(matrices, this.title.method_30937(), this.width / 2.0F - this.textRenderer.getWidth(this.title) / 2.0F, 12.0F, -1);
+        this.textRenderer.drawWithShadow(matrices, this.title.asOrderedText(), this.width / 2.0F - this.textRenderer.getWidth(this.title) / 2.0F, 12.0F, -1);
     }
     
     public static class RulesList extends DynamicElementListWidget<RuleEntry> {
@@ -126,9 +126,9 @@ public abstract class FilteringRuleOptionsScreen<T extends FilteringRule<?>> ext
     }
     
     public static class TextRuleEntry extends RuleEntry {
-        private final class_5481 text;
+        private final OrderedText text;
         
-        public TextRuleEntry(FilteringRule<?> rule, class_5481 text) {
+        public TextRuleEntry(FilteringRule<?> rule, OrderedText text) {
             super(rule);
             this.text = text;
         }
@@ -177,7 +177,7 @@ public abstract class FilteringRuleOptionsScreen<T extends FilteringRule<?>> ext
         
         public TextFieldRuleEntry(int width, FilteringRule<?> rule, Consumer<TextFieldWidget> widgetConsumer) {
             super(rule);
-            this.widget = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, 0, 0, width, 18, Text.method_30163(""));
+            this.widget = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, 0, 0, width, 18, Text.of(""));
             widgetConsumer.accept(widget);
         }
         

+ 9 - 11
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringRulesScreen.java

@@ -26,8 +26,6 @@ package me.shedaniel.rei.gui.config.entry;
 import me.shedaniel.clothconfig2.gui.widget.DynamicElementListWidget;
 import me.shedaniel.rei.impl.filtering.FilteringRule;
 import me.shedaniel.rei.impl.filtering.rules.ManualFilteringRule;
-import net.minecraft.class_5481;
-import net.minecraft.class_5491;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.screen.Screen;
@@ -36,7 +34,7 @@ import net.minecraft.client.sound.PositionedSoundInstance;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.sound.SoundEvents;
 import net.minecraft.text.LiteralText;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.StringVisitable;
 import net.minecraft.text.Text;
 import net.minecraft.text.TranslatableText;
 import net.minecraft.util.Identifier;
@@ -94,7 +92,7 @@ public class FilteringRulesScreen extends Screen {
     public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
         this.rulesList.render(matrices, mouseX, mouseY, delta);
         super.render(matrices, mouseX, mouseY, delta);
-        this.textRenderer.drawWithShadow(matrices, this.title.method_30937(), this.width / 2.0F - this.textRenderer.getWidth(this.title) / 2.0F, 12.0F, -1);
+        this.textRenderer.drawWithShadow(matrices, this.title.asOrderedText(), this.width / 2.0F - this.textRenderer.getWidth(this.title) / 2.0F, 12.0F, -1);
     }
     
     public static class RulesList extends DynamicElementListWidget<RuleEntry> {
@@ -186,7 +184,7 @@ public class FilteringRulesScreen extends Screen {
         public DefaultRuleEntry(FilteringRule<?> rule, FilteringEntry entry, BiFunction<FilteringEntry, Screen, Screen> screenFunction) {
             super(rule);
             this.screenFunction = (screenFunction == null ? rule.createEntryScreen().orElse(null) : screenFunction);
-            configureButton = new ButtonWidget(0, 0, 20, 20, Text.method_30163(null), button -> {
+            configureButton = new ButtonWidget(0, 0, 20, 20, Text.of(null), button -> {
                 entry.edited = true;
                 MinecraftClient.getInstance().openScreen(this.screenFunction.apply(entry, MinecraftClient.getInstance().currentScreen));
             }) {
@@ -217,20 +215,20 @@ public class FilteringRulesScreen extends Screen {
                 Text title = getRule().getTitle();
                 int i = client.textRenderer.getWidth(title);
                 if (i > entryWidth - 28) {
-                    StringRenderable titleTrimmed = StringRenderable.concat(client.textRenderer.trimToWidth(title, entryWidth - 28 - client.textRenderer.getStringWidth("...")), StringRenderable.plain("..."));
-                    client.textRenderer.drawWithShadow(matrices, Language.getInstance().method_30934(titleTrimmed), x + 2, y + 1, 16777215);
+                    StringVisitable titleTrimmed = StringVisitable.concat(client.textRenderer.trimToWidth(title, entryWidth - 28 - client.textRenderer.getStringWidth("...")), StringVisitable.plain("..."));
+                    client.textRenderer.drawWithShadow(matrices, Language.getInstance().reorder(titleTrimmed), x + 2, y + 1, 16777215);
                 } else {
-                    client.textRenderer.drawWithShadow(matrices, title.method_30937(), x + 2, y + 1, 16777215);
+                    client.textRenderer.drawWithShadow(matrices, title.asOrderedText(), x + 2, y + 1, 16777215);
                 }
             }
             {
                 Text subtitle = getRule().getSubtitle();
                 int i = client.textRenderer.getWidth(subtitle);
                 if (i > entryWidth - 28) {
-                    StringRenderable subtitleTrimmed = StringRenderable.concat(client.textRenderer.trimToWidth(subtitle, entryWidth - 28 - client.textRenderer.getStringWidth("...")), StringRenderable.plain("..."));
-                    client.textRenderer.drawWithShadow(matrices, Language.getInstance().method_30934(subtitleTrimmed), x + 2, y + 12, 8421504);
+                    StringVisitable subtitleTrimmed = StringVisitable.concat(client.textRenderer.trimToWidth(subtitle, entryWidth - 28 - client.textRenderer.getStringWidth("...")), StringVisitable.plain("..."));
+                    client.textRenderer.drawWithShadow(matrices, Language.getInstance().reorder(subtitleTrimmed), x + 2, y + 12, 8421504);
                 } else {
-                    client.textRenderer.drawWithShadow(matrices, subtitle.method_30937(), x + 2, y + 12, 8421504);
+                    client.textRenderer.drawWithShadow(matrices, subtitle.asOrderedText(), x + 2, y + 12, 8421504);
                 }
             }
             configureButton.x = x + entryWidth - 25;

+ 1 - 1
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/config/entry/FilteringScreen.java

@@ -267,7 +267,7 @@ public class FilteringScreen extends Screen {
             ScreenHelper.getLastOverlay().renderTooltip(matrices, tooltip);
         }
         
-        this.textRenderer.drawWithShadow(matrices, this.title.method_30937(), this.width / 2.0F - this.textRenderer.getWidth(this.title) / 2.0F, 12.0F, -1);
+        this.textRenderer.drawWithShadow(matrices, this.title.asOrderedText(), this.width / 2.0F - this.textRenderer.getWidth(this.title) / 2.0F, 12.0F, -1);
     }
     
     private Rectangle getSelection() {

+ 5 - 6
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java

@@ -24,11 +24,10 @@
 package me.shedaniel.rei.gui.credits;
 
 import me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget;
-import net.minecraft.class_5481;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.OrderedText;
 import net.minecraft.text.Text;
 import org.jetbrains.annotations.ApiStatus;
 
@@ -94,7 +93,7 @@ public class CreditsEntryListWidget extends DynamicNewSmoothScrollingEntryListWi
         
         @Override
         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, text.method_30937(), x + 5, y + 5, -1);
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, text.asOrderedText(), x + 5, y + 5, -1);
         }
         
         @Override
@@ -110,7 +109,7 @@ public class CreditsEntryListWidget extends DynamicNewSmoothScrollingEntryListWi
     
     public static class TranslationCreditsItem extends CreditsItem {
         private Text language;
-        private List<class_5481> translators;
+        private List<OrderedText> translators;
         private int maxWidth;
         
         public TranslationCreditsItem(Text language, Text translators, int width, int maxWidth) {
@@ -121,9 +120,9 @@ public class CreditsEntryListWidget extends DynamicNewSmoothScrollingEntryListWi
         
         @Override
         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.method_30937(), x + 5, y + 5, -1);
+            MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, language.asOrderedText(), x + 5, y + 5, -1);
             int yy = y + 5;
-            for (class_5481 translator : translators) {
+            for (OrderedText translator : translators) {
                 MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, translator, x + 5 + maxWidth, yy, -1);
                 yy += 12;
             }

+ 4 - 4
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/ClickableLabelWidget.java

@@ -76,14 +76,14 @@ public abstract class ClickableLabelWidget extends LabelWidget {
         int width = font.getStringWidth(getText());
         if (isCentered()) {
             if (isHasShadows())
-                font.drawWithShadow(matrices, text.method_30937(), pos.x - width / 2f, pos.y, color);
+                font.drawWithShadow(matrices, text.asOrderedText(), pos.x - width / 2f, pos.y, color);
             else
-                font.draw(matrices, text.method_30937(), pos.x - width / 2f, pos.y, color);
+                font.draw(matrices, text.asOrderedText(), pos.x - width / 2f, pos.y, color);
         } else {
             if (isHasShadows())
-                font.drawWithShadow(matrices, text.method_30937(), pos.x, pos.y, color);
+                font.drawWithShadow(matrices, text.asOrderedText(), pos.x, pos.y, color);
             else
-                font.draw(matrices, text.method_30937(), pos.x, pos.y, color);
+                font.draw(matrices, text.asOrderedText(), pos.x, pos.y, color);
         }
         drawTooltips(mouseX, mouseY);
     }

+ 1 - 1
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java

@@ -297,7 +297,7 @@ public class EntryListWidget extends WidgetWithBounds {
             matrices.push();
             matrices.translate(0.0D, 0.0D, getZ());
             Matrix4f matrix = matrices.peek().getModel();
-            font.draw(debugText.method_30937(), Math.min(bounds.x + 2, minecraft.currentScreen.width - stringWidth), bounds.y + 2, -1, false, matrix, immediate, false, 0, 15728880);
+            font.draw(debugText.asOrderedText(), Math.min(bounds.x + 2, minecraft.currentScreen.width - stringWidth), bounds.y + 2, -1, false, matrix, immediate, false, 0, 15728880);
             immediate.draw();
             setZ(z);
             matrices.pop();

+ 4 - 4
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/LabelWidget.java

@@ -175,14 +175,14 @@ public class LabelWidget extends WidgetWithBounds {
         Point pos = getLocation();
         if (isCentered()) {
             if (hasShadows)
-                font.drawWithShadow(matrices, text.method_30937(), pos.x - width / 2f, pos.y, defaultColor);
+                font.drawWithShadow(matrices, text.asOrderedText(), pos.x - width / 2f, pos.y, defaultColor);
             else
-                font.draw(matrices, text.method_30937(), pos.x - width / 2f, pos.y, defaultColor);
+                font.draw(matrices, text.asOrderedText(), pos.x - width / 2f, pos.y, defaultColor);
         } else {
             if (hasShadows)
-                font.drawWithShadow(matrices, text.method_30937(), pos.x, pos.y, defaultColor);
+                font.drawWithShadow(matrices, text.asOrderedText(), pos.x, pos.y, defaultColor);
             else
-                font.draw(matrices, text.method_30937(), pos.x, pos.y, defaultColor);
+                font.draw(matrices, text.asOrderedText(), pos.x, pos.y, defaultColor);
         }
     }
     

+ 1 - 1
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java

@@ -120,7 +120,7 @@ public class RecipeChoosePageWidget extends DraggableWidget {
             @Override
             public void render(MatrixStack matrices, int i, int i1, float v) {
                 text = new TranslatableText("text.rei.choose_page");
-                font.draw(matrices, text.method_30937(), bounds.x + 5, bounds.y + 5, REIHelper.getInstance().isDarkThemeEnabled() ? 0xFFBBBBBB : 0xFF404040);
+                font.draw(matrices, text.asOrderedText(), bounds.x + 5, bounds.y + 5, REIHelper.getInstance().isDarkThemeEnabled() ? 0xFFBBBBBB : 0xFF404040);
                 String endString = String.format(" /%d", maxPage);
                 int width = font.getStringWidth(endString);
                 font.draw(matrices, endString, bounds.x + bounds.width - 5 - width, bounds.y + 22, REIHelper.getInstance().isDarkThemeEnabled() ? 0xFFBBBBBB : 0xFF404040);

+ 2 - 1
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java

@@ -45,6 +45,7 @@ import net.minecraft.fluid.Fluids;
 import net.minecraft.text.LiteralText;
 import net.minecraft.text.Text;
 import net.minecraft.text.TranslatableText;
+import net.minecraft.util.Formatting;
 import net.minecraft.util.Identifier;
 import net.minecraft.util.math.Matrix4f;
 import net.minecraft.util.registry.Registry;
@@ -205,7 +206,7 @@ public class FluidEntryStack extends AbstractEntryStack {
             final String modId = ClientHelper.getInstance().getModFromIdentifier(id);
             boolean alreadyHasMod = false;
             for (Text s : toolTip)
-                if (s.getString().equalsIgnoreCase(modId)) {
+                if (Formatting.strip(s.getString()).equalsIgnoreCase(modId)) {
                     alreadyHasMod = true;
                     break;
                 }

+ 2 - 1
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java

@@ -50,6 +50,7 @@ import net.minecraft.nbt.Tag;
 import net.minecraft.text.LiteralText;
 import net.minecraft.text.Text;
 import net.minecraft.text.TranslatableText;
+import net.minecraft.util.Formatting;
 import net.minecraft.util.Identifier;
 import net.minecraft.util.math.MathHelper;
 import net.minecraft.util.registry.Registry;
@@ -283,7 +284,7 @@ public class ItemEntryStack extends AbstractEntryStack implements OptimalEntrySt
             final String modId = ClientHelper.getInstance().getModFromItem(getItem());
             boolean alreadyHasMod = false;
             for (Text s : toolTip)
-                if (s.getString().equalsIgnoreCase(modId)) {
+                if (Formatting.strip(s.getString()).equalsIgnoreCase(modId)) {
                     alreadyHasMod = true;
                     break;
                 }

+ 2 - 2
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/filtering/FilteringRule.java

@@ -80,11 +80,11 @@ public interface FilteringRule<T extends FilteringRule<?>> {
     }
     
     default Text getTitle() {
-        return Text.method_30163(FilteringRule.REGISTRY.getId(this).toString());
+        return Text.of(FilteringRule.REGISTRY.getId(this).toString());
     }
     
     default Text getSubtitle() {
-        return Text.method_30163(null);
+        return Text.of(null);
     }
     
     T createNew();

+ 15 - 15
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/widgets/LabelWidget.java

@@ -30,11 +30,11 @@ import me.shedaniel.rei.api.REIHelper;
 import me.shedaniel.rei.api.widgets.Label;
 import me.shedaniel.rei.api.widgets.Tooltip;
 import me.shedaniel.rei.api.widgets.Widgets;
-import net.minecraft.class_5481;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.text.LiteralText;
-import net.minecraft.text.StringRenderable;
+import net.minecraft.text.OrderedText;
+import net.minecraft.text.StringVisitable;
 import net.minecraft.util.Language;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -61,10 +61,10 @@ public final class LabelWidget extends Label {
     @Nullable private Function<Label, @Nullable String> tooltip;
     @Nullable private Consumer<Label> onClick;
     @Nullable private BiConsumer<MatrixStack, Label> onRender;
-    @NotNull private StringRenderable text;
-    @NotNull private final LazyResettable<class_5481> class_5481 = new LazyResettable<>(() -> Language.getInstance().method_30934(getMessage()));
+    @NotNull private StringVisitable text;
+    @NotNull private final LazyResettable<OrderedText> orderedText = new LazyResettable<>(() -> Language.getInstance().reorder(getMessage()));
     
-    public LabelWidget(@NotNull Point point, @NotNull StringRenderable text) {
+    public LabelWidget(@NotNull Point point, @NotNull StringVisitable text) {
         Objects.requireNonNull(this.point = point);
         Objects.requireNonNull(this.text = text);
     }
@@ -175,14 +175,14 @@ public final class LabelWidget extends Label {
     }
     
     @Override
-    public StringRenderable getMessage() {
+    public StringVisitable getMessage() {
         return text;
     }
     
     @Override
-    public void setMessage(@NotNull StringRenderable message) {
+    public void setMessage(@NotNull StringVisitable message) {
         this.text = Objects.requireNonNull(message);
-        this.class_5481.reset();
+        this.orderedText.reset();
     }
     
     @NotNull
@@ -205,26 +205,26 @@ public final class LabelWidget extends Label {
         if (isClickable() && isHovered(mouseX, mouseY))
             color = getHoveredColor();
         Point pos = getPoint();
-        int width = font.method_30880(class_5481.get());
+        int width = font.getWidth(orderedText.get());
         switch (getHorizontalAlignment()) {
             case LEFT_ALIGNED:
                 if (hasShadow())
-                    font.drawWithShadow(matrices, class_5481.get(), pos.x, pos.y, color);
+                    font.drawWithShadow(matrices, orderedText.get(), pos.x, pos.y, color);
                 else
-                    font.draw(matrices, class_5481.get(), pos.x, pos.y, color);
+                    font.draw(matrices, orderedText.get(), pos.x, pos.y, color);
                 break;
             case RIGHT_ALIGNED:
                 if (hasShadow())
-                    font.drawWithShadow(matrices, class_5481.get(), pos.x - width, pos.y, color);
+                    font.drawWithShadow(matrices, orderedText.get(), pos.x - width, pos.y, color);
                 else
-                    font.draw(matrices, class_5481.get(), pos.x - width, pos.y, color);
+                    font.draw(matrices, orderedText.get(), pos.x - width, pos.y, color);
                 break;
             case CENTER:
             default:
                 if (hasShadow())
-                    font.drawWithShadow(matrices, class_5481.get(), pos.x - width / 2f, pos.y, color);
+                    font.drawWithShadow(matrices, orderedText.get(), pos.x - width / 2f, pos.y, color);
                 else
-                    font.draw(matrices, class_5481.get(), pos.x - width / 2f, pos.y, color);
+                    font.draw(matrices, orderedText.get(), pos.x - width / 2f, pos.y, color);
                 break;
         }
         if (isHovered(mouseX, mouseY)) {

+ 8 - 8
gradle.properties

@@ -1,13 +1,13 @@
 org.gradle.jvmargs=-Xmx3G
-mod_version=5.1.0-unstable
-supported_version=1.16.2+
-minecraft_version=1.16.2-pre1
-yarn_version=1.16.2-pre1+build.1+legacy.20w09a+build.8
-fabricloader_version=0.9.0+build.204
-cloth_client_events_v0_version=1.0.6
+mod_version=5.1.1
+supported_version=1.16.2
+minecraft_version=1.16.2-rc1
+yarn_version=1.16.2-rc1+build.4+legacy.20w09a+build.8
+fabricloader_version=0.9.1+build.205
+cloth_client_events_v0_version=1.0.8
 cloth_config_version=4.7.0-unstable
-modmenu_version=1.12.2+build.16
-fabric_api=0.16.3+build.390-1.16
+modmenu_version=1.14.6+build.31
+fabric_api=0.17.0+build.393-1.16
 autoconfig1u=3.2.0-unstable
 api_include=me.shedaniel.cloth.api:cloth-client-events-v0,me.shedaniel.cloth:config-2,me.sargunvohra.mcmods:autoconfig1u,net.fabricmc.fabric-api:fabric-api-base
 api_exculde=