@Override
    public boolean onCommand(CommandSender cs, Command cmnd, String cmd, String[] args) {
        if (!(cs instanceof Player)) return true;
        Player p = (Player) cs;
        if (args.length < 1) return help(p);

        Class<? extends RCommand> commandClass = this.commandMap.get(args[0]);
        if (commandClass == null) return help(p);
        RCommandAnnotation anno = commandClass.getAnnotation(RCommandAnnotation.class);
        if (!p.hasPermission(anno.permission())) {
            Messages.getInstance().sendMessage(p, "notPerm");
            return true;
        }
        
        args = Arrays.copyOfRange(args, 1, args.length);
        if (args.length != anno.argsLenght()) {
            p.sendMessage(anno.help());
            return true;
        }
        try {
            if (!commandClass.newInstance().execute(p, args)) {
                p.sendMessage(anno.help());
            }
        } catch (InstantiationException | IllegalAccessException ex) {
            Logger.getLogger(RCommandsManager.class.getName()).log(Level.SEVERE, null, ex);
        }
        return true;
    }