Skip to content

Main command permission is null if i set a permission on a subcommand #375

@DevJoey

Description

@DevJoey

Hello, i have this command here!

`@CommandAlias("hide")
@CommandPermission("core.command.hide")
public class HideCommand extends BaseCommand {

private final ProxySockeCore plugin;

public HideCommand(ProxySockeCore plugin) {
    this.plugin = plugin;
}

@Default
public void onDefault(Player player){
    if(plugin.getPlayerDataManager().isNotLoaded(player)){
        player.sendMessage("§cDeine Daten wurden noch nicht geladen!");
        return;
    }
    PlayerDataHolder holder = plugin.getPlayerDataManager().get(player);
    if(holder.isHidden()){
        //Vanish deaktivieren
        holder.setHidden(false);
        player.removeMetadata("vanished", plugin);
        for(Player online : plugin.getServer().getOnlinePlayers()){
            if(online == player) continue;
            online.showPlayer(plugin, player);
        }
        player.sendMessage("§aDu bist nun wieder für alle Spieler sichtbar!");
    }else{
        //Vanish aktivieren
        holder.setHidden(true);
        player.setMetadata("vanished", new FixedMetadataValue(plugin, true));
        for(Player online : plugin.getServer().getOnlinePlayers()){
            if(online == player) continue;
            if(!online.hasPermission("core.command.hide.see")) online.hidePlayer(plugin, player);
        }
        HideUtils.removeTarget(player);
        player.sendMessage("§aDu bist nun für alle Spieler unsichtbar!");
    }
}

@Subcommand("info")
public void onInfo(Player player){
    if(plugin.getPlayerDataManager().isNotLoaded(player)){
        player.sendMessage("§cDeine Daten wurden noch nicht geladen!");
        return;
    }
    if(plugin.getPlayerDataManager().get(player).isHidden()){
        player.sendMessage("§aDu bist nicht für Spieler sichtbar!");
        return;
    }
    player.sendMessage("§cDu bist für alle Spieler sichtbar!");
}

@Subcommand("list")
@CommandPermission("core.command.hide.list")
public void onList(Player player){
    List<String> vanished = new ArrayList<>();
    for(Player p : plugin.getServer().getOnlinePlayers()){
        if(p.hasMetadata("vanished")) vanished.add(p.getName());
    }
    player.sendMessage(String.format("§fVersteckt (%d): §e%s", vanished.size(), String.join(", ", vanished)));
}

@CatchUnknown
public void onUnknown(Player player){
    player.sendMessage("§c» §7Unterbefehle für: §e§o'/hide'\n"
            + " §8▪ §f/hide info\n"
            + " §8▪ §f/hide list");
}

}`

I use this code to get the permission of a command

Command command = plugin.getServer().getCommandMap().getCommand("ignore");

Now if i call command.getPermission() it return null, but it must return "core.command.hide"

On all other commands i have made it works well

The error occurs, if i add a subcommand with a permission!

To Test:

  1. Make a normal command without SubCommands (a @default method) and a permission set

  2. Use this code on Paper: Command command = plugin.getServer().getCommandMap().getCommand("nameofthecommand");

  3. Call command.getPermission() you will see the permission

  4. Now add a subcommand with @subcommand("test") and @CommandPermission("test.test");

  5. Call command.getPermission() another time, and you will see that it returns null

It would be nice if this gets fixed because it destroys my system!

Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions