import { TextComponent } from '@xmcl/text-component';
import { Channel } from './channel';
export declare class Handshake {
    protocolVersion: number;
    serverAddress: string;
    serverPort: number;
    nextState: number;
}
export declare class ServerQuery {
}
export declare class ServerStatus {
    status: Status;
}
export declare class Ping {
    time: bigint;
}
export declare class Pong {
    ping: bigint;
}
/**
 * The json format for Minecraft server handshake status query response
 */
export interface Status {
    /**
       * The version info of the server
       */
    version: {
        /**
         * The name of the version, might be standard version, like 1.14.4.
         * Or it can be modified content, just be any string the server hoster like.
         */
        name: string;
        /**
         * The protocol version
         */
        protocol: number;
    };
    /**
       * The player info in server
       */
    players: {
        /**
             * The server max player capacity
             */
        max: number;
        /**
             * The current online player number
             */
        online: number;
        /**
             * The online player info
             */
        sample?: Array<GameProfile>;
    };
    /**
       * The motd of server, which might be the raw TextComponent string or structurelized TextComponent JSON
       */
    description: TextComponent | string;
    /**
       * The base 64 favicon data
       */
    favicon: string | '';
    modinfo?: {
        type: string | 'FML';
        modList: Array<ForgeModIdentity>;
    };
    /**
       * The ping from server
       */
    ping: number;
}
interface GameProfile {
    name: string;
    id: string;
}
interface ForgeModIdentity {
    readonly modid: string;
    readonly version: string;
}
export interface QueryOptions {
    /**
       * see http://wiki.vg/Protocol_version_numbers
       */
    protocol?: number;
    /**
       * timeout milliseconds
       */
    timeout?: number;
    retryTimes?: number;
}
/**
 * Create a channel with Handleshake, ServerQuery, ServerStatus, Ping, Pong packets are registered.
 *
 * This is a lower level function for the case that you want to use channel directly
 *
 * @see {@link Channel}
 */
export declare function createChannel(): Channel;
/**
 * Query the server status in raw JSON format in one shot.
 *
 * @param server The server information
 * @param options The query options
 */
export declare function queryStatus(server: {
    host: string;
    port?: number;
}, options?: QueryOptions): Promise<Status>;
/**
 * Create a query client for certain protocol and timeout setting.
 * @param protocol The protocol number
 * @param timeout The timeout millisecond
 */
export declare function createClient(protocol: number, timeout?: number): {
    readonly channel: Channel;
    protocol: number;
    query(host: string, port?: number): Promise<Status>;
};
export {};
//# sourceMappingURL=status.d.ts.map