From 62607d2c9024d34a62adeeaba03849b06ffb5088 Mon Sep 17 00:00:00 2001 From: stonar96 Date: Sun, 12 Sep 2021 00:14:21 +0200 Subject: [PATCH] Check requirement before suggesting root nodes Child nodes are handled by CommandDispatcher#parse checking requirements. Vanilla clients only send ServerboundCommandSuggestionPacket when encountering a command node with ASK_SERVER suggestions, however a modified client can send this packet whenever it wants. --- .../com/mojang/brigadier/CommandDispatcher.java.patch | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/paper-server/patches/sources/com/mojang/brigadier/CommandDispatcher.java.patch b/paper-server/patches/sources/com/mojang/brigadier/CommandDispatcher.java.patch index 25e60973c6..43c5d97060 100644 --- a/paper-server/patches/sources/com/mojang/brigadier/CommandDispatcher.java.patch +++ b/paper-server/patches/sources/com/mojang/brigadier/CommandDispatcher.java.patch @@ -8,12 +8,19 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContextBuilder; -@@ -538,7 +539,7 @@ +@@ -537,10 +538,14 @@ + int i = 0; for (final CommandNode node : parent.getChildren()) { CompletableFuture future = Suggestions.empty(); ++ // Paper start - Don't suggest if the requirement isn't met ++ if (parent != this.root || node.canUse(context.getSource())) { try { - future = node.listSuggestions(context.build(truncatedInput), new SuggestionsBuilder(truncatedInput, truncatedInputLowerCase, start)); -+ if (node.canUse(parse.getContext().getSource())) future = node.listSuggestions(context.build(truncatedInput), new SuggestionsBuilder(truncatedInput, truncatedInputLowerCase, start)); // CraftBukkit ++ future = node.listSuggestions(context.build(truncatedInput), new SuggestionsBuilder(truncatedInput, truncatedInputLowerCase, start)); // CraftBukkit } catch (final CommandSyntaxException ignored) { } ++ } ++ // Paper end - Don't suggest if the requirement isn't met futures[i++] = future; + } +