CommandAPI icon indicating copy to clipboard operation
CommandAPI copied to clipboard

CommandApi permission bug

Open Alienn-Know opened this issue 1 year ago • 1 comments

CommandAPI version

9.5.3

Minecraft version

1.20.6

Are you shading the CommandAPI?

Yes

What I did

I added @Permission annotation to subcommand with literal argument but it is ignored, used from @Defauld command

@Permission("hero")
public class HeroCommands {

    @Default
//    @Permission("hero.help")
    public static void hero(Player player) {
        Untitled plugin = (Untitled) Bukkit.getPluginManager().getPlugin("Untitled");

        plugin.getServer().getAsyncScheduler().runNow(plugin, scheduledTask -> {
            long start = System.currentTimeMillis();
            player.sendMessage(CommandChatComponentHeroCreator.getHeroComponentByPage(1));
            player.sendMessage("" + (System.currentTimeMillis() - start));
        });
    }

    @Subcommand("help")
    @Permission("hero.help")
    public static void help(Player player) {
        player.sendMessage(CommandChatComponentHeroCreator.getHeroComponentByPage(1));
    }

    @Subcommand("help")
    @Permission("hero.help")
    public static void help2(Player player, @AIntegerArgument(min = 1, max = 20) int page) {
        player.sendMessage(CommandChatComponentHeroCreator.getHeroComponentByPage(page));
    }

    @Default
    @Permission("hero.admin")
    public static void admin(Player player, @ALiteralArgument("admin") String admin) {
        player.sendMessage(CommandChatComponentHeroCreator.getAdminComponentByPage(1));
    }

    @Default
    @Permission("hero.admin.help")
    public static void adminHelp(Player player, @ALiteralArgument("admin") String admin, @ALiteralArgument("help") String help) {
        player.sendMessage(CommandChatComponentHeroCreator.getAdminComponentByPage(1));
    }

    @Default
    @Permission("hero.admin.help")
    public static void adminHelp2(Player player, @ALiteralArgument("admin") String admin, @ALiteralArgument("help") String help, @AIntegerArgument(min = 1, max = 20) int page) {
        player.sendMessage(CommandChatComponentHeroCreator.getAdminComponentByPage(page));
    }


    @Subcommand("test")
    @Permission("hero.test")
    public static void test(Player player, @AIntegerArgument(min = -10, max = 200) int currentNumber, @AIntegerArgument(min = -10, max = 200) int maxNumber) {
        player.sendMessage(CommandChatComponentHeroCreator.getHeaderChat("Heroes Help", currentNumber, maxNumber));
        player.sendMessage(CommandChatComponentHeroCreator.getInfoComponent());
        player.sendMessage(CommandChatComponentHeroCreator.getFooterChat("heros", currentNumber, maxNumber));
    } ```

THIS IS IS COMPILED ->>>

```// This class was automatically generated by the CommandAPI
public class HeroCommands$Command {

@SuppressWarnings("unchecked")
public static void register() {

    new CommandAPICommand("heros")
        .withPermission("hero")
        .executesPlayer((sender, args) -> {
            HeroCommands.hero(sender);
        })
        .register();

    new CommandAPICommand("heros")
        .withArguments(
            new MultiLiteralArgument("subcommand", "help")
                .setListed(false)
                .withPermission("hero.help")
        )
        .withPermission("hero")
        .executesPlayer((sender, args) -> {
            HeroCommands.help(sender);
        })
        .register();

    new CommandAPICommand("heros")
        .withArguments(
            new MultiLiteralArgument("subcommand", "help")
                .setListed(false)
                .withPermission("hero.help")
        )
        .withPermission("hero")
        .withArguments(new IntegerArgument("page", 1, 20))
        .executesPlayer((sender, args) -> {
            HeroCommands.help2(sender, (int) args.get(0));
        })
        .register();

    new CommandAPICommand("heros")
        .withPermission("hero")
        .withArguments(new LiteralArgument("admin", "admin").setListed(true))
        .executesPlayer((sender, args) -> {
            HeroCommands.admin(sender, (String) args.get(0));
        })
        .register();

    new CommandAPICommand("heros")
        .withPermission("hero")
        .withArguments(new LiteralArgument("admin", "admin").setListed(true))
        .withArguments(new LiteralArgument("help", "help").setListed(true))
        .executesPlayer((sender, args) -> {
            HeroCommands.adminHelp(sender, (String) args.get(0), (String) args.get(1));
        })
        .register();

    new CommandAPICommand("heros")
        .withPermission("hero")
        .withArguments(new LiteralArgument("admin", "admin").setListed(true))
        .withArguments(new LiteralArgument("help", "help").setListed(true))
        .withArguments(new IntegerArgument("page", 1, 20))
        .executesPlayer((sender, args) -> {
            HeroCommands.adminHelp2(sender, (String) args.get(0), (String) args.get(1), (int) args.get(2));
        })
        .register();

    new CommandAPICommand("heros")
        .withArguments(
            new MultiLiteralArgument("subcommand", "test")
                .setListed(false)
                .withPermission("hero.test")
        )
        .withPermission("hero")
        .withArguments(new IntegerArgument("currentNumber", -10, 200))
        .withArguments(new IntegerArgument("maxNumber", -10, 200))
        .executesPlayer((sender, args) -> {
            HeroCommands.test(sender, (int) args.get(0), (int) args.get(1));
        })
        .register();

    }

}

### What actually happened

for all @Default commands the permission from the class annotation is used, look at the admin commands

### What should have happened

1

### Server logs and CommandAPI config

1

### Other

1

Alienn-Know avatar Oct 19 '24 12:10 Alienn-Know

in @Subcommand - Everything is fine in @Default + Literal argument (ignone), used @Default permission

Alienn-Know avatar Oct 21 '24 09:10 Alienn-Know