import { default as Server } from '../Server';
import { default as PacketHandler } from './handler/PacketHandler';
import { default as PreLoginPacketHandler } from './handler/PreLoginPacketHandler';
import * as Packets from './Packets';
export default class PacketRegistry {
    private server;
    private readonly packets;
    private readonly handlers;
    constructor(server: Server);
    /**
     * On enable hook.
     * @group Lifecycle
     */
    enable(): Promise<void>;
    /**
     * On disable hook.
     * @group Lifecycle
     */
    disable(): Promise<void>;
    /**
     * Register a packet.
     * @param packet - the packet.
     */
    registerPacket(packet: typeof Packets.DataPacket): void;
    /**
     * Get a packet by it's network ID.
     * @param id - the NetID.
     */
    getPacket(id: number): any;
    /**
     * Remove a packet from the registry.
     * @param id - the NetID.
     */
    removePacket(id: number): void;
    registerHandler(id: number, handler: PacketHandler<any>): void;
    getHandler(id: number): PacketHandler<any> | PreLoginPacketHandler<any>;
    /**
     * Merge two handlers.
     * This is useful if you want to extend a handler without actually replacing it.
     *
     * @param handler - the first handler, executed first.
     * @param handler2 - the second handler.
     */
    appendHandler(handler: PacketHandler<any>, handler2: PacketHandler<any>): PacketHandler<any>;
    /**
     * Remove a handler from the registry.
     * @param id - the handler id.
     */
    removeHandler(id: number): void;
    /**
     * Dynamically register all packets exported by './Protocol'.
     */
    private registerPackets;
    /**
     * Dynamically register all handlers exported by './Handlers'.
     */
    private registerHandlers;
    /**
     * Get all packets from the registry.
     */
    getPackets(): Map<number, typeof Packets.DataPacket>;
    /**
     * Get all handlers from the registry.
     */
    getHandlers(): Map<number, PacketHandler<any>>;
}
//# sourceMappingURL=PacketRegistry.d.ts.map