🐛 Fix async completions (#38)

Co-authored-by: Alexander Söderberg <sauilitired@gmail.com>
This commit is contained in:
Jason 2020-10-08 04:12:07 -07:00 committed by GitHub
parent aa572e3533
commit 882154a6a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 160 additions and 54 deletions

View file

@ -33,9 +33,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
import java.util.List;
class AsyncCommandSuggestionsListener<C> implements Listener {
private static final long CACHE_EXPIRATION_TIME = 30L;
final class AsyncCommandSuggestionsListener<C> implements Listener {
private final PaperCommandManager<C> paperCommandManager;
@ -44,25 +42,30 @@ class AsyncCommandSuggestionsListener<C> implements Listener {
}
@EventHandler
void onTabCompletion(final @NonNull AsyncTabCompleteEvent event) throws Exception {
void onTabCompletion(final @NonNull AsyncTabCompleteEvent event) {
if (event.getBuffer().isEmpty() || !event.getBuffer().startsWith("/")) {
return;
}
final String[] arguments = event.getBuffer().substring(1).split(" ");
if (this.paperCommandManager.getCommandTree().getNamedNode(arguments[0]) == null) {
return;
}
@SuppressWarnings("unchecked") final BukkitPluginRegistrationHandler<C> bukkitPluginRegistrationHandler =
@SuppressWarnings("unchecked")
final BukkitPluginRegistrationHandler<C> bukkitPluginRegistrationHandler =
(BukkitPluginRegistrationHandler<C>) this.paperCommandManager.getCommandRegistrationHandler();
if (!bukkitPluginRegistrationHandler.isRecognized(arguments[0])) {
/* Turn '/plugin:command arg1 arg2 ...' into 'plugin:command' */
final String commandLabel = event.getBuffer().substring(1).split(" ")[0];
if (!bukkitPluginRegistrationHandler.isRecognized(commandLabel)) {
return;
}
final CommandSender sender = event.getSender();
final C cloudSender = this.paperCommandManager.getCommandSenderMapper().apply(sender);
final String inputBuffer = this.paperCommandManager.stripNamespace(event.getBuffer());
final List<String> suggestions = new ArrayList<>(this.paperCommandManager.suggest(
cloudSender,
event.getBuffer().substring(1)
inputBuffer
));
event.setCompletions(suggestions);
event.setHandled(true);
}