Skip to content
This repository was archived by the owner on Jul 24, 2021. It is now read-only.

Commit 8fd54f5

Browse files
committed
🚑️ Rework tab completer logic method
1 parent 217a250 commit 8fd54f5

File tree

1 file changed

+22
-14
lines changed

1 file changed

+22
-14
lines changed

src/main/java/fr/bakaaless/api/command/CommandManager.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)