Use Command instead of TabCompleteEvent on Bukkit

This commit is contained in:
jmp 2021-01-18 02:02:33 -08:00 committed by Jason
parent 2cc72e2ff9
commit 58f49033ce
3 changed files with 19 additions and 31 deletions

View file

@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Changed
- Use Command instead of TabCompleteEvent on Bukkit
## [1.4.0] - 2021-01-16 ## [1.4.0] - 2021-01-16
### Added ### Added

View file

@ -76,6 +76,22 @@ final class BukkitCommand<C> extends org.bukkit.command.Command implements Plugi
} }
} }
@Override
public List<String> tabComplete(
final @NonNull CommandSender sender,
final @NonNull String alias,
final @NonNull String @NonNull [] args
) throws IllegalArgumentException {
final StringBuilder builder = new StringBuilder(this.command.getName());
for (final String string : args) {
builder.append(" ").append(string);
}
return this.manager.suggest(
this.manager.getCommandSenderMapper().apply(sender),
builder.toString()
);
}
@Override @Override
public boolean execute( public boolean execute(
final @NonNull CommandSender commandSender, final @NonNull CommandSender commandSender,

View file

@ -42,37 +42,6 @@ final class CloudBukkitListener<C> implements Listener {
this.bukkitCommandManager = bukkitCommandManager; this.bukkitCommandManager = bukkitCommandManager;
} }
@EventHandler
void onTabCompletion(final @NonNull TabCompleteEvent event) {
if (event.getBuffer().isEmpty()) {
return;
}
@SuppressWarnings("unchecked")
final BukkitPluginRegistrationHandler<C> bukkitPluginRegistrationHandler =
(BukkitPluginRegistrationHandler<C>) this.bukkitCommandManager.getCommandRegistrationHandler();
/* Turn '(/)plugin:command arg1 arg2 ...' into 'plugin:command' */
final String commandLabel = (event.getBuffer().startsWith("/")
? event.getBuffer().substring(1)
: event.getBuffer())
.split(" ")[0];
if (!bukkitPluginRegistrationHandler.isRecognized(commandLabel)) {
return;
}
final CommandSender sender = event.getSender();
final C cloudSender = this.bukkitCommandManager.getCommandSenderMapper().apply(sender);
final String inputBuffer = this.bukkitCommandManager.stripNamespace(event.getBuffer());
final List<String> suggestions = new ArrayList<>(this.bukkitCommandManager.suggest(
cloudSender,
inputBuffer
));
event.setCompletions(suggestions);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
void onPlayerLogin(final @NonNull PlayerLoginEvent event) { void onPlayerLogin(final @NonNull PlayerLoginEvent event) {
/* If the server is brigadier-capable, any registration after players /* If the server is brigadier-capable, any registration after players