Add tab completion

This commit is contained in:
Luck 2016-07-17 13:18:43 +01:00
parent 874a90253b
commit d33a3ffcea
35 changed files with 348 additions and 24 deletions

View File

@ -5,19 +5,32 @@ import me.lucko.luckperms.commands.Sender;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
class CommandManagerBukkit extends CommandManager implements CommandExecutor { class CommandManagerBukkit extends CommandManager implements CommandExecutor, TabExecutor {
CommandManagerBukkit(LuckPermsPlugin plugin) { CommandManagerBukkit(LuckPermsPlugin plugin) {
super(plugin); super(plugin);
} }
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
final WeakReference<CommandSender> cs = new WeakReference<>(sender); return onCommand(makeSender(sender), Arrays.asList(args));
return onCommand(new Sender() { }
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
return onTabComplete(makeSender(sender), Arrays.asList(args));
}
private static Sender makeSender(CommandSender sender) {
return new Sender() {
final WeakReference<CommandSender> cs = new WeakReference<>(sender);
@Override @Override
public void sendMessage(String s) { public void sendMessage(String s) {
final CommandSender c = cs.get(); final CommandSender c = cs.get();
@ -31,6 +44,6 @@ class CommandManagerBukkit extends CommandManager implements CommandExecutor {
final CommandSender c = cs.get(); final CommandSender c = cs.get();
return c != null && c.hasPermission(node); return c != null && c.hasPermission(node);
} }
}, Arrays.asList(args)); };
} }
} }

View File

