2626import java .util .HashMap ;
2727import java .util .List ;
2828import java .util .Map ;
29+ import java .util .function .Predicate ;
2930
3031import io .github .axolotlclient .AxolotlClientConfig .api .options .Option ;
32+ import io .github .axolotlclient .AxolotlClientConfig .impl .options .BooleanOption ;
3133import io .github .axolotlclient .AxolotlClientConfig .impl .options .EnumOption ;
3234import io .github .axolotlclient .AxolotlClientConfig .impl .options .IntegerOption ;
3335import io .github .axolotlclient .api .API ;
4446import io .github .axolotlclient .modules .hud .gui .layout .AnchorPoint ;
4547import io .github .axolotlclient .modules .hud .util .DefaultOptions ;
4648import io .github .axolotlclient .modules .hypixel .HypixelAbstractionLayer ;
49+ import io .github .axolotlclient .modules .hypixel .PlayerData ;
4750import io .github .axolotlclient .modules .hypixel .PlayerData .Bedwars .CombinedGameData ;
4851import lombok .AccessLevel ;
4952import lombok .AllArgsConstructor ;
@@ -56,29 +59,30 @@ public class StatsOverlay extends BoxHudEntry implements DynamicallyPositionable
5659 @ FunctionalInterface
5760 private interface EntryRenderer {
5861
59- AxoText render (BedwarsTeam team , String name , CombinedGameData data , int winstreak );
62+ AxoText render (BedwarsTeam team , String name , PlayerData . Bedwars data , int winstreak );
6063 }
6164
62- private record Entry (boolean acceptNull , String name , EntryRenderer compRenderer ) {
65+ private record Entry (boolean acceptNull , String name , Predicate < StatsOverlay > condition , EntryRenderer compRenderer ) {
6366
6467 }
6568
6669 private static final List <Entry > RENDER_ENTRIES = List .of (
67- new Entry (true , "bedwars.stats_overlay.header.player" , (t , n , bw , ws ) -> AxoText .literal (t .getColorSection () + n )),
68- new Entry (false , "bedwars.stats_overlay.header.fkdr" , (t , n , bw , ws ) -> AxoText .literal ("%.2f (%s/%s)" .formatted (bw .fkdr (), bw .finalKills (), bw .finalDeaths ())).br$color (AxoText .Color .GOLD )),
69- new Entry (false , "bedwars.stats_overlay.header.kdr" , (t , n , bw , ws ) -> AxoText .literal ("%.2f (%s/%s)" .formatted (bw .kdr (), bw .kills (), bw .deaths ())).br$color (AxoText .Color .GOLD )),
70- new Entry (false , "bedwars.stats_overlay.header.wlr" , (t , n , bw , ws ) -> AxoText .literal ("%.2f (%s/%s)" .formatted (bw .wlr (), bw .wins (), bw .losses ())).br$color (AxoText .Color .GOLD )),
71- new Entry (false , "bedwars.stats_overlay.header.ws" , (t , n , bw , ws ) -> AxoText .literal (ws ).br$color (AxoText .Color .GOLD ))
70+ new Entry (true , "bedwars.stats_overlay.header.player" , hud -> true , (t , n , bw , ws ) -> AxoText .literal (t .getColorSection () + n )),
71+ new Entry (false , "bedwars.stats.overlay.header.level" , o -> o .columnLevel .get (), (t , n , bw , ws ) -> BedwarsPrestige .format (bw .level ())),
72+ new Entry (false , "bedwars.stats_overlay.header.fkdr" , o -> o .columnFkdr .get (), (t , n , bw , ws ) -> AxoText .literal ("%.2f (%s/%s)" .formatted (bw .core ().fkdr (), bw .core ().finalKills (), bw .core ().finalDeaths ())).br$color (AxoText .Color .GOLD )),
73+ new Entry (false , "bedwars.stats_overlay.header.kdr" , o -> o .columnKdr .get (), (t , n , bw , ws ) -> AxoText .literal ("%.2f (%s/%s)" .formatted (bw .core ().kdr (), bw .core ().kills (), bw .core ().deaths ())).br$color (AxoText .Color .GOLD )),
74+ new Entry (false , "bedwars.stats_overlay.header.wlr" , o -> o .columnWlr .get (), (t , n , bw , ws ) -> AxoText .literal ("%.2f (%s/%s)" .formatted (bw .core ().wlr (), bw .core ().wins (), bw .core ().losses ())).br$color (AxoText .Color .GOLD )),
75+ new Entry (false , "bedwars.stats_overlay.header.ws" , o -> o .columnWs .get (), (t , n , bw , ws ) -> AxoText .literal (ws ).br$color (AxoText .Color .GOLD ))
7276 );
7377
7478 private class RenderHelper {
7579
76- private final Map <String , IntObjectPair < CombinedGameData > > stats ;
80+ private final Map <String , PlayerData . Bedwars > stats ;
7781 private final Map <BedwarsTeam , List <String >> playersByTeam ;
7882 private int xCursor = getPos ().x + padding .get ();
7983 private int yFinal = 0 ;
8084
81- private RenderHelper (Map <String , IntObjectPair < CombinedGameData > > stats , Map <BedwarsTeam , List <String >> playersByTeam ) {
85+ private RenderHelper (Map <String , PlayerData . Bedwars > stats , Map <BedwarsTeam , List <String >> playersByTeam ) {
8286 this .stats = stats ;
8387 this .playersByTeam = playersByTeam ;
8488 }
@@ -100,7 +104,7 @@ private void renderColumn(AxoRenderContext ctx, Entry renderEntry) {
100104 final var data = stats .get (playerName );
101105 final var text = data == null ?
102106 (renderEntry .acceptNull ? renderEntry .compRenderer .render (team , playerName , null , 0 ) : AxoText .literal ("?" ).br$color (AxoText .Color .RED )) :
103- renderEntry .compRenderer .render (team , playerName , data . right () , data .left ());
107+ renderEntry .compRenderer .render (team , playerName , data , data .all (). winstreak ());
104108
105109 newXCursor = Math .max (newXCursor , ctx .br$drawString (text , xCursor , currY , 0xffffffff , shadow ));
106110 currY += dy ;
@@ -113,7 +117,9 @@ private void renderColumn(AxoRenderContext ctx, Entry renderEntry) {
113117
114118 private void render (AxoRenderContext ctx ) {
115119 for (final var renderEntry : RENDER_ENTRIES ) {
116- renderColumn (ctx , renderEntry );
120+ if (renderEntry .condition ().test (StatsOverlay .this )) {
121+ renderColumn (ctx , renderEntry );
122+ }
117123 }
118124
119125 // don't multiply the padding by two, since it's already accounted for by the cursors
@@ -129,7 +135,6 @@ private void render(AxoRenderContext ctx) {
129135 onBoundsUpdate ();
130136 }
131137 }
132-
133138 }
134139
135140 private static final Map <BedwarsTeam , List <String >> SAMPLE_PLAYERS = new EnumMap <>(BedwarsTeam .class );
@@ -139,22 +144,34 @@ private void render(AxoRenderContext ctx) {
139144 SAMPLE_PLAYERS .put (BedwarsTeam .GREEN , List .of ("herobrine" , "steve" ));
140145 }
141146
142- private static final Map <String , IntObjectPair < CombinedGameData > > SAMPLE_STATS = Map .of (
143- "FloweyTF" , IntObjectPair . of ( 3 , new CombinedGameData (4234 , 5634 , 500 , 300 , 1469 , 336 , 230 , 123 )),
144- "Adaklys" , IntObjectPair . of ( 3 , new CombinedGameData (1984 , 2048 , 300 , 500 , 834 , 737 , 123 , 273 )),
145- "steve" , IntObjectPair . of ( 3 , new CombinedGameData (10 , 1 , 10 , 1 , 10 , 1 , 10 , 1 ))
147+ private static final Map <String , PlayerData . Bedwars > SAMPLE_STATS = Map .of (
148+ "FloweyTF" , createFake ( 525 , 3 , new CombinedGameData (4234 , 5634 , 500 , 300 , 1469 , 336 , 230 , 123 )),
149+ "Adaklys" , createFake ( 179 , 3 , new CombinedGameData (1984 , 2048 , 300 , 500 , 834 , 737 , 123 , 273 )),
150+ "steve" , createFake ( 5 , 3 , new CombinedGameData (10 , 1 , 10 , 1 , 10 , 1 , 10 , 1 ))
146151 );
147152
153+ private static PlayerData .Bedwars createFake (int level , int winstreak , CombinedGameData data ) {
154+ return new PlayerData .Bedwars (level ,
155+ new PlayerData .Bedwars .GameData (0 , 0 , 0 , 0 , winstreak , 0 , 0 , 0 , 0 ),
156+ data , null , null , null , null , null , null , null , null , null ,
157+ null , null , null , null , null , null , null , null );
158+ }
159+
148160 public final static AxoIdentifier ID = AxoIdentifier .of ("axolotlclient" , "bedwars_stats_overlay" );
149161
150162 protected final EnumOption <AnchorPoint > anchor = DefaultOptions .getAnchorPoint ();
151163
152164 protected final IntegerOption padding = new IntegerOption ("hud.padding" , 3 , 1 , 10 );
153165 protected final IntegerOption columnMargin = new IntegerOption ("hud.column_margin" , 3 , 0 , 10 );
154166 protected final IntegerOption rowMargin = new IntegerOption ("hud.row_margin" , 1 , 0 , 10 );
167+ private final BooleanOption columnLevel = new BooleanOption ("bedwars.stats_overlay.column.level" , false );
168+ private final BooleanOption columnFkdr = new BooleanOption ("bedwars.stats_overlay.column.fkdr" , true );
169+ private final BooleanOption columnKdr = new BooleanOption ("bedwars.stats_overlay.column.kdr" , true );
170+ private final BooleanOption columnWlr = new BooleanOption ("bedwars.stats_overlay.column.wlr" , true );
171+ private final BooleanOption columnWs = new BooleanOption ("bedwars.stats_overlay.column.ws" , true );
155172 private final BedwarsMod mod ;
156173
157- private Map <String , IntObjectPair < CombinedGameData > > stats = new HashMap <>();
174+ private Map <String , PlayerData . Bedwars > stats = new HashMap <>();
158175 private final Map <BedwarsTeam , List <String >> playersByTeam = new EnumMap <>(BedwarsTeam .class );
159176 private final AxoKeybinding toggle = AxoKeybinding .create (AxoKeys .KEY_UNKNOWN , "bedwars.toggle_stats_overlay" , "category.axolotlclient" );
160177 private boolean shouldRender = false ;
@@ -196,9 +213,7 @@ void onStart() {
196213 return ;
197214 }
198215
199- capturedStats .put (entry .br$getName (), IntObjectPair .of (
200- playerData .get ().bedwars ().all ().winstreak (),
201- playerData .get ().bedwars ().core ())
216+ capturedStats .put (entry .br$getName (), playerData .get ().bedwars ()
202217 );
203218 }, client ));
204219 }));
@@ -260,19 +275,11 @@ public List<Option<?>> getConfigurationOptions() {
260275 opts .add (padding );
261276 opts .add (columnMargin );
262277 opts .add (rowMargin );
278+ opts .add (columnLevel );
279+ opts .add (columnFkdr );
280+ opts .add (columnKdr );
281+ opts .add (columnWlr );
282+ opts .add (columnWs );
263283 return opts ;
264284 }
265-
266- @ Accessors (fluent = true )
267- @ Getter
268- @ Setter
269- @ AllArgsConstructor (access = AccessLevel .PRIVATE )
270- private static class IntObjectPair <T > {
271- private int left ;
272- private T right ;
273-
274- static <A > IntObjectPair <A > of (int left , A right ) {
275- return new IntObjectPair <>(left , right );
276- }
277- }
278285}
0 commit comments