Skip to content

Commit 74989b5

Browse files
Merge pull request #59 from Dans-Plugins/copilot/fix-bc80abf1-b1f7-4e55-907b-b841fb42b4a5
Add list command to show most recent sessions for admins
2 parents 7e192cc + 739745e commit 74989b5

File tree

4 files changed

+93
-0
lines changed

4 files changed

+93
-0
lines changed

src/main/java/dansplugins/activitytracker/ActivityTracker.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import dansplugins.activitytracker.commands.DefaultCommand;
2323
import dansplugins.activitytracker.commands.HelpCommand;
2424
import dansplugins.activitytracker.commands.InfoCommand;
25+
import dansplugins.activitytracker.commands.ListCommand;
2526
import dansplugins.activitytracker.commands.StatsCommand;
2627
import dansplugins.activitytracker.commands.TopCommand;
2728
import dansplugins.activitytracker.eventhandlers.JoinHandler;
@@ -158,6 +159,7 @@ private void initializeCommandService() {
158159
new ConfigCommand(configService),
159160
new HelpCommand(),
160161
new InfoCommand(persistentData),
162+
new ListCommand(persistentData),
161163
new StatsCommand(persistentData),
162164
new TopCommand(activityRecordService)
163165
));

src/main/java/dansplugins/activitytracker/commands/HelpCommand.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public boolean execute(CommandSender sender) {
2222
sender.sendMessage(ChatColor.AQUA + "/at help - View a list of helpful commands.");
2323
sender.sendMessage(ChatColor.AQUA + "/at info - View your activity record.");
2424
sender.sendMessage(ChatColor.AQUA + "/at info (playerName) - View a player's activity record.");
25+
sender.sendMessage(ChatColor.AQUA + "/at list - View the 10 most recent sessions (admin only).");
2526
sender.sendMessage(ChatColor.AQUA + "/at top - View a list of the most active players on the server.");
2627
sender.sendMessage(ChatColor.AQUA + "/at stats - View activity stats for the server.");
2728
sender.sendMessage(ChatColor.AQUA + "/at config - Show or set config options.");
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
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+
}

src/main/resources/plugin.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ permissions:
1717
at.stats:
1818
default: true
1919
at.config:
20+
default: op
21+
at.list:
2022
default: op

0 commit comments

Comments
 (0)