From f0e42c6db688abd00c32b2f961c773db1859f6fe Mon Sep 17 00:00:00 2001 From: Luck Date: Wed, 4 Sep 2019 22:08:24 +0100 Subject: [PATCH] Allow context calculators to define "potential contexts", and use these for tab completions --- .../api/context/ContextCalculator.java | 13 ++++++ .../bukkit/context/WorldCalculator.java | 20 ++++++++-- .../context/BackendServerCalculator.java | 20 ++++++++-- .../bungee/context/RedisBungeeCalculator.java | 16 ++++++++ .../command/tabcomplete/TabCompletions.java | 40 ++++++++++++++----- .../generic/meta/MetaAddChatMeta.java | 9 +++++ .../generic/meta/MetaAddTempChatMeta.java | 9 +++++ .../commands/generic/meta/MetaClear.java | 9 +++++ .../generic/meta/MetaRemoveChatMeta.java | 9 +++++ .../generic/meta/MetaRemoveTempChatMeta.java | 9 +++++ .../common/commands/generic/meta/MetaSet.java | 9 +++++ .../generic/meta/MetaSetChatMeta.java | 9 +++++ .../commands/generic/meta/MetaSetTemp.java | 9 +++++ .../generic/meta/MetaSetTempChatMeta.java | 9 +++++ .../commands/generic/meta/MetaUnset.java | 9 +++++ .../commands/generic/meta/MetaUnsetTemp.java | 9 +++++ .../commands/generic/other/HolderClear.java | 9 +++++ .../commands/generic/parent/ParentAdd.java | 1 + .../generic/parent/ParentAddTemp.java | 1 + .../commands/generic/parent/ParentClear.java | 9 +++++ .../generic/parent/ParentClearTrack.java | 1 + .../commands/generic/parent/ParentRemove.java | 1 + .../generic/parent/ParentRemoveTemp.java | 1 + .../commands/generic/parent/ParentSet.java | 1 + .../generic/parent/ParentSetTrack.java | 1 + .../generic/permission/PermissionCheck.java | 1 + .../permission/PermissionCheckInherits.java | 1 + .../generic/permission/PermissionClear.java | 9 +++++ .../generic/permission/PermissionSet.java | 1 + .../generic/permission/PermissionSetTemp.java | 1 + .../generic/permission/PermissionUnset.java | 1 + .../permission/PermissionUnsetTemp.java | 1 + .../commands/group/GroupSetDisplayName.java | 9 +++++ .../common/commands/user/UserDemote.java | 1 + .../common/commands/user/UserPromote.java | 1 + .../common/context/ContextManager.java | 8 ++++ .../context/LPStaticContextsCalculator.java | 8 ++++ .../lucko/luckperms/common/web/WebEditor.java | 6 ++- .../nukkit/context/WorldCalculator.java | 20 ++++++++-- .../sponge/context/WorldCalculator.java | 26 ++++++++++-- .../context/BackendServerCalculator.java | 20 ++++++++-- 41 files changed, 321 insertions(+), 26 deletions(-) diff --git a/api/src/main/java/net/luckperms/api/context/ContextCalculator.java b/api/src/main/java/net/luckperms/api/context/ContextCalculator.java index a923b7447..d4d6e0bfa 100644 --- a/api/src/main/java/net/luckperms/api/context/ContextCalculator.java +++ b/api/src/main/java/net/luckperms/api/context/ContextCalculator.java @@ -94,4 +94,17 @@ public interface ContextCalculator { */ void calculate(@NonNull T target, @NonNull ContextConsumer consumer); + /** + * Gets a {@link ContextSet}, containing some/all of the contexts this + * calculator could potentially submit. + * + *

The result of this call is primarily intended on providing + * suggestions to end users when defining permissions.

+ * + * @return a set of potential contexts + */ + default ContextSet estimatePotentialContexts() { + return ImmutableContextSet.empty(); + } + } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/context/WorldCalculator.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/context/WorldCalculator.java index d62ffef84..c3ce17e6b 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/context/WorldCalculator.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/context/WorldCalculator.java @@ -25,23 +25,27 @@ package me.lucko.luckperms.bukkit.context; +import me.lucko.luckperms.bukkit.LPBukkitPlugin; import me.lucko.luckperms.common.config.ConfigKeys; -import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.luckperms.api.context.ContextCalculator; import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.DefaultContextKeys; +import net.luckperms.api.context.ImmutableContextSet; +import org.bukkit.World; import org.bukkit.entity.Player; import org.checkerframework.checker.nullness.qual.NonNull; import java.util.HashSet; +import java.util.List; import java.util.Set; public class WorldCalculator implements ContextCalculator { - private final LuckPermsPlugin plugin; + private final LPBukkitPlugin plugin; - public WorldCalculator(LuckPermsPlugin plugin) { + public WorldCalculator(LPBukkitPlugin plugin) { this.plugin = plugin; } @@ -54,4 +58,14 @@ public class WorldCalculator implements ContextCalculator { world = this.plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(world, world).toLowerCase(); } } + + @Override + public ContextSet estimatePotentialContexts() { + List worlds = this.plugin.getBootstrap().getServer().getWorlds(); + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (World world : worlds) { + builder.add(DefaultContextKeys.WORLD_KEY, world.getName().toLowerCase()); + } + return builder.build(); + } } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/context/BackendServerCalculator.java b/bungee/src/main/java/me/lucko/luckperms/bungee/context/BackendServerCalculator.java index 87ffc76f4..9503a71e0 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/context/BackendServerCalculator.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/context/BackendServerCalculator.java @@ -25,16 +25,20 @@ package me.lucko.luckperms.bungee.context; +import me.lucko.luckperms.bungee.LPBungeePlugin; import me.lucko.luckperms.common.config.ConfigKeys; -import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.luckperms.api.context.ContextCalculator; import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.DefaultContextKeys; +import net.luckperms.api.context.ImmutableContextSet; +import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import org.checkerframework.checker.nullness.qual.NonNull; +import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -44,9 +48,9 @@ public class BackendServerCalculator implements ContextCalculator return player.getServer() == null ? null : (player.getServer().getInfo() == null ? null : player.getServer().getInfo().getName().toLowerCase()); } - private final LuckPermsPlugin plugin; + private final LPBungeePlugin plugin; - public BackendServerCalculator(LuckPermsPlugin plugin) { + public BackendServerCalculator(LPBungeePlugin plugin) { this.plugin = plugin; } @@ -59,4 +63,14 @@ public class BackendServerCalculator implements ContextCalculator server = this.plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(server, server).toLowerCase(); } } + + @Override + public ContextSet estimatePotentialContexts() { + Collection servers = this.plugin.getBootstrap().getProxy().getServers().values(); + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (ServerInfo server : servers) { + builder.add(DefaultContextKeys.WORLD_KEY, server.getName().toLowerCase()); + } + return builder.build(); + } } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/context/RedisBungeeCalculator.java b/bungee/src/main/java/me/lucko/luckperms/bungee/context/RedisBungeeCalculator.java index a41a55774..c97b828c7 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/context/RedisBungeeCalculator.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/context/RedisBungeeCalculator.java @@ -29,6 +29,8 @@ import com.imaginarycode.minecraft.redisbungee.RedisBungee; import com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI; import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; +import net.luckperms.api.context.ImmutableContextSet; import net.luckperms.api.context.StaticContextCalculator; import org.checkerframework.checker.nullness.qual.NonNull; @@ -43,4 +45,18 @@ public class RedisBungeeCalculator implements StaticContextCalculator { consumer.accept(PROXY_KEY, redisBungee.getServerId()); } } + + @Override + public ContextSet estimatePotentialContexts() { + RedisBungeeAPI redisBungee = RedisBungee.getApi(); + if (redisBungee == null) { + return ImmutableContextSet.empty(); + } + + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (String server : redisBungee.getAllServers()) { + builder.add(PROXY_KEY, server); + } + return builder.build(); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/command/tabcomplete/TabCompletions.java b/common/src/main/java/me/lucko/luckperms/common/command/tabcomplete/TabCompletions.java index 472fa95b1..7acea9b13 100644 --- a/common/src/main/java/me/lucko/luckperms/common/command/tabcomplete/TabCompletions.java +++ b/common/src/main/java/me/lucko/luckperms/common/command/tabcomplete/TabCompletions.java @@ -31,10 +31,12 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.treeview.PermissionRegistry; import me.lucko.luckperms.common.treeview.TreeNode; +import net.luckperms.api.context.ImmutableContextSet; + import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -47,6 +49,7 @@ public final class TabCompletions { private final CompletionSupplier groups; private final CompletionSupplier tracks; private final CompletionSupplier permissions; + private final CompletionSupplier contexts; public TabCompletions(LuckPermsPlugin plugin) { this.groups = CompletionSupplier.startsWith(() -> plugin.getGroupManager().getAll().keySet()); @@ -54,13 +57,6 @@ public final class TabCompletions { this.permissions = partial -> { PermissionRegistry cache = plugin.getPermissionRegistry(); - if (partial.isEmpty()) { - return cache.getRootNode().getChildren() - .map(Map::keySet) - .>map(ArrayList::new) - .orElse(Collections.emptyList()); - } - String start = partial.toLowerCase(); List parts = new ArrayList<>(Splitter.on('.').splitToList(start)); TreeNode root = cache.getRootNode(); @@ -70,7 +66,7 @@ public final class TabCompletions { return Collections.emptyList(); } - return root.getChildren().get().keySet().stream().filter(TabCompleter.startsWithIgnoreCase(start)).collect(Collectors.toList()); + return CompletionSupplier.startsWith(root.getChildren().get().keySet()).supplyCompletions(start); } String incomplete = parts.remove(parts.size() - 1); @@ -97,6 +93,28 @@ public final class TabCompletions { .map(s -> String.join(".", parts) + "." + s) .collect(Collectors.toList()); }; + this.contexts = partial -> { + ImmutableContextSet potentialContexts = plugin.getContextManager().getPotentialContexts(); + + int index = partial.indexOf('='); + if (index == -1) { + // cursor is specifying the key + return CompletionSupplier.startsWith(potentialContexts.toMap().keySet()).supplyCompletions(partial); + } + + // cursor is specifying the value + String key = partial.substring(0, index); + if (key.equals("") || key.trim().isEmpty()) { + return Collections.emptyList(); + } + + String value = partial.substring(index + 1).trim(); + Set potentialValues = potentialContexts.getValues(key); + return potentialValues.stream() + .filter(TabCompleter.startsWithIgnoreCase(value)) + .map(s -> key + "=" + s) + .collect(Collectors.toList()); + }; } // bit of a weird pattern, but meh it kinda works, reduces the boilerplate @@ -118,4 +136,8 @@ public final class TabCompletions { return plugin.getCommandManager().getTabCompletions().permissions; } + public static CompletionSupplier contexts(LuckPermsPlugin plugin) { + return plugin.getCommandManager().getTabCompletions().contexts; + } + } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java index c720da870..322b22684 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -106,4 +108,11 @@ public class MetaAddChatMeta extends SharedSubCommand { return CommandResult.STATE_ERROR; } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(2, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java index a2ae6bb22..fe49b8ca3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -115,4 +117,11 @@ public class MetaAddTempChatMeta extends SharedSubCommand { return CommandResult.STATE_ERROR; } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(3, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java index 1009c3c81..ee6dcd8b4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -118,4 +120,11 @@ public class MetaClear extends SharedSubCommand { StorageAssistant.save(holder, sender, plugin); return CommandResult.SUCCESS; } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(0, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java index 455b7e318..a43dd7ca3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -123,4 +125,11 @@ public class MetaRemoveChatMeta extends SharedSubCommand { return CommandResult.STATE_ERROR; } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(2, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java index 512482063..e34c59ad2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -123,4 +125,11 @@ public class MetaRemoveTempChatMeta extends SharedSubCommand { return CommandResult.STATE_ERROR; } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(2, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java index 359847dd6..4300a9648 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -102,4 +104,11 @@ public class MetaSet extends SharedSubCommand { StorageAssistant.save(holder, sender, plugin); return CommandResult.SUCCESS; } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(2, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java index 0b38d4079..150520474 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java @@ -32,6 +32,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -142,4 +144,11 @@ public class MetaSetChatMeta extends SharedSubCommand { return CommandResult.STATE_ERROR; } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(1, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java index 5598a7e83..25983738e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -107,4 +109,11 @@ public class MetaSetTemp extends SharedSubCommand { StorageAssistant.save(holder, sender, plugin); return CommandResult.SUCCESS; } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(3, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java index 73c46e28d..ed6125e90 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java @@ -32,6 +32,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -155,4 +157,11 @@ public class MetaSetTempChatMeta extends SharedSubCommand { return CommandResult.STATE_ERROR; } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(2, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java index 9907c727a..e2bbc4abb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -84,4 +86,11 @@ public class MetaUnset extends SharedSubCommand { return CommandResult.STATE_ERROR; } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(1, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java index 9041a3ebb..c884a097a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -84,4 +86,11 @@ public class MetaUnsetTemp extends SharedSubCommand { return CommandResult.STATE_ERROR; } } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(1, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java index 22379b7f0..45ccc24de 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -89,4 +91,11 @@ public class HolderClear extends SubCommand { StorageAssistant.save(holder, sender, plugin); return CommandResult.SUCCESS; } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(0, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java index 9f0b765f4..a9dd2a95e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java @@ -101,6 +101,7 @@ public class ParentAdd extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.groups(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java index 1529ba6ec..5446553be 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java @@ -113,6 +113,7 @@ public class ParentAddTemp extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.groups(plugin)) + .from(2, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java index e134523c0..05532e42a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -87,4 +89,11 @@ public class ParentClear extends SharedSubCommand { StorageAssistant.save(holder, sender, plugin); return CommandResult.SUCCESS; } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(0, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java index 510ca8efe..908b026ea 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java @@ -123,6 +123,7 @@ public class ParentClearTrack extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.tracks(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java index 08dffbeea..eb91cfbbb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java @@ -116,6 +116,7 @@ public class ParentRemove extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.groups(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java index 2303d7f8b..9d88eb0b7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java @@ -95,6 +95,7 @@ public class ParentRemoveTemp extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.groups(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java index 660eb3ae8..1b1657fb0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java @@ -101,6 +101,7 @@ public class ParentSet extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.groups(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java index d63756cf3..2fc5ab72c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java @@ -132,6 +132,7 @@ public class ParentSetTrack extends SharedSubCommand { return TabCompleter.create() .at(0, TabCompletions.tracks(plugin)) .at(1, TabCompletions.groups(plugin)) + .from(2, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java index cc28ddbc1..c4f77d1ad 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java @@ -76,6 +76,7 @@ public class PermissionCheck extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.permissions(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheckInherits.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheckInherits.java index d8a50f199..e95f97caf 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheckInherits.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheckInherits.java @@ -80,6 +80,7 @@ public class PermissionCheckInherits extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.permissions(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java index 2627234b7..8459ea68d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -90,4 +92,11 @@ public class PermissionClear extends SharedSubCommand { StorageAssistant.save(holder, sender, plugin); return CommandResult.SUCCESS; } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(0, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java index 38aa75d90..15df0f052 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java @@ -107,6 +107,7 @@ public class PermissionSet extends SharedSubCommand { return TabCompleter.create() .at(0, TabCompletions.permissions(plugin)) .at(1, TabCompletions.booleans()) + .from(2, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java index badeb93dc..9cb1d362e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java @@ -114,6 +114,7 @@ public class PermissionSetTemp extends SharedSubCommand { return TabCompleter.create() .at(0, TabCompletions.permissions(plugin)) .at(1, TabCompletions.booleans()) + .from(3, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java index fc9db9483..4d13e1a58 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java @@ -105,6 +105,7 @@ public class PermissionUnset extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.permissions(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java index 9e654d66c..1bb667a11 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java @@ -105,6 +105,7 @@ public class PermissionUnsetTemp extends SharedSubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.permissions(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java index af12c70c1..72b2a3525 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.common.command.abstraction.CommandException; import me.lucko.luckperms.common.command.abstraction.SubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; import me.lucko.luckperms.common.command.access.CommandPermission; +import me.lucko.luckperms.common.command.tabcomplete.TabCompleter; +import me.lucko.luckperms.common.command.tabcomplete.TabCompletions; import me.lucko.luckperms.common.command.utils.ArgumentParser; import me.lucko.luckperms.common.command.utils.MessageUtils; import me.lucko.luckperms.common.command.utils.StorageAssistant; @@ -106,4 +108,11 @@ public class GroupSetDisplayName extends SubCommand { StorageAssistant.save(group, sender, plugin); return CommandResult.SUCCESS; } + + @Override + public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { + return TabCompleter.create() + .from(1, TabCompletions.contexts(plugin)) + .complete(args); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java index ddb1c5b2c..30290b193 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java @@ -151,6 +151,7 @@ public class UserDemote extends SubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.tracks(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java index 8be0f80ad..df8186837 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java @@ -151,6 +151,7 @@ public class UserPromote extends SubCommand { public List tabComplete(LuckPermsPlugin plugin, Sender sender, List args) { return TabCompleter.create() .at(0, TabCompletions.tracks(plugin)) + .from(1, TabCompletions.contexts(plugin)) .complete(args); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java b/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java index 50b2c188b..9d8c7fd7f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java @@ -72,6 +72,14 @@ public abstract class ContextManager { return ImmutableList.copyOf(this.staticCalculators); } + public ImmutableContextSet getPotentialContexts() { + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (ContextCalculator calculator : this.calculators) { + builder.addAll(calculator.estimatePotentialContexts()); + } + return builder.build(); + } + public Class getSubjectClass() { return this.subjectClass; } diff --git a/common/src/main/java/me/lucko/luckperms/common/context/LPStaticContextsCalculator.java b/common/src/main/java/me/lucko/luckperms/common/context/LPStaticContextsCalculator.java index d314e7097..47018b282 100644 --- a/common/src/main/java/me/lucko/luckperms/common/context/LPStaticContextsCalculator.java +++ b/common/src/main/java/me/lucko/luckperms/common/context/LPStaticContextsCalculator.java @@ -29,7 +29,9 @@ import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.config.LuckPermsConfiguration; import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.DefaultContextKeys; +import net.luckperms.api.context.ImmutableContextSet; import net.luckperms.api.context.StaticContextCalculator; import org.checkerframework.checker.nullness.qual.NonNull; @@ -50,4 +52,10 @@ public class LPStaticContextsCalculator implements StaticContextCalculator { consumer.accept(this.config.getContextsFile().getStaticContexts()); } + @Override + public ContextSet estimatePotentialContexts() { + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + calculate(builder::add); + return builder.build(); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/web/WebEditor.java b/common/src/main/java/me/lucko/luckperms/common/web/WebEditor.java index 4f7a7e8fc..6ffa6d26d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/web/WebEditor.java +++ b/common/src/main/java/me/lucko/luckperms/common/web/WebEditor.java @@ -113,7 +113,11 @@ public final class WebEditor { arr.add(perm); } }) - ).toJson(); + ) + .consume(o -> { + o.add("potentialContexts", ContextSetJsonSerializer.serializeContextSet(plugin.getContextManager().getPotentialContexts())); + }) + .toJson(); } public static JsonObject readDataFromBytebin(BytebinClient bytebin, String id) { diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/context/WorldCalculator.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/context/WorldCalculator.java index f130d06f3..18c0b4593 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/context/WorldCalculator.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/context/WorldCalculator.java @@ -26,23 +26,27 @@ package me.lucko.luckperms.nukkit.context; import me.lucko.luckperms.common.config.ConfigKeys; -import me.lucko.luckperms.common.plugin.LuckPermsPlugin; +import me.lucko.luckperms.nukkit.LPNukkitPlugin; import net.luckperms.api.context.ContextCalculator; import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.DefaultContextKeys; +import net.luckperms.api.context.ImmutableContextSet; import org.checkerframework.checker.nullness.qual.NonNull; import cn.nukkit.Player; +import cn.nukkit.level.Level; +import java.util.Collection; import java.util.HashSet; import java.util.Set; public class WorldCalculator implements ContextCalculator { - private final LuckPermsPlugin plugin; + private final LPNukkitPlugin plugin; - public WorldCalculator(LuckPermsPlugin plugin) { + public WorldCalculator(LPNukkitPlugin plugin) { this.plugin = plugin; } @@ -55,4 +59,14 @@ public class WorldCalculator implements ContextCalculator { world = this.plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(world, world).toLowerCase(); } } + + @Override + public ContextSet estimatePotentialContexts() { + Collection worlds = this.plugin.getBootstrap().getServer().getLevels().values(); + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (Level world : worlds) { + builder.add(DefaultContextKeys.WORLD_KEY, world.getName().toLowerCase()); + } + return builder.build(); + } } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/context/WorldCalculator.java b/sponge/src/main/java/me/lucko/luckperms/sponge/context/WorldCalculator.java index e77378d31..fb580cdb9 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/context/WorldCalculator.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/context/WorldCalculator.java @@ -26,24 +26,29 @@ package me.lucko.luckperms.sponge.context; import me.lucko.luckperms.common.config.ConfigKeys; -import me.lucko.luckperms.common.plugin.LuckPermsPlugin; +import me.lucko.luckperms.sponge.LPSpongePlugin; import net.luckperms.api.context.ContextCalculator; import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.DefaultContextKeys; +import net.luckperms.api.context.ImmutableContextSet; import org.checkerframework.checker.nullness.qual.NonNull; +import org.spongepowered.api.Game; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.service.permission.Subject; +import org.spongepowered.api.world.World; +import java.util.Collection; import java.util.HashSet; import java.util.Set; public class WorldCalculator implements ContextCalculator { - private final LuckPermsPlugin plugin; + private final LPSpongePlugin plugin; - public WorldCalculator(LuckPermsPlugin plugin) { + public WorldCalculator(LPSpongePlugin plugin) { this.plugin = plugin; } @@ -62,7 +67,20 @@ public class WorldCalculator implements ContextCalculator { consumer.accept(DefaultContextKeys.WORLD_KEY, world); world = this.plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(world, world).toLowerCase(); } - } + @Override + public ContextSet estimatePotentialContexts() { + Game game = this.plugin.getBootstrap().getGame(); + if (!game.isServerAvailable()) { + return ImmutableContextSet.empty(); + } + + Collection worlds = game.getServer().getWorlds(); + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (World world : worlds) { + builder.add(DefaultContextKeys.WORLD_KEY, world.getName().toLowerCase()); + } + return builder.build(); + } } diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/context/BackendServerCalculator.java b/velocity/src/main/java/me/lucko/luckperms/velocity/context/BackendServerCalculator.java index 454c2b9f6..f22ff516b 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/context/BackendServerCalculator.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/context/BackendServerCalculator.java @@ -26,16 +26,20 @@ package me.lucko.luckperms.velocity.context; import com.velocitypowered.api.proxy.Player; +import com.velocitypowered.api.proxy.server.RegisteredServer; import me.lucko.luckperms.common.config.ConfigKeys; -import me.lucko.luckperms.common.plugin.LuckPermsPlugin; +import me.lucko.luckperms.velocity.LPVelocityPlugin; import net.luckperms.api.context.ContextCalculator; import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.DefaultContextKeys; +import net.luckperms.api.context.ImmutableContextSet; import org.checkerframework.checker.nullness.qual.NonNull; +import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -45,9 +49,9 @@ public class BackendServerCalculator implements ContextCalculator { return player.getCurrentServer().isPresent() ? player.getCurrentServer().get().getServerInfo().getName().toLowerCase() : null; } - private final LuckPermsPlugin plugin; + private final LPVelocityPlugin plugin; - public BackendServerCalculator(LuckPermsPlugin plugin) { + public BackendServerCalculator(LPVelocityPlugin plugin) { this.plugin = plugin; } @@ -60,4 +64,14 @@ public class BackendServerCalculator implements ContextCalculator { server = this.plugin.getConfiguration().get(ConfigKeys.WORLD_REWRITES).getOrDefault(server, server).toLowerCase(); } } + + @Override + public ContextSet estimatePotentialContexts() { + Collection servers = this.plugin.getBootstrap().getProxy().getAllServers(); + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (RegisteredServer server : servers) { + builder.add(DefaultContextKeys.WORLD_KEY, server.getServerInfo().getName().toLowerCase()); + } + return builder.build(); + } }