From 6f5a8e1cd8ba2bc027997eb2dbf45f7467fff7a7 Mon Sep 17 00:00:00 2001 From: Dominik <43303963+0ptk@users.noreply.github.com> Date: Mon, 11 May 2026 21:17:53 +0100 Subject: [PATCH] Add context argument to group listmembers command (#4252) --- bukkit/src/main/resources/luckperms.commodore | 4 +++- .../common/command/spec/CommandSpec.java | 3 ++- .../commands/group/GroupListMembers.java | 18 ++++++++++++++++-- .../src/main/resources/luckperms_en.properties | 1 + 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/bukkit/src/main/resources/luckperms.commodore b/bukkit/src/main/resources/luckperms.commodore index 9d9455bba..15b030924 100644 --- a/bukkit/src/main/resources/luckperms.commodore +++ b/bukkit/src/main/resources/luckperms.commodore @@ -543,7 +543,9 @@ luckperms { editor; listmembers { - page brigadier:integer; + page brigadier:integer { + context brigadier:string greedy_phrase; + } } setweight { weight brigadier:integer; diff --git a/common/src/main/java/me/lucko/luckperms/common/command/spec/CommandSpec.java b/common/src/main/java/me/lucko/luckperms/common/command/spec/CommandSpec.java index cc5050321..ecebaed73 100644 --- a/common/src/main/java/me/lucko/luckperms/common/command/spec/CommandSpec.java +++ b/common/src/main/java/me/lucko/luckperms/common/command/spec/CommandSpec.java @@ -132,7 +132,8 @@ public enum CommandSpec { GROUP_INFO, GROUP_LISTMEMBERS( - arg("page", false) + arg("page", false), + arg("context...", false) ), GROUP_SETWEIGHT( arg("weight", true) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupListMembers.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupListMembers.java index 6646dfe54..1cc50ddac 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupListMembers.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupListMembers.java @@ -28,9 +28,12 @@ package me.lucko.luckperms.common.commands.group; import com.google.common.collect.Maps; import me.lucko.luckperms.common.cache.LoadingMap; import me.lucko.luckperms.common.command.abstraction.ChildCommand; +import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; import me.lucko.luckperms.common.command.spec.CommandSpec; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentList; import me.lucko.luckperms.common.locale.Message; import me.lucko.luckperms.common.model.Group; @@ -46,6 +49,7 @@ import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.storage.misc.NodeEntry; import me.lucko.luckperms.common.util.Iterators; import me.lucko.luckperms.common.util.Predicates; +import net.luckperms.api.context.ImmutableContextSet; import net.luckperms.api.node.types.InheritanceNode; import java.util.ArrayList; @@ -57,11 +61,11 @@ import java.util.stream.Collectors; public class GroupListMembers extends ChildCommand { public GroupListMembers() { - super(CommandSpec.GROUP_LISTMEMBERS, "listmembers", CommandPermission.GROUP_LIST_MEMBERS, Predicates.notInRange(0, 1)); + super(CommandSpec.GROUP_LISTMEMBERS, "listmembers", CommandPermission.GROUP_LIST_MEMBERS, Predicates.notInRange(0, 2)); } @Override - public void execute(LuckPermsPlugin plugin, Sender sender, Group target, ArgumentList args, String label) { + public void execute(LuckPermsPlugin plugin, Sender sender, Group target, ArgumentList args, String label) throws CommandException { if (ArgumentPermissions.checkViewPerms(plugin, sender, getPermission().get(), target)) { Message.COMMAND_NO_PERMISSION.send(sender); return; @@ -70,11 +74,13 @@ public class GroupListMembers extends ChildCommand { InheritanceNode node = Inheritance.builder(target.getName()).build(); ConstraintNodeMatcher matcher = StandardNodeMatchers.key(node); int page = args.getIntOrDefault(0, 1); + ImmutableContextSet context = args.getContextOrEmpty(1); Message.SEARCH_SEARCHING_MEMBERS.send(sender, target.getName()); List> matchedUsers = plugin.getStorage().searchUserNodes(matcher).join().stream() .filter(n -> n.getNode().getValue()) + .filter(n -> context.isEmpty() || n.getNode().getContexts().isSatisfiedBy(context)) .collect(Collectors.toList()); // special handling for default group @@ -92,6 +98,7 @@ public class GroupListMembers extends ChildCommand { List> matchedGroups = plugin.getStorage().searchGroupNodes(matcher).join().stream() .filter(n -> n.getNode().getValue()) + .filter(n -> context.isEmpty() || n.getNode().getContexts().isSatisfiedBy(context)) .collect(Collectors.toList()); int users = matchedUsers.size(); @@ -134,4 +141,11 @@ public class GroupListMembers extends ChildCommand { Message.SEARCH_INHERITS_NODE_ENTRY.send(sender, ent.getValue().getNode(), ent.getKey(), holderType, label, sender.getPlugin()); } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, ArgumentList args) { + return TabCompleter.create() + .from(1, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/resources/luckperms_en.properties b/common/src/main/resources/luckperms_en.properties index bc5117f7b..1928366e3 100644 --- a/common/src/main/resources/luckperms_en.properties +++ b/common/src/main/resources/luckperms_en.properties @@ -463,6 +463,7 @@ luckperms.usage.user-clone.argument.user=the name/uuid of the user to clone onto luckperms.usage.group-info.description=Gives info about the group luckperms.usage.group-listmembers.description=Show the users/groups who inherit from this group luckperms.usage.group-listmembers.argument.page=the page to view +luckperms.usage.group-listmembers.argument.context=the context to filter members by luckperms.usage.group-setweight.description=Set the groups weight luckperms.usage.group-setweight.argument.weight=the weight to set luckperms.usage.group-set-display-name.description=Set the groups display name