|
10 | 10 | import net.minecraft.client.gui.widget.button.ButtonWidget;
|
11 | 11 | import net.minecraft.client.gui.widget.button.CyclingButtonWidget;
|
12 | 12 | import net.minecraft.client.gui.widget.layout.GridWidget;
|
13 |
| -import net.minecraft.client.gui.widget.layout.HeaderFooterLayoutWidget; |
14 | 13 | import net.minecraft.client.gui.widget.layout.LayoutSettings;
|
15 | 14 | import net.minecraft.client.gui.widget.layout.LinearLayoutWidget;
|
16 | 15 | import net.minecraft.client.gui.widget.text.TextWidget;
|
17 |
| -import net.minecraft.client.option.Option; |
18 |
| -import net.minecraft.text.CommonTexts; |
19 | 16 | import net.minecraft.text.Style;
|
20 | 17 | import net.minecraft.text.Text;
|
21 | 18 | import net.minecraft.util.Language;
|
22 | 19 | import org.jetbrains.annotations.Nullable;
|
23 | 20 |
|
24 |
| -import java.util.ArrayList; |
25 |
| -import java.util.Collection; |
26 |
| -import java.util.HashMap; |
27 |
| -import java.util.Map; |
28 |
| - |
29 |
| -public class RainglowConfigScreen extends Screen implements ScreenWithUnsavedWarning { |
| 21 | +public class RainglowConfigScreen extends SaveableGameOptionsScreen { |
30 | 22 | private static final Text TITLE = Rainglow.translatableText("config.title");
|
31 | 23 | public static final Text YES = Text.translatable("gui.yes").styled(style -> style.withColor(0x00FF00));
|
32 | 24 | public static final Text NO = Text.translatable("gui.no").styled(style -> style.withColor(0xFF0000));
|
33 | 25 |
|
34 |
| - private final Screen parent; |
35 |
| - private final Map<RainglowEntity, DeferredSaveOption<Boolean>> toggles = new HashMap<>(); |
36 |
| - private final Map<RainglowEntity, DeferredSaveOption<Integer>> sliders = new HashMap<>(); |
37 |
| - private final ButtonWidget saveButton; |
38 |
| - |
39 | 26 | private RainglowMode mode;
|
40 |
| - private boolean isConfirming; |
41 | 27 |
|
42 | 28 | public RainglowConfigScreen(@Nullable Screen parent) {
|
43 |
| - super(TITLE); |
44 |
| - this.parent = parent; |
| 29 | + super(parent, TITLE); |
| 30 | + |
45 | 31 | this.mode = getMode();
|
46 |
| - this.saveButton = ButtonWidget.builder(Rainglow.translatableText("config.save"), button -> this.save()).build(); |
47 |
| - this.saveButton.active = false; |
48 | 32 | }
|
49 | 33 |
|
50 | 34 | private void setMode(RainglowMode mode) {
|
@@ -74,104 +58,81 @@ private TextWidget getInfoText() {
|
74 | 58 | }
|
75 | 59 |
|
76 | 60 | @Override
|
77 |
| - public void init() { |
78 |
| - HeaderFooterLayoutWidget headerFooterWidget = new HeaderFooterLayoutWidget(this, 61, 33); |
79 |
| - LinearLayoutWidget headerLayout = headerFooterWidget.addToHeader(LinearLayoutWidget.createVertical().setSpacing(8)); |
80 |
| - |
81 |
| - if (!this.isConfirming) { |
82 |
| - // header |
83 |
| - headerLayout.add(new TextWidget(TITLE, this.textRenderer), settings -> settings.alignHorizontallyCenter().alignVerticallyTop().setPadding(12)); |
84 |
| - headerLayout.add(createModeButton(), LayoutSettings::alignVerticallyBottom); |
85 |
| - headerLayout.add(getInfoText(), LayoutSettings::alignHorizontallyCenter); |
86 |
| - |
87 |
| - // contents |
88 |
| - LinearLayoutWidget contentLayout = LinearLayoutWidget.createVertical(); |
89 |
| - |
90 |
| - GridWidget gridWidget = new GridWidget(); |
91 |
| - gridWidget.getDefaultSettings().setHorizontalPadding(4).setBottomPadding(4).alignHorizontallyCenter(); |
| 61 | + protected void save() { |
| 62 | + super.save(); |
| 63 | + this.setMode(this.mode); |
| 64 | + } |
92 | 65 |
|
93 |
| - GridWidget.AdditionHelper mainAdditionHelper = gridWidget.createAdditionHelper(2); |
94 |
| - for (RainglowEntity entity : RainglowEntity.values()) { |
95 |
| - DeferredSaveOption<Boolean> entityToggle = createEntityToggle(entity); |
96 |
| - mainAdditionHelper.add(entityToggle.createButton(MinecraftClient.getInstance().options)); |
97 |
| - entityToggle.set(entityToggle.deferredValue); |
| 66 | + @Override |
| 67 | + protected void method_60325() { |
| 68 | + LinearLayoutWidget contentLayout = LinearLayoutWidget.createVertical().setSpacing(8); |
98 | 69 |
|
99 |
| - mainAdditionHelper.add(createColourRaritySlider(entity).createButton(MinecraftClient.getInstance().options)); |
100 |
| - } |
| 70 | + contentLayout.add(createModeButton(), LayoutSettings::alignVerticallyBottom); |
| 71 | + contentLayout.add(getInfoText(), LayoutSettings::alignHorizontallyCenter); |
101 | 72 |
|
102 |
| - contentLayout.add(gridWidget); |
103 |
| - contentLayout.add(ButtonWidget.builder( |
104 |
| - Rainglow.translatableText("config.custom"), |
105 |
| - button -> MinecraftClient.getInstance().setScreen(new CustomModeScreen(this)) |
106 |
| - ).width(308).position(4, 0).build(), |
107 |
| - LayoutSettings.create().setPadding(4, 0)); |
| 73 | + GridWidget gridWidget = new GridWidget(); |
| 74 | + gridWidget.getDefaultSettings().setHorizontalPadding(4).setBottomPadding(4).alignHorizontallyCenter(); |
108 | 75 |
|
109 |
| - headerFooterWidget.addToContents(contentLayout); |
| 76 | + GridWidget.AdditionHelper mainAdditionHelper = gridWidget.createAdditionHelper(2); |
| 77 | + for (RainglowEntity entity : RainglowEntity.values()) { |
| 78 | + DeferredSaveOption<Boolean> entityToggle = createEntityToggle(entity); |
| 79 | + mainAdditionHelper.add(entityToggle.createButton(MinecraftClient.getInstance().options)); |
| 80 | + entityToggle.set(entityToggle.deferredValue); |
| 81 | + this.options.add(entityToggle); |
110 | 82 |
|
111 |
| - // footer |
112 |
| - LinearLayoutWidget linearLayout = headerFooterWidget.addToFooter(LinearLayoutWidget.createHorizontal().setSpacing(8)); |
113 |
| - linearLayout.add(ButtonWidget.builder(CommonTexts.DONE, button -> this.closeScreen()).build()); |
114 |
| - linearLayout.add(this.saveButton); |
115 |
| - } else { |
116 |
| - this.setUpUnsavedWarning(headerFooterWidget, this.textRenderer, this.parent); |
| 83 | + DeferredSaveOption<Integer> raritySlider = createColourRaritySlider(entity); |
| 84 | + mainAdditionHelper.add(raritySlider.createButton(MinecraftClient.getInstance().options)); |
| 85 | + this.options.add(raritySlider); |
117 | 86 | }
|
118 | 87 |
|
119 |
| - headerFooterWidget.visitWidgets(this::addDrawableSelectableElement); |
120 |
| - headerFooterWidget.arrangeElements(); |
| 88 | + contentLayout.add(gridWidget); |
| 89 | + contentLayout.add(ButtonWidget.builder( |
| 90 | + Rainglow.translatableText("config.custom"), |
| 91 | + button -> MinecraftClient.getInstance().setScreen(new CustomModeScreen(this)) |
| 92 | + ).width(308).position(4, 0).build(), |
| 93 | + LayoutSettings.create().setPadding(4, 0)); |
| 94 | + |
| 95 | + this.field_49503.addToContents(contentLayout); |
121 | 96 | }
|
122 | 97 |
|
123 | 98 | private DeferredSaveOption<Boolean> createEntityToggle(RainglowEntity entity) {
|
124 |
| - return toggles.computeIfAbsent(entity, e -> DeferredSaveOption.createDeferredBoolean( |
125 |
| - "config.enable_" + e.getId(), |
126 |
| - "tooltip.entity_toggle", |
127 |
| - Rainglow.CONFIG.toggles.getRealValue().get(e.getId()), |
128 |
| - enabled -> Rainglow.CONFIG.toggles.getRealValue().put(e.getId(), enabled), |
129 |
| - enabled -> this.saveButton.active = true |
130 |
| - )); |
| 99 | + return DeferredSaveOption.createDeferredBoolean( |
| 100 | + "config.enable_" + entity.getId(), |
| 101 | + "tooltip.entity_toggle", |
| 102 | + Rainglow.CONFIG.toggles.getRealValue().get(entity.getId()), |
| 103 | + enabled -> Rainglow.CONFIG.toggles.getRealValue().put(entity.getId(), enabled), |
| 104 | + enabled -> this.saveButton.active = true |
| 105 | + ); |
131 | 106 | }
|
132 | 107 |
|
133 | 108 | private DeferredSaveOption<Integer> createColourRaritySlider(RainglowEntity entity) {
|
134 |
| - return sliders.computeIfAbsent(entity, e -> DeferredSaveOption.createDeferredRangedInt( |
135 |
| - "config." + e.getId() + "_rarity", |
136 |
| - "tooltip.rarity", |
137 |
| - Rainglow.CONFIG.rarities.getRealValue().get(e.getId()), |
138 |
| - 0, |
139 |
| - 100, |
140 |
| - rarity -> Rainglow.CONFIG.rarities.getRealValue().put(e.getId(), rarity), |
141 |
| - rarity -> this.saveButton.active = true |
142 |
| - )); |
| 109 | + return DeferredSaveOption.createDeferredRangedInt( |
| 110 | + "config." + entity.getId() + "_rarity", |
| 111 | + "tooltip.rarity", |
| 112 | + Rainglow.CONFIG.rarities.getRealValue().get(entity.getId()), |
| 113 | + 0, |
| 114 | + 100, |
| 115 | + rarity -> Rainglow.CONFIG.rarities.getRealValue().put(entity.getId(), rarity), |
| 116 | + rarity -> this.saveButton.active = true |
| 117 | + ); |
143 | 118 | }
|
144 | 119 |
|
145 | 120 | public CyclingButtonWidget<RainglowMode> createModeButton() {
|
146 | 121 | return CyclingButtonWidget.builder(RainglowMode::getText)
|
147 |
| - .values(RainglowMode.values()) |
148 |
| - .initially(this.mode) |
149 |
| - .tooltip(this::createColourListLabel) |
150 |
| - .build( |
151 |
| - 0, |
152 |
| - 0, |
153 |
| - 308, |
154 |
| - 20, |
155 |
| - Rainglow.translatableText("config.mode"), |
156 |
| - (cyclingButtonWidget, mode) -> { |
157 |
| - this.saveButton.active = true; |
158 |
| - RainglowConfigScreen.this.mode = mode; |
159 |
| - } |
160 |
| - ); |
161 |
| - } |
162 |
| - |
163 |
| - private void save() { |
164 |
| - Collection<Option<?>> options = new ArrayList<>(this.sliders.values()); |
165 |
| - options.addAll(this.toggles.values()); |
166 |
| - |
167 |
| - for (Option<?> option : options) { |
168 |
| - if (option instanceof DeferredSaveOption) { |
169 |
| - ((DeferredSaveOption<?>) option).save(); |
170 |
| - } |
171 |
| - } |
172 |
| - |
173 |
| - this.setMode(this.mode); |
174 |
| - this.saveButton.active = false; |
| 122 | + .values(RainglowMode.values()) |
| 123 | + .initially(this.mode) |
| 124 | + .tooltip(this::createColourListLabel) |
| 125 | + .build( |
| 126 | + 0, |
| 127 | + 0, |
| 128 | + 308, |
| 129 | + 20, |
| 130 | + Rainglow.translatableText("config.mode"), |
| 131 | + (cyclingButtonWidget, mode) -> { |
| 132 | + this.saveButton.active = true; |
| 133 | + this.mode = mode; |
| 134 | + } |
| 135 | + ); |
175 | 136 | }
|
176 | 137 |
|
177 | 138 | private Tooltip createColourListLabel(RainglowMode mode) {
|
@@ -203,24 +164,4 @@ private Tooltip createColourListLabel(RainglowMode mode) {
|
203 | 164 | Style style = Style.EMPTY.withColor(mode.getText().getStyle().getColor());
|
204 | 165 | return Tooltip.create(Text.literal(text.toString()).setStyle(style));
|
205 | 166 | }
|
206 |
| - |
207 |
| - @Override |
208 |
| - public void closeScreen() { |
209 |
| - if (this.saveButton.active) { |
210 |
| - this.isConfirming = true; |
211 |
| - this.clearAndInit(); |
212 |
| - } else { |
213 |
| - MinecraftClient.getInstance().setScreen(this.parent); |
214 |
| - } |
215 |
| - } |
216 |
| - |
217 |
| - @Override |
218 |
| - public void setConfirming(boolean confirming) { |
219 |
| - this.isConfirming = confirming; |
220 |
| - } |
221 |
| - |
222 |
| - @Override |
223 |
| - public void clearAndInit() { |
224 |
| - super.clearAndInit(); |
225 |
| - } |
226 | 167 | }
|
0 commit comments