22
33import com .github .kd_gaming1 .scaleme .client .data .PlayerPreset ;
44import com .github .kd_gaming1 .scaleme .client .util .PlayerPresetManager ;
5+ import com .github .kd_gaming1 .scaleme .client .util .PlayerUUIDResolver ;
56import com .github .kd_gaming1 .scaleme .config .ScaleMeConfig ;
6- import com .mojang .authlib .GameProfile ;
7- import com .mojang .brigadier .CommandDispatcher ;
87import com .mojang .brigadier .arguments .FloatArgumentType ;
98import com .mojang .brigadier .arguments .StringArgumentType ;
109import com .mojang .brigadier .context .CommandContext ;
1110import com .mojang .brigadier .exceptions .CommandSyntaxException ;
1211import net .fabricmc .fabric .api .client .command .v2 .ClientCommandRegistrationCallback ;
1312import net .fabricmc .fabric .api .client .command .v2 .FabricClientCommandSource ;
14- import net .minecraft .client .MinecraftClient ;
1513import net .minecraft .text .Text ;
1614
1715import java .util .List ;
1816import java .util .UUID ;
19- import java .util .concurrent .CompletableFuture ;
2017
2118import static net .fabricmc .fabric .api .client .command .v2 .ClientCommandManager .*;
2219
@@ -32,36 +29,14 @@ public static void register() {
3229 .then (literal ("add" )
3330 .then (argument ("player" , StringArgumentType .string ())
3431 .then (argument ("scale" , FloatArgumentType .floatArg (0.1f , 10.0f ))
35- .executes (ctx -> executeAdd (ctx , null ))
36- .then (argument ("category" , StringArgumentType .string ())
37- .executes (ctx -> executeAdd (ctx , StringArgumentType .getString (ctx , "category" )))))))
32+ .executes (PresetCommand ::executeAdd ))))
3833
3934 .then (literal ("remove" )
4035 .then (argument ("player" , StringArgumentType .string ())
4136 .executes (PresetCommand ::executeRemove )))
4237
4338 .then (literal ("list" )
4439 .executes (ctx -> executeList (ctx , null ))
45- .then (argument ("category" , StringArgumentType .string ())
46- .executes (ctx -> executeList (ctx , StringArgumentType .getString (ctx , "category" )))))
47-
48- .then (literal ("category" )
49- .then (literal ("list" )
50- .executes (PresetCommand ::executeListCategories ))
51- .then (literal ("rename" )
52- .then (argument ("old_name" , StringArgumentType .string ())
53- .then (argument ("new_name" , StringArgumentType .string ())
54- .executes (PresetCommand ::executeRenameCategory ))))
55- .then (literal ("remove" )
56- .then (argument ("category" , StringArgumentType .string ())
57- .executes (PresetCommand ::executeRemoveCategory )))
58- .then (literal ("move" )
59- .then (argument ("player" , StringArgumentType .string ())
60- .then (argument ("category" , StringArgumentType .string ())
61- .executes (PresetCommand ::executeMoveToCategory ))))
62- .then (literal ("clear" )
63- .then (argument ("player" , StringArgumentType .string ())
64- .executes (PresetCommand ::executeClearCategory ))))
6540
6641 .then (literal ("enable" )
6742 .then (argument ("player" , StringArgumentType .string ())
@@ -84,12 +59,12 @@ public static void register() {
8459
8560 .then (literal ("setown" )
8661 .then (argument ("scale" , FloatArgumentType .floatArg (0.1f , 10.0f ))
87- .executes (PresetCommand ::executeSetOwn )))
62+ .executes (PresetCommand ::executeSetOwn ))))
8863 );
8964 });
9065 }
9166
92- private static int executeAdd (CommandContext <FabricClientCommandSource > ctx , String category ) throws CommandSyntaxException {
67+ private static int executeAdd (CommandContext <FabricClientCommandSource > ctx ) throws CommandSyntaxException {
9368 String playerName = StringArgumentType .getString (ctx , "player" );
9469 float scale = FloatArgumentType .getFloat (ctx , "scale" );
9570
@@ -106,11 +81,10 @@ private static int executeAdd(CommandContext<FabricClientCommandSource> ctx, Str
10681 return 0 ;
10782 }
10883
109- PlayerPreset preset = new PlayerPreset (uuidString , playerName , scale , category );
84+ PlayerPreset preset = new PlayerPreset (uuidString , playerName , scale );
11085 PlayerPresetManager .addOrUpdatePreset (preset );
11186
112- String categoryText = category != null && !category .trim ().isEmpty () ? " in category '" + category + "'" : "" ;
113- sendSuccess (ctx , "Added preset for '" + playerName + "' with scale " + scale + categoryText + "." );
87+ sendSuccess (ctx , "Added preset for '" + playerName + "' with scale " + scale + "." );
11488 return 1 ;
11589 }
11690
@@ -147,15 +121,10 @@ private static int executeList(CommandContext<FabricClientCommandSource> ctx, St
147121 int count = 0 ;
148122
149123 for (PlayerPreset preset : presets ) {
150- if (categoryFilter != null && !categoryFilter .equalsIgnoreCase (preset .category )) {
151- continue ;
152- }
153-
154124 String status = preset .enabled ? "§a✓" : "§c✗" ;
155- String category = preset .category != null ? " §8[" + preset .category + "]" : " §8[no category]" ;
156125 String name = preset .getEffectiveDisplayName ();
157126
158- sendInfo (ctx , String .format (" %s §f%s§r: §6%.2f%s" , status , name , preset .scale , category ));
127+ sendInfo (ctx , String .format (" %s §f%s§r: §6%.2f%s" , status , name , preset .scale ));
159128 count ++;
160129 }
161130
@@ -235,7 +204,6 @@ private static int executeInfo(CommandContext<FabricClientCommandSource> ctx) th
235204 sendInfo (ctx , " UUID: " + preset .identifier );
236205 sendInfo (ctx , " Friendly Name: " + (preset .friendlyName != null ? preset .friendlyName : "None" ));
237206 sendInfo (ctx , " Scale: " + preset .scale );
238- sendInfo (ctx , " Category: " + (preset .category != null ? preset .category : "None" ));
239207 sendInfo (ctx , " Enabled: " + (preset .enabled ? "Yes" : "No" ));
240208
241209 return 1 ;
@@ -267,163 +235,9 @@ private static int executeSetOwn(CommandContext<FabricClientCommandSource> ctx)
267235 return 1 ;
268236 }
269237
270- private static int executeListCategories (CommandContext <FabricClientCommandSource > ctx ) {
271- List <PlayerPreset > presets = PlayerPresetManager .getAllPresets ();
272-
273- if (presets .isEmpty ()) {
274- sendInfo (ctx , "No presets found." );
275- return 1 ;
276- }
277-
278- // Collect unique categories and count presets in each
279- java .util .Map <String , Integer > categoryCount = new java .util .HashMap <>();
280- int uncategorized = 0 ;
281-
282- for (PlayerPreset preset : presets ) {
283- if (preset .category != null && !preset .category .trim ().isEmpty ()) {
284- categoryCount .merge (preset .category , 1 , Integer ::sum );
285- } else {
286- uncategorized ++;
287- }
288- }
289-
290- sendInfo (ctx , "Categories:" );
291-
292- if (uncategorized > 0 ) {
293- sendInfo (ctx , " §7(no category): " + uncategorized + " presets" );
294- }
295-
296- categoryCount .entrySet ().stream ()
297- .sorted (java .util .Map .Entry .comparingByKey ())
298- .forEach (entry -> {
299- sendInfo (ctx , " §e" + entry .getKey () + "§r: " + entry .getValue () + " presets" );
300- });
301-
302- return 1 ;
303- }
304-
305- private static int executeRenameCategory (CommandContext <FabricClientCommandSource > ctx ) throws CommandSyntaxException {
306- String oldName = StringArgumentType .getString (ctx , "old_name" );
307- String newName = StringArgumentType .getString (ctx , "new_name" );
308-
309- List <PlayerPreset > presets = PlayerPresetManager .getAllPresets ();
310- int renamed = 0 ;
311-
312- for (PlayerPreset preset : presets ) {
313- if (oldName .equalsIgnoreCase (preset .category )) {
314- preset .category = newName ;
315- PlayerPresetManager .addOrUpdatePreset (preset );
316- renamed ++;
317- }
318- }
319-
320- if (renamed > 0 ) {
321- sendSuccess (ctx , "Renamed category '" + oldName + "' to '" + newName + "' (" + renamed + " presets updated)." );
322- return 1 ;
323- } else {
324- sendError (ctx , "No presets found in category '" + oldName + "'." );
325- return 0 ;
326- }
327- }
328-
329- private static int executeRemoveCategory (CommandContext <FabricClientCommandSource > ctx ) throws CommandSyntaxException {
330- String categoryName = StringArgumentType .getString (ctx , "category" );
331-
332- List <PlayerPreset > presets = PlayerPresetManager .getAllPresets ();
333- int cleared = 0 ;
334-
335- for (PlayerPreset preset : presets ) {
336- if (categoryName .equalsIgnoreCase (preset .category )) {
337- preset .category = null ;
338- PlayerPresetManager .addOrUpdatePreset (preset );
339- cleared ++;
340- }
341- }
342-
343- if (cleared > 0 ) {
344- sendSuccess (ctx , "Removed category '" + categoryName + "' from " + cleared + " presets." );
345- return 1 ;
346- } else {
347- sendError (ctx , "No presets found in category '" + categoryName + "'." );
348- return 0 ;
349- }
350- }
351-
352- private static int executeMoveToCategory (CommandContext <FabricClientCommandSource > ctx ) throws CommandSyntaxException {
353- String playerName = StringArgumentType .getString (ctx , "player" );
354- String newCategory = StringArgumentType .getString (ctx , "category" );
355-
356- UUID playerUUID = resolvePlayerUUID (playerName );
357- if (playerUUID == null ) {
358- sendError (ctx , "Player '" + playerName + "' not found." );
359- return 0 ;
360- }
361-
362- String uuidString = playerUUID .toString ();
363- PlayerPreset preset = PlayerPresetManager .getPreset (uuidString );
364-
365- if (preset == null ) {
366- sendError (ctx , "No preset found for '" + playerName + "'." );
367- return 0 ;
368- }
369-
370- String oldCategory = preset .category != null ? preset .category : "(no category)" ;
371- preset .category = newCategory ;
372- PlayerPresetManager .addOrUpdatePreset (preset );
373-
374- sendSuccess (ctx , "Moved '" + playerName + "' from '" + oldCategory + "' to '" + newCategory + "'." );
375- return 1 ;
376- }
377-
378- private static int executeClearCategory (CommandContext <FabricClientCommandSource > ctx ) throws CommandSyntaxException {
379- String playerName = StringArgumentType .getString (ctx , "player" );
380-
381- UUID playerUUID = resolvePlayerUUID (playerName );
382- if (playerUUID == null ) {
383- sendError (ctx , "Player '" + playerName + "' not found." );
384- return 0 ;
385- }
386-
387- String uuidString = playerUUID .toString ();
388- PlayerPreset preset = PlayerPresetManager .getPreset (uuidString );
389-
390- if (preset == null ) {
391- sendError (ctx , "No preset found for '" + playerName + "'." );
392- return 0 ;
393- }
394-
395- String oldCategory = preset .category != null ? preset .category : "(no category)" ;
396- preset .category = null ;
397- PlayerPresetManager .addOrUpdatePreset (preset );
398-
399- sendSuccess (ctx , "Removed '" + playerName + "' from category '" + oldCategory + "'." );
400- return 1 ;
401- }
402-
403- // This works for players who have been seen in the current session.
238+ // Resolves a player's UUID from their username.
404239 private static UUID resolvePlayerUUID (String playerName ) {
405- MinecraftClient client = MinecraftClient .getInstance ();
406-
407- // Check if it's the current player
408- if (client .player != null && playerName .equalsIgnoreCase (client .player .getName ().getString ())) {
409- return client .player .getUuid ();
410- }
411-
412- // Check player list cache
413- if (client .getNetworkHandler () != null ) {
414- return client .getNetworkHandler ().getPlayerList ().stream ()
415- .filter (entry -> entry .getProfile ().getName ().equalsIgnoreCase (playerName ))
416- .map (entry -> entry .getProfile ().getId ())
417- .findFirst ()
418- .orElse (null );
419- }
420-
421- // If not found in current session, try to parse as UUID
422- try {
423- return UUID .fromString (playerName );
424- } catch (IllegalArgumentException e ) {
425- return null ;
426- }
240+ return PlayerUUIDResolver .resolvePlayerUUID (playerName );
427241 }
428242
429243 /**
0 commit comments