Clean up tab completion code for repeated statements
This commit is contained in:
parent
b813c5b899
commit
2cf86b9cd8
@ -1,13 +1,18 @@
|
||||
package me.libraryaddict.disguise.commands;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.parser.ParamInfoManager;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@ -31,7 +36,124 @@ public abstract class DisguiseBaseCommand implements CommandExecutor {
|
||||
disguiseCommands = map;
|
||||
}
|
||||
|
||||
protected ArrayList<String> filterTabs(ArrayList<String> list, String[] origArgs) {
|
||||
protected List<String> getTabDisguiseTypes(CommandSender sender, DisguisePermissions perms, String[] allArgs,
|
||||
int startsAt, String currentArg) {
|
||||
// If not enough arguments to get current disguise type
|
||||
if (allArgs.length <= startsAt) {
|
||||
return getAllowedDisguises(perms);
|
||||
}
|
||||
|
||||
// Get current disguise type
|
||||
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(allArgs[startsAt]);
|
||||
|
||||
// If disguise type isn't found, return nothing
|
||||
if (disguiseType == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
// If current argument is just after the disguise type, and disguise type is a player which is not a custom
|
||||
// disguise
|
||||
if (allArgs.length == startsAt + 1 && disguiseType.getType() == DisguiseType.PLAYER &&
|
||||
!disguiseType.isCustomDisguise()) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
|
||||
// Add all player names to tab list
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
|
||||
// Return tablist
|
||||
return tabs;
|
||||
}
|
||||
|
||||
return getTabDisguiseOptions(sender, perms, disguiseType, allArgs, startsAt + (disguiseType.isPlayer() ? 2 : 1),
|
||||
currentArg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param perms What permissions they can use
|
||||
* @param disguisePerm The disguise permission they're using
|
||||
* @param allArgs All the arguments in the command
|
||||
* @param startsAt What index this starts at
|
||||
* @return a list of viable disguise options
|
||||
*/
|
||||
protected List<String> getTabDisguiseOptions(CommandSender commandSender, DisguisePermissions perms,
|
||||
DisguisePerm disguisePerm, String[] allArgs, int startsAt, String currentArg) {
|
||||
ArrayList<String> usedOptions = new ArrayList<>();
|
||||
|
||||
Method[] methods = ParamInfoManager.getDisguiseWatcherMethods(disguisePerm.getWatcherClass());
|
||||
|
||||
// Find which methods the disguiser has already used
|
||||
for (int i = startsAt; i < allArgs.length; i++) {
|
||||
for (Method method : methods) {
|
||||
String arg = allArgs[i];
|
||||
|
||||
if (!method.getName().equalsIgnoreCase(arg)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
usedOptions.add(arg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If the disguiser has used options that they have not been granted to use, ignore them
|
||||
if (!perms.isAllowedDisguise(disguisePerm, usedOptions)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
return getTabDisguiseSubOptions(commandSender, perms, disguisePerm, allArgs, startsAt, currentArg);
|
||||
}
|
||||
|
||||
protected List<String> getTabDisguiseSubOptions(CommandSender commandSender, DisguisePermissions perms,
|
||||
DisguisePerm disguisePerm, String[] allArgs, int startsAt, String currentArg) {
|
||||
boolean addMethods = true;
|
||||
List<String> tabs = new ArrayList<>();
|
||||
|
||||
// Check what argument was used before the current argument to see what we're displaying
|
||||
if (allArgs.length > startsAt) {
|
||||
String prevArg = allArgs[allArgs.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(disguisePerm, prevArg);
|
||||
|
||||
// If the previous argument is a method
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
// If there is a list of default values
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(currentArg));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (commandSender instanceof Player && !((Player) commandSender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguisePerm.getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
|
||||
return tabs;
|
||||
}
|
||||
|
||||
protected List<String> filterTabs(List<String> list, String[] origArgs) {
|
||||
if (origArgs.length == 0)
|
||||
return list;
|
||||
|
||||
@ -73,7 +195,11 @@ public abstract class DisguiseBaseCommand implements CommandExecutor {
|
||||
return allowedDisguises;
|
||||
}
|
||||
|
||||
protected String[] getArgs(String[] args) {
|
||||
/**
|
||||
* @param args
|
||||
* @return Array of strings excluding current argument
|
||||
*/
|
||||
protected String[] getPreviousArgs(String[] args) {
|
||||
ArrayList<String> newArgs = new ArrayList<>();
|
||||
|
||||
for (int i = 0; i < args.length - 1; i++) {
|
||||
@ -88,6 +214,14 @@ public abstract class DisguiseBaseCommand implements CommandExecutor {
|
||||
return newArgs.toArray(new String[0]);
|
||||
}
|
||||
|
||||
protected String getCurrentArg(String[] args) {
|
||||
if (args.length == 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return args[args.length - 1].trim();
|
||||
}
|
||||
|
||||
protected static final Map<Class<? extends DisguiseBaseCommand>, String> getCommandNames() {
|
||||
return disguiseCommands;
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ public class DisguiseCloneCommand extends DisguiseBaseCommand implements TabComp
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
if (args.length == 0) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
|
@ -3,14 +3,13 @@ package me.libraryaddict.disguise.commands;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.*;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParseException;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -18,7 +17,6 @@ import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -98,82 +96,11 @@ public class DisguiseCommand extends DisguiseBaseCommand implements TabCompleter
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
DisguisePermissions perms = getPermissions(sender);
|
||||
|
||||
if (args.length == 0) {
|
||||
tabs.addAll(getAllowedDisguises(perms));
|
||||
} else {
|
||||
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[0]);
|
||||
|
||||
if (disguiseType == null)
|
||||
return filterTabs(tabs, origArgs);
|
||||
// No disguisetype specificied, cannot help.
|
||||
|
||||
if (args.length == 1 && disguiseType.getType() == DisguiseType.PLAYER) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
} else {
|
||||
ArrayList<String> usedOptions = new ArrayList<>();
|
||||
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) {
|
||||
String arg = args[i];
|
||||
|
||||
if (!method.getName().equalsIgnoreCase(arg))
|
||||
continue;
|
||||
|
||||
usedOptions.add(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (perms.isAllowedDisguise(disguiseType, usedOptions)) {
|
||||
boolean addMethods = true;
|
||||
|
||||
if (args.length > 1) {
|
||||
String prevArg = args[args.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(disguiseType, prevArg);
|
||||
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(origArgs[origArgs.length - 1]));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager
|
||||
.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return filterTabs(tabs, origArgs);
|
||||
return filterTabs(getTabDisguiseTypes(sender, perms, args, 0, getCurrentArg(origArgs)), origArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3,13 +3,12 @@ package me.libraryaddict.disguise.commands;
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.*;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParseException;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -17,7 +16,6 @@ import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -73,83 +71,11 @@ public class DisguiseEntityCommand extends DisguiseBaseCommand implements TabCom
|
||||
return tabs;
|
||||
}
|
||||
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
DisguisePermissions perms = getPermissions(sender);
|
||||
|
||||
if (args.length == 0) {
|
||||
for (String type : getAllowedDisguises(perms)) {
|
||||
tabs.add(type);
|
||||
}
|
||||
} else {
|
||||
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[0]);
|
||||
|
||||
if (disguiseType == null)
|
||||
return filterTabs(tabs, origArgs);
|
||||
|
||||
if (args.length == 1 && disguiseType.getType() == DisguiseType.PLAYER) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
} else {
|
||||
ArrayList<String> usedOptions = new ArrayList<>();
|
||||
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) {
|
||||
String arg = args[i];
|
||||
|
||||
if (!method.getName().equalsIgnoreCase(arg))
|
||||
continue;
|
||||
|
||||
usedOptions.add(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (perms.isAllowedDisguise(disguiseType, usedOptions)) {
|
||||
boolean addMethods = true;
|
||||
|
||||
if (args.length > 1) {
|
||||
String prevArg = args[args.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(disguiseType, prevArg);
|
||||
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(origArgs[origArgs.length - 1]));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager
|
||||
.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return filterTabs(tabs, origArgs);
|
||||
return filterTabs(getTabDisguiseTypes(sender, perms, args, 0, getCurrentArg(origArgs)), origArgs);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -129,7 +129,7 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
for (String node : getCommandNames().values()) {
|
||||
DisguisePermissions perms = DisguiseParser.getPermissions(sender, node);
|
||||
|
@ -2,13 +2,13 @@ package me.libraryaddict.disguise.commands;
|
||||
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.*;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParseException;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
@ -16,7 +16,6 @@ import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -77,70 +76,21 @@ public class DisguiseModifyCommand extends DisguiseBaseCommand implements TabCom
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
|
||||
if (!(sender instanceof Player))
|
||||
return tabs;
|
||||
return new ArrayList<>();
|
||||
|
||||
Disguise disguise = DisguiseAPI.getDisguise((Player) sender, (Entity) sender);
|
||||
|
||||
if (disguise == null)
|
||||
return tabs;
|
||||
return new ArrayList<>();
|
||||
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
DisguisePermissions perms = getPermissions(sender);
|
||||
|
||||
DisguisePerm disguiseType = new DisguisePerm(disguise.getType());
|
||||
|
||||
ArrayList<String> usedOptions = new ArrayList<>();
|
||||
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 2 : 1; i < args.length; i++) {
|
||||
String arg = args[i];
|
||||
|
||||
if (!method.getName().equalsIgnoreCase(arg))
|
||||
continue;
|
||||
|
||||
usedOptions.add(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (perms.isAllowedDisguise(disguiseType, usedOptions)) {
|
||||
boolean addMethods = true;
|
||||
|
||||
if (args.length > 0) {
|
||||
String prevArg = args[args.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(disguiseType, prevArg);
|
||||
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(origArgs[origArgs.length - 1]));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
List<String> tabs = getTabDisguiseOptions(sender, perms, disguiseType, args, 0, getCurrentArg(origArgs));
|
||||
|
||||
return filterTabs(tabs, origArgs);
|
||||
}
|
||||
|
@ -5,18 +5,14 @@ import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.parser.ParamInfoManager;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -51,54 +47,22 @@ public class DisguiseModifyEntityCommand extends DisguiseBaseCommand implements
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
|
||||
if (!(sender instanceof Player)) {
|
||||
return tabs;
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
DisguisePermissions perms = getPermissions(sender);
|
||||
|
||||
if (!perms.hasPermissions()) {
|
||||
return tabs;
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
List<String> tabs = new ArrayList<>();
|
||||
|
||||
for (DisguisePerm perm : perms.getAllowed()) {
|
||||
boolean addMethods = true;
|
||||
|
||||
if (args.length > 0) {
|
||||
String prevArg = args[args.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(perm.getType(), prevArg);
|
||||
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(origArgs[origArgs.length - 1]));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(perm.getType().getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
tabs.addAll(getTabDisguiseSubOptions(sender, perms, perm, args, 0, getCurrentArg(args)));
|
||||
}
|
||||
|
||||
return filterTabs(tabs, origArgs);
|
||||
|
@ -3,9 +3,11 @@ package me.libraryaddict.disguise.commands;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParseException;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import me.libraryaddict.disguise.utilities.parser.*;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
@ -14,7 +16,6 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -93,7 +94,7 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
DisguisePermissions perms = getPermissions(sender);
|
||||
|
||||
@ -114,7 +115,6 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
|
||||
Player player = Bukkit.getPlayer(args[0]);
|
||||
|
||||
if (player == null) {
|
||||
sender.sendMessage(LibsMsg.CANNOT_FIND_PLAYER.get(args[0]));
|
||||
return tabs;
|
||||
}
|
||||
|
||||
@ -127,60 +127,12 @@ public class DisguiseModifyPlayerCommand extends DisguiseBaseCommand implements
|
||||
disguise = DisguiseAPI.getDisguise(player);
|
||||
|
||||
if (disguise == null) {
|
||||
sender.sendMessage(LibsMsg.DMODPLAYER_NODISGUISE.get(player.getName()));
|
||||
return tabs;
|
||||
}
|
||||
|
||||
DisguisePerm disguiseType = new DisguisePerm(disguise.getType());
|
||||
|
||||
ArrayList<String> usedOptions = new ArrayList<>();
|
||||
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
for (int i = 1; i < args.length; i++) {
|
||||
String arg = args[i];
|
||||
|
||||
if (!method.getName().equalsIgnoreCase(arg))
|
||||
continue;
|
||||
|
||||
usedOptions.add(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (perms.isAllowedDisguise(disguiseType, usedOptions)) {
|
||||
boolean addMethods = true;
|
||||
|
||||
if (args.length > 1) {
|
||||
String prevArg = args[args.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(disguiseType, prevArg);
|
||||
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(origArgs[origArgs.length - 1]));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(p)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(p.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
tabs.addAll(getTabDisguiseOptions(sender, perms, disguiseType, args, 1, getCurrentArg(args)));
|
||||
}
|
||||
|
||||
return filterTabs(tabs, origArgs);
|
||||
|
@ -5,11 +5,9 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.*;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import me.libraryaddict.disguise.utilities.translations.TranslateType;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.BlockCommandSender;
|
||||
@ -186,7 +184,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
DisguisePermissions perms = getPermissions(sender);
|
||||
|
||||
@ -201,7 +199,6 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
|
||||
int starting = 0;
|
||||
|
||||
if (!isInteger(args[0])) {
|
||||
|
||||
for (DisguiseType t : DisguiseType.values()) {
|
||||
if (t.toReadable().replaceAll(" ", "").equalsIgnoreCase(args[0].replaceAll("_", ""))) {
|
||||
starting = 2;
|
||||
@ -214,7 +211,7 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
|
||||
return filterTabs(tabs, origArgs);
|
||||
}
|
||||
|
||||
if (!isInteger(args[starting])) {
|
||||
if (args.length <= starting || !isInteger(args[starting])) {
|
||||
return filterTabs(tabs, origArgs);
|
||||
}
|
||||
|
||||
@ -225,6 +222,8 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
|
||||
radius = maxRadius;
|
||||
}
|
||||
|
||||
starting++;
|
||||
|
||||
ArrayList<String> usedOptions = new ArrayList<>();
|
||||
|
||||
for (Entity entity : getNearbyEntities(sender, radius)) {
|
||||
@ -244,40 +243,10 @@ public class DisguiseModifyRadiusCommand extends DisguiseBaseCommand implements
|
||||
}
|
||||
}
|
||||
|
||||
if (perms.isAllowedDisguise(new DisguisePerm(disguiseType), usedOptions)) {
|
||||
boolean addMethods = true;
|
||||
DisguisePerm perm = new DisguisePerm(disguiseType);
|
||||
|
||||
if (args.length > 1 + starting) {
|
||||
String prevArg = args[args.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(disguiseType, prevArg);
|
||||
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(origArgs[origArgs.length - 1]));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
if (perms.isAllowedDisguise(perm, usedOptions)) {
|
||||
tabs.addAll(getTabDisguiseSubOptions(sender, perms, perm, args, starting, getCurrentArg(args)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,8 +6,9 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.*;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParseException;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -18,7 +19,6 @@ import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@ -140,7 +140,7 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
DisguisePermissions perms = getPermissions(sender);
|
||||
|
||||
@ -153,74 +153,8 @@ public class DisguisePlayerCommand extends DisguiseBaseCommand implements TabCom
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
} else if (args.length == 1) {
|
||||
tabs.addAll(getAllowedDisguises(perms));
|
||||
} else {
|
||||
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[1]);
|
||||
|
||||
if (disguiseType == null)
|
||||
return filterTabs(tabs, origArgs);
|
||||
|
||||
if (args.length == 2 && disguiseType.getType() == DisguiseType.PLAYER) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
} else {
|
||||
ArrayList<String> usedOptions = new ArrayList<>();
|
||||
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? 3 : 2; i < args.length; i++) {
|
||||
String arg = args[i];
|
||||
|
||||
if (!method.getName().equalsIgnoreCase(arg))
|
||||
continue;
|
||||
|
||||
usedOptions.add(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (perms.isAllowedDisguise(disguiseType, usedOptions)) {
|
||||
boolean addMethods = true;
|
||||
|
||||
if (args.length > 2) {
|
||||
String prevArg = args[args.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(disguiseType, prevArg);
|
||||
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(origArgs[origArgs.length - 1]));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager
|
||||
.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tabs.addAll(getTabDisguiseTypes(sender, perms, args, 1, getCurrentArg(origArgs)));
|
||||
}
|
||||
|
||||
return filterTabs(tabs, origArgs);
|
||||
|
@ -3,16 +3,15 @@ package me.libraryaddict.disguise.commands;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.*;
|
||||
import me.libraryaddict.disguise.utilities.parser.params.ParamInfo;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParseException;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParser;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguisePermissions;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ClassGetter;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
import me.libraryaddict.disguise.utilities.translations.TranslateType;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.BlockCommandSender;
|
||||
@ -24,7 +23,6 @@ import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@ -230,7 +228,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] origArgs) {
|
||||
ArrayList<String> tabs = new ArrayList<>();
|
||||
String[] args = getArgs(origArgs);
|
||||
String[] args = getPreviousArgs(origArgs);
|
||||
|
||||
DisguisePermissions perms = getPermissions(sender);
|
||||
|
||||
@ -258,77 +256,7 @@ public class DisguiseRadiusCommand extends DisguiseBaseCommand implements TabCom
|
||||
return filterTabs(tabs, origArgs);
|
||||
}
|
||||
|
||||
if (args.length == starting) {
|
||||
tabs.addAll(getAllowedDisguises(perms));
|
||||
} else {
|
||||
|
||||
DisguisePerm disguiseType = DisguiseParser.getDisguisePerm(args[starting]);
|
||||
|
||||
if (disguiseType == null)
|
||||
return filterTabs(tabs, origArgs);
|
||||
|
||||
if (args.length == 1 + starting && disguiseType.getType() == DisguiseType.PLAYER) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
} else {
|
||||
ArrayList<String> usedOptions = new ArrayList<>();
|
||||
|
||||
for (Method method : ParamInfoManager.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
for (int i = disguiseType.getType() == DisguiseType.PLAYER ? starting + 2 : starting + 1;
|
||||
i < args.length; i++) {
|
||||
String arg = args[i];
|
||||
|
||||
if (!method.getName().equalsIgnoreCase(arg))
|
||||
continue;
|
||||
|
||||
usedOptions.add(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (perms.isAllowedDisguise(disguiseType, usedOptions)) {
|
||||
boolean addMethods = true;
|
||||
|
||||
if (args.length > 1 + starting) {
|
||||
String prevArg = args[args.length - 1];
|
||||
|
||||
ParamInfo info = ParamInfoManager.getParamInfo(disguiseType, prevArg);
|
||||
|
||||
if (info != null) {
|
||||
if (!info.isParam(boolean.class)) {
|
||||
addMethods = false;
|
||||
}
|
||||
|
||||
if (info.hasValues()) {
|
||||
tabs.addAll(info.getEnums(origArgs[origArgs.length - 1]));
|
||||
} else if (info.isParam(String.class)) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
// If command user cannot see player online, don't tab-complete name
|
||||
if (sender instanceof Player && !((Player) sender).canSee(player)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
tabs.add(player.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (Method method : ParamInfoManager
|
||||
.getDisguiseWatcherMethods(disguiseType.getWatcherClass())) {
|
||||
tabs.add(method.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tabs.addAll(getTabDisguiseTypes(sender, perms, args, starting, getCurrentArg(origArgs)));
|
||||
|
||||
return filterTabs(tabs, origArgs);
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import java.util.Objects;
|
||||
public class DisguisePerm {
|
||||
private DisguiseType disguiseType;
|
||||
private String permName;
|
||||
private boolean customDisguise;
|
||||
|
||||
public DisguisePerm(DisguiseType disguiseType) {
|
||||
this.disguiseType = disguiseType;
|
||||
@ -20,6 +21,11 @@ public class DisguisePerm {
|
||||
public DisguisePerm(DisguiseType disguiseType, String disguisePerm) {
|
||||
this.disguiseType = disguiseType;
|
||||
permName = disguisePerm;
|
||||
customDisguise = true;
|
||||
}
|
||||
|
||||
public boolean isCustomDisguise() {
|
||||
return customDisguise;
|
||||
}
|
||||
|
||||
public Class getEntityClass() {
|
||||
|
Loading…
Reference in New Issue
Block a user