a73ed9572e
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: b76ceb4f5 PR-1235: Move EntityType return to base Entity class e795d7490 SPIGOT-7458: Exception when Entity CommandSender executes Vanilla command 46c7fc3b1 SPIGOT-7452: Player#openSign cannot edit d91e5aa0b SPIGOT-7447: Rewrite --forceUpgrade to minimise diff and properly handle CraftBukkit world layout 921ae06d6 Revert "SPIGOT-7447: Fix --forceUpgrade" Spigot Changes: 94e187b5 Rebuild patches 3bce7935 SPIGOT-7091: Update bungeecord-chat
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 14c78028ff51fff6f24174ae16b7c42d34d6041a..7592b592a541912f729d6b99f455cd87ebcb34b8 100644
|
|
--- a/src/main/java/net/minecraft/commands/Commands.java
|
|
+++ b/src/main/java/net/minecraft/commands/Commands.java
|
|
@@ -231,6 +231,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 e396079645332b1982d2368b8f97ec9ff377c8ce..45e85f252acd72800956cc2a120564256d2de797 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) {
|