diff options
Diffstat (limited to 'src')
9 files changed, 49 insertions, 43 deletions
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java b/src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java index d232c9914..ee775ec83 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java @@ -136,7 +136,7 @@ public class ConfigManagerImpl implements ConfigManager { @Override public Screen getConfigScreen(Screen parent) { - if (FabricLoader.getInstance().isModLoaded("cloth-config")) { + if (FabricLoader.getInstance().isModLoaded("cloth-config2")) { try { return Screen.class.cast(Class.forName("me.shedaniel.rei.utils.ClothScreenRegistry").getDeclaredMethod("getConfigScreen", Screen.class).invoke(null, parent)); } catch (Exception e) { diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java index d07c5c7c7..b7280e69c 100644 --- a/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java @@ -5,7 +5,7 @@ package me.shedaniel.rei.gui.credits; -import me.shedaniel.clothconfig.gui.DynamicSmoothScrollingEntryListWidget; +import me.shedaniel.clothconfig2.gui.widget.DynamicSmoothScrollingEntryListWidget; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.network.chat.Component; diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java index f80f5c662..e54a37581 100644 --- a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java @@ -7,16 +7,16 @@ package me.shedaniel.rei.gui.credits; import me.shedaniel.rei.client.ScreenHelper; import me.shedaniel.rei.gui.credits.CreditsEntryListWidget.CreditsItem; -import me.shedaniel.rei.gui.widget.ButtonWidget; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen; +import net.minecraft.client.gui.widget.AbstractPressableButtonWidget; import net.minecraft.client.resource.language.I18n; import net.minecraft.network.chat.TextComponent; public class CreditsScreen extends Screen { private Screen parent; - private ButtonWidget buttonDone; + private AbstractPressableButtonWidget buttonDone; private CreditsEntryListWidget entryListWidget; public CreditsScreen(Screen parent) { @@ -42,9 +42,9 @@ public class CreditsScreen extends Screen { for(String line : I18n.translate("text.rei.credit.text").split("\n")) entryListWidget.creditsAddEntry(new CreditsItem(new TextComponent(line))); entryListWidget.creditsAddEntry(new CreditsItem(new TextComponent(""))); - children.add(buttonDone = new ButtonWidget(width / 2 - 100, height - 26, 200, 20, I18n.translate("gui.done")) { + children.add(buttonDone = new AbstractPressableButtonWidget(width / 2 - 100, height - 26, 200, 20, I18n.translate("gui.done")) { @Override - public void onPressed() { + public void onPress() { CreditsScreen.this.minecraft.openScreen(parent); if (parent instanceof AbstractContainerScreen) ScreenHelper.getLastOverlay().init(); diff --git a/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java b/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java index 29f8e4d2f..c72916a5c 100644 --- a/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java +++ b/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java @@ -5,13 +5,16 @@ package me.shedaniel.rei.utils; -import me.shedaniel.cloth.api.ConfigScreenBuilder; -import me.shedaniel.cloth.gui.entries.BooleanListEntry; -import me.shedaniel.cloth.gui.entries.EnumListEntry; -import me.shedaniel.cloth.gui.entries.IntegerSliderEntry; -import me.shedaniel.cloth.gui.entries.StringListEntry; import me.shedaniel.cloth.hooks.ScreenHooks; +import me.shedaniel.clothconfig2.api.ConfigBuilder; +import me.shedaniel.clothconfig2.api.ConfigCategory; +import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; +import me.shedaniel.clothconfig2.gui.entries.BooleanListEntry; +import me.shedaniel.clothconfig2.gui.entries.EnumListEntry; +import me.shedaniel.clothconfig2.gui.entries.IntegerSliderEntry; +import me.shedaniel.clothconfig2.gui.entries.StringListEntry; import me.shedaniel.rei.RoughlyEnoughItemsCore; +import me.shedaniel.rei.api.ConfigManager; import me.shedaniel.rei.api.ItemCheatingMode; import me.shedaniel.rei.client.RecipeScreenType; import me.shedaniel.rei.client.ScreenHelper; @@ -30,18 +33,21 @@ public class ClothScreenRegistry { public static final String RESET = "text.cloth-config.reset_value"; public static Screen getConfigScreen(Screen parent) { - ConfigScreenBuilder builder = ConfigScreenBuilder.create(parent, "text.rei.config.title", savedConfig -> { + final ConfigManager configManager = RoughlyEnoughItemsCore.getConfigManager(); + ConfigBuilder builder = ConfigBuilder.create().setParentScreen(parent).setTitle("text.rei.config.title").setSavingRunnable(() -> { try { - RoughlyEnoughItemsCore.getConfigManager().saveConfig(); + configManager.saveConfig(); } catch (IOException e) { e.printStackTrace(); } }); - builder.addCategory("text.rei.config.general").addOption(new BooleanListEntry("text.rei.config.cheating", RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating = bool) { + ConfigEntryBuilder entryBuilder = ConfigEntryBuilder.create(); + ConfigCategory general = builder.getOrCreateCategory("text.rei.config.general"); + general.addEntry(new BooleanListEntry("text.rei.config.cheating", configManager.getConfig().cheating, RESET, () -> false, bool -> configManager.getConfig().cheating = bool) { @Override public Optional<String[]> getTooltip() { String s = null; - if (!getObject()) + if (!getValue()) s = I18n.translate("text.rei.cheating_disabled"); else if (!RoughlyEnoughItemsCore.hasOperatorPermission()) s = I18n.translate("text.rei.cheating_enabled_no_perms"); @@ -52,40 +58,40 @@ public class ClothScreenRegistry { return Optional.ofNullable(new String[]{s}); } }); - ConfigScreenBuilder.CategoryBuilder appearance = builder.addCategory("text.rei.config.appearance"); - appearance.addOption(new BooleanListEntry("text.rei.config.dark_theme", ScreenHelper.isDarkModeEnabled(), RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().darkTheme = bool, () -> getConfigTooltip("dark_theme"))); - appearance.addOption(new EnumListEntry<>("text.rei.config.recipe_screen_type", RecipeScreenType.class, RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType, RESET, () -> RecipeScreenType.UNSET, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType = bool, EnumListEntry.DEFAULT_NAME_PROVIDER, () -> getConfigTooltip("recipe_screen_type"))); - appearance.addOption(new BooleanListEntry("text.rei.config.side_search_box", RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField = bool, () -> getConfigTooltip("side_search_box"))); - appearance.addOption(new EnumListEntry<>("text.rei.config.list_ordering", ItemListOrderingConfig.class, ItemListOrderingConfig.from(RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering, RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending), RESET, () -> ItemListOrderingConfig.REGISTRY_ASCENDING, config -> { - RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering = config.getOrdering(); - RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending = config.isAscending(); + ConfigCategory appearance = builder.getOrCreateCategory("text.rei.config.appearance"); + appearance.addEntry(entryBuilder.startBooleanToggle("text.rei.config.dark_theme", ScreenHelper.isDarkModeEnabled()).setDefaultValue(() -> false).setSaveConsumer(bool -> configManager.getConfig().darkTheme = bool).setTooltipSupplier(() -> getConfigTooltip("dark_theme")).buildEntry()); + appearance.addEntry(new EnumListEntry<>("text.rei.config.recipe_screen_type", RecipeScreenType.class, configManager.getConfig().screenType, RESET, () -> RecipeScreenType.UNSET, bool -> configManager.getConfig().screenType = bool, EnumListEntry.DEFAULT_NAME_PROVIDER, () -> getConfigTooltip("recipe_screen_type"))); + appearance.addEntry(entryBuilder.startBooleanToggle("text.rei.config.side_search_box", configManager.getConfig().sideSearchField).setDefaultValue(() -> false).setSaveConsumer(bool -> configManager.getConfig().sideSearchField = bool).setTooltipSupplier(() -> getConfigTooltip("side_search_box")).buildEntry()); + appearance.addEntry(new EnumListEntry<>("text.rei.config.list_ordering", ItemListOrderingConfig.class, ItemListOrderingConfig.from(configManager.getConfig().itemListOrdering, configManager.getConfig().isAscending), RESET, () -> ItemListOrderingConfig.REGISTRY_ASCENDING, config -> { + configManager.getConfig().itemListOrdering = config.getOrdering(); + configManager.getConfig().isAscending = config.isAscending(); }, EnumListEntry.DEFAULT_NAME_PROVIDER, () -> getConfigTooltip("list_ordering", ItemListOrderingConfig.REGISTRY_ASCENDING.toString()))); - appearance.addOption(new BooleanListEntry("text.rei.config.item_list_position", RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel = bool, () -> getConfigTooltip("item_list_position")) { + appearance.addEntry(new BooleanListEntry("text.rei.config.item_list_position", configManager.getConfig().mirrorItemPanel, RESET, () -> false, bool -> configManager.getConfig().mirrorItemPanel = bool, () -> getConfigTooltip("item_list_position")) { @Override public String getYesNoText(boolean bool) { return I18n.translate(bool ? "text.rei.config.item_list_position.left" : "text.rei.config.item_list_position.right"); } }); - appearance.addOption(new IntegerSliderEntry("text.rei.config.max_recipes_per_page", 2, 99, RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage, RESET, () -> 3, i -> RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage = i, () -> getConfigTooltip("max_recipes_per_page"))); - appearance.addOption(new BooleanListEntry("text.rei.config.light_gray_recipe_border", RoughlyEnoughItemsCore.getConfigManager().getConfig().lightGrayRecipeBorder, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().lightGrayRecipeBorder = bool, () -> getConfigTooltip("light_gray_recipe_border"))); - appearance.addOption(new BooleanListEntry("text.rei.config.villager_screen_permanent_scroll_bar", RoughlyEnoughItemsCore.getConfigManager().getConfig().villagerScreenPermanentScrollBar, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().villagerScreenPermanentScrollBar = bool, () -> getConfigTooltip("villager_screen_permanent_scroll_bar"))); - ConfigScreenBuilder.CategoryBuilder action = builder.addCategory("text.rei.config.action"); - action.addOption(new EnumListEntry<>("text.rei.config.item_cheating_mode", ItemCheatingMode.class, RoughlyEnoughItemsCore.getConfigManager().getConfig().itemCheatingMode, RESET, () -> ItemCheatingMode.REI_LIKE, i -> RoughlyEnoughItemsCore.getConfigManager().getConfig().itemCheatingMode = i, e -> { + appearance.addEntry(new IntegerSliderEntry("text.rei.config.max_recipes_per_page", 2, 99, configManager.getConfig().maxRecipePerPage, RESET, () -> 3, i -> configManager.getConfig().maxRecipePerPage = i, () -> getConfigTooltip("max_recipes_per_page"))); + appearance.addEntry(new BooleanListEntry("text.rei.config.light_gray_recipe_border", configManager.getConfig().lightGrayRecipeBorder, RESET, () -> false, bool -> configManager.getConfig().lightGrayRecipeBorder = bool, () -> getConfigTooltip("light_gray_recipe_border"))); + appearance.addEntry(new BooleanListEntry("text.rei.config.villager_screen_permanent_scroll_bar", configManager.getConfig().villagerScreenPermanentScrollBar, RESET, () -> false, bool -> configManager.getConfig().villagerScreenPermanentScrollBar = bool, () -> getConfigTooltip("villager_screen_permanent_scroll_bar"))); + ConfigCategory action = builder.getOrCreateCategory("text.rei.config.action"); + action.addEntry(new EnumListEntry<>("text.rei.config.item_cheating_mode", ItemCheatingMode.class, configManager.getConfig().itemCheatingMode, RESET, () -> ItemCheatingMode.REI_LIKE, i -> configManager.getConfig().itemCheatingMode = i, e -> { return I18n.translate("text.rei.config.item_cheating_mode." + e.name().toLowerCase()); }, () -> getConfigTooltip("item_cheating_mode"))); - action.addOption(new StringListEntry("text.rei.give_command", RoughlyEnoughItemsCore.getConfigManager().getConfig().giveCommand, RESET, () -> "/give {player_name} {item_identifier}{nbt} {count}", s -> RoughlyEnoughItemsCore.getConfigManager().getConfig().giveCommand = s, () -> getConfigTooltip("give_command"))); - action.addOption(new StringListEntry("text.rei.gamemode_command", RoughlyEnoughItemsCore.getConfigManager().getConfig().gamemodeCommand, RESET, () -> "/gamemode {gamemode}", s -> RoughlyEnoughItemsCore.getConfigManager().getConfig().gamemodeCommand = s, () -> getConfigTooltip("gamemode_command"))); - action.addOption(new StringListEntry("text.rei.weather_command", RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand, RESET, () -> "/weather {weather}", s -> RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand = s, () -> getConfigTooltip("weather_command"))); - action.addOption(new BooleanListEntry("text.rei.config.register_in_other_thread", RoughlyEnoughItemsCore.getConfigManager().getConfig().registerRecipesInAnotherThread, RESET, () -> true, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().registerRecipesInAnotherThread = bool, () -> getConfigTooltip("register_in_other_thread"))); - ConfigScreenBuilder.CategoryBuilder modules = builder.addCategory("text.rei.config.modules"); - modules.addOption(new BooleanListEntry("text.rei.config.enable_craftable_only", RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton, RESET, () -> true, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton = bool, () -> getConfigTooltip("enable_craftable_only"))); - modules.addOption(new BooleanListEntry("text.rei.config.enable_util_buttons", RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons = bool, () -> getConfigTooltip("enable_util_buttons"))); - modules.addOption(new BooleanListEntry("text.rei.config.disable_recipe_book", RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook, RESET, () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook = bool, () -> getConfigTooltip("disable_recipe_book"))); - return builder.build(screen -> { + action.addEntry(new StringListEntry("text.rei.give_command", configManager.getConfig().giveCommand, RESET, () -> "/give {player_name} {item_identifier}{nbt} {count}", s -> configManager.getConfig().giveCommand = s, () -> getConfigTooltip("give_command"))); + action.addEntry(new StringListEntry("text.rei.gamemode_command", configManager.getConfig().gamemodeCommand, RESET, () -> "/gamemode {gamemode}", s -> configManager.getConfig().gamemodeCommand = s, () -> getConfigTooltip("gamemode_command"))); + action.addEntry(new StringListEntry("text.rei.weather_command", configManager.getConfig().weatherCommand, RESET, () -> "/weather {weather}", s -> configManager.getConfig().weatherCommand = s, () -> getConfigTooltip("weather_command"))); + action.addEntry(new BooleanListEntry("text.rei.config.register_in_other_thread", configManager.getConfig().registerRecipesInAnotherThread, RESET, () -> true, bool -> configManager.getConfig().registerRecipesInAnotherThread = bool, () -> getConfigTooltip("register_in_other_thread"))); + ConfigCategory modules = builder.getOrCreateCategory("text.rei.config.modules"); + modules.addEntry(new BooleanListEntry("text.rei.config.enable_craftable_only", configManager.getConfig().enableCraftableOnlyButton, RESET, () -> true, bool -> configManager.getConfig().enableCraftableOnlyButton = bool, () -> getConfigTooltip("enable_craftable_only"))); + modules.addEntry(new BooleanListEntry("text.rei.config.enable_util_buttons", configManager.getConfig().showUtilsButtons, RESET, () -> false, bool -> configManager.getConfig().showUtilsButtons = bool, () -> getConfigTooltip("enable_util_buttons"))); + modules.addEntry(new BooleanListEntry("text.rei.config.disable_recipe_book", configManager.getConfig().disableRecipeBook, RESET, () -> false, bool -> configManager.getConfig().disableRecipeBook = bool, () -> getConfigTooltip("disable_recipe_book"))); + return builder.setAfterInitConsumer(screen -> { ButtonWidget w = new ButtonWidget(6, 6, 60, 20, I18n.translate("text.rei.credits"), widget -> MinecraftClient.getInstance().openScreen(new CreditsScreen(MinecraftClient.getInstance().currentScreen))); ((ScreenHooks) screen).cloth_getButtonWidgets().add(0, w); ((ScreenHooks) screen).cloth_getChildren().add(0, w); - }); + }).build(); } private static Optional<String[]> getConfigTooltip(String s, Object... o) { diff --git a/src/main/resources/assets/roughlyenoughitems/lang/bg_bg.json b/src/main/resources/assets/roughlyenoughitems/lang/bg_bg.json index 58bbfdbda..a247a8201 100644 --- a/src/main/resources/assets/roughlyenoughitems/lang/bg_bg.json +++ b/src/main/resources/assets/roughlyenoughitems/lang/bg_bg.json @@ -71,5 +71,5 @@ "text.rei.config.enable_legacy_speedcraft_support": "Включи поддръжка на стари приставки: ",
"text.rei.config.april_fools": "Ден на шегата",
"text.rei.config.april_fools.2019": "Включи 2019 REI шега за деня на шегата: ",
- "text.rei.no_config_api": "Cloth Config API не е инсталиран!\nМоля инсталирайте го, за да се покаже екранът за конфигурация!"
+ "text.rei.no_config_api": "Cloth Config v2 API не е инсталиран!\nМоля инсталирайте го, за да се покаже екранът за конфигурация!"
}
\ No newline at end of file diff --git a/src/main/resources/assets/roughlyenoughitems/lang/en_us.json b/src/main/resources/assets/roughlyenoughitems/lang/en_us.json index a07adbd33..49659dc77 100755 --- a/src/main/resources/assets/roughlyenoughitems/lang/en_us.json +++ b/src/main/resources/assets/roughlyenoughitems/lang/en_us.json @@ -93,7 +93,7 @@ "text.rei.config.item_cheating_mode.rei_like": "Normal", "text.rei.config.item_cheating_mode.jei_like": "Reversed", "text.rei.config.light_gray_recipe_border": "Light Gray Recipe Border:", - "text.rei.config_api_failed": "You arrived here either if Cloth Config API failed or you don't have it installed!\nUpdate / Install the API and report to the bug tracker.", + "text.rei.config_api_failed": "You arrived here either if Cloth Config v2 API failed or you don't have it installed!\nUpdate / Install the API and report to the bug tracker.", "text.rei.back": "Back", "text.rei.config.recipe_screen_type": "Screen Type", "text.rei.config.recipe_screen_type.unset": "Not Set", diff --git a/src/main/resources/assets/roughlyenoughitems/lang/et_ee.json b/src/main/resources/assets/roughlyenoughitems/lang/et_ee.json index 0d7431051..2598f4192 100644 --- a/src/main/resources/assets/roughlyenoughitems/lang/et_ee.json +++ b/src/main/resources/assets/roughlyenoughitems/lang/et_ee.json @@ -91,7 +91,7 @@ "text.rei.config.item_cheating_mode.rei_like": "Tavaline", "text.rei.config.item_cheating_mode.jei_like": "Pööratud", "text.rei.config.light_gray_recipe_border": "Helehall retsepti taust:", - "text.rei.config_api_failed": "Sa sattusid siia, kui Cloth Config API nurjus või sul polnud seda paigaldatud!\nUuenda või paigalda antud API and ning teata sellest vigade loetelus.", + "text.rei.config_api_failed": "Sa sattusid siia, kui Cloth Config v2 API nurjus või sul polnud seda paigaldatud!\nUuenda või paigalda antud API and ning teata sellest vigade loetelus.", "text.rei.back": "Tagasi", "text.rei.config.recipe_screen_type": "Kuvatüüp", "text.rei.config.recipe_screen_type.unset": "Määramata", diff --git a/src/main/resources/assets/roughlyenoughitems/lang/zh_cn.json b/src/main/resources/assets/roughlyenoughitems/lang/zh_cn.json index 2eeecf825..1fca0e9b5 100644 --- a/src/main/resources/assets/roughlyenoughitems/lang/zh_cn.json +++ b/src/main/resources/assets/roughlyenoughitems/lang/zh_cn.json @@ -93,7 +93,7 @@ "text.rei.config.item_cheating_mode.rei_like": "标准", "text.rei.config.item_cheating_mode.jei_like": "反转", "text.rei.config.light_gray_recipe_border": "浅灰色配方边框:", - "text.rei.config_api_failed": "如果Cloth Config API装载失败了或你没有安装它,你就会到达这个界面!\n升级/安装API或向bug跟踪器报告.", + "text.rei.config_api_failed": "如果Cloth Config v2 API装载失败了或你没有安装它,你就会到达这个界面!\n升级/安装API或向bug跟踪器报告.", "text.rei.back": "返回", "text.rei.config.recipe_screen_type": "界面类型", "text.rei.config.recipe_screen_type.unset": "未设置", diff --git a/src/main/resources/assets/roughlyenoughitems/lang/zh_tw.json b/src/main/resources/assets/roughlyenoughitems/lang/zh_tw.json index f2de813ea..3a1e05c06 100644 --- a/src/main/resources/assets/roughlyenoughitems/lang/zh_tw.json +++ b/src/main/resources/assets/roughlyenoughitems/lang/zh_tw.json @@ -93,7 +93,7 @@ "text.rei.config.item_cheating_mode.rei_like": "標準", "text.rei.config.item_cheating_mode.jei_like": "反轉", "text.rei.config.light_gray_recipe_border": "淺灰色配方邊框:", - "text.rei.config_api_failed": "如果Cloth Config API裝載失敗了或你沒有安裝它,你就會到達這個界面!\n升級/安裝API或向bug跟踪器報告.", + "text.rei.config_api_failed": "如果Cloth Config v2 API裝載失敗了或你沒有安裝它,你就會到達這個界面!\n升級/安裝API或向bug跟踪器報告.", "text.rei.back": "返回", "text.rei.config.recipe_screen_type": "界麵類型", "text.rei.config.recipe_screen_type.unset": "未設置", |
