import { Client, Server } from 'minecraft-protocol';
import { Bot } from 'mineflayer';
import { UIDefinition, UiLilDef } from './customChannel';
import { PacketsLogger } from './packetsLogger';
export interface MineflayerPluginSettings {
    /** @default 25587 */
    websocketPort?: number;
    websocketHost?: string;
    /** @default true */
    websocketEnabled?: boolean;
    /** SSL configuration for WebSocket server */
    ssl?: {
        /** @default false */
        enabled?: boolean;
        /** @default false - if true, will use a self-signed certificate */
        selfSigned?: boolean;
        /** Path to SSL certificate file */
        cert?: string;
        /** Path to SSL private key file */
        key?: string;
    };
    /** @default 25587 */
    tcpPort?: number;
    tcpHost?: string;
    /** @default true */
    tcpEnabled?: boolean;
    /** @default undefined - no ip filter */
    ipFilter?: string[];
    /** @default true */
    showConnectionInstructions?: boolean;
    /** @default undefined - no password protection */
    password?: string;
    /**
     * Disabling this option is experimental but can help with understanding when bot is disconnected
     * @default true
     */
    stopServersOnDisconnect?: boolean;
    /** @default false */
    allowEval?: boolean;
    /** @default false */
    sendConsole?: boolean;
    /** @default true */
    sendStats?: boolean;
    /** @default false */
    forwardChat?: boolean;
    /** @default false */
    takeoverMode?: boolean;
}
export declare const createMineflayerPluginServer: (bot: Bot, options: MineflayerPluginSettings) => {
    ui: {
        updateUI: (id: string, ui: UIDefinition) => void;
        removeUI: (id: string) => void;
        updateText: (id: string, text: string) => void;
        updateLil: (id: string, object: {
            [key: string]: string | number | boolean | (() => void) | null;
        }, params?: Omit<UiLilDef, "type" | "params" | "buttons"> & {
            onUpdate?: (id: string, newValue: any, oldValue: any) => void;
        }) => void;
        removeLil: (id: string) => void;
    };
    methods: Record<string, (...args: any[]) => void>;
    _customChannel: {
        send: (packet: import("./customChannel").CustomChannelPacketFromServer, client?: Client) => void;
        receivedProcessor: (packet: import("./customChannel").CustomChannelPacketFromClient) => void;
        registerChannel: (client: Client) => void;
        newConnection: (client: Client) => void;
    };
    _tcpServer: Server | undefined;
    _wsServer: Server | undefined;
    captureWorldIntoFile: (fileName?: string, adjustPacketsLogger?: (logger: PacketsLogger) => void) => PacketsLogger;
    _unstable: {
        createStateCaptureFile: (fileName?: string, adjustPacketsLogger?: (logger: PacketsLogger) => void) => PacketsLogger;
        startRecording: (adjustPacketsLogger?: (logger: PacketsLogger) => void) => void;
        stopRecording: (saveFileName?: string) => void;
        debugWorldCapture(): void;
    };
};
export type WebViewerPlugin = ReturnType<typeof createMineflayerPluginServer>;
declare module 'mineflayer' {
    interface Bot {
        webViewer: WebViewerPlugin;
    }
}
