mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-22 18:45:54 +01:00
c6aa61ee18
Updated Upstream (Bukkit/CraftBukkit/Spigot) 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 Bukkit Changes: b9df8e9f SPIGOT-7933: Improve custom Minecart max speed fc496179 Fix InstrumentTest 7c0ec598 PR-1075: Make Art an interface c389f5a4 PR-1074: Make Sound an interface CraftBukkit Changes: df1efc0bb SPIGOT-7945: `Bukkit#dispatchCommand` throws `UnsupportedOperationException` 285df6e85 SPIGOT-7933: Improve custom Minecart max speed a0f3d4e50 SPIGOT-7940: Recipe book errors after reload 9e0618ec2 SPIGOT-7937: Cannot spawn minecart during world generation with minecart_improvements enabled 1eb4d28da SPIGOT-7941: Fix resistance over 4 amplify causing issues in damage 52b99158a PR-1504: Make Art an interface e18ae35f1 PR-1502: Make Sound an interface Spigot Changes: e65d67a7 SPIGOT-7934: Item entities start "bouncing" under certain conditions
80 lines
4.1 KiB
Diff
80 lines
4.1 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..d5f7da3502575f6847f3c22ab0e942848a7c6031 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 - Vanilla command permission fixes
|
|
+ private static final Predicate<Object> DEFAULT_REQUIREMENT = s -> true;
|
|
+
|
|
+ @SuppressWarnings("unchecked")
|
|
+ public static <S> Predicate<S> defaultRequirement() {
|
|
+ return (Predicate<S>) DEFAULT_REQUIREMENT;
|
|
+ }
|
|
+ // Paper end - Vanilla command permission fixes
|
|
private final RootCommandNode<S> arguments = new RootCommandNode<>();
|
|
private Command<S> command;
|
|
- private Predicate<S> requirement = s -> true;
|
|
+ private Predicate<S> requirement = defaultRequirement(); // Paper - Vanilla command permission fixes
|
|
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 7acd7f60327106d55e8f48247650bc0064dd1b58..bee79fab7f8195e14f6bd22d9cd59bfc704bf903 100644
|
|
--- a/src/main/java/net/minecraft/commands/Commands.java
|
|
+++ b/src/main/java/net/minecraft/commands/Commands.java
|
|
@@ -261,6 +261,13 @@ public class Commands {
|
|
PublishCommand.register(this.dispatcher);
|
|
}
|
|
|
|
+ // Paper start - Vanilla command permission fixes
|
|
+ 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 - Vanilla command permission fixes
|
|
// 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 71bc74071e7bbce1d6aa5b0f0fb244c93dae168e..732655bf8dd279167f799e01b1516b4dd5fa7464 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
|
|
@@ -91,7 +91,21 @@ 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 - Vanilla command permission fixes
|
|
+ while (vanillaCommand.getRedirect() != null) {
|
|
+ vanillaCommand = vanillaCommand.getRedirect();
|
|
+ }
|
|
+ final String commandName = vanillaCommand.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 - Vanilla command permission fixes
|
|
}
|
|
|
|
private String toDispatcher(String[] args, String name) {
|