1+ package dansplugins .activitytracker .commands ;
2+
3+ import java .time .format .DateTimeFormatter ;
4+ import java .util .ArrayList ;
5+ import java .util .Arrays ;
6+ import java .util .Comparator ;
7+ import java .util .List ;
8+ import java .util .stream .Collectors ;
9+
10+ import org .bukkit .ChatColor ;
11+ import org .bukkit .command .CommandSender ;
12+
13+ import dansplugins .activitytracker .data .PersistentData ;
14+ import dansplugins .activitytracker .objects .ActivityRecord ;
15+ import dansplugins .activitytracker .objects .Session ;
16+ import preponderous .ponder .minecraft .bukkit .abs .AbstractPluginCommand ;
17+ import preponderous .ponder .minecraft .bukkit .tools .UUIDChecker ;
18+
19+ /**
20+ * @author Daniel McCoy Stephenson
21+ */
22+ public class ListCommand extends AbstractPluginCommand {
23+ private final PersistentData persistentData ;
24+
25+ public ListCommand (PersistentData persistentData ) {
26+ super (new ArrayList <>(Arrays .asList ("list" )), new ArrayList <>(Arrays .asList ("at.list" )));
27+ this .persistentData = persistentData ;
28+ }
29+
30+ @ Override
31+ public boolean execute (CommandSender sender ) {
32+ // Get all sessions from all activity records
33+ List <Session > allSessions = new ArrayList <>();
34+ for (ActivityRecord record : persistentData .getActivityRecords ()) {
35+ if (record != null && record .getSessions () != null ) {
36+ allSessions .addAll (record .getSessions ());
37+ }
38+ }
39+
40+ // Sort sessions by login date in descending order (most recent first)
41+ List <Session > sortedSessions = allSessions .stream ()
42+ .filter (session -> session != null && session .getLoginDate () != null )
43+ .sorted (Comparator .comparing (Session ::getLoginDate ).reversed ())
44+ .limit (10 )
45+ .collect (Collectors .toList ());
46+
47+ if (sortedSessions .isEmpty ()) {
48+ sender .sendMessage (ChatColor .RED + "No sessions found." );
49+ return true ;
50+ }
51+
52+ int displayedCount = sortedSessions .size ();
53+ sender .sendMessage (ChatColor .AQUA + " === Most Recent Sessions (" + displayedCount + "/10) ===" );
54+
55+ UUIDChecker uuidChecker = new UUIDChecker ();
56+ DateTimeFormatter formatter = DateTimeFormatter .ofPattern ("yyyy-MM-dd HH:mm:ss" );
57+
58+ int count = 1 ;
59+ for (Session session : sortedSessions ) {
60+ String playerName = uuidChecker .findPlayerNameBasedOnUUID (session .getPlayerUUID ());
61+ if (playerName == null ) {
62+ playerName = "Unknown Player" ;
63+ }
64+
65+ String loginTime = session .getLoginDate ().format (formatter );
66+ String status = session .isActive () ? ChatColor .GREEN + "Active" : ChatColor .RED + "Ended" ;
67+
68+ String sessionInfo ;
69+ if (session .isActive ()) {
70+ sessionInfo = String .format ("%d. %s - Login: %s (%s%s)" ,
71+ count , playerName , loginTime , status , ChatColor .AQUA );
72+ } else {
73+ sessionInfo = String .format ("%d. %s - Login: %s (%s%s - Duration: %.1f min)" ,
74+ count , playerName , loginTime , status , ChatColor .AQUA , session .getMinutesSpent ());
75+ }
76+
77+ sender .sendMessage (ChatColor .AQUA + sessionInfo );
78+ count ++;
79+ }
80+
81+ return true ;
82+ }
83+
84+ @ Override
85+ public boolean execute (CommandSender sender , String [] args ) {
86+ return execute (sender );
87+ }
88+ }
0 commit comments