Skip to content

Commit 0f997be

Browse files
committed
added command to list all jailed players
1 parent c7580f9 commit 0f997be

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ A classic jail mod for Minecraft Fabric servers (1.21.8+) - just like the good o
3838

3939
- `/jail time` - Check your own remaining jail time (available to jailed players)
4040
- `/jail time <player>` - Check any player's jail time (admin only - requires `oldschooljail.jail` permission)
41+
- `/jail list` - List all currently jailed players with details (admin only - requires `oldschooljail.jail` permission)
4142

4243
### Admin Commands
4344
- `/jail set <jail_name>` - Set a jail at your current location

src/main/java/com/oldschooljail/command/JailCommand.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {
8181
// /jail time <player>
8282
.then(CommandManager.argument("player", EntityArgumentType.player())
8383
.executes(JailCommand::checkPlayerJailTime)))
84+
85+
// /jail list
86+
.then(CommandManager.literal("list")
87+
.executes(JailCommand::listJailedPlayers))
8488
);
8589
}
8690

@@ -371,6 +375,56 @@ private static int checkPlayerJailTime(CommandContext<ServerCommandSource> conte
371375
return 1;
372376
}
373377

378+
private static int listJailedPlayers(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
379+
ServerCommandSource source = context.getSource();
380+
381+
// Check permission - only admins can list jailed players
382+
if (!PermissionUtil.hasPermission(source, PermissionUtil.JAIL_PLAYER)) {
383+
source.sendError(Text.literal("§cYou don't have permission to list jailed players!"));
384+
return 0;
385+
}
386+
387+
JailedPlayersData jailedData = OldSchoolJailMod.getJailedPlayersData();
388+
Collection<JailedPlayer> jailedPlayers = jailedData.getAllJailedPlayers();
389+
390+
if (jailedPlayers.isEmpty()) {
391+
source.sendFeedback(() -> Text.literal("§aNo players are currently jailed."), false);
392+
return 1;
393+
}
394+
395+
source.sendFeedback(() -> Text.literal("§e=== Currently Jailed Players ==="), false);
396+
397+
for (JailedPlayer jailedPlayer : jailedPlayers) {
398+
// Try to get player name from server
399+
final MinecraftServer server = source.getServer();
400+
final String playerName;
401+
402+
if (server != null) {
403+
ServerPlayerEntity player = server.getPlayerManager().getPlayer(jailedPlayer.getPlayerUuid());
404+
if (player != null) {
405+
playerName = player.getName().getString();
406+
} else {
407+
// Player is offline, use UUID as fallback
408+
playerName = jailedPlayer.getPlayerUuid().toString().substring(0, 8) + "...";
409+
}
410+
} else {
411+
playerName = "Unknown";
412+
}
413+
414+
final long remaining = jailedPlayer.getRemainingTimeSeconds();
415+
final String status = server != null && server.getPlayerManager().getPlayer(jailedPlayer.getPlayerUuid()) != null ? "§aOnline" : "§7Offline";
416+
417+
source.sendFeedback(() -> Text.literal("§e" + playerName + " §7- Jail: §f" + jailedPlayer.getJailName() +
418+
" §7- Time: §f" + formatTime(remaining) + " §7- Status: " + status), false);
419+
source.sendFeedback(() -> Text.literal("§7 Reason: §f" + jailedPlayer.getReason() +
420+
" §7- Jailed by: §f" + jailedPlayer.getJailedBy()), false);
421+
}
422+
423+
source.sendFeedback(() -> Text.literal("§eTotal: §f" + jailedPlayers.size() + " §eplayers jailed"), false);
424+
425+
return 1;
426+
}
427+
374428
private static void teleportToJail(ServerPlayerEntity player, Jail jail) {
375429
// Get the world
376430
MinecraftServer server = player.getServer();

src/main/java/com/oldschooljail/data/JailedPlayersData.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,14 @@ public List<JailedPlayer> getPlayersInJail(String jailName) {
134134
return players;
135135
}
136136

137+
public Collection<JailedPlayer> getAllJailedPlayers() {
138+
List<JailedPlayer> players = new ArrayList<>();
139+
for (Map.Entry<UUID, JailedPlayerEntry> entry : jailedPlayers.entrySet()) {
140+
players.add(toJailedPlayer(entry.getKey(), entry.getValue()));
141+
}
142+
return players;
143+
}
144+
137145
private JailedPlayer toJailedPlayer(UUID uuid, JailedPlayerEntry entry) {
138146
return new JailedPlayer(uuid, entry.jailName, entry.releaseTime, entry.reason, entry.jailedBy,
139147
entry.originalX, entry.originalY, entry.originalZ,

0 commit comments

Comments
 (0)