Send brigadier permissions to bukkit command manager
This commit is contained in:
parent
e8a1a9a6cf
commit
d3ed876df6
5 changed files with 29 additions and 6 deletions
|
|
@ -222,6 +222,9 @@ public abstract class CommandManager<C> {
|
||||||
* @return {@code true} if the sender has the permission, else {@code false}
|
* @return {@code true} if the sender has the permission, else {@code false}
|
||||||
*/
|
*/
|
||||||
public boolean hasPermission(@Nonnull final C sender, @Nonnull final CommandPermission permission) {
|
public boolean hasPermission(@Nonnull final C sender, @Nonnull final CommandPermission permission) {
|
||||||
|
if (permission.toString().isEmpty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (permission instanceof Permission) {
|
if (permission instanceof Permission) {
|
||||||
return hasPermission(sender, permission.toString());
|
return hasPermission(sender, permission.toString());
|
||||||
}
|
}
|
||||||
|
|
@ -233,7 +236,7 @@ public abstract class CommandManager<C> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return !(permission instanceof OrPermission);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ import javax.annotation.Nonnull;
|
||||||
class CommandPermissionTest {
|
class CommandPermissionTest {
|
||||||
|
|
||||||
private final static CommandManager<TestCommandSender> manager = new PermissionOutputtingCommandManager();
|
private final static CommandManager<TestCommandSender> manager = new PermissionOutputtingCommandManager();
|
||||||
|
private static boolean acceptOne = false;
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
static void setup() {
|
static void setup() {
|
||||||
|
|
@ -46,7 +47,9 @@ class CommandPermissionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCompoundPermission() {
|
void testCompoundPermission() {
|
||||||
Assertions.assertTrue(manager.suggest(new TestCommandSender(), "").isEmpty());
|
Assertions.assertTrue(manager.suggest(new TestCommandSender(), "t").isEmpty());
|
||||||
|
acceptOne = true;
|
||||||
|
Assertions.assertFalse(manager.suggest(new TestCommandSender(), "t").isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class PermissionOutputtingCommandManager extends CommandManager<TestCommandSender> {
|
private static final class PermissionOutputtingCommandManager extends CommandManager<TestCommandSender> {
|
||||||
|
|
@ -58,7 +61,7 @@ class CommandPermissionTest {
|
||||||
@Override
|
@Override
|
||||||
public boolean hasPermission(@Nonnull final TestCommandSender sender,
|
public boolean hasPermission(@Nonnull final TestCommandSender sender,
|
||||||
@Nonnull final String permission) {
|
@Nonnull final String permission) {
|
||||||
return false;
|
return acceptOne && permission.equalsIgnoreCase("test.permission.four");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
|
|
|
||||||
|
|
@ -221,6 +221,15 @@ public class BukkitCommandManager<C> extends CommandManager<C> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the backwards command sender plugin
|
||||||
|
*
|
||||||
|
* @return The backwards command sender mapper
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
public final Function<C, CommandSender> getBackwardsCommandSenderMapper() {
|
||||||
|
return this.backwardsCommandSenderMapper;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reasons to explain why Brigadier failed to initialize
|
* Reasons to explain why Brigadier failed to initialize
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ import javax.annotation.Nonnull;
|
||||||
@SuppressWarnings("ALL")
|
@SuppressWarnings("ALL")
|
||||||
class CloudCommodoreManager<C> extends BukkitPluginRegistrationHandler<C> {
|
class CloudCommodoreManager<C> extends BukkitPluginRegistrationHandler<C> {
|
||||||
|
|
||||||
|
private final BukkitCommandManager<C> commandManager;
|
||||||
private final CloudBrigadierManager brigadierManager;
|
private final CloudBrigadierManager brigadierManager;
|
||||||
private final Commodore commodore;
|
private final Commodore commodore;
|
||||||
|
|
||||||
|
|
@ -45,6 +46,7 @@ class CloudCommodoreManager<C> extends BukkitPluginRegistrationHandler<C> {
|
||||||
throw new BukkitCommandManager.BrigadierFailureException(BukkitCommandManager
|
throw new BukkitCommandManager.BrigadierFailureException(BukkitCommandManager
|
||||||
.BrigadierFailureReason.COMMODORE_NOT_PRESENT);
|
.BrigadierFailureReason.COMMODORE_NOT_PRESENT);
|
||||||
}
|
}
|
||||||
|
this.commandManager = commandManager;
|
||||||
this.commodore = CommodoreProvider.getCommodore(commandManager.getOwningPlugin());
|
this.commodore = CommodoreProvider.getCommodore(commandManager.getOwningPlugin());
|
||||||
this.brigadierManager = new CloudBrigadierManager<>(commandManager, () ->
|
this.brigadierManager = new CloudBrigadierManager<>(commandManager, () ->
|
||||||
new CommandContext<>(commandManager.getCommandSenderMapper().apply(Bukkit.getConsoleSender())));
|
new CommandContext<>(commandManager.getCommandSenderMapper().apply(Bukkit.getConsoleSender())));
|
||||||
|
|
@ -58,6 +60,7 @@ class CloudCommodoreManager<C> extends BukkitPluginRegistrationHandler<C> {
|
||||||
final LiteralCommandNode<?> literalCommandNode = this.brigadierManager
|
final LiteralCommandNode<?> literalCommandNode = this.brigadierManager
|
||||||
.createLiteralCommandNode(label, command, (o, p) -> true, cmd);
|
.createLiteralCommandNode(label, command, (o, p) -> true, cmd);
|
||||||
this.commodore.register(bukkitCommand, literalCommandNode, p ->
|
this.commodore.register(bukkitCommand, literalCommandNode, p ->
|
||||||
p.hasPermission(command.getCommandPermission().toString()));
|
this.commandManager.hasPermission(commandManager.getCommandSenderMapper().apply(p),
|
||||||
|
command.getCommandPermission()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import com.intellectualsites.commands.CommandTree;
|
||||||
import com.intellectualsites.commands.arguments.CommandArgument;
|
import com.intellectualsites.commands.arguments.CommandArgument;
|
||||||
import com.intellectualsites.commands.brigadier.CloudBrigadierManager;
|
import com.intellectualsites.commands.brigadier.CloudBrigadierManager;
|
||||||
import com.intellectualsites.commands.context.CommandContext;
|
import com.intellectualsites.commands.context.CommandContext;
|
||||||
|
import com.intellectualsites.commands.permission.CommandPermission;
|
||||||
import com.mojang.brigadier.arguments.ArgumentType;
|
import com.mojang.brigadier.arguments.ArgumentType;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
@ -41,6 +42,7 @@ import javax.annotation.Nonnull;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.function.BiPredicate;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
class PaperBrigadierListener<C> implements Listener {
|
class PaperBrigadierListener<C> implements Listener {
|
||||||
|
|
@ -124,12 +126,15 @@ class PaperBrigadierListener<C> implements Listener {
|
||||||
if (node == null) {
|
if (node == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
final BiPredicate<BukkitBrigadierCommandSource, CommandPermission> permissionChecker = (s, p) -> {
|
||||||
|
final C sender = paperCommandManager.getCommandSenderMapper().apply(s.getBukkitSender());
|
||||||
|
return paperCommandManager.hasPermission(sender, p);
|
||||||
|
};
|
||||||
event.setLiteral(this.brigadierManager.createLiteralCommandNode(node,
|
event.setLiteral(this.brigadierManager.createLiteralCommandNode(node,
|
||||||
event.getLiteral(),
|
event.getLiteral(),
|
||||||
event.getBrigadierCommand(),
|
event.getBrigadierCommand(),
|
||||||
event.getBrigadierCommand(),
|
event.getBrigadierCommand(),
|
||||||
(s, p) -> p.toString().isEmpty()
|
permissionChecker));
|
||||||
|| s.getBukkitSender().hasPermission(p.toString())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue