66import dev .isxander .yacl .api .utils .Dimension ;
77import dev .isxander .yacl .gui .AbstractWidget ;
88import dev .isxander .yacl .gui .YACLScreen ;
9+ import net .minecraft .client .gui .ComponentPath ;
10+ import net .minecraft .client .gui .GuiComponent ;
911import net .minecraft .client .gui .components .MultiLineLabel ;
12+ import net .minecraft .client .gui .narration .NarratedElementType ;
13+ import net .minecraft .client .gui .narration .NarrationElementOutput ;
14+ import net .minecraft .client .gui .navigation .FocusNavigationEvent ;
1015import net .minecraft .network .chat .Component ;
1116import net .minecraft .network .chat .HoverEvent ;
1217import net .minecraft .network .chat .Style ;
1318import net .minecraft .util .FormattedCharSequence ;
1419import net .minecraft .world .item .ItemStack ;
20+ import org .jetbrains .annotations .Nullable ;
1521
1622import java .util .List ;
1723
@@ -50,6 +56,7 @@ public AbstractWidget provideWidget(YACLScreen screen, Dimension<Integer> widget
5056 public class LabelControllerElement extends AbstractWidget {
5157 private List <FormattedCharSequence > wrappedText ;
5258 protected MultiLineLabel wrappedTooltip ;
59+ protected boolean focused ;
5360
5461 protected final YACLScreen screen ;
5562
@@ -70,6 +77,13 @@ public void render(PoseStack matrices, int mouseX, int mouseY, float delta) {
7077 textRenderer .drawShadow (matrices , text , getDimension ().x () + getXPadding (), y + getYPadding (), option ().available () ? -1 : 0xFFA0A0A0 );
7178 y += textRenderer .lineHeight ;
7279 }
80+
81+ if (isFocused ()) {
82+ GuiComponent .fill (matrices , getDimension ().x () - 1 , getDimension ().y () - 1 , getDimension ().xLimit () + 1 , getDimension ().y (), -1 );
83+ GuiComponent .fill (matrices , getDimension ().x () - 1 , getDimension ().y () - 1 , getDimension ().x (), getDimension ().yLimit () + 1 , -1 );
84+ GuiComponent .fill (matrices , getDimension ().x () - 1 , getDimension ().yLimit (), getDimension ().xLimit () + 1 , getDimension ().yLimit () + 1 , -1 );
85+ GuiComponent .fill (matrices , getDimension ().xLimit (), getDimension ().y () - 1 , getDimension ().xLimit () + 1 , getDimension ().yLimit () + 1 , -1 );
86+ }
7387 }
7488
7589 @ Override
@@ -147,5 +161,33 @@ private void updateTooltip() {
147161 public boolean matchesSearch (String query ) {
148162 return formatValue ().getString ().toLowerCase ().contains (query .toLowerCase ());
149163 }
164+
165+ @ Nullable
166+ @ Override
167+ public ComponentPath nextFocusPath (FocusNavigationEvent focusNavigationEvent ) {
168+ if (!option ().available ())
169+ return null ;
170+ return !this .isFocused () ? ComponentPath .leaf (this ) : null ;
171+ }
172+
173+ @ Override
174+ public boolean isFocused () {
175+ return focused ;
176+ }
177+
178+ @ Override
179+ public void setFocused (boolean focused ) {
180+ this .focused = focused ;
181+ }
182+
183+ @ Override
184+ public void updateNarration (NarrationElementOutput builder ) {
185+ builder .add (NarratedElementType .TITLE , formatValue ());
186+ }
187+
188+ @ Override
189+ public NarrationPriority narrationPriority () {
190+ return NarrationPriority .FOCUSED ;
191+ }
150192 }
151193}
0 commit comments