Skip to content

Commit 972c8f5

Browse files
committed
Fix bad narration text on light source settings, improve search.
1 parent d03b73d commit 972c8f5

File tree

3 files changed

+61
-12
lines changed

3 files changed

+61
-12
lines changed

src/main/java/dev/lambdaurora/lambdynlights/config/LightSourceSettingEntry.java

+11-5
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@
1111

1212
import com.electronwill.nightconfig.core.Config;
1313
import dev.lambdaurora.spruceui.SpruceTexts;
14-
import dev.lambdaurora.spruceui.option.SpruceBooleanOption;
1514
import dev.lambdaurora.spruceui.option.SpruceOption;
1615
import dev.lambdaurora.spruceui.option.SpruceToggleBooleanOption;
17-
import net.minecraft.TextFormatting;
1816
import net.minecraft.network.chat.Text;
1917
import org.jetbrains.annotations.Nullable;
2018

@@ -33,7 +31,7 @@ public LightSourceSettingEntry(String key, boolean defaultValue, @Nullable Confi
3331
@Override
3432
protected SpruceOption buildOption(@Nullable Text tooltip) {
3533
return new Option(
36-
this.getOptionKey(),
34+
this.key(),
3735
this::get,
3836
this::set,
3937
tooltip
@@ -42,12 +40,20 @@ protected SpruceOption buildOption(@Nullable Text tooltip) {
4240

4341
public static final class Option extends SpruceToggleBooleanOption {
4442
public Option(String key, Supplier<Boolean> getter, Consumer<Boolean> setter, @Nullable Text tooltip) {
45-
super(key, getter, setter, tooltip);
43+
super(key, getter, setter, tooltip, false);
4644
}
4745

4846
@Override
4947
public Text getDisplayText() {
50-
return Text.empty();
48+
boolean value = this.get();
49+
Text toggleText = SpruceTexts.getToggleText(value);
50+
51+
return this.getDisplayText(toggleText);
52+
}
53+
54+
@Override
55+
public Text getDisplayText(Text value) {
56+
return Text.translatable("spruceui.options.generic", this.getPrefix(), value);
5157
}
5258
}
5359
}

src/main/java/dev/lambdaurora/lambdynlights/gui/LightSourceListWidget.java

+45-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import dev.lambdaurora.lambdynlights.accessor.DynamicLightHandlerHolder;
1313
import dev.lambdaurora.spruceui.Position;
14+
import dev.lambdaurora.spruceui.SpruceTexts;
1415
import dev.lambdaurora.spruceui.background.Background;
1516
import dev.lambdaurora.spruceui.background.EmptyBackground;
1617
import dev.lambdaurora.spruceui.background.SimpleColorBackground;
@@ -23,6 +24,7 @@
2324
import dev.lambdaurora.spruceui.widget.container.SpruceEntryListWidget;
2425
import dev.lambdaurora.spruceui.widget.container.SpruceParentWidget;
2526
import dev.lambdaurora.spruceui.widget.text.SpruceTextFieldWidget;
27+
import dev.yumi.commons.TriState;
2628
import net.minecraft.TextFormatting;
2729
import net.minecraft.client.gui.GuiGraphics;
2830
import net.minecraft.client.gui.narration.NarratedElementType;
@@ -54,10 +56,7 @@ public LightSourceListWidget(Position position, int width, int height, SpruceTex
5456
}
5557

5658
var list = Stream.of(input.split(" "))
57-
.map(part -> part.startsWith("@")
58-
? Text.literal(part + " ").withStyle(TextFormatting.AQUA)
59-
: Text.literal(part + " ")
60-
)
59+
.map(this::stylizeFilterPart)
6160
.map(Text::getVisualOrderText)
6261
.toList();
6362
return FormattedCharSequence.fromList(list);
@@ -81,6 +80,24 @@ private void update(@Nullable String filter) {
8180
}
8281
}
8382

83+
private TriState evaluateValueFilter(String filter) {
84+
if (filter.isBlank()) {
85+
return TriState.DEFAULT;
86+
}
87+
88+
if (filter.equalsIgnoreCase(SpruceTexts.OPTIONS_ON.getString())) {
89+
return TriState.TRUE;
90+
} else if (filter.equalsIgnoreCase(SpruceTexts.OPTIONS_OFF.getString())) {
91+
return TriState.FALSE;
92+
}
93+
94+
return switch (filter) {
95+
case "true", "1", "on" -> TriState.TRUE;
96+
case "false", "0", "off" -> TriState.FALSE;
97+
default -> TriState.DEFAULT;
98+
};
99+
}
100+
84101
private boolean checkFilter(LightSourceEntry entry, @NotNull List<String> filter) {
85102
var name = entry.option.lambdynlights$getName().getString().toLowerCase();
86103

@@ -91,6 +108,16 @@ private boolean checkFilter(LightSourceEntry entry, @NotNull List<String> filter
91108
return false;
92109
}
93110

111+
continue;
112+
} else if (part.startsWith("$")) {
113+
var valueFilter = this.evaluateValueFilter(part.substring(1));
114+
115+
if (valueFilter == TriState.DEFAULT) continue;
116+
117+
if (entry.option.lambdynlights$getSetting().get() != valueFilter.toBoolean()) {
118+
return false;
119+
}
120+
94121
continue;
95122
}
96123

@@ -102,6 +129,20 @@ private boolean checkFilter(LightSourceEntry entry, @NotNull List<String> filter
102129
return true;
103130
}
104131

132+
private Text stylizeFilterPart(String filter) {
133+
if (filter.startsWith("@")) {
134+
return Text.literal(filter + " ").withStyle(TextFormatting.AQUA);
135+
} else if (filter.startsWith("$")) {
136+
var valueFilter = this.evaluateValueFilter(filter.substring(1));
137+
return Text.literal(filter + " ").withStyle(switch (valueFilter) {
138+
case TriState.TRUE, TriState.FALSE -> TextFormatting.GOLD;
139+
default -> TextFormatting.RED;
140+
});
141+
} else {
142+
return Text.literal(filter + " ");
143+
}
144+
}
145+
105146
/**
106147
* Adds a single option entry. The option will use all the width available.
107148
*

src/main/java/dev/lambdaurora/lambdynlights/mixin/EntityTypeMixin.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public abstract class EntityTypeMixin<T extends Entity> implements DynamicLightH
2828
@Shadow
2929
public abstract Text getDescription();
3030

31+
@Shadow public abstract String getDescriptionId();
32+
3133
@Unique
3234
private DynamicLightHandler<T> lambdynlights$lightHandler;
3335
@Unique
@@ -52,9 +54,9 @@ public abstract class EntityTypeMixin<T extends Entity> implements DynamicLightH
5254
return null;
5355
}
5456

55-
this.lambdynlights$setting = new LightSourceSettingEntry("light_sources.settings.entities."
56-
+ id.namespace() + '.' + id.path().replace('/', '.'),
57-
true, null, null);
57+
this.lambdynlights$setting = new LightSourceSettingEntry(this.getDescriptionId(),
58+
true, null, null
59+
);
5860
LambDynLights.get().config.load(this.lambdynlights$setting);
5961
}
6062

0 commit comments

Comments
 (0)