@@ -79,7 +79,7 @@ public static void updateList() {
79
79
if (Utils .isInDungeons ()) {
80
80
updateDungeons (null );
81
81
} else {
82
- updateWidgetsFrom (playerList . stream (). map ( PlayerListEntry :: getDisplayName ). filter ( Objects :: nonNull ). toList () );
82
+ updateWidgetsFrom (playerList );
83
83
}
84
84
}
85
85
@@ -116,17 +116,22 @@ public static void updateDungeons(List<Text> lines) {
116
116
*
117
117
* @param lines in-game TAB
118
118
*/
119
- public static void updateWidgetsFrom (List <Text > lines ) {
119
+ public static void updateWidgetsFrom (List <PlayerListEntry > lines ) {
120
120
final Predicate <String > playersColumnPredicate = PLAYERS_COLUMN_PATTERN .asMatchPredicate ();
121
121
final Predicate <String > infoColumnPredicate = INFO_COLUMN_PATTERN .asMatchPredicate ();
122
122
123
123
tabWidgetsToShow .clear ();
124
124
boolean doingPlayers = false ;
125
125
boolean playersDone = false ;
126
126
IntObjectPair <String > hypixelWidgetName = IntObjectPair .of (0xFFFF00 , "" );
127
+ // These two lists should match each other.
128
+ // playerListEntries is only used for the player list widget
127
129
List <Text > contents = new ArrayList <>();
130
+ List <PlayerListEntry > playerListEntries = new ArrayList <>();
128
131
129
- for (Text displayName : lines ) {
132
+ for (PlayerListEntry playerListEntry : lines ) {
133
+ Text displayName = playerListEntry .getDisplayName ();
134
+ if (displayName == null ) continue ;
130
135
String string = displayName .getString ();
131
136
132
137
if (string .isBlank ()) continue ;
@@ -143,8 +148,9 @@ public static void updateWidgetsFrom(List<Text> lines) {
143
148
// Check if info, if it is, dip out
144
149
if (infoColumnPredicate .test (string )) {
145
150
playersDone = true ;
146
- if (!contents .isEmpty ()) tabWidgetsToShow .add (getTabHudWidget (hypixelWidgetName , contents ));
151
+ if (!contents .isEmpty ()) tabWidgetsToShow .add (getTabHudWidget (hypixelWidgetName , contents , playerListEntries ));
147
152
contents .clear ();
153
+ playerListEntries .clear ();
148
154
continue ;
149
155
}
150
156
} else {
@@ -153,18 +159,23 @@ public static void updateWidgetsFrom(List<Text> lines) {
153
159
// Now check for : because of the farming contest ACTIVE
154
160
// Check for mining event minutes CUZ THEY FUCKING FORGOT THE SPACE iefzeoifzeoifomezhif
155
161
if (!string .startsWith (" " ) && string .contains (":" ) && (!hypixelWidgetName .right ().startsWith ("Mining Event" ) || !string .toLowerCase ().startsWith ("ends in" ))) {
156
- if (!contents .isEmpty ()) tabWidgetsToShow .add (getTabHudWidget (hypixelWidgetName , contents ));
162
+ if (!contents .isEmpty ()) tabWidgetsToShow .add (getTabHudWidget (hypixelWidgetName , contents , playerListEntries ));
157
163
contents .clear ();
164
+ playerListEntries .clear ();
158
165
Pair <IntObjectPair <String >, ? extends Text > nameAndInfo = getNameAndInfo (displayName );
159
166
hypixelWidgetName = nameAndInfo .left ();
160
- if (!nameAndInfo .right ().getString ().isBlank ()) contents .add (trim (nameAndInfo .right ()));
167
+ if (!nameAndInfo .right ().getString ().isBlank ()) {
168
+ contents .add (trim (nameAndInfo .right ()));
169
+ playerListEntries .add (playerListEntry );
170
+ }
161
171
continue ;
162
172
}
163
173
}
164
174
// Add the line to the content
165
175
contents .add (trim (displayName ));
176
+ playerListEntries .add (playerListEntry );
166
177
}
167
- if (!contents .isEmpty ()) tabWidgetsToShow .add (getTabHudWidget (hypixelWidgetName , contents ));
178
+ if (!contents .isEmpty ()) tabWidgetsToShow .add (getTabHudWidget (hypixelWidgetName , contents , playerListEntries ));
168
179
if (!tabWidgetsToShow .contains (tabWidgetInstances .get ("Active Effects" )) && SkyblockerConfigManager .get ().uiAndVisuals .tabHud .effectsFromFooter ) {
169
180
tabWidgetsToShow .add (getTabHudWidget ("Active Effects" , List .of ()));
170
181
}
@@ -203,23 +214,21 @@ private static Text trim(Text text) {
203
214
return out ;
204
215
}
205
216
206
- private static TabHudWidget getTabHudWidget (IntObjectPair <String > hypixelWidgetName , List <Text > lines ) {
217
+ private static TabHudWidget getTabHudWidget (IntObjectPair <String > hypixelWidgetName , List <Text > lines , @ Nullable List <PlayerListEntry > playerListEntries ) {
218
+ TabHudWidget tabHudWidget ;
207
219
if (tabWidgetInstances .containsKey (hypixelWidgetName .right ())) {
208
- TabHudWidget tabHudWidget = tabWidgetInstances .get (hypixelWidgetName .right ());
209
- tabHudWidget .updateFromTab (lines );
210
- tabHudWidget .update ();
211
- return tabHudWidget ;
220
+ tabHudWidget = tabWidgetInstances .get (hypixelWidgetName .right ());
212
221
} else {
213
- DefaultTabHudWidget defaultTabHudWidget = new DefaultTabHudWidget (hypixelWidgetName .right (), Text .literal (hypixelWidgetName .right ()).formatted (Formatting .BOLD ), hypixelWidgetName .firstInt ());
214
- ScreenMaster .addWidgetInstance (defaultTabHudWidget );
215
- defaultTabHudWidget .updateFromTab (lines );
216
- defaultTabHudWidget .update ();
217
- return defaultTabHudWidget ;
222
+ tabHudWidget = new DefaultTabHudWidget (hypixelWidgetName .right (), Text .literal (hypixelWidgetName .right ()).formatted (Formatting .BOLD ), hypixelWidgetName .firstInt ());
223
+ ScreenMaster .addWidgetInstance (tabHudWidget );
218
224
}
225
+ tabHudWidget .updateFromTab (lines , playerListEntries );
226
+ tabHudWidget .update ();
227
+ return tabHudWidget ;
219
228
}
220
229
221
230
private static TabHudWidget getTabHudWidget (String hypixelWidgetName , List <Text > lines ) {
222
- return getTabHudWidget (IntObjectPair .of (0xFFFF0000 , hypixelWidgetName ), lines );
231
+ return getTabHudWidget (IntObjectPair .of (0xFFFF0000 , hypixelWidgetName ), lines , null );
223
232
}
224
233
225
234
/**
0 commit comments