bffb08c2f9
The Paper method was chosen for deprecation because it was more restrictive in that it has an isGliding check.
82 Zeilen
4.0 KiB
Diff
82 Zeilen
4.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
|
|
Date: Wed, 25 Aug 2021 13:19:53 -0700
|
|
Subject: [PATCH] Vanilla command permission fixes
|
|
|
|
Fixes permission checks for vanilla commands which don't have a
|
|
requirement, as well as for namespaced vanilla commands.
|
|
|
|
== AT ==
|
|
public-f com.mojang.brigadier.tree.CommandNode requirement
|
|
|
|
diff --git a/src/main/java/com/mojang/brigadier/builder/ArgumentBuilder.java b/src/main/java/com/mojang/brigadier/builder/ArgumentBuilder.java
|
|
index 899008b2980d13f1be6280cd8cb959c53a29bebf..f875507241ac6769545e91cd3285232b75b892f0 100644
|
|
--- a/src/main/java/com/mojang/brigadier/builder/ArgumentBuilder.java
|
|
+++ b/src/main/java/com/mojang/brigadier/builder/ArgumentBuilder.java
|
|
@@ -14,9 +14,17 @@ import java.util.Collections;
|
|
import java.util.function.Predicate;
|
|
|
|
public abstract class ArgumentBuilder<S, T extends ArgumentBuilder<S, T>> {
|
|
+ // Paper start
|
|
+ private static final Predicate<Object> DEFAULT_REQUIREMENT = s -> true;
|
|
+
|
|
+ @SuppressWarnings("unchecked")
|
|
+ public static <S> Predicate<S> defaultRequirement() {
|
|
+ return (Predicate<S>) DEFAULT_REQUIREMENT;
|
|
+ }
|
|
+ // Paper end
|
|
private final RootCommandNode<S> arguments = new RootCommandNode<>();
|
|
private Command<S> command;
|
|
- private Predicate<S> requirement = s -> true;
|
|
+ private Predicate<S> requirement = defaultRequirement(); // Paper
|
|
private CommandNode<S> target;
|
|
private RedirectModifier<S> modifier = null;
|
|
private boolean forks;
|
|
diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java
|
|
index 5fd7e5aa0644fda8e2f7f57eef9a6f0011534cb9..b201fd131864751bea1e926c6b23f9742eae1c8e 100644
|
|
--- a/src/main/java/net/minecraft/commands/Commands.java
|
|
+++ b/src/main/java/net/minecraft/commands/Commands.java
|
|
@@ -237,6 +237,13 @@ public class Commands {
|
|
}
|
|
this.vanillaCommandNodes.addAll(this.dispatcher.getRoot().getChildren()); // Paper
|
|
|
|
+ // Paper start
|
|
+ for (final CommandNode<CommandSourceStack> node : this.dispatcher.getRoot().getChildren()) {
|
|
+ if (node.getRequirement() == com.mojang.brigadier.builder.ArgumentBuilder.<CommandSourceStack>defaultRequirement()) {
|
|
+ node.requirement = stack -> stack.source == CommandSource.NULL || stack.getBukkitSender().hasPermission(org.bukkit.craftbukkit.command.VanillaCommandWrapper.getPermission(node));
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
// CraftBukkit start
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
|
|
index 35746f4fc45568c32497677b63a2a746c7a9ba94..13804bb81a13d51d2e9e55d8a477369ba20fc301 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
|
|
@@ -88,7 +88,23 @@ public final class VanillaCommandWrapper extends BukkitCommand {
|
|
}
|
|
|
|
public static String getPermission(CommandNode<CommandSourceStack> vanillaCommand) {
|
|
- return "minecraft.command." + ((vanillaCommand.getRedirect() == null) ? vanillaCommand.getName() : vanillaCommand.getRedirect().getName());
|
|
+ // Paper start
|
|
+ final String commandName;
|
|
+ if (vanillaCommand.getRedirect() == null) {
|
|
+ commandName = vanillaCommand.getName();
|
|
+ } else {
|
|
+ commandName = vanillaCommand.getRedirect().getName();
|
|
+ }
|
|
+ return "minecraft.command." + stripDefaultNamespace(commandName);
|
|
+ }
|
|
+
|
|
+ private static String stripDefaultNamespace(final String maybeNamespaced) {
|
|
+ final String prefix = "minecraft:";
|
|
+ if (maybeNamespaced.startsWith(prefix)) {
|
|
+ return maybeNamespaced.substring(prefix.length());
|
|
+ }
|
|
+ return maybeNamespaced;
|
|
+ // Paper end
|
|
}
|
|
|
|
private String toDispatcher(String[] args, String name) {
|