diff --git a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java index 240766b..72cda65 100644 --- a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java +++ b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java @@ -130,7 +130,7 @@ public abstract class SWCommand { if (mapper != null) { name = mapper.value(); } - if (!SWCommandUtils.MAPPER_FUNCTIONS.containsKey(name)) { + if (!SWCommandUtils.MAPPER_FUNCTIONS.containsKey(name) && !localTypeMapper.containsKey(name)) { Bukkit.getLogger().log(Level.WARNING, "The parameter '" + parameter.toString() + "' is using an unsupported Mapper of type '" + name + "'"); return; } diff --git a/SpigotCore_Main/src/de/steamwar/command/SubCommand.java b/SpigotCore_Main/src/de/steamwar/command/SubCommand.java index 1ce4c11..343cbd0 100644 --- a/SpigotCore_Main/src/de/steamwar/command/SubCommand.java +++ b/SpigotCore_Main/src/de/steamwar/command/SubCommand.java @@ -101,37 +101,41 @@ class SubCommand { } List tabComplete(CommandSender commandSender, String[] args) { - if (varArgType == null && args.length < arguments.length + subCommand.length - 1) { + if (varArgType == null && args.length > arguments.length + subCommand.length) { return null; } + int index = 0; List argsList = new LinkedList<>(Arrays.asList(args)); for (String value : subCommand) { String s = argsList.remove(0); if (argsList.isEmpty()) return Collections.singletonList(value); if (!value.equalsIgnoreCase(s)) return null; + index++; } for (TypeMapper argument : arguments) { String s = argsList.remove(0); if (argsList.isEmpty()) return argument.tabCompletes(commandSender, Arrays.copyOf(args, args.length - 1), s); try { - if (argument.map(Arrays.copyOf(args, argsList.size()), s) == null) { + if (argument.map(Arrays.copyOf(args, index), s) == null) { return null; } } catch (Exception e) { return null; } + index++; } if (varArgType != null && !argsList.isEmpty()) { while (!argsList.isEmpty()) { String s = argsList.remove(0); if (argsList.isEmpty()) return arguments[arguments.length - 1].tabCompletes(commandSender, Arrays.copyOf(args, args.length - 1), s); try { - if (arguments[arguments.length - 1].map(Arrays.copyOf(args, argsList.size()), s) == null) { + if (arguments[arguments.length - 1].map(Arrays.copyOf(args, index), s) == null) { return null; } } catch (Exception e) { return null; } + index++; } } return null;