From 88213ba962c8105cdae057b3936e6e408bc1a82e Mon Sep 17 00:00:00 2001 From: Rubenicos <44579213+Rubenicos@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:50:21 -0600 Subject: [PATCH 1/2] Add cleanup bypass permission --- .../commands/ArgAdminCleanup.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/dev/espi/protectionstones/commands/ArgAdminCleanup.java b/src/main/java/dev/espi/protectionstones/commands/ArgAdminCleanup.java index 4736246..6eb1185 100644 --- a/src/main/java/dev/espi/protectionstones/commands/ArgAdminCleanup.java +++ b/src/main/java/dev/espi/protectionstones/commands/ArgAdminCleanup.java @@ -21,6 +21,7 @@ import dev.espi.protectionstones.PSRegion; import dev.espi.protectionstones.ProtectionStones; import dev.espi.protectionstones.utils.WGUtils; +import net.luckperms.api.node.types.PermissionNode; import org.bukkit.*; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -31,6 +32,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.concurrent.ExecutionException; class ArgAdminCleanup { @@ -100,6 +102,20 @@ static boolean argumentAdminCleanup(CommandSender p, String[] preParseArgs) { HashSet activePlayers = new HashSet<>(); + // loop over all luckperms players and add to list if they have bypass permission + if (ProtectionStones.getInstance().isLuckPermsSupportEnabled()) { + try { + activePlayers.addAll(ProtectionStones.getInstance().getLuckPerms() + .getUserManager() + .searchAll(node -> + node instanceof PermissionNode && + ((PermissionNode) node).getPermission().equalsIgnoreCase("protectionstones.cleanup.bypass") + ).get().keySet()); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + // loop over offline players and add to list if they haven't joined recently for (OfflinePlayer op : Bukkit.getServer().getOfflinePlayers()) { long lastPlayed = (System.currentTimeMillis() - op.getLastPlayed()) / 86400000L; From 6104a414bb74ee4d0dde7a08fd06dc824c5914c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n?= <44579213+Rubenicos@users.noreply.github.com> Date: Sun, 18 Aug 2024 08:21:38 -0600 Subject: [PATCH 2/2] Add count argument to cleanup command --- .../commands/ArgAdminCleanup.java | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/main/java/dev/espi/protectionstones/commands/ArgAdminCleanup.java b/src/main/java/dev/espi/protectionstones/commands/ArgAdminCleanup.java index 6eb1185..0e9d1d8 100644 --- a/src/main/java/dev/espi/protectionstones/commands/ArgAdminCleanup.java +++ b/src/main/java/dev/espi/protectionstones/commands/ArgAdminCleanup.java @@ -21,6 +21,7 @@ import dev.espi.protectionstones.PSRegion; import dev.espi.protectionstones.ProtectionStones; import dev.espi.protectionstones.utils.WGUtils; +import net.luckperms.api.node.matcher.NodeMatcher; import net.luckperms.api.node.types.PermissionNode; import org.bukkit.*; import org.bukkit.command.CommandSender; @@ -41,12 +42,12 @@ class ArgAdminCleanup { // /ps admin cleanup [remove/preview] static boolean argumentAdminCleanup(CommandSender p, String[] preParseArgs) { - if (preParseArgs.length < 3 || !Arrays.asList("remove", "preview").contains(preParseArgs[2].toLowerCase())) { + if (preParseArgs.length < 3 || !Arrays.asList("remove", "preview", "count").contains(preParseArgs[2].toLowerCase())) { PSL.msg(p, ArgAdmin.getCleanupHelp()); return true; } - String cleanupOperation = preParseArgs[2].toLowerCase(); // [remove|preview] + String cleanupOperation = preParseArgs[2].toLowerCase(); // [remove|preview|count] World w; String alias = null; @@ -102,22 +103,24 @@ static boolean argumentAdminCleanup(CommandSender p, String[] preParseArgs) { HashSet activePlayers = new HashSet<>(); + int bypassCount = 0; + // loop over all luckperms players and add to list if they have bypass permission if (ProtectionStones.getInstance().isLuckPermsSupportEnabled()) { try { activePlayers.addAll(ProtectionStones.getInstance().getLuckPerms() .getUserManager() - .searchAll(node -> - node instanceof PermissionNode && - ((PermissionNode) node).getPermission().equalsIgnoreCase("protectionstones.cleanup.bypass") - ).get().keySet()); + .searchAll(NodeMatcher.key("protectionstones.cleanup.bypass")).thenApply(Map::keySet).get()); + + bypassCount = activePlayers.size(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } - // loop over offline players and add to list if they haven't joined recently - for (OfflinePlayer op : Bukkit.getServer().getOfflinePlayers()) { + // loop over offline players and add to list if they haven't joined recently} + final OfflinePlayer[] players = Bukkit.getServer().getOfflinePlayers(); + for (OfflinePlayer op : players) { long lastPlayed = (System.currentTimeMillis() - op.getLastPlayed()) / 86400000L; try { // a player is active if they have joined within the days @@ -153,6 +156,20 @@ static boolean argumentAdminCleanup(CommandSender p, String[] preParseArgs) { } } + if (cleanupOperation.equalsIgnoreCase("count")) { + p.sendMessage(ChatColor.GOLD + "PLAYERS"); + p.sendMessage(ChatColor.GOLD + "| " + ChatColor.YELLOW + "Bypass: " + ChatColor.WHITE + bypassCount); + p.sendMessage(ChatColor.GOLD + "| " + ChatColor.YELLOW + "Active: " + ChatColor.WHITE + (activePlayers.size() - bypassCount)); + p.sendMessage(ChatColor.GOLD + "| " + ChatColor.YELLOW + "Inactive: " + ChatColor.WHITE + (players.length - activePlayers.size())); + p.sendMessage(ChatColor.GOLD + "|_" + ChatColor.YELLOW + "Total: " + ChatColor.WHITE + players.length); + p.sendMessage(" "); + p.sendMessage(ChatColor.GOLD + "REGIONS"); + p.sendMessage(ChatColor.GOLD + "| " + ChatColor.YELLOW + "Active: " + ChatColor.WHITE + (regions.size() - toDelete.size())); + p.sendMessage(ChatColor.GOLD + "| " + ChatColor.YELLOW + "Inactive: " + ChatColor.WHITE + toDelete.size()); + p.sendMessage(ChatColor.GOLD + "|_" + ChatColor.YELLOW + "Total: " + ChatColor.WHITE + regions.size()); + return; + } + // start recursive iteration to delete a region each tick Iterator deleteRegionsIterator = toDelete.iterator(); regionLoop(deleteRegionsIterator, p, cleanupOperation.equalsIgnoreCase("remove"));