Skip to content

Commit dd29c97

Browse files
committed
1.5.0
1 parent 1946569 commit dd29c97

9 files changed

Lines changed: 43 additions & 16 deletions

File tree

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ plugins {
1616
val ciRun = System.getenv().containsKey("GITHUB_ACTIONS")
1717

1818
group = "dev.isxander"
19-
version = "1.4.5"
19+
version = "1.5.0"
2020

2121
if (ciRun)
2222
version = "$version-SNAPSHOT"

changelogs/1.5.0.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
- Make controller names go italic when there are pending changes
2+
- Allow `availableValues` to be passed to `EnumController`
3+
- More validation for slider controllers

src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
1010
import net.minecraft.client.util.math.MatrixStack;
1111
import net.minecraft.text.Text;
12+
import net.minecraft.util.Formatting;
1213

1314
public abstract class ControllerWidget<T extends Controller<?>> extends AbstractWidget {
1415
protected final T control;
@@ -18,22 +19,24 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
1819
protected boolean focused = false;
1920
protected boolean hovered = false;
2021

21-
protected final String optionName;
22+
protected final Text modifiedOptionName;
23+
protected final String optionNameString;
2224

2325
public ControllerWidget(T control, YACLScreen screen, Dimension<Integer> dim) {
2426
super(dim);
2527
this.control = control;
2628
this.screen = screen;
2729
control.option().addListener((opt, pending) -> updateTooltip());
2830
updateTooltip();
29-
this.optionName = control.option().name().getString().toLowerCase();
31+
this.modifiedOptionName = control.option().name().copy().formatted(Formatting.ITALIC);
32+
this.optionNameString = control.option().name().getString().toLowerCase();
3033
}
3134

3235
@Override
3336
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
3437
hovered = isMouseOver(mouseX, mouseY);
3538

36-
Text name = control.option().name();
39+
Text name = control.option().changed() ? modifiedOptionName : control.option().name();
3740
String nameString = name.getString();
3841

3942
boolean firstIter = true;
@@ -148,7 +151,7 @@ public void unfocus() {
148151

149152
@Override
150153
public boolean matchesSearch(String query) {
151-
return optionName.contains(query.toLowerCase());
154+
return optionNameString.contains(query.toLowerCase());
152155
}
153156

154157
@Override

src/main/java/dev/isxander/yacl/gui/controllers/EnumController.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,50 @@
2424
public class EnumController<T extends Enum<T>> implements Controller<T> {
2525
private final Option<T> option;
2626
private final Function<T, Text> valueFormatter;
27+
private final T[] availableValues;
28+
29+
public static <T extends Enum<T>> Function<T, Text> getDefaultFormatter() {
30+
return value -> {
31+
if (value instanceof NameableEnum nameableEnum)
32+
return nameableEnum.getDisplayName();
33+
if (value instanceof TranslatableOption translatableOption)
34+
return translatableOption.getText();
35+
return Text.of(value.name());
36+
};
37+
}
2738

2839
/**
29-
* Constructs a cycling enum controller with a default value formatter.
40+
* Constructs a cycling enum controller with a default value formatter and all values being available.
3041
* The default value formatter first searches if the
3142
* enum is a {@link NameableEnum} else, just use {@link Enum#name()}
3243
*
3344
* @param option bound option
3445
*/
3546
public EnumController(Option<T> option) {
36-
this(option, value -> {
37-
if (value instanceof NameableEnum nameableEnum)
38-
return nameableEnum.getDisplayName();
39-
if (value instanceof TranslatableOption translatableOption)
40-
return translatableOption.getText();
41-
return Text.of(value.name());
42-
});
47+
this(option, getDefaultFormatter());
4348
}
4449

4550
/**
46-
* Constructs a cycling enum controller.
51+
* Constructs a cycling enum controller with all values being available.
4752
*
4853
* @param option bound option
4954
* @param valueFormatter format the enum into any {@link Text}
5055
*/
5156
public EnumController(Option<T> option, Function<T, Text> valueFormatter) {
57+
this(option, valueFormatter, option.typeClass().getEnumConstants());
58+
}
59+
60+
/**
61+
* Constructs a cycling enum controller.
62+
*
63+
* @param option bound option
64+
* @param valueFormatter format the enum into any {@link Text}
65+
* @param availableValues all enum constants that can be cycled through
66+
*/
67+
public EnumController(Option<T> option, Function<T, Text> valueFormatter, T[] availableValues) {
5268
this.option = option;
5369
this.valueFormatter = valueFormatter;
70+
this.availableValues = availableValues;
5471
}
5572

5673
/**
@@ -74,7 +91,7 @@ public Text formatValue() {
7491
*/
7592
@Override
7693
public AbstractWidget provideWidget(YACLScreen screen, Dimension<Integer> widgetDimension) {
77-
return new EnumControllerElement<>(this, screen, widgetDimension, option().typeClass().getEnumConstants());
94+
return new EnumControllerElement<>(this, screen, widgetDimension, availableValues);
7895
}
7996

8097
public static class EnumControllerElement<T extends Enum<T>> extends ControllerWidget<EnumController<T>> {

src/main/java/dev/isxander/yacl/gui/controllers/slider/DoubleSliderController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public DoubleSliderController(Option<Double> option, double min, double max, dou
4646
public DoubleSliderController(Option<Double> option, double min, double max, double interval, Function<Double, Text> valueFormatter) {
4747
Validate.isTrue(max > min, "`max` cannot be smaller than `min`");
4848
Validate.isTrue(interval > 0, "`interval` must be more than 0");
49+
Validate.notNull(valueFormatter, "`valueFormatter` must not be null");
4950

5051
this.option = option;
5152
this.min = min;

src/main/java/dev/isxander/yacl/gui/controllers/slider/FloatSliderController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public FloatSliderController(Option<Float> option, float min, float max, float i
4646
public FloatSliderController(Option<Float> option, float min, float max, float interval, Function<Float, Text> valueFormatter) {
4747
Validate.isTrue(max > min, "`max` cannot be smaller than `min`");
4848
Validate.isTrue(interval > 0, "`interval` must be more than 0");
49+
Validate.notNull(valueFormatter, "`valueFormatter` must not be null");
4950

5051
this.option = option;
5152
this.min = min;

src/main/java/dev/isxander/yacl/gui/controllers/slider/IntegerSliderController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public IntegerSliderController(Option<Integer> option, int min, int max, int int
4343
public IntegerSliderController(Option<Integer> option, int min, int max, int interval, Function<Integer, Text> valueFormatter) {
4444
Validate.isTrue(max > min, "`max` cannot be smaller than `min`");
4545
Validate.isTrue(interval > 0, "`interval` must be more than 0");
46+
Validate.notNull(valueFormatter, "`valueFormatter` must not be null");
4647

4748
this.option = option;
4849
this.min = min;

src/main/java/dev/isxander/yacl/gui/controllers/slider/LongSliderController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public LongSliderController(Option<Long> option, long min, long max, long interv
4343
public LongSliderController(Option<Long> option, long min, long max, long interval, Function<Long, Text> valueFormatter) {
4444
Validate.isTrue(max > min, "`max` cannot be smaller than `min`");
4545
Validate.isTrue(interval > 0, "`interval` must be more than 0");
46+
Validate.notNull(valueFormatter, "`valueFormatter` must not be null");
4647

4748
this.option = option;
4849
this.min = min;

src/main/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ protected int getHoveredControlWidth() {
135135
}
136136

137137
protected void calculateInterpolation() {
138-
interpolation = (float) ((control.pendingValue() - control.min()) * 1 / control.range());
138+
interpolation = MathHelper.clamp((float) ((control.pendingValue() - control.min()) * 1 / control.range()), 0f, 1f);
139139
}
140140

141141
@Override

0 commit comments

Comments
 (0)