@@ -193,12 +193,9 @@ public CommandManager(final Class<? extends JavaPlugin> clazz) {
193193 @ Nullable
194194 @ Override
195195 public List <String > onTabComplete (@ NotNull CommandSender sender , @ NotNull Command command , @ NotNull String alias , @ NotNull String [] args ) {
196-
197- final StringBuilder rawArgs = new StringBuilder ();
198196 final StringBuilder builder = new StringBuilder ();
199197 Pair <Boolean , String > concatenateArgs = Pair .from (false , "" );
200198 for (final String arg : args ) {
201- rawArgs .append (" " ).append (arg );
202199 if (concatenateArgs .getFirst ()) {
203200 if (arg .endsWith ("\" " ) && !arg .endsWith ("\\ \" " ) && concatenateArgs .getSecond ().equalsIgnoreCase ("\" " )) {
204201 concatenateArgs = Pair .from (false , "" );
@@ -221,12 +218,19 @@ public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Comman
221218 }
222219 }
223220
224- String argument = "" ;
225- if (rawArgs .length () > 0 ) {
226- rawArgs .deleteCharAt (0 );
227- argument = (builder .charAt (builder .length () - 1 ) == '\n' ? builder .deleteCharAt (builder .length () - 1 ).toString () : builder .toString ()).replace ("\\ \" " , "\" " );
221+ final String argument = (builder .charAt (builder .length () - 1 ) == '\n' ? builder .deleteCharAt (builder .length () - 1 ).toString () : builder .toString ()).replace ("\\ \" " , "\" " );
222+ final String [] tempArgs = argument .split ("\n " );
223+
224+ final StringBuilder toCheck = new StringBuilder ();
225+ for (int index = 0 ; index < tempArgs .length ; index ++) {
226+ toCheck .append (tempArgs [index ]);
227+ if (index < tempArgs .length -1 )
228+ toCheck .append ("," );
228229 }
229230
231+ if (tempArgs .length < 1 )
232+ return new ArrayList <>();
233+
230234 String containsCommand = "" ;
231235 Pair <CommandRunner , String > toExec = null ;
232236 boolean isCommandInExec = false ;
@@ -244,17 +248,20 @@ public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Comman
244248 }
245249 }
246250
247- for (final Map .Entry <String , List <CommandRunner >> subCommands : this .subCommands .entrySet ()) {
248- if (!containsCommand .isEmpty ()) {
251+ if (args [args .length - 1 ].isEmpty ())
252+ toCheck .append ("," );
253+
254+ if (!containsCommand .isEmpty ()) {
255+ for (final Map .Entry <String , List <CommandRunner >> subCommands : this .subCommands .entrySet ()) {
249256 if (!subCommands .getKey ().equalsIgnoreCase (containsCommand ))
250257 continue ;
251258 for (final CommandRunner executor : subCommands .getValue ()) {
252259 final RunSubCommand annotation = getAnnotationSubCommand (executor );
253260 if (annotation == null )
254261 continue ;
255262 for (final String aliases : annotation .subCommand ()) {
256-
257- if (! argument . toLowerCase (). startsWith ( aliases . replace ( " " , "," ). toLowerCase ()) )
263+ final boolean condition = ! toCheck . toString (). toLowerCase (). startsWith (( aliases + " " ). replace ( " " , "," ). toLowerCase ());
264+ if (condition )
258265 continue ;
259266
260267 if (isCommandInExec ) {
@@ -269,8 +276,9 @@ else if (toExec.getSecond().length() < aliases.length())
269276 }
270277
271278 if (toExec != null ) {
272- final String finalArg = argument .replace (toExec .getSecond ().replace (" " , "\n " ), "" );
273-
279+ String finalArg = argument .replace (toExec .getSecond ().replace (" " , "\n " ), "" );
280+ if (finalArg .startsWith ("\n " ))
281+ finalArg = finalArg .replaceFirst ("\n " , "" );
274282
275283 final List <String > arguments = (finalArg .equals ("" ) ?
276284 new ArrayList <>() :
@@ -410,7 +418,7 @@ public final void unregisterRunners(final Class<? extends CommandRunner>... exec
410418 }
411419 basePluginCommand .unregister (map );
412420 names .forEach (name ->
413- commands .remove (name , basePluginCommand )
421+ commands .remove (name , basePluginCommand )
414422 );
415423 } catch (NoSuchFieldException | IllegalAccessException e ) {
416424 this .pluginInstance .getLogger ().log (Level .SEVERE , Messages .ERROR_COMMAND_UNKNOWN .get (), e );
0 commit comments