diff --git a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemovePrefix.java b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemovePrefix.java index 42be5b68d..ac8ff46bd 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemovePrefix.java +++ b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemovePrefix.java @@ -23,6 +23,7 @@ package me.lucko.luckperms.commands.group.subcommands; import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.commands.*; import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Permission; @@ -31,6 +32,7 @@ import me.lucko.luckperms.exceptions.ObjectLacksException; import me.lucko.luckperms.groups.Group; import me.lucko.luckperms.utils.ArgumentChecker; +import java.util.ArrayList; import java.util.List; public class GroupRemovePrefix extends SubCommand { @@ -56,44 +58,96 @@ public class GroupRemovePrefix extends SubCommand { return CommandResult.INVALID_ARGS; } - final String node = "prefix." + priority + "." + ArgumentChecker.escapeCharacters(prefix); + if (prefix.equalsIgnoreCase("null")) { + String server = null; + String world = null; - try { if (args.size() >= 3) { - final String server = args.get(2).toLowerCase(); + server = args.get(2).toLowerCase(); if (ArgumentChecker.checkServer(server)) { Message.SERVER_INVALID_ENTRY.send(sender); return CommandResult.INVALID_ARGS; } - if (args.size() == 3) { - group.unsetPermission(node, server); - Message.REMOVEPREFIX_SERVER_SUCCESS.send(sender, group.getDisplayName(), prefix, priority, server); - LogEntry.build().actor(sender).acted(group) - .action("removeprefix " + priority + " " + args.get(1) + " " + server) - .build().submit(plugin, sender); + if (args.size() != 3) { + world = args.get(3).toLowerCase(); + } + } + + List toRemove = new ArrayList<>(); + for (Node node : group.getNodes()) { + if (!node.isPrefix()) continue; + if (node.getPrefix().getKey() != priority) continue; + if (node.isTemporary()) continue; + + if (node.getServer().isPresent()) { + if (server == null) continue; + if (!node.getServer().get().equalsIgnoreCase(server)) continue; } else { - final String world = args.get(3).toLowerCase(); - group.unsetPermission(node, server, world); - Message.REMOVEPREFIX_SERVER_WORLD_SUCCESS.send(sender, group.getDisplayName(), prefix, priority, server, world); + if (server != null) continue; + } + + if (node.getWorld().isPresent()) { + if (world == null) continue; + if (!node.getWorld().get().equalsIgnoreCase(world)) continue; + } else { + if (world != null) continue; + } + + toRemove.add(node); + } + + toRemove.forEach(n -> { + try { + group.unsetPermission(n); + } catch (ObjectLacksException ignored) {} + }); + + Message.BULK_CHANGE_SUCCESS.send(sender, toRemove.size()); + save(group, sender, plugin); + return CommandResult.SUCCESS; + + } else { + + final String node = "prefix." + priority + "." + ArgumentChecker.escapeCharacters(prefix); + + try { + if (args.size() >= 3) { + final String server = args.get(2).toLowerCase(); + if (ArgumentChecker.checkServer(server)) { + Message.SERVER_INVALID_ENTRY.send(sender); + return CommandResult.INVALID_ARGS; + } + + if (args.size() == 3) { + group.unsetPermission(node, server); + Message.REMOVEPREFIX_SERVER_SUCCESS.send(sender, group.getDisplayName(), prefix, priority, server); + LogEntry.build().actor(sender).acted(group) + .action("removeprefix " + priority + " " + args.get(1) + " " + server) + .build().submit(plugin, sender); + } else { + final String world = args.get(3).toLowerCase(); + group.unsetPermission(node, server, world); + Message.REMOVEPREFIX_SERVER_WORLD_SUCCESS.send(sender, group.getDisplayName(), prefix, priority, server, world); + LogEntry.build().actor(sender).acted(group) + .action("removeprefix " + priority + " " + args.get(1) + " " + server + " " + world) + .build().submit(plugin, sender); + } + + } else { + group.unsetPermission(node); + Message.REMOVEPREFIX_SUCCESS.send(sender, group.getDisplayName(), prefix, priority); LogEntry.build().actor(sender).acted(group) - .action("removeprefix " + priority + " " + args.get(1) + " " + server + " " + world) + .action("removeprefix " + priority + " " + args.get(1)) .build().submit(plugin, sender); } - } else { - group.unsetPermission(node); - Message.REMOVEPREFIX_SUCCESS.send(sender, group.getDisplayName(), prefix, priority); - LogEntry.build().actor(sender).acted(group) - .action("removeprefix " + priority + " " + args.get(1)) - .build().submit(plugin, sender); + save(group, sender, plugin); + return CommandResult.SUCCESS; + } catch (ObjectLacksException e) { + Message.DOES_NOT_HAVE_PREFIX.send(sender, group.getDisplayName()); + return CommandResult.STATE_ERROR; } - - save(group, sender, plugin); - return CommandResult.SUCCESS; - } catch (ObjectLacksException e) { - Message.DOES_NOT_HAVE_PREFIX.send(sender, group.getDisplayName()); - return CommandResult.STATE_ERROR; } } } diff --git a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveSuffix.java b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveSuffix.java index b83332fe9..6e0a1a1f6 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveSuffix.java +++ b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveSuffix.java @@ -23,6 +23,7 @@ package me.lucko.luckperms.commands.group.subcommands; import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.commands.*; import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Permission; @@ -31,6 +32,7 @@ import me.lucko.luckperms.exceptions.ObjectLacksException; import me.lucko.luckperms.groups.Group; import me.lucko.luckperms.utils.ArgumentChecker; +import java.util.ArrayList; import java.util.List; public class GroupRemoveSuffix extends SubCommand { @@ -56,44 +58,96 @@ public class GroupRemoveSuffix extends SubCommand { return CommandResult.INVALID_ARGS; } - final String node = "suffix." + priority + "." + ArgumentChecker.escapeCharacters(suffix); + if (suffix.equalsIgnoreCase("null")) { + String server = null; + String world = null; - try { if (args.size() >= 3) { - final String server = args.get(2).toLowerCase(); + server = args.get(2).toLowerCase(); if (ArgumentChecker.checkServer(server)) { Message.SERVER_INVALID_ENTRY.send(sender); return CommandResult.INVALID_ARGS; } - if (args.size() == 3) { - group.unsetPermission(node, server); - Message.REMOVESUFFIX_SERVER_SUCCESS.send(sender, group.getDisplayName(), suffix, priority, server); - LogEntry.build().actor(sender).acted(group) - .action("removesuffix " + priority + " " + args.get(1) + " " + server) - .build().submit(plugin, sender); + if (args.size() != 3) { + world = args.get(3).toLowerCase(); + } + } + + List toRemove = new ArrayList<>(); + for (Node node : group.getNodes()) { + if (!node.isSuffix()) continue; + if (node.getSuffix().getKey() != priority) continue; + if (node.isTemporary()) continue; + + if (node.getServer().isPresent()) { + if (server == null) continue; + if (!node.getServer().get().equalsIgnoreCase(server)) continue; } else { - final String world = args.get(3).toLowerCase(); - group.unsetPermission(node, server, world); - Message.REMOVESUFFIX_SERVER_WORLD_SUCCESS.send(sender, group.getDisplayName(), suffix, priority, server, world); + if (server != null) continue; + } + + if (node.getWorld().isPresent()) { + if (world == null) continue; + if (!node.getWorld().get().equalsIgnoreCase(world)) continue; + } else { + if (world != null) continue; + } + + toRemove.add(node); + } + + toRemove.forEach(n -> { + try { + group.unsetPermission(n); + } catch (ObjectLacksException ignored) {} + }); + + Message.BULK_CHANGE_SUCCESS.send(sender, toRemove.size()); + save(group, sender, plugin); + return CommandResult.SUCCESS; + + } else { + + final String node = "suffix." + priority + "." + ArgumentChecker.escapeCharacters(suffix); + + try { + if (args.size() >= 3) { + final String server = args.get(2).toLowerCase(); + if (ArgumentChecker.checkServer(server)) { + Message.SERVER_INVALID_ENTRY.send(sender); + return CommandResult.INVALID_ARGS; + } + + if (args.size() == 3) { + group.unsetPermission(node, server); + Message.REMOVESUFFIX_SERVER_SUCCESS.send(sender, group.getDisplayName(), suffix, priority, server); + LogEntry.build().actor(sender).acted(group) + .action("removesuffix " + priority + " " + args.get(1) + " " + server) + .build().submit(plugin, sender); + } else { + final String world = args.get(3).toLowerCase(); + group.unsetPermission(node, server, world); + Message.REMOVESUFFIX_SERVER_WORLD_SUCCESS.send(sender, group.getDisplayName(), suffix, priority, server, world); + LogEntry.build().actor(sender).acted(group) + .action("removesuffix " + priority + " " + args.get(1) + " " + server + " " + world) + .build().submit(plugin, sender); + } + + } else { + group.unsetPermission(node); + Message.REMOVESUFFIX_SUCCESS.send(sender, group.getDisplayName(), suffix, priority); LogEntry.build().actor(sender).acted(group) - .action("removesuffix " + priority + " " + args.get(1) + " " + server + " " + world) + .action("removesuffix " + priority + " " + args.get(1)) .build().submit(plugin, sender); } - } else { - group.unsetPermission(node); - Message.REMOVESUFFIX_SUCCESS.send(sender, group.getDisplayName(), suffix, priority); - LogEntry.build().actor(sender).acted(group) - .action("removesuffix " + priority + " " + args.get(1)) - .build().submit(plugin, sender); + save(group, sender, plugin); + return CommandResult.SUCCESS; + } catch (ObjectLacksException e) { + Message.DOES_NOT_HAVE_SUFFIX.send(sender, group.getDisplayName()); + return CommandResult.STATE_ERROR; } - - save(group, sender, plugin); - return CommandResult.SUCCESS; - } catch (ObjectLacksException e) { - Message.DOES_NOT_HAVE_SUFFIX.send(sender, group.getDisplayName()); - return CommandResult.STATE_ERROR; } } } diff --git a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveTempPrefix.java b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveTempPrefix.java index 565a720b6..3d2f713c2 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveTempPrefix.java +++ b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveTempPrefix.java @@ -23,6 +23,7 @@ package me.lucko.luckperms.commands.group.subcommands; import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.commands.*; import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Permission; @@ -31,6 +32,7 @@ import me.lucko.luckperms.exceptions.ObjectLacksException; import me.lucko.luckperms.groups.Group; import me.lucko.luckperms.utils.ArgumentChecker; +import java.util.ArrayList; import java.util.List; public class GroupRemoveTempPrefix extends SubCommand { @@ -57,44 +59,96 @@ public class GroupRemoveTempPrefix extends SubCommand { return CommandResult.INVALID_ARGS; } - final String node = "prefix." + priority + "." + ArgumentChecker.escapeCharacters(prefix); + if (prefix.equalsIgnoreCase("null")) { + String server = null; + String world = null; - try { if (args.size() >= 3) { - final String server = args.get(2).toLowerCase(); + server = args.get(2).toLowerCase(); if (ArgumentChecker.checkServer(server)) { Message.SERVER_INVALID_ENTRY.send(sender); return CommandResult.INVALID_ARGS; } - if (args.size() == 3) { - group.unsetPermission(node, server, true); - Message.REMOVE_TEMP_PREFIX_SERVER_SUCCESS.send(sender, group.getDisplayName(), prefix, priority, server); - LogEntry.build().actor(sender).acted(group) - .action("removetempprefix " + priority + " " + args.get(1) + " " + server) - .build().submit(plugin, sender); + if (args.size() != 3) { + world = args.get(3).toLowerCase(); + } + } + + List toRemove = new ArrayList<>(); + for (Node node : group.getNodes()) { + if (!node.isPrefix()) continue; + if (node.getPrefix().getKey() != priority) continue; + if (node.isPermanent()) continue; + + if (node.getServer().isPresent()) { + if (server == null) continue; + if (!node.getServer().get().equalsIgnoreCase(server)) continue; } else { - final String world = args.get(3).toLowerCase(); - group.unsetPermission(node, server, world, true); - Message.REMOVE_TEMP_PREFIX_SERVER_WORLD_SUCCESS.send(sender, group.getDisplayName(), prefix, priority, server, world); + if (server != null) continue; + } + + if (node.getWorld().isPresent()) { + if (world == null) continue; + if (!node.getWorld().get().equalsIgnoreCase(world)) continue; + } else { + if (world != null) continue; + } + + toRemove.add(node); + } + + toRemove.forEach(n -> { + try { + group.unsetPermission(n); + } catch (ObjectLacksException ignored) {} + }); + + Message.BULK_CHANGE_SUCCESS.send(sender, toRemove.size()); + save(group, sender, plugin); + return CommandResult.SUCCESS; + + } else { + + final String node = "prefix." + priority + "." + ArgumentChecker.escapeCharacters(prefix); + + try { + if (args.size() >= 3) { + final String server = args.get(2).toLowerCase(); + if (ArgumentChecker.checkServer(server)) { + Message.SERVER_INVALID_ENTRY.send(sender); + return CommandResult.INVALID_ARGS; + } + + if (args.size() == 3) { + group.unsetPermission(node, server, true); + Message.REMOVE_TEMP_PREFIX_SERVER_SUCCESS.send(sender, group.getDisplayName(), prefix, priority, server); + LogEntry.build().actor(sender).acted(group) + .action("removetempprefix " + priority + " " + args.get(1) + " " + server) + .build().submit(plugin, sender); + } else { + final String world = args.get(3).toLowerCase(); + group.unsetPermission(node, server, world, true); + Message.REMOVE_TEMP_PREFIX_SERVER_WORLD_SUCCESS.send(sender, group.getDisplayName(), prefix, priority, server, world); + LogEntry.build().actor(sender).acted(group) + .action("removetempprefix " + priority + " " + args.get(1) + " " + server + " " + world) + .build().submit(plugin, sender); + } + + } else { + group.unsetPermission(node, true); + Message.REMOVE_TEMP_PREFIX_SUCCESS.send(sender, group.getDisplayName(), prefix, priority); LogEntry.build().actor(sender).acted(group) - .action("removetempprefix " + priority + " " + args.get(1) + " " + server + " " + world) + .action("removetempprefix " + priority + " " + args.get(1)) .build().submit(plugin, sender); } - } else { - group.unsetPermission(node, true); - Message.REMOVE_TEMP_PREFIX_SUCCESS.send(sender, group.getDisplayName(), prefix, priority); - LogEntry.build().actor(sender).acted(group) - .action("removetempprefix " + priority + " " + args.get(1)) - .build().submit(plugin, sender); + save(group, sender, plugin); + return CommandResult.SUCCESS; + } catch (ObjectLacksException e) { + Message.DOES_NOT_HAVE_PREFIX.send(sender, group.getDisplayName()); + return CommandResult.STATE_ERROR; } - - save(group, sender, plugin); - return CommandResult.SUCCESS; - } catch (ObjectLacksException e) { - Message.DOES_NOT_HAVE_PREFIX.send(sender, group.getDisplayName()); - return CommandResult.STATE_ERROR; } } } diff --git a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveTempSuffix.java b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveTempSuffix.java index 145bdd499..235ff4371 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveTempSuffix.java +++ b/common/src/main/java/me/lucko/luckperms/commands/group/subcommands/GroupRemoveTempSuffix.java @@ -23,6 +23,7 @@ package me.lucko.luckperms.commands.group.subcommands; import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.commands.*; import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Permission; @@ -31,6 +32,7 @@ import me.lucko.luckperms.exceptions.ObjectLacksException; import me.lucko.luckperms.groups.Group; import me.lucko.luckperms.utils.ArgumentChecker; +import java.util.ArrayList; import java.util.List; public class GroupRemoveTempSuffix extends SubCommand { @@ -57,44 +59,96 @@ public class GroupRemoveTempSuffix extends SubCommand { return CommandResult.INVALID_ARGS; } - final String node = "suffix." + priority + "." + ArgumentChecker.escapeCharacters(suffix); + if (suffix.equalsIgnoreCase("null")) { + String server = null; + String world = null; - try { if (args.size() >= 3) { - final String server = args.get(2).toLowerCase(); + server = args.get(2).toLowerCase(); if (ArgumentChecker.checkServer(server)) { Message.SERVER_INVALID_ENTRY.send(sender); return CommandResult.INVALID_ARGS; } - if (args.size() == 3) { - group.unsetPermission(node, server, true); - Message.REMOVE_TEMP_SUFFIX_SERVER_SUCCESS.send(sender, group.getDisplayName(), suffix, priority, server); - LogEntry.build().actor(sender).acted(group) - .action("removetempsuffix " + priority + " " + args.get(1) + " " + server) - .build().submit(plugin, sender); + if (args.size() != 3) { + world = args.get(3).toLowerCase(); + } + } + + List toRemove = new ArrayList<>(); + for (Node node : group.getNodes()) { + if (!node.isSuffix()) continue; + if (node.getSuffix().getKey() != priority) continue; + if (node.isPermanent()) continue; + + if (node.getServer().isPresent()) { + if (server == null) continue; + if (!node.getServer().get().equalsIgnoreCase(server)) continue; } else { - final String world = args.get(3).toLowerCase(); - group.unsetPermission(node, server, world, true); - Message.REMOVE_TEMP_SUFFIX_SERVER_WORLD_SUCCESS.send(sender, group.getDisplayName(), suffix, priority, server, world); + if (server != null) continue; + } + + if (node.getWorld().isPresent()) { + if (world == null) continue; + if (!node.getWorld().get().equalsIgnoreCase(world)) continue; + } else { + if (world != null) continue; + } + + toRemove.add(node); + } + + toRemove.forEach(n -> { + try { + group.unsetPermission(n); + } catch (ObjectLacksException ignored) {} + }); + + Message.BULK_CHANGE_SUCCESS.send(sender, toRemove.size()); + save(group, sender, plugin); + return CommandResult.SUCCESS; + + } else { + + final String node = "suffix." + priority + "." + ArgumentChecker.escapeCharacters(suffix); + + try { + if (args.size() >= 3) { + final String server = args.get(2).toLowerCase(); + if (ArgumentChecker.checkServer(server)) { + Message.SERVER_INVALID_ENTRY.send(sender); + return CommandResult.INVALID_ARGS; + } + + if (args.size() == 3) { + group.unsetPermission(node, server, true); + Message.REMOVE_TEMP_SUFFIX_SERVER_SUCCESS.send(sender, group.getDisplayName(), suffix, priority, server); + LogEntry.build().actor(sender).acted(group) + .action("removetempsuffix " + priority + " " + args.get(1) + " " + server) + .build().submit(plugin, sender); + } else { + final String world = args.get(3).toLowerCase(); + group.unsetPermission(node, server, world, true); + Message.REMOVE_TEMP_SUFFIX_SERVER_WORLD_SUCCESS.send(sender, group.getDisplayName(), suffix, priority, server, world); + LogEntry.build().actor(sender).acted(group) + .action("removetempsuffix " + priority + " " + args.get(1) + " " + server + " " + world) + .build().submit(plugin, sender); + } + + } else { + group.unsetPermission(node, true); + Message.REMOVE_TEMP_SUFFIX_SUCCESS.send(sender, group.getDisplayName(), suffix, priority); LogEntry.build().actor(sender).acted(group) - .action("removetempsuffix " + priority + " " + args.get(1) + " " + server + " " + world) + .action("removetempsuffix " + priority + " " + args.get(1)) .build().submit(plugin, sender); } - } else { - group.unsetPermission(node, true); - Message.REMOVE_TEMP_SUFFIX_SUCCESS.send(sender, group.getDisplayName(), suffix, priority); - LogEntry.build().actor(sender).acted(group) - .action("removetempsuffix " + priority + " " + args.get(1)) - .build().submit(plugin, sender); + save(group, sender, plugin); + return CommandResult.SUCCESS; + } catch (ObjectLacksException e) { + Message.DOES_NOT_HAVE_SUFFIX.send(sender, group.getDisplayName()); + return CommandResult.STATE_ERROR; } - - save(group, sender, plugin); - return CommandResult.SUCCESS; - } catch (ObjectLacksException e) { - Message.DOES_NOT_HAVE_SUFFIX.send(sender, group.getDisplayName()); - return CommandResult.STATE_ERROR; } } } diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemovePrefix.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemovePrefix.java index ee77eea10..fda7fa3bd 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemovePrefix.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemovePrefix.java @@ -23,6 +23,7 @@ package me.lucko.luckperms.commands.user.subcommands; import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.commands.*; import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Permission; @@ -31,6 +32,7 @@ import me.lucko.luckperms.exceptions.ObjectLacksException; import me.lucko.luckperms.users.User; import me.lucko.luckperms.utils.ArgumentChecker; +import java.util.ArrayList; import java.util.List; public class UserRemovePrefix extends SubCommand { @@ -56,44 +58,96 @@ public class UserRemovePrefix extends SubCommand { return CommandResult.INVALID_ARGS; } - final String node = "prefix." + priority + "." + ArgumentChecker.escapeCharacters(prefix); + if (prefix.equalsIgnoreCase("null")) { + String server = null; + String world = null; - try { if (args.size() >= 3) { - final String server = args.get(2).toLowerCase(); + server = args.get(2).toLowerCase(); if (ArgumentChecker.checkServer(server)) { Message.SERVER_INVALID_ENTRY.send(sender); return CommandResult.INVALID_ARGS; } - if (args.size() == 3) { - user.unsetPermission(node, server); - Message.REMOVEPREFIX_SERVER_SUCCESS.send(sender, user.getName(), prefix, priority, server); - LogEntry.build().actor(sender).acted(user) - .action("removeprefix " + priority + " " + args.get(1) + " " + server) - .build().submit(plugin, sender); + if (args.size() != 3) { + world = args.get(3).toLowerCase(); + } + } + + List toRemove = new ArrayList<>(); + for (Node node : user.getNodes()) { + if (!node.isPrefix()) continue; + if (node.getPrefix().getKey() != priority) continue; + if (node.isTemporary()) continue; + + if (node.getServer().isPresent()) { + if (server == null) continue; + if (!node.getServer().get().equalsIgnoreCase(server)) continue; } else { - final String world = args.get(3).toLowerCase(); - user.unsetPermission(node, server, world); - Message.REMOVEPREFIX_SERVER_WORLD_SUCCESS.send(sender, user.getName(), prefix, priority, server, world); + if (server != null) continue; + } + + if (node.getWorld().isPresent()) { + if (world == null) continue; + if (!node.getWorld().get().equalsIgnoreCase(world)) continue; + } else { + if (world != null) continue; + } + + toRemove.add(node); + } + + toRemove.forEach(n -> { + try { + user.unsetPermission(n); + } catch (ObjectLacksException ignored) {} + }); + + Message.BULK_CHANGE_SUCCESS.send(sender, toRemove.size()); + save(user, sender, plugin); + return CommandResult.SUCCESS; + + } else { + + final String node = "prefix." + priority + "." + ArgumentChecker.escapeCharacters(prefix); + + try { + if (args.size() >= 3) { + final String server = args.get(2).toLowerCase(); + if (ArgumentChecker.checkServer(server)) { + Message.SERVER_INVALID_ENTRY.send(sender); + return CommandResult.INVALID_ARGS; + } + + if (args.size() == 3) { + user.unsetPermission(node, server); + Message.REMOVEPREFIX_SERVER_SUCCESS.send(sender, user.getName(), prefix, priority, server); + LogEntry.build().actor(sender).acted(user) + .action("removeprefix " + priority + " " + args.get(1) + " " + server) + .build().submit(plugin, sender); + } else { + final String world = args.get(3).toLowerCase(); + user.unsetPermission(node, server, world); + Message.REMOVEPREFIX_SERVER_WORLD_SUCCESS.send(sender, user.getName(), prefix, priority, server, world); + LogEntry.build().actor(sender).acted(user) + .action("removeprefix " + priority + " " + args.get(1) + " " + server + " " + world) + .build().submit(plugin, sender); + } + + } else { + user.unsetPermission(node); + Message.REMOVEPREFIX_SUCCESS.send(sender, user.getName(), prefix, priority); LogEntry.build().actor(sender).acted(user) - .action("removeprefix " + priority + " " + args.get(1) + " " + server + " " + world) + .action("removeprefix " + priority + " " + args.get(1)) .build().submit(plugin, sender); } - } else { - user.unsetPermission(node); - Message.REMOVEPREFIX_SUCCESS.send(sender, user.getName(), prefix, priority); - LogEntry.build().actor(sender).acted(user) - .action("removeprefix " + priority + " " + args.get(1)) - .build().submit(plugin, sender); + save(user, sender, plugin); + return CommandResult.SUCCESS; + } catch (ObjectLacksException e) { + Message.DOES_NOT_HAVE_PREFIX.send(sender, user.getName()); + return CommandResult.STATE_ERROR; } - - save(user, sender, plugin); - return CommandResult.SUCCESS; - } catch (ObjectLacksException e) { - Message.DOES_NOT_HAVE_PREFIX.send(sender, user.getName()); - return CommandResult.STATE_ERROR; } } } diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveSuffix.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveSuffix.java index 96fdc8eca..420316a52 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveSuffix.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveSuffix.java @@ -23,6 +23,7 @@ package me.lucko.luckperms.commands.user.subcommands; import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.commands.*; import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Permission; @@ -31,6 +32,7 @@ import me.lucko.luckperms.exceptions.ObjectLacksException; import me.lucko.luckperms.users.User; import me.lucko.luckperms.utils.ArgumentChecker; +import java.util.ArrayList; import java.util.List; public class UserRemoveSuffix extends SubCommand { @@ -56,44 +58,96 @@ public class UserRemoveSuffix extends SubCommand { return CommandResult.INVALID_ARGS; } - final String node = "suffix." + priority + "." + ArgumentChecker.escapeCharacters(suffix); + if (suffix.equalsIgnoreCase("null")) { + String server = null; + String world = null; - try { if (args.size() >= 3) { - final String server = args.get(2).toLowerCase(); + server = args.get(2).toLowerCase(); if (ArgumentChecker.checkServer(server)) { Message.SERVER_INVALID_ENTRY.send(sender); return CommandResult.INVALID_ARGS; } - if (args.size() == 3) { - user.unsetPermission(node, server); - Message.REMOVESUFFIX_SERVER_SUCCESS.send(sender, user.getName(), suffix, priority, server); - LogEntry.build().actor(sender).acted(user) - .action("removesuffix " + priority + " " + args.get(1) + " " + server) - .build().submit(plugin, sender); + if (args.size() != 3) { + world = args.get(3).toLowerCase(); + } + } + + List toRemove = new ArrayList<>(); + for (Node node : user.getNodes()) { + if (!node.isSuffix()) continue; + if (node.getSuffix().getKey() != priority) continue; + if (node.isTemporary()) continue; + + if (node.getServer().isPresent()) { + if (server == null) continue; + if (!node.getServer().get().equalsIgnoreCase(server)) continue; } else { - final String world = args.get(3).toLowerCase(); - user.unsetPermission(node, server, world); - Message.REMOVESUFFIX_SERVER_WORLD_SUCCESS.send(sender, user.getName(), suffix, priority, server, world); + if (server != null) continue; + } + + if (node.getWorld().isPresent()) { + if (world == null) continue; + if (!node.getWorld().get().equalsIgnoreCase(world)) continue; + } else { + if (world != null) continue; + } + + toRemove.add(node); + } + + toRemove.forEach(n -> { + try { + user.unsetPermission(n); + } catch (ObjectLacksException ignored) {} + }); + + Message.BULK_CHANGE_SUCCESS.send(sender, toRemove.size()); + save(user, sender, plugin); + return CommandResult.SUCCESS; + + } else { + + final String node = "suffix." + priority + "." + ArgumentChecker.escapeCharacters(suffix); + + try { + if (args.size() >= 3) { + final String server = args.get(2).toLowerCase(); + if (ArgumentChecker.checkServer(server)) { + Message.SERVER_INVALID_ENTRY.send(sender); + return CommandResult.INVALID_ARGS; + } + + if (args.size() == 3) { + user.unsetPermission(node, server); + Message.REMOVESUFFIX_SERVER_SUCCESS.send(sender, user.getName(), suffix, priority, server); + LogEntry.build().actor(sender).acted(user) + .action("removesuffix " + priority + " " + args.get(1) + " " + server) + .build().submit(plugin, sender); + } else { + final String world = args.get(3).toLowerCase(); + user.unsetPermission(node, server, world); + Message.REMOVESUFFIX_SERVER_WORLD_SUCCESS.send(sender, user.getName(), suffix, priority, server, world); + LogEntry.build().actor(sender).acted(user) + .action("removesuffix " + priority + " " + args.get(1) + " " + server + " " + world) + .build().submit(plugin, sender); + } + + } else { + user.unsetPermission(node); + Message.REMOVESUFFIX_SUCCESS.send(sender, user.getName(), suffix, priority); LogEntry.build().actor(sender).acted(user) - .action("removesuffix " + priority + " " + args.get(1) + " " + server + " " + world) + .action("removesuffix " + priority + " " + args.get(1)) .build().submit(plugin, sender); } - } else { - user.unsetPermission(node); - Message.REMOVESUFFIX_SUCCESS.send(sender, user.getName(), suffix, priority); - LogEntry.build().actor(sender).acted(user) - .action("removesuffix " + priority + " " + args.get(1)) - .build().submit(plugin, sender); + save(user, sender, plugin); + return CommandResult.SUCCESS; + } catch (ObjectLacksException e) { + Message.DOES_NOT_HAVE_SUFFIX.send(sender, user.getName()); + return CommandResult.STATE_ERROR; } - - save(user, sender, plugin); - return CommandResult.SUCCESS; - } catch (ObjectLacksException e) { - Message.DOES_NOT_HAVE_SUFFIX.send(sender, user.getName()); - return CommandResult.STATE_ERROR; } } } diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveTempPrefix.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveTempPrefix.java index 4d2f6f13c..733b766aa 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveTempPrefix.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveTempPrefix.java @@ -23,6 +23,7 @@ package me.lucko.luckperms.commands.user.subcommands; import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.commands.*; import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Permission; @@ -31,6 +32,7 @@ import me.lucko.luckperms.exceptions.ObjectLacksException; import me.lucko.luckperms.users.User; import me.lucko.luckperms.utils.ArgumentChecker; +import java.util.ArrayList; import java.util.List; public class UserRemoveTempPrefix extends SubCommand { @@ -57,44 +59,96 @@ public class UserRemoveTempPrefix extends SubCommand { return CommandResult.INVALID_ARGS; } - final String node = "prefix." + priority + "." + ArgumentChecker.escapeCharacters(prefix); + if (prefix.equalsIgnoreCase("null")) { + String server = null; + String world = null; - try { if (args.size() >= 3) { - final String server = args.get(2).toLowerCase(); + server = args.get(2).toLowerCase(); if (ArgumentChecker.checkServer(server)) { Message.SERVER_INVALID_ENTRY.send(sender); return CommandResult.INVALID_ARGS; } - if (args.size() == 3) { - user.unsetPermission(node, server, true); - Message.REMOVE_TEMP_PREFIX_SERVER_SUCCESS.send(sender, user.getName(), prefix, priority, server); - LogEntry.build().actor(sender).acted(user) - .action("removetempprefix " + priority + " " + args.get(1) + " " + server) - .build().submit(plugin, sender); + if (args.size() != 3) { + world = args.get(3).toLowerCase(); + } + } + + List toRemove = new ArrayList<>(); + for (Node node : user.getNodes()) { + if (!node.isPrefix()) continue; + if (node.getPrefix().getKey() != priority) continue; + if (node.isPermanent()) continue; + + if (node.getServer().isPresent()) { + if (server == null) continue; + if (!node.getServer().get().equalsIgnoreCase(server)) continue; } else { - final String world = args.get(3).toLowerCase(); - user.unsetPermission(node, server, world, true); - Message.REMOVE_TEMP_PREFIX_SERVER_WORLD_SUCCESS.send(sender, user.getName(), prefix, priority, server, world); + if (server != null) continue; + } + + if (node.getWorld().isPresent()) { + if (world == null) continue; + if (!node.getWorld().get().equalsIgnoreCase(world)) continue; + } else { + if (world != null) continue; + } + + toRemove.add(node); + } + + toRemove.forEach(n -> { + try { + user.unsetPermission(n); + } catch (ObjectLacksException ignored) {} + }); + + Message.BULK_CHANGE_SUCCESS.send(sender, toRemove.size()); + save(user, sender, plugin); + return CommandResult.SUCCESS; + + } else { + + final String node = "prefix." + priority + "." + ArgumentChecker.escapeCharacters(prefix); + + try { + if (args.size() >= 3) { + final String server = args.get(2).toLowerCase(); + if (ArgumentChecker.checkServer(server)) { + Message.SERVER_INVALID_ENTRY.send(sender); + return CommandResult.INVALID_ARGS; + } + + if (args.size() == 3) { + user.unsetPermission(node, server, true); + Message.REMOVE_TEMP_PREFIX_SERVER_SUCCESS.send(sender, user.getName(), prefix, priority, server); + LogEntry.build().actor(sender).acted(user) + .action("removetempprefix " + priority + " " + args.get(1) + " " + server) + .build().submit(plugin, sender); + } else { + final String world = args.get(3).toLowerCase(); + user.unsetPermission(node, server, world, true); + Message.REMOVE_TEMP_PREFIX_SERVER_WORLD_SUCCESS.send(sender, user.getName(), prefix, priority, server, world); + LogEntry.build().actor(sender).acted(user) + .action("removetempprefix " + priority + " " + args.get(1) + " " + server + " " + world) + .build().submit(plugin, sender); + } + + } else { + user.unsetPermission(node, true); + Message.REMOVE_TEMP_PREFIX_SUCCESS.send(sender, user.getName(), prefix, priority); LogEntry.build().actor(sender).acted(user) - .action("removetempprefix " + priority + " " + args.get(1) + " " + server + " " + world) + .action("removetempprefix " + priority + " " + args.get(1)) .build().submit(plugin, sender); } - } else { - user.unsetPermission(node, true); - Message.REMOVE_TEMP_PREFIX_SUCCESS.send(sender, user.getName(), prefix, priority); - LogEntry.build().actor(sender).acted(user) - .action("removetempprefix " + priority + " " + args.get(1)) - .build().submit(plugin, sender); + save(user, sender, plugin); + return CommandResult.SUCCESS; + } catch (ObjectLacksException e) { + Message.DOES_NOT_HAVE_PREFIX.send(sender, user.getName()); + return CommandResult.STATE_ERROR; } - - save(user, sender, plugin); - return CommandResult.SUCCESS; - } catch (ObjectLacksException e) { - Message.DOES_NOT_HAVE_PREFIX.send(sender, user.getName()); - return CommandResult.STATE_ERROR; } } } diff --git a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveTempSuffix.java b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveTempSuffix.java index cdb2e2ebb..2ed753a84 100644 --- a/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveTempSuffix.java +++ b/common/src/main/java/me/lucko/luckperms/commands/user/subcommands/UserRemoveTempSuffix.java @@ -23,6 +23,7 @@ package me.lucko.luckperms.commands.user.subcommands; import me.lucko.luckperms.LuckPermsPlugin; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.commands.*; import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Permission; @@ -31,6 +32,7 @@ import me.lucko.luckperms.exceptions.ObjectLacksException; import me.lucko.luckperms.users.User; import me.lucko.luckperms.utils.ArgumentChecker; +import java.util.ArrayList; import java.util.List; public class UserRemoveTempSuffix extends SubCommand { @@ -57,44 +59,96 @@ public class UserRemoveTempSuffix extends SubCommand { return CommandResult.INVALID_ARGS; } - final String node = "suffix." + priority + "." + ArgumentChecker.escapeCharacters(suffix); + if (suffix.equalsIgnoreCase("null")) { + String server = null; + String world = null; - try { if (args.size() >= 3) { - final String server = args.get(2).toLowerCase(); + server = args.get(2).toLowerCase(); if (ArgumentChecker.checkServer(server)) { Message.SERVER_INVALID_ENTRY.send(sender); return CommandResult.INVALID_ARGS; } - if (args.size() == 3) { - user.unsetPermission(node, server, true); - Message.REMOVE_TEMP_SUFFIX_SERVER_SUCCESS.send(sender, user.getName(), suffix, priority, server); - LogEntry.build().actor(sender).acted(user) - .action("removetempsuffix " + priority + " " + args.get(1) + " " + server) - .build().submit(plugin, sender); + if (args.size() != 3) { + world = args.get(3).toLowerCase(); + } + } + + List toRemove = new ArrayList<>(); + for (Node node : user.getNodes()) { + if (!node.isSuffix()) continue; + if (node.getSuffix().getKey() != priority) continue; + if (node.isPermanent()) continue; + + if (node.getServer().isPresent()) { + if (server == null) continue; + if (!node.getServer().get().equalsIgnoreCase(server)) continue; } else { - final String world = args.get(3).toLowerCase(); - user.unsetPermission(node, server, world, true); - Message.REMOVE_TEMP_SUFFIX_SERVER_WORLD_SUCCESS.send(sender, user.getName(), suffix, priority, server, world); + if (server != null) continue; + } + + if (node.getWorld().isPresent()) { + if (world == null) continue; + if (!node.getWorld().get().equalsIgnoreCase(world)) continue; + } else { + if (world != null) continue; + } + + toRemove.add(node); + } + + toRemove.forEach(n -> { + try { + user.unsetPermission(n); + } catch (ObjectLacksException ignored) {} + }); + + Message.BULK_CHANGE_SUCCESS.send(sender, toRemove.size()); + save(user, sender, plugin); + return CommandResult.SUCCESS; + + } else { + + final String node = "suffix." + priority + "." + ArgumentChecker.escapeCharacters(suffix); + + try { + if (args.size() >= 3) { + final String server = args.get(2).toLowerCase(); + if (ArgumentChecker.checkServer(server)) { + Message.SERVER_INVALID_ENTRY.send(sender); + return CommandResult.INVALID_ARGS; + } + + if (args.size() == 3) { + user.unsetPermission(node, server, true); + Message.REMOVE_TEMP_SUFFIX_SERVER_SUCCESS.send(sender, user.getName(), suffix, priority, server); + LogEntry.build().actor(sender).acted(user) + .action("removetempsuffix " + priority + " " + args.get(1) + " " + server) + .build().submit(plugin, sender); + } else { + final String world = args.get(3).toLowerCase(); + user.unsetPermission(node, server, world, true); + Message.REMOVE_TEMP_SUFFIX_SERVER_WORLD_SUCCESS.send(sender, user.getName(), suffix, priority, server, world); + LogEntry.build().actor(sender).acted(user) + .action("removetempsuffix " + priority + " " + args.get(1) + " " + server + " " + world) + .build().submit(plugin, sender); + } + + } else { + user.unsetPermission(node, true); + Message.REMOVE_TEMP_SUFFIX_SUCCESS.send(sender, user.getName(), suffix, priority); LogEntry.build().actor(sender).acted(user) - .action("removetempsuffix " + priority + " " + args.get(1) + " " + server + " " + world) + .action("removetempsuffix " + priority + " " + args.get(1)) .build().submit(plugin, sender); } - } else { - user.unsetPermission(node, true); - Message.REMOVE_TEMP_SUFFIX_SUCCESS.send(sender, user.getName(), suffix, priority); - LogEntry.build().actor(sender).acted(user) - .action("removetempsuffix " + priority + " " + args.get(1)) - .build().submit(plugin, sender); + save(user, sender, plugin); + return CommandResult.SUCCESS; + } catch (ObjectLacksException e) { + Message.DOES_NOT_HAVE_SUFFIX.send(sender, user.getName()); + return CommandResult.STATE_ERROR; } - - save(user, sender, plugin); - return CommandResult.SUCCESS; - } catch (ObjectLacksException e) { - Message.DOES_NOT_HAVE_SUFFIX.send(sender, user.getName()); - return CommandResult.STATE_ERROR; } } }