Skip to content

Commit 14ec630

Browse files
committed
fix(dev)!: Fix generics of BalmConfigListEditorScreen
1 parent 1972e93 commit 14ec630

5 files changed

Lines changed: 44 additions & 23 deletions

File tree

common/src/main/java/net/blay09/mods/balm/client/platform/config/screen/list/BalmConfigListEditorContext.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
import net.minecraft.client.gui.Font;
66
import net.minecraft.network.chat.Component;
77

8+
import java.util.Collection;
9+
810
public interface BalmConfigListEditorContext<T> {
911
Font font();
1012

11-
ConfiguredProperty<T> property();
13+
ConfiguredProperty<? extends Collection<T>> property();
1214

1315
BalmConfigListDragController dragController();
1416

common/src/main/java/net/blay09/mods/balm/client/platform/config/screen/list/BalmConfigListEditorEntry.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,18 +104,23 @@ public void startEditing(@Nullable Object initialValue) {
104104
public void stopEditing() {
105105
}
106106

107-
public DataResult<?> validate(ConfigControlBinding<Collection<?>> binding) {
107+
public DataResult<?> validate(ConfigControlBinding<? extends Collection<T>> binding) {
108108
final var value = valueHolder.value();
109109
if (value == null) {
110110
return DataResult.success(null);
111111
}
112112

113113
return binding.property().type() == Set.class
114-
? binding.validateValue(Set.of(value))
115-
: binding.validateValue(List.of(value));
114+
? validateValue(binding, Set.of(value))
115+
: validateValue(binding, List.of(value));
116116

117117
}
118118

119+
@SuppressWarnings({"unchecked", "rawtypes"})
120+
private DataResult<?> validateValue(ConfigControlBinding<? extends Collection<T>> binding, Collection<T> value) {
121+
return ((ConfigControlBinding) binding).validateValue(value);
122+
}
123+
119124
private int getActionWidgetsWidth() {
120125
return actionWidgets.stream().filter(widget -> widget.visible)
121126
.mapToInt(AbstractWidget::getWidth)

common/src/main/java/net/blay09/mods/balm/client/platform/config/screen/list/BalmConfigListEditorScreen.java

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class BalmConfigListEditorScreen<T> extends Screen implements BalmConfigL
4242

4343
private final @Nullable Screen parent;
4444
private final BalmConfigScreenContext context;
45-
private final ConfigControlBinding<T> binding;
45+
private final ConfigControlBinding<? extends Collection<T>> binding;
4646
private final BalmConfigListEditorState<T> state;
4747
private final HeaderAndFooterLayout layout;
4848
private final BiFunction<BalmConfigListEditorContext<T>, BalmConfigListEditorValue<T>, ? extends BalmConfigListEditorEntry<T>> entryFactory;
@@ -55,24 +55,23 @@ public class BalmConfigListEditorScreen<T> extends Screen implements BalmConfigL
5555
private @Nullable Button addButton;
5656
private @Nullable Button doneButton;
5757

58-
@SuppressWarnings("unchecked")
5958
public BalmConfigListEditorScreen(@Nullable Screen parent,
6059
BalmConfigScreenContext context,
61-
ConfigControlBinding<T> binding,
60+
ConfigControlBinding<? extends Collection<T>> binding,
6261
Component title,
6362
BiFunction<BalmConfigListEditorContext<T>, BalmConfigListEditorValue<T>, ? extends BalmConfigListEditorEntry<T>> entryFactory,
6463
BiPredicate<T, String> filterPredicate) {
6564
super(title);
6665
this.parent = parent;
6766
this.context = context;
6867
this.binding = binding;
69-
this.state = context.stateFor(binding.property()).getOrCreate(() -> BalmConfigListEditorState.wrap((Collection<T>) binding.get()));
68+
this.state = context.stateFor(binding.property()).getOrCreate(() -> BalmConfigListEditorState.wrap(binding.get()));
7069
this.layout = new HeaderAndFooterLayout(this, 36, DEFAULT_FOOTER_HEIGHT);
7170
this.entryFactory = entryFactory;
7271
this.filterPredicate = filterPredicate;
7372
}
7473

75-
public static <T> BalmConfigListEditorScreenBuilder<T> builder(Screen parent, BalmConfigScreenContext context, ConfigControlBinding<T> binding) {
74+
public static <T> BalmConfigListEditorScreenBuilder<T> builder(Screen parent, BalmConfigScreenContext context, ConfigControlBinding<? extends Collection<T>> binding) {
7675
return new BalmConfigListEditorScreenBuilderImpl<>(parent, context, binding);
7776
}
7877

@@ -209,7 +208,7 @@ public Font font() {
209208
}
210209

211210
@Override
212-
public ConfiguredProperty<T> property() {
211+
public ConfiguredProperty<? extends Collection<T>> property() {
213212
return binding.property();
214213
}
215214

@@ -223,14 +222,13 @@ public void focusEntry(BalmConfigListEditorEntry<T> entry) {
223222
}
224223

225224
@Override
226-
@SuppressWarnings({"unchecked"})
227225
public void commit() {
228226
final var rawValues = state.rawValues();
229-
final var pendingCommitValues = (Collection<T>) (binding.property() instanceof ConfiguredSet<?>
227+
final var pendingCommitValues = binding.property() instanceof ConfiguredSet<?>
230228
? new LinkedHashSet<>(rawValues)
231-
: List.copyOf(rawValues));
232-
if (((ConfigControlBinding<Collection<?>>) binding).validateValue(pendingCommitValues).isSuccess()) {
233-
((ConfigControlBinding<Collection<?>>) binding).set(pendingCommitValues);
229+
: List.copyOf(rawValues);
230+
if (validateValues(pendingCommitValues).isSuccess()) {
231+
setValues(pendingCommitValues);
234232
refreshList();
235233
}
236234
}
@@ -281,10 +279,9 @@ public void setValidationError(BalmConfigListEditorEntry<T> entry, Component err
281279
}
282280

283281
@Override
284-
@SuppressWarnings("unchecked")
285282
public void revalidate() {
286283
if (list != null) {
287-
final var results = list.children().stream().map(listEntry -> listEntry.validate((ConfigControlBinding<Collection<?>>) binding));
284+
final var results = list.children().stream().map(listEntry -> listEntry.validate(binding));
288285
results.filter(DataResult::isError)
289286
.map(DataResult::error)
290287
.map(Optional::orElseThrow)
@@ -298,6 +295,16 @@ public void revalidate() {
298295
updateWidgets();
299296
}
300297

298+
@SuppressWarnings({"unchecked", "rawtypes"})
299+
private DataResult<?> validateValues(Collection<T> values) {
300+
return ((ConfigControlBinding) binding).validateValue(values);
301+
}
302+
303+
@SuppressWarnings({"unchecked", "rawtypes"})
304+
private void setValues(Collection<T> values) {
305+
((ConfigControlBinding) binding).set(values);
306+
}
307+
301308
private void updateWidgets() {
302309
final var validationError = context.getValidationError(binding.property());
303310
if (validationErrorWidget != null) {

common/src/main/java/net/blay09/mods/balm/client/platform/config/screen/list/internal/BalmConfigListEditorInlineStringValueEntry.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.blay09.mods.balm.client.platform.config.screen.list.BalmConfigListEditorEntry;
66
import net.blay09.mods.balm.platform.config.internal.PrimitiveConfigCodecs;
77
import net.blay09.mods.balm.platform.config.schema.ConfigControlBinding;
8+
import net.blay09.mods.balm.platform.config.schema.ConfiguredProperty;
89
import net.minecraft.client.gui.GuiGraphicsExtractor;
910
import net.minecraft.client.gui.components.Button;
1011
import net.minecraft.client.gui.components.EditBox;
@@ -90,17 +91,17 @@ public boolean isEditing() {
9091
}
9192

9293
@Override
93-
public DataResult<?> validate(ConfigControlBinding<Collection<?>> binding) {
94+
public DataResult<?> validate(ConfigControlBinding<? extends Collection<T>> binding) {
9495
if (valueHolder.entryState() instanceof EditState(String value)) {
95-
return PrimitiveConfigCodecs.parse(context.property(), value);
96+
return parseValue(value);
9697
}
9798

9899
return super.validate(binding);
99100
}
100101

101102
public void setValue(String value) {
102103
valueHolder.entryState(new EditState(value));
103-
PrimitiveConfigCodecs.parse(context.property(), value).ifSuccess(validValue -> {
104+
parseValue(value).ifSuccess(validValue -> {
104105
valueHolder.value(validValue);
105106
context.revalidate();
106107
}).ifError(error -> context.setValidationError(this, Component.literal(error.message())));
@@ -171,7 +172,12 @@ protected void updateActionWidgets() {
171172
}
172173

173174
public boolean canCommit() {
174-
return PrimitiveConfigCodecs.parse(context.property(), getPendingValue()).isSuccess();
175+
return parseValue(getPendingValue()).isSuccess();
176+
}
177+
178+
@SuppressWarnings("unchecked")
179+
private DataResult<T> parseValue(String value) {
180+
return PrimitiveConfigCodecs.parse((ConfiguredProperty<T>) context.property(), value);
175181
}
176182

177183
protected void onDoneButton(Button button) {

common/src/main/java/net/blay09/mods/balm/client/platform/config/screen/list/internal/BalmConfigListEditorScreenBuilderImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,21 @@
1010
import net.minecraft.client.gui.screens.Screen;
1111
import net.minecraft.network.chat.Component;
1212

13+
import java.util.Collection;
1314
import java.util.function.BiFunction;
1415
import java.util.function.BiPredicate;
1516
import java.util.function.Function;
1617

1718
public class BalmConfigListEditorScreenBuilderImpl<T> implements BalmConfigListEditorScreenBuilder<T> {
1819
private final Screen parent;
1920
private final BalmConfigScreenContext context;
20-
private final ConfigControlBinding<T> binding;
21+
private final ConfigControlBinding<? extends Collection<T>> binding;
2122

2223
private Component title;
2324
private BiFunction<BalmConfigListEditorContext<T>, BalmConfigListEditorValue<T>, ? extends BalmConfigListEditorEntry<T>> entryFactory = BalmConfigListEditorInlineStringValueEntry::new;
2425
private BiPredicate<T, String> filterPredicate = (value, filter) -> String.valueOf(value).toLowerCase().contains(filter);
2526

26-
public BalmConfigListEditorScreenBuilderImpl(Screen parent, BalmConfigScreenContext context, ConfigControlBinding<T> binding) {
27+
public BalmConfigListEditorScreenBuilderImpl(Screen parent, BalmConfigScreenContext context, ConfigControlBinding<? extends Collection<T>> binding) {
2728
this.parent = parent;
2829
this.context = context;
2930
this.binding = binding;

0 commit comments

Comments
 (0)