@Override
    public List<String> getSuggestions(CommandInvocation invocation)
    {
        List<String> tokens = invocation.tokens();
        List<String> result = new ArrayList<>();
        if (invocation.isConsumed())
        {
            for (CommandBase command : this.getCommands())
            {
                result.add(command.getDescriptor().getName());
            }
        }
        else if (tokens.size() - invocation.consumed() == 1)
        {
            String curToken = invocation.currentToken().toLowerCase();
            for (String alias : this.commands.keySet())
            {
                if (alias.startsWith(curToken))
                {
                    result.add(alias);
                }
            }
        }
        else
        {
            String curToken = invocation.currentToken();
            CommandBase command = this.getCommand(curToken);
            if (command == null)
            {
                return null; // Nothing to tab
            }
            return command.getSuggestions(invocation.subInvocation(command));
        }
        return result;
    }