--- a/net/minecraft/commands/PermissionSource.java +++ b/net/minecraft/commands/PermissionSource.java @@ -9,9 +_,22 @@ return this.hasPermission(2); } - public record Check(@Override int requiredLevel) implements PermissionCheck { + // Paper start - Vanilla Command permission checking & expose restricted API + interface RestrictedMarker { } + + public record Check(@Override int requiredLevel, java.util.concurrent.atomic.AtomicReference> vanillaNode) implements PermissionCheck { + public Check(int requiredLevel) { + this(requiredLevel, new java.util.concurrent.atomic.AtomicReference<>()); + } + // Paper end - Vanilla Command permission checking & expose restricted API @Override public boolean test(T source) { + // Paper start - Vanilla Command permission checking + com.mojang.brigadier.tree.CommandNode currentCommand = vanillaNode.get(); + if (currentCommand != null && source instanceof CommandSourceStack commandSourceStack) { + return commandSourceStack.hasPermission(this.requiredLevel, org.bukkit.craftbukkit.command.VanillaCommandWrapper.getPermission(currentCommand)); + } + // Paper end - Vanilla Command permission checking return source.hasPermission(this.requiredLevel); } }