@ -16,12 +16,15 @@ import me.lucko.luckperms.utils.LPConfiguration;
import me.lucko.luckperms.vaulthooks.VaultHook; import me.lucko.luckperms.vaulthooks.VaultHook;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
@Getter @Getter
public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin { public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
@ -45,6 +48,7 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
CommandManagerBukkit commandManager = new CommandManagerBukkit(this); CommandManagerBukkit commandManager = new CommandManagerBukkit(this);
PluginCommand main = getServer().getPluginCommand("luckperms"); PluginCommand main = getServer().getPluginCommand("luckperms");
main.setExecutor(commandManager); main.setExecutor(commandManager);
main.setTabCompleter(commandManager);
main.setAliases(Arrays.asList("perms", "lp", "permissions", "p", "perm")); main.setAliases(Arrays.asList("perms", "lp", "permissions", "p", "perm"));
final String storageMethod = configuration.getStorageMethod(); final String storageMethod = configuration.getStorageMethod();
@ -123,6 +127,11 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
return getServer().getOnlinePlayers().size(); return getServer().getOnlinePlayers().size();
} }
@Override
public List<String> getPlayerList() {
return getServer().getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList());
}
@Override @Override
public void runUpdateTask() { public void runUpdateTask() {
getServer().getScheduler().runTaskAsynchronously(this, new UpdateTask(this)); getServer().getScheduler().runTaskAsynchronously(this, new UpdateTask(this));

View File

@ -13,10 +13,13 @@ import me.lucko.luckperms.tracks.TrackManager;
import me.lucko.luckperms.users.BungeeUserManager; import me.lucko.luckperms.users.BungeeUserManager;
import me.lucko.luckperms.users.UserManager; import me.lucko.luckperms.users.UserManager;
import me.lucko.luckperms.utils.LPConfiguration; import me.lucko.luckperms.utils.LPConfiguration;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.Plugin;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Getter @Getter
public class LPBungeePlugin extends Plugin implements LuckPermsPlugin { public class LPBungeePlugin extends Plugin implements LuckPermsPlugin {
@ -88,6 +91,11 @@ public class LPBungeePlugin extends Plugin implements LuckPermsPlugin {
return getProxy().getOnlineCount(); return getProxy().getOnlineCount();
} }
@Override
public List<String> getPlayerList() {
return getProxy().getPlayers().stream().map(ProxiedPlayer::getName).collect(Collectors.toList());
}
@Override @Override
public void runUpdateTask() { public void runUpdateTask() {
doAsync(new UpdateTask(this)); doAsync(new UpdateTask(this));

View File

@ -5,11 +5,12 @@ import me.lucko.luckperms.commands.Sender;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.TabExecutor;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.Arrays; import java.util.Arrays;
class MainCommand extends Command { class MainCommand extends Command implements TabExecutor {
private final CommandManager manager; private final CommandManager manager;
public MainCommand(CommandManager manager) { public MainCommand(CommandManager manager) {
@ -20,8 +21,18 @@ class MainCommand extends Command {
@Override @Override
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
final WeakReference<CommandSender> cs = new WeakReference<>(sender); manager.onCommand(makeSender(sender), Arrays.asList(args));
manager.onCommand(new Sender() { }
@Override
public Iterable<String> onTabComplete(CommandSender sender, String[] args) {
return manager.onTabComplete(makeSender(sender), Arrays.asList(args));
}
private static Sender makeSender(CommandSender sender) {
return new Sender() {
final WeakReference<CommandSender> cs = new WeakReference<>(sender);
@Override @Override
public void sendMessage(String s) { public void sendMessage(String s) {
final CommandSender c = cs.get(); final CommandSender c = cs.get();
@ -35,6 +46,6 @@ class MainCommand extends Command {
final CommandSender c = cs.get(); final CommandSender c = cs.get();
return c != null && c.hasPermission(node); return c != null && c.hasPermission(node);
} }
}, Arrays.asList(args)); };
} }
} }

View File

@ -6,6 +6,7 @@ import me.lucko.luckperms.tracks.TrackManager;
import me.lucko.luckperms.users.UserManager; import me.lucko.luckperms.users.UserManager;
import me.lucko.luckperms.utils.LPConfiguration; import me.lucko.luckperms.utils.LPConfiguration;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -65,6 +66,12 @@ public interface LuckPermsPlugin {
*/ */
int getPlayerCount(); int getPlayerCount();
/**
* Gets the usernames of the users online on the platform
* @return a {@link List} of usernames
*/
List<String> getPlayerList();
/** /**
* Runs an update task * Runs an update task
*/ */

View File

@ -20,9 +20,11 @@ import me.lucko.luckperms.commands.user.subcommands.*;
import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Message;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Collectors;
public class CommandManager { public class CommandManager {
private final LuckPermsPlugin plugin; private final LuckPermsPlugin plugin;
@ -123,6 +125,31 @@ public class CommandManager {
} }
/**
* Generic tab complete method to be called from the command executor object of the platform
* @param sender who is tab completing
* @param args the arguments provided so far
* @return a list of suggestions
*/
public List<String> onTabComplete(Sender sender, List<String> args) {
final List<MainCommand> mains = mainCommands.stream().filter(m -> m.canUse(sender)).collect(Collectors.toList());
if (args.size() <= 1) {
if (args.isEmpty() || args.get(0).equalsIgnoreCase("")) {
return mains.stream().map(MainCommand::getName).map(String::toLowerCase).collect(Collectors.toList());
}
return mains.stream().map(MainCommand::getName).map(String::toLowerCase).filter(s -> s.startsWith(args.get(0).toLowerCase())).collect(Collectors.toList());
}
Optional<MainCommand> o = mains.stream().filter(m -> m.getName().equalsIgnoreCase(args.get(0))).limit(1).findAny();
if (!o.isPresent()) {
return Collections.emptyList();
}
return o.get().onTabComplete(sender, args.subList(1, args.size()), plugin);
}
private void registerMainCommand(MainCommand command) { private void registerMainCommand(MainCommand command) {
plugin.getLogger().log(Level.INFO, "[CommandManager] Registered main command '" + command.getName() + "'"); plugin.getLogger().log(Level.INFO, "[CommandManager] Registered main command '" + command.getName() + "'");
mainCommands.add(command); mainCommands.add(command);

View File

@ -5,7 +5,9 @@ import lombok.Getter;
import me.lucko.luckperms.LuckPermsPlugin; import me.lucko.luckperms.LuckPermsPlugin;
import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Message;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Getter @Getter
@ -17,6 +19,7 @@ public abstract class MainCommand {
private final int requiredArgsLength; private final int requiredArgsLength;
protected abstract void execute(LuckPermsPlugin plugin, Sender sender, List<String> args); protected abstract void execute(LuckPermsPlugin plugin, Sender sender, List<String> args);
protected abstract List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin);
public abstract List<? extends SubCommand> getSubCommands(); public abstract List<? extends SubCommand> getSubCommands();
protected void sendUsage(Sender sender) { protected void sendUsage(Sender sender) {
@ -41,4 +44,23 @@ public abstract class MainCommand {
protected boolean canUse(Sender sender) { protected boolean canUse(Sender sender) {
return getSubCommands().stream().filter(sc -> sc.isAuthorized(sender)).count() != 0; return getSubCommands().stream().filter(sc -> sc.isAuthorized(sender)).count() != 0;
} }
protected List<String> onAbstractTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
final List<SubCommand> subs = getSubCommands().stream().filter(s -> s.isAuthorized(sender)).collect(Collectors.toList());
if (args.size() == 2) {
if (args.get(1).equalsIgnoreCase("")) {
return subs.stream().map(SubCommand::getName).map(String::toLowerCase).collect(Collectors.toList());
}
return subs.stream().map(SubCommand::getName).map(String::toLowerCase)
.filter(s -> s.toLowerCase().startsWith(args.get(1).toLowerCase())).collect(Collectors.toList());
}
Optional<SubCommand> o = subs.stream().filter(s -> s.getName().equalsIgnoreCase(args.get(1))).limit(1).findAny();
if (!o.isPresent()) {
return Collections.emptyList();
}
return o.get().onTabComplete(sender, args.subList(2, args.size()), plugin);
}
} }

View File

@ -2,8 +2,15 @@ package me.lucko.luckperms.commands;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import me.lucko.luckperms.LuckPermsPlugin;
import me.lucko.luckperms.constants.Permission; import me.lucko.luckperms.constants.Permission;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public abstract class SubCommand { public abstract class SubCommand {
@ -12,6 +19,34 @@ public abstract class SubCommand {
private final String usage; private final String usage;
private final Permission permission; private final Permission permission;
protected static List<String> getGroupTabComplete(List<String> args, LuckPermsPlugin plugin) {
return getTabComplete(new ArrayList<>(plugin.getGroupManager().getGroups().keySet()), args);
}
protected static List<String> getTrackTabComplete(List<String> args, LuckPermsPlugin plugin) {
return getTabComplete(new ArrayList<>(plugin.getTrackManager().getTracks().keySet()), args);
}
private static List<String> getTabComplete(List<String> options, List<String> args) {
if (args.size() <= 1) {
if (args.isEmpty() || args.get(0).equalsIgnoreCase("")) {
return options;
}
return options.stream().filter(s -> s.toLowerCase().startsWith(args.get(0).toLowerCase())).collect(Collectors.toList());
}
return Collections.emptyList();
}
protected static List<String> getBoolTabComplete(List<String> args) {
if (args.size() == 2) {
return Arrays.asList("true", "false");
} else {
return Collections.emptyList();
}
}
public boolean isAuthorized(Sender sender) { public boolean isAuthorized(Sender sender) {
return permission.isAuthorized(sender); return permission.isAuthorized(sender);
} }
@ -20,5 +55,9 @@ public abstract class SubCommand {
Util.sendPluginMessage(sender, "&e-> &d" + getUsage()); Util.sendPluginMessage(sender, "&e-> &d" + getUsage());
} }
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return Collections.emptyList();
}
public abstract boolean isArgLengthInvalid(int argLength); public abstract boolean isArgLengthInvalid(int argLength);
} }

View File

@ -32,6 +32,10 @@ public class Util {
return new String(b); return new String(b);
} }
public static boolean startsWithIgnoreCase(String s, String startsWith) {
return s.toLowerCase().startsWith(startsWith);
}
public static void sendBoolean(Sender sender, String node, boolean b) { public static void sendBoolean(Sender sender, String node, boolean b) {
if (b) { if (b) {
sender.sendMessage(Util.color("&b" + node + ": &atrue")); sender.sendMessage(Util.color("&b" + node + ": &atrue"));

View File

@ -8,7 +8,7 @@ import me.lucko.luckperms.constants.Message;
import me.lucko.luckperms.constants.Permission; import me.lucko.luckperms.constants.Permission;
import me.lucko.luckperms.utils.Patterns; import me.lucko.luckperms.utils.Patterns;
import java.util.ArrayList; import java.util.Collections;
import java.util.List; import java.util.List;
public class CreateGroupCommand extends MainCommand { public class CreateGroupCommand extends MainCommand {
@ -51,9 +51,14 @@ public class CreateGroupCommand extends MainCommand {
}); });
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return Collections.emptyList();
}
@Override @Override
public List<SubCommand> getSubCommands() { public List<SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -9,7 +9,9 @@ import me.lucko.luckperms.constants.Permission;
import me.lucko.luckperms.groups.Group; import me.lucko.luckperms.groups.Group;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
public class DeleteGroupCommand extends MainCommand { public class DeleteGroupCommand extends MainCommand {
public DeleteGroupCommand() { public DeleteGroupCommand() {
@ -52,9 +54,24 @@ public class DeleteGroupCommand extends MainCommand {
}); });
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
final List<String> groups = new ArrayList<>(plugin.getGroupManager().getGroups().keySet());
if (args.size() <= 1) {
if (args.isEmpty() || args.get(0).equalsIgnoreCase("")) {
return groups;
}
return groups.stream().filter(s -> s.toLowerCase().startsWith(args.get(0).toLowerCase())).collect(Collectors.toList());
}
return Collections.emptyList();
}
@Override @Override
public List<SubCommand> getSubCommands() { public List<SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -10,6 +10,7 @@ import me.lucko.luckperms.groups.Group;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
public class GroupMainCommand extends MainCommand { public class GroupMainCommand extends MainCommand {
@ -66,6 +67,21 @@ public class GroupMainCommand extends MainCommand {
}); });
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
final List<String> groups = new ArrayList<>(plugin.getGroupManager().getGroups().keySet());
if (args.size() <= 1) {
if (args.isEmpty() || args.get(0).equalsIgnoreCase("")) {
return groups;
}
return groups.stream().filter(s -> s.toLowerCase().startsWith(args.get(0).toLowerCase())).collect(Collectors.toList());
}
return onAbstractTabComplete(sender, args, plugin);
}
@Override @Override
public List<? extends SubCommand> getSubCommands() { public List<? extends SubCommand> getSubCommands() {
return subCommands; return subCommands;

View File

@ -9,6 +9,7 @@ import me.lucko.luckperms.constants.Message;
import me.lucko.luckperms.constants.Permission; import me.lucko.luckperms.constants.Permission;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class ListGroupsCommand extends MainCommand { public class ListGroupsCommand extends MainCommand {
@ -27,9 +28,14 @@ public class ListGroupsCommand extends MainCommand {
}); });
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return Collections.emptyList();
}
@Override @Override
public List<SubCommand> getSubCommands() { public List<SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -42,6 +42,11 @@ public class GroupSetInheritCommand extends GroupSubCommand {
}); });
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getGroupTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 1 && argLength != 2; return argLength != 1 && argLength != 2;

View File

@ -55,6 +55,11 @@ public class GroupSetPermissionCommand extends GroupSubCommand {
} }
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getBoolTabComplete(args);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 2 && argLength != 3; return argLength != 2 && argLength != 3;

View File

@ -36,6 +36,11 @@ public class GroupUnsetInheritCommand extends GroupSubCommand {
} }
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getGroupTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 1 && argLength != 2; return argLength != 1 && argLength != 2;

View File

@ -7,7 +7,7 @@ import me.lucko.luckperms.commands.SubCommand;
import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Message;
import me.lucko.luckperms.constants.Permission; import me.lucko.luckperms.constants.Permission;
import java.util.ArrayList; import java.util.Collections;
import java.util.List; import java.util.List;
public class DebugCommand extends MainCommand { public class DebugCommand extends MainCommand {
@ -22,9 +22,14 @@ public class DebugCommand extends MainCommand {
); );
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return Collections.emptyList();
}
@Override @Override
public List<? extends SubCommand> getSubCommands() { public List<? extends SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -7,7 +7,7 @@ import me.lucko.luckperms.commands.SubCommand;
import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Message;
import me.lucko.luckperms.constants.Permission; import me.lucko.luckperms.constants.Permission;
import java.util.ArrayList; import java.util.Collections;
import java.util.List; import java.util.List;
public class InfoCommand extends MainCommand { public class InfoCommand extends MainCommand {
@ -20,9 +20,14 @@ public class InfoCommand extends MainCommand {
Message.INFO.send(sender, plugin.getVersion(), plugin.getDatastore().getName()); Message.INFO.send(sender, plugin.getVersion(), plugin.getDatastore().getName());
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return Collections.emptyList();
}
@Override @Override
public List<? extends SubCommand> getSubCommands() { public List<? extends SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -7,7 +7,7 @@ import me.lucko.luckperms.commands.SubCommand;
import me.lucko.luckperms.constants.Message; import me.lucko.luckperms.constants.Message;
import me.lucko.luckperms.constants.Permission; import me.lucko.luckperms.constants.Permission;
import java.util.ArrayList; import java.util.Collections;
import java.util.List; import java.util.List;
public class SyncCommand extends MainCommand { public class SyncCommand extends MainCommand {
@ -21,9 +21,14 @@ public class SyncCommand extends MainCommand {
plugin.runUpdateTask(); plugin.runUpdateTask();
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return Collections.emptyList();
}
@Override @Override
public List<? extends SubCommand> getSubCommands() { public List<? extends SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -8,7 +8,7 @@ import me.lucko.luckperms.constants.Message;
import me.lucko.luckperms.constants.Permission; import me.lucko.luckperms.constants.Permission;
import me.lucko.luckperms.utils.Patterns; import me.lucko.luckperms.utils.Patterns;
import java.util.ArrayList; import java.util.Collections;
import java.util.List; import java.util.List;
public class CreateTrackCommand extends MainCommand { public class CreateTrackCommand extends MainCommand {
@ -51,9 +51,14 @@ public class CreateTrackCommand extends MainCommand {
}); });
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return Collections.emptyList();
}
@Override @Override
public List<? extends SubCommand> getSubCommands() { public List<? extends SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -9,7 +9,9 @@ import me.lucko.luckperms.constants.Permission;
import me.lucko.luckperms.tracks.Track; import me.lucko.luckperms.tracks.Track;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
public class DeleteTrackCommand extends MainCommand { public class DeleteTrackCommand extends MainCommand {
public DeleteTrackCommand() { public DeleteTrackCommand() {
@ -47,9 +49,24 @@ public class DeleteTrackCommand extends MainCommand {
}); });
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
final List<String> tracks = new ArrayList<>(plugin.getTrackManager().getTracks().keySet());
if (args.size() <= 1) {
if (args.isEmpty() || args.get(0).equalsIgnoreCase("")) {
return tracks;
}
return tracks.stream().filter(s -> s.toLowerCase().startsWith(args.get(0).toLowerCase())).collect(Collectors.toList());
}
return Collections.emptyList();
}
@Override @Override
public List<SubCommand> getSubCommands() { public List<SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -9,6 +9,7 @@ import me.lucko.luckperms.constants.Message;
import me.lucko.luckperms.constants.Permission; import me.lucko.luckperms.constants.Permission;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class ListTracksCommand extends MainCommand { public class ListTracksCommand extends MainCommand {
@ -27,9 +28,14 @@ public class ListTracksCommand extends MainCommand {
}); });
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return Collections.emptyList();
}
@Override @Override
public List<SubCommand> getSubCommands() { public List<SubCommand> getSubCommands() {
return new ArrayList<>(); return Collections.emptyList();
} }
@Override @Override

View File

@ -10,6 +10,7 @@ import me.lucko.luckperms.tracks.Track;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
public class TrackMainCommand extends MainCommand { public class TrackMainCommand extends MainCommand {
@ -66,6 +67,21 @@ public class TrackMainCommand extends MainCommand {
}); });
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
final List<String> tracks = new ArrayList<>(plugin.getTrackManager().getTracks().keySet());
if (args.size() <= 1) {
if (args.isEmpty() || args.get(0).equalsIgnoreCase("")) {
return tracks;
}
return tracks.stream().filter(s -> s.toLowerCase().startsWith(args.get(0).toLowerCase())).collect(Collectors.toList());
}
return onAbstractTabComplete(sender, args, plugin);
}
@Override @Override
public List<? extends SubCommand> getSubCommands() { public List<? extends SubCommand> getSubCommands() {
return subCommands; return subCommands;

View File

@ -43,6 +43,11 @@ public class TrackAppendCommand extends TrackSubCommand {
}); });
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getGroupTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 1; return argLength != 1;

View File

@ -53,6 +53,11 @@ public class TrackInsertCommand extends TrackSubCommand {
}); });
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getGroupTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 2; return argLength != 2;

View File

@ -27,6 +27,11 @@ public class TrackRemoveCommand extends TrackSubCommand {
} }
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getGroupTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 1; return argLength != 1;

View File

@ -12,8 +12,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
public class UserMainCommand extends MainCommand{ public class UserMainCommand extends MainCommand {
private final List<UserSubCommand> subCommands = new ArrayList<>(); private final List<UserSubCommand> subCommands = new ArrayList<>();
@ -75,6 +76,21 @@ public class UserMainCommand extends MainCommand{
Message.USER_INVALID_ENTRY.send(sender, user); Message.USER_INVALID_ENTRY.send(sender, user);
} }
@Override
protected List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
final List<String> onlinePlayers = plugin.getPlayerList();
if (args.size() <= 1) {
if (args.isEmpty() || args.get(0).equalsIgnoreCase("")) {
return onlinePlayers;
}
return onlinePlayers.stream().filter(s -> s.toLowerCase().startsWith(args.get(0).toLowerCase())).collect(Collectors.toList());
}
return onAbstractTabComplete(sender, args, plugin);
}
private void runSub(LuckPermsPlugin plugin, Sender sender, UUID uuid, UserSubCommand command, List<String> strippedArgs) { private void runSub(LuckPermsPlugin plugin, Sender sender, UUID uuid, UserSubCommand command, List<String> strippedArgs) {
plugin.getDatastore().loadUser(uuid, success -> { plugin.getDatastore().loadUser(uuid, success -> {
if (!success) { if (!success) {

View File

@ -48,6 +48,11 @@ public class UserAddGroupCommand extends UserSubCommand {
}); });
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getGroupTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return (argLength != 1 && argLength != 2); return (argLength != 1 && argLength != 2);

View File

@ -79,6 +79,11 @@ public class UserDemoteCommand extends UserSubCommand {
}); });
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getTrackTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 1; return argLength != 1;

View File

@ -79,6 +79,11 @@ public class UserPromoteCommand extends UserSubCommand {
}); });
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getTrackTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 1; return argLength != 1;

View File

@ -41,6 +41,11 @@ public class UserRemoveGroupCommand extends UserSubCommand {
} }
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getGroupTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return (argLength != 1 && argLength != 2); return (argLength != 1 && argLength != 2);

View File

@ -55,6 +55,11 @@ public class UserSetPermissionCommand extends UserSubCommand {
} }
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getBoolTabComplete(args);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 2 && argLength != 3; return argLength != 2 && argLength != 3;

View File

@ -40,6 +40,11 @@ public class UserSetPrimaryGroupCommand extends UserSubCommand {
saveUser(user, sender, plugin); saveUser(user, sender, plugin);
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getGroupTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 1; return argLength != 1;

View File

@ -45,6 +45,11 @@ public class UserShowPosCommand extends UserSubCommand {
}); });
} }
@Override
public List<String> onTabComplete(Sender sender, List<String> args, LuckPermsPlugin plugin) {
return getTrackTabComplete(args, plugin);
}
@Override @Override
public boolean isArgLengthInvalid(int argLength) { public boolean isArgLengthInvalid(int argLength) {
return argLength != 1; return argLength != 1;

View File

@ -29,7 +29,7 @@ public enum Message {
USER_NOT_FOUND("&eUser could not be found.", true), USER_NOT_FOUND("&eUser could not be found.", true),
USER_SAVE_SUCCESS("&7(User data was saved to the datastore)", true), USER_SAVE_SUCCESS("&7(User data was saved to the datastore)", true),
USER_SAVE_ERROR("There was an error whilst saving the user.", true), USER_SAVE_ERROR("There was an error whilst saving the user.", true),
USER_ATTEMPTING_LOOKUP("&7(Attempting UUID lookup, since you specified a user)", true), USER_ATTEMPTING_LOOKUP("&7(Attempting UUID lookup, since you specified a username)", true),
GROUP_NOT_FOUND("&eGroup could not be found.", true), GROUP_NOT_FOUND("&eGroup could not be found.", true),
GROUP_SAVE_SUCCESS("&7(Group data was saved to the datastore)", true), GROUP_SAVE_SUCCESS("&7(Group data was saved to the datastore)", true),