3
0
Mirror von https://github.com/PaperMC/Velocity.git synchronisiert 2024-11-16 21:10:30 +01:00

Fix tab completions not being forwarded to backend if proxy command exists but is inaccessible (#1329)

Dieser Commit ist enthalten in:
Gero 2024-05-26 14:19:37 +02:00 committet von GitHub
Ursprung 71bb0246a8
Commit 42d4288334
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: B5690EEEBB952194
3 geänderte Dateien mit 25 neuen und 2 gelöschten Zeilen

Datei anzeigen

@ -10,6 +10,7 @@ package com.velocitypowered.api.command;
import com.velocitypowered.api.event.command.CommandExecuteEvent; import com.velocitypowered.api.event.command.CommandExecuteEvent;
import java.util.Collection; import java.util.Collection;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.function.Predicate;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
/** /**
@ -126,4 +127,15 @@ public interface CommandManager {
* @return true if the alias is registered; false otherwise * @return true if the alias is registered; false otherwise
*/ */
boolean hasCommand(String alias); 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);
} }

Datei anzeigen

@ -347,8 +347,19 @@ public class VelocityCommandManager implements CommandManager {
@Override @Override
public boolean hasCommand(final String alias) { 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"); 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 @VisibleForTesting // this constitutes unsafe publication

Datei anzeigen

@ -630,7 +630,7 @@ public class ClientPlaySessionHandler implements MinecraftSessionHandler {
} }
String commandLabel = command.substring(0, commandEndPosition); 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)) { if (player.getProtocolVersion().lessThan(ProtocolVersion.MINECRAFT_1_13)) {
// Outstanding tab completes are recorded for use with 1.12 clients and below to provide // Outstanding tab completes are recorded for use with 1.12 clients and below to provide
// additional tab completion support. // additional tab completion support.