import { Bot } from 'mineflayer';
import { Block } from 'prismarine-block';
import { Vec3 } from 'vec3';
export declare type Callback = (err?: Error) => void;
export declare function error(name: string, message: string): Error;
/**
 * Options to pass to the equipForBlock function.
 */
export interface MiningEquipOptions {
    /**
       * If true, the bot will only attempt to use tools that are capable of
       * harvesting the target block. If the bot does not have any tools capable
       * of harvesting the block, an error will be thrown.
       *
       * Defaults to false.
       */
    requireHarvest?: boolean;
    /**
       * If set to true, the bot will attempt to retrieve a tool from the chest if
       * there is not a suitable tool currently in the bot's inventory.
       *
       * Defaults to false.
       */
    getFromChest?: boolean;
    /**
       * If using the `getFromChest` flag, what is the maximum number of tools allowed
       * to be pulled from the chest at once? Defaults to 1.
       */
    maxTools?: number;
}
/**
 * The main class object for the tool plugin.
 */
export declare class Tool {
    private readonly bot;
    /**
       * A list of chest locations that the bot is allowed to retrieve items from
       * when using the "getFromChest" option.
       */
    readonly chestLocations: Vec3[];
    /**
       * Creates a new tool plugin instance.
       *
       * @param bot - The bot the plugin is running on.
       */
    constructor(bot: Bot);
    /**
       * Gets the number of ticks required to mine the target block with the given item.
       *
       * @param block - The block to test against.
       * @param item - The item to test with.
       *
       * @returns The number of ticks it would take to mine.
       */
    private getDigTime;
    /**
       * Gets the item currently in the bot's hand.
       */
    private itemInHand;
    /**
       * Checks if the best item in the item list is faster than the item in
       * the bot's hand.
       *
       * @param block - The block to test against.
       * @param itemList - The item list to test against.
       *
       * @returns True if the items in the list are better. False if they are worse or
       *          equal to what's already in the bot's hand.
       */
    private isBetterMiningTool;
    /**
       * This function can be used to equip the best tool currently in the bot's
       * inventory for breaking the given block.
       *
       * @param block - The block the bot is attempting to break.
       * @param options - The options to use for equipping the correct tool.
       * @param cb - The callback.
       */
    equipForBlock(block: Block, options?: MiningEquipOptions, cb?: Callback): Promise<void>;
}
declare module 'mineflayer' {
    interface Bot {
        tool: Tool;
    }
}
