Skip to content

Commit

Permalink
Fix tab completions not being forwarded to backend if proxy command e…
Browse files Browse the repository at this point in the history
…xists but is inaccessible (#1329)
  • Loading branch information
Gerrygames authored May 26, 2024
1 parent 71bb024 commit 42d4288
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.velocitypowered.api.event.command.CommandExecuteEvent;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import java.util.function.Predicate;
import org.checkerframework.checker.nullness.qual.Nullable;

/**
Expand Down Expand Up @@ -126,4 +127,15 @@ default void register(String alias, Command command, String... otherAliases) {
* @return true if the alias is registered; false otherwise
*/
boolean hasCommand(String alias);

/**
* Returns whether the given alias is registered on this manager
* and can be used by the given {@link CommandSource}.
* See {@link com.mojang.brigadier.builder.ArgumentBuilder#requires(Predicate)}
*
* @param alias the command alias to check
* @param source the command source
* @return true if the alias is registered and usable; false otherwise
*/
boolean hasCommand(String alias, CommandSource source);
}
Original file line number Diff line number Diff line change
Expand Up @@ -347,8 +347,19 @@ public Collection<String> getAliases() {

@Override
public boolean hasCommand(final String alias) {
return getCommand(alias) != null;
}

@Override
public boolean hasCommand(String alias, CommandSource source) {
Preconditions.checkNotNull(source, "source");
CommandNode<CommandSource> command = getCommand(alias);
return command != null && command.canUse(source);
}

CommandNode<CommandSource> getCommand(final String alias) {
Preconditions.checkNotNull(alias, "alias");
return dispatcher.getRoot().getChild(alias.toLowerCase(Locale.ENGLISH)) != null;
return dispatcher.getRoot().getChild(alias.toLowerCase(Locale.ENGLISH));
}

@VisibleForTesting // this constitutes unsafe publication
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,7 @@ private boolean handleCommandTabComplete(TabCompleteRequestPacket packet) {
}

String commandLabel = command.substring(0, commandEndPosition);
if (!server.getCommandManager().hasCommand(commandLabel)) {
if (!server.getCommandManager().hasCommand(commandLabel, player)) {
if (player.getProtocolVersion().lessThan(ProtocolVersion.MINECRAFT_1_13)) {
// Outstanding tab completes are recorded for use with 1.12 clients and below to provide
// additional tab completion support.
Expand Down

0 comments on commit 42d4288

Please sign in to comment.