aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java
blob: d0937bae8f1e472a281bc0a83fc1a5cfa64bd822 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*
 * Roughly Enough Items by Danielshe.
 * Licensed under the MIT License.
 */

package me.shedaniel.rei.utils;

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.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.api.ConfigManager;
import me.shedaniel.rei.client.ScreenHelper;
import me.shedaniel.rei.gui.config.ItemCheatingMode;
import me.shedaniel.rei.gui.config.ItemListOrderingConfig;
import me.shedaniel.rei.gui.config.RecipeScreenType;
import me.shedaniel.rei.gui.credits.CreditsScreen;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.resource.language.I18n;

import java.io.IOException;
import java.util.Locale;
import java.util.Optional;

public class ClothScreenRegistry {
    
    public static final String RESET = "text.cloth-config.reset_value";
    
    @SuppressWarnings("deprecation")
    public static Screen getConfigScreen(Screen parent) {
        final ConfigManager configManager = RoughlyEnoughItemsCore.getConfigManager();
        ConfigBuilder builder = ConfigBuilder.create().setParentScreen(parent).setTitle("text.rei.config.title").setSavingRunnable(() -> {
            try {
                configManager.saveConfig();
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        ConfigEntryBuilder eb = ConfigEntryBuilder.create();
        ConfigCategory general = builder.getOrCreateCategory("text.rei.config.general");
        general.addEntry(eb.startBooleanToggle("text.rei.config.cheating", configManager.getConfig().cheating)
                .setDefaultValue(false)
                .setSaveConsumer(bool -> configManager.getConfig().cheating = bool)
                .setTooltipSupplier(bool -> {
                    String s = null;
                    if (!bool)
                        s = I18n.translate("text.rei.cheating_disabled");
                    else if (!RoughlyEnoughItemsCore.hasOperatorPermission())
                        s = I18n.translate("text.rei.cheating_enabled_no_perms");
                    else if (RoughlyEnoughItemsCore.hasPermissionToUsePackets())
                        s = I18n.translate("text.rei.cheating_enabled");
                    else
                        s = I18n.translate("text.rei.cheating_limited_enabled");
                    return Optional.ofNullable(new String[]{s});
                })
                .build());
        ConfigCategory appearance = builder.getOrCreateCategory("text.rei.config.appearance");
        appearance.addEntry(eb.startBooleanToggle("text.rei.config.appearance_theme", ScreenHelper.isDarkModeEnabled())
                .setDefaultValue(false)
                .setSaveConsumer(bool -> configManager.getConfig().darkTheme = bool)
                .setYesNoTextSupplier(bool -> I18n.translate("text.rei.config.appearance_theme." + bool))
                .setTooltip(getConfigTooltip("appearance_theme"))
                .build());
        appearance.addEntry(eb.startEnumSelector("text.rei.config.recipe_screen_type", RecipeScreenType.class, configManager.getConfig().screenType)
                .setDefaultValue(RecipeScreenType.UNSET)
                .setSaveConsumer(bool -> configManager.getConfig().screenType = (RecipeScreenType) bool)
                .setTooltip(getConfigTooltip("recipe_screen_type"))
                .build());
        appearance.addEntry(eb.startBooleanToggle("text.rei.config.side_search_box", configManager.getConfig().sideSearchField)
                .setDefaultValue(false)
                .setYesNoTextSupplier(bool -> I18n.translate("text.rei.config.side_search_box.text." + bool))
                .setSaveConsumer(bool -> configManager.getConfig().sideSearchField = bool)
                .setTooltip(getConfigTooltip("side_search_box"))
                .build());
        appearance.addEntry(eb.startEnumSelector("text.rei.config.list_ordering", ItemListOrderingConfig.class, ItemListOrderingConfig.from(configManager.getConfig().itemListOrdering, configManager.getConfig().isAscending))
                .setDefaultValue(ItemListOrderingConfig.REGISTRY_ASCENDING)
                .setSaveConsumer(config -> {
                    configManager.getConfig().itemListOrdering = ((ItemListOrderingConfig) config).getOrdering();
                    configManager.getConfig().isAscending = ((ItemListOrderingConfig) config).isAscending();
                })
                .setTooltip(getConfigTooltip("list_ordering", ItemListOrderingConfig.REGISTRY_ASCENDING.toString()))
                .build());
        appearance.addEntry(eb.startBooleanToggle("text.rei.config.item_list_position", configManager.getConfig().mirrorItemPanel)
                .setDefaultValue(false)
                .setYesNoTextSupplier(bool -> I18n.translate(bool ? "text.rei.config.item_list_position.left" : "text.rei.config.item_list_position.right"))
                .setSaveConsumer(bool -> configManager.getConfig().mirrorItemPanel = bool)
                .setTooltip(getConfigTooltip("item_list_position"))
                .build());
        appearance.addEntry(eb.startIntSlider("text.rei.config.max_recipes_per_page", configManager.getConfig().maxRecipePerPage, 2, 99)
                .setDefaultValue(3)
                .setSaveConsumer(i -> configManager.getConfig().maxRecipePerPage = i)
                .setTooltip(getConfigTooltip("max_recipes_per_page"))
                .build());
        appearance.addEntry(eb.startBooleanToggle("text.rei.config.light_gray_recipe_border", configManager.getConfig().lightGrayRecipeBorder)
                .setDefaultValue(false)
                .setYesNoTextSupplier(bool -> I18n.translate("text.rei.config.light_gray_recipe_border.text." + bool))
                .setSaveConsumer(bool -> configManager.getConfig().lightGrayRecipeBorder = bool)
                .setTooltip(getConfigTooltip("light_gray_recipe_border"))
                .build());
        appearance.addEntry(eb.startBooleanToggle("text.rei.config.villager_screen_permanent_scroll_bar", configManager.getConfig().villagerScreenPermanentScrollBar)
                .setYesNoTextSupplier(bool -> I18n.translate("text.rei.config.villager_screen_permanent_scroll_bar.text." + bool))
                .setDefaultValue(false)
                .setSaveConsumer(bool -> configManager.getConfig().villagerScreenPermanentScrollBar = bool)
                .setTooltip(getConfigTooltip("villager_screen_permanent_scroll_bar"))
                .build());
        
        ConfigCategory action = builder.getOrCreateCategory("text.rei.config.action");
        action.addEntry(eb.startEnumSelector("text.rei.config.item_cheating_mode", ItemCheatingMode.class, configManager.getConfig().itemCheatingMode)
                .setDefaultValue(ItemCheatingMode.REI_LIKE)
                .setSaveConsumer(i -> configManager.getConfig().itemCheatingMode = (i instanceof ItemCheatingMode) ? (ItemCheatingMode) i : ItemCheatingMode.REI_LIKE)
                .setEnumNameProvider(e -> I18n.translate("text.rei.config.item_cheating_mode." + ((ItemCheatingMode) e).name().toLowerCase(Locale.ROOT)))
                .setTooltip(getConfigTooltip("item_cheating_mode"))
                .build());
        action.addEntry(eb.startStrField("text.rei.give_command", configManager.getConfig().giveCommand)
                .setDefaultValue("/give {player_name} {item_identifier}{nbt} {count}")
                .setSaveConsumer(s -> configManager.getConfig().giveCommand = s)
                .setTooltip(getConfigTooltip("give_command"))
                .build());
        action.addEntry(eb.startStrField("text.rei.gamemode_command", configManager.getConfig().gamemodeCommand)
                .setDefaultValue("/gamemode {gamemode}")
                .setSaveConsumer(s -> configManager.getConfig().gamemodeCommand = s)
                .setTooltip(getConfigTooltip("gamemode_command"))
                .build());
        action.addEntry(eb.startStrField("text.rei.weather_command", configManager.getConfig().weatherCommand)
                .setDefaultValue("/weather {weather}")
                .setSaveConsumer(s -> configManager.getConfig().weatherCommand = s)
                .setTooltip(getConfigTooltip("weather_command"))
                .build());
        action.addEntry(eb.startBooleanToggle("text.rei.config.clickable_recipe_arrows", configManager.getConfig().clickableRecipeArrows)
                .setDefaultValue(true)
                .setYesNoTextSupplier(bool -> I18n.translate("text.rei.config.text." + bool))
                .setSaveConsumer(bool -> configManager.getConfig().clickableRecipeArrows = bool)
                .setTooltip(getConfigTooltip("clickable_recipe_arrows"))
                .build());
        ConfigCategory modules = builder.getOrCreateCategory("text.rei.config.modules");
        modules.addEntry(eb.startBooleanToggle("text.rei.config.craftable_only", configManager.getConfig().enableCraftableOnlyButton)
                .setDefaultValue(false)
                .setSaveConsumer(bool -> configManager.getConfig().enableCraftableOnlyButton = bool)
                .setYesNoTextSupplier(bool -> I18n.translate("text.rei.config.text." + bool))
                .setTooltip(getConfigTooltip("craftable_only"))
                .build());
        modules.addEntry(eb.startBooleanToggle("text.rei.config.util_buttons", configManager.getConfig().showUtilsButtons)
                .setDefaultValue(false)
                .setSaveConsumer(bool -> configManager.getConfig().showUtilsButtons = bool)
                .setYesNoTextSupplier(bool -> I18n.translate("text.rei.config.text." + bool))
                .setTooltip(getConfigTooltip("util_buttons"))
                .build());
        modules.addEntry(eb.startBooleanToggle("text.rei.config.vanilla_recipe_book", configManager.getConfig().disableRecipeBook)
                .setDefaultValue(false)
                .setSaveConsumer(bool -> configManager.getConfig().disableRecipeBook = bool)
                .setYesNoTextSupplier(bool -> I18n.translate("text.rei.config.text." + !bool))
                .setTooltip(getConfigTooltip("vanilla_recipe_book"))
                .build());
        return builder.setAfterInitConsumer(screen -> {
            ButtonWidget w = new ButtonWidget(6, 6, 60, 20, I18n.translate("text.rei.credits"), widget ->