11
11
12
12
import dev .lambdaurora .lambdynlights .accessor .DynamicLightHandlerHolder ;
13
13
import dev .lambdaurora .spruceui .Position ;
14
+ import dev .lambdaurora .spruceui .SpruceTexts ;
14
15
import dev .lambdaurora .spruceui .background .Background ;
15
16
import dev .lambdaurora .spruceui .background .EmptyBackground ;
16
17
import dev .lambdaurora .spruceui .background .SimpleColorBackground ;
23
24
import dev .lambdaurora .spruceui .widget .container .SpruceEntryListWidget ;
24
25
import dev .lambdaurora .spruceui .widget .container .SpruceParentWidget ;
25
26
import dev .lambdaurora .spruceui .widget .text .SpruceTextFieldWidget ;
27
+ import dev .yumi .commons .TriState ;
26
28
import net .minecraft .TextFormatting ;
27
29
import net .minecraft .client .gui .GuiGraphics ;
28
30
import net .minecraft .client .gui .narration .NarratedElementType ;
@@ -54,10 +56,7 @@ public LightSourceListWidget(Position position, int width, int height, SpruceTex
54
56
}
55
57
56
58
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 )
61
60
.map (Text ::getVisualOrderText )
62
61
.toList ();
63
62
return FormattedCharSequence .fromList (list );
@@ -81,6 +80,24 @@ private void update(@Nullable String filter) {
81
80
}
82
81
}
83
82
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
+
84
101
private boolean checkFilter (LightSourceEntry entry , @ NotNull List <String > filter ) {
85
102
var name = entry .option .lambdynlights$getName ().getString ().toLowerCase ();
86
103
@@ -91,6 +108,16 @@ private boolean checkFilter(LightSourceEntry entry, @NotNull List<String> filter
91
108
return false ;
92
109
}
93
110
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
+
94
121
continue ;
95
122
}
96
123
@@ -102,6 +129,20 @@ private boolean checkFilter(LightSourceEntry entry, @NotNull List<String> filter
102
129
return true ;
103
130
}
104
131
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
+
105
146
/**
106
147
* Adds a single option entry. The option will use all the width available.
107
148
*
0 commit comments