class DispatcherCommand extends Command implements PluginIdentifiableCommand {

    @Override
    public boolean execute(CommandSender sender, String label, String... arguments) {
        if (!testPermission(sender)) {
            return true;
        }
        
        var reader = new StringReader(join(label, arguments));
        if (reader.canRead() && reader.peek() == '/') {
            reader.skip();
        }
        
        try {
            dispatcher.execute(reader, sender);
            
        } catch (CommandSyntaxException e) {
            Exceptions.report(sender, e);
            
        } catch (Exception e) {
            Exceptions.report(sender, e);
        }
        
        return true;
    }

    public  DispatcherCommand(String name, Plugin plugin, CommandDispatcher<CommandSender> dispatcher, String usage, List<String> aliases);

}