CommandAPI
CommandAPI copied to clipboard
CommandApi permission bug
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
in @Subcommand - Everything is fine in @Default + Literal argument (ignone), used @Default permission