UNPKG

mineflayer-mouse

Version:

First-class **battle-tested** simple API for emulating real Minecraft mouse control in Mineflayer. You should use it for digging (mining) or placing blocks and entity attacking or using and using items!

132 lines (131 loc) 4.75 kB
import { Bot } from 'mineflayer'; import { Vec3 } from 'vec3'; import { Entity } from 'prismarine-entity'; import { Block } from 'prismarine-block'; import { BlockPlacePredictionOverride } from './blockPlacePrediction'; export interface BlockInteractionHandler { test: (block: Block) => boolean; handle: (block: Block, bot: Bot) => void; } export interface ItemUseState { item: { name: string; }; isOffhand: boolean; name: string; } export interface BotPluginSettings { /** @default true */ warnings?: boolean; /** @default true */ blockPlacePrediction?: boolean; /** @default 0 */ blockPlacePredictionDelay?: number; /** @default true */ blockPlacePredictionCheckEntities?: boolean; blockPlacePredictionHandler?: BlockPlacePredictionOverride; blockInteractionHandlers?: Record<string, BlockInteractionHandler>; noBreakPositiveUpdate?: boolean; /** @default true */ preventVehicleInteraction?: boolean; } export interface CursorState { cursorBlock: Block | null; cursorBlockDiggable: Block | null; cursorChanged: boolean; entity: Entity | null; } export declare class MouseManager { private bot; settings: BotPluginSettings; /** stateId - seconds */ customBreakTime: Record<string, number>; customBreakTimeToolAllowance: Set<string>; buttons: [boolean, boolean, boolean]; lastButtons: [boolean, boolean, boolean]; cursorBlock: Block | null; tick: number; private entityRaycastCache; prevBreakState: number | null; currentDigTime: number | null; prevOnGround: boolean | null; rightClickDelay: number; breakStartTime: number | undefined; ended: boolean; lastDugBlock: Vec3 | null; lastDugTime: number; /** a visually synced one */ currentBreakBlock: { block: Block; stage: number; } | null; debugDigStatus: string; debugLastStopReason: string; brokenBlocks: Block[]; lastSwing: number; itemBeingUsed: ItemUseState | null; swingTimeout: any; private blockHandlers; originalDigTime: (block: Block) => number; constructor(bot: Bot, settings?: BotPluginSettings); resetDiggingVisual(block: Block): void; stopDiggingCompletely(reason: string, tempStopping?: boolean): void; private initBotEvents; activateEntity(entity: Entity): void; beforeUpdateChecks(): void; update(): void; getCursorState(): CursorState; private getCachedRaycastEntity; placeBlock(cursorBlock: Block, direction: Vec3, delta: Vec3, offhand: boolean, forceLook?: 'ignore' | 'lookAt' | 'lookAtForce', doClientSwing?: boolean): Promise<void>; private updatePlaceInteract; getCustomBreakTime(block: Block): number | undefined; digTime(block: Block): number; private startUsingItem; private stopUsingItem; private updateBreaking; private updateBreakingBlockState; private maybeStartBreaking; setConfigFromPacket(packet: any): void; private startBreaking; private updateButtonStates; getDataFromShape(shape: [number, number, number, number, number, number]): { position: Vec3; width: number; height: number; depth: number; }; getBlockCursorShapes(block: Block): [number, number, number, number, number, number][]; getMergedCursorShape(block: Block): [number, number, number, number, number, number] | undefined; } export declare const versionToNumber: (ver: string) => number; export declare function inject(bot: Bot, settings: BotPluginSettings): MouseManager; declare module 'mineflayer' { interface Bot { mouse: MouseManager; rightClickStart: () => void; rightClickEnd: () => void; leftClickStart: () => void; leftClickEnd: () => void; leftClick: () => void; rightClick: () => void; readonly usingItem: ItemUseState | null; } interface BotEvents { 'botArmSwingStart': (hand: 'right' | 'left') => void; 'botArmSwingEnd': (hand: 'right' | 'left') => void; 'blockBreakProgressStage': (block: Block, stage: number | null) => void; 'startDigging': (block: Block) => void; 'goingToSleep': (block: Block) => void; 'startUsingItem': (item: { name: string; }, slot: number, isOffhand: boolean, duration: number) => void; 'stopUsingItem': (item: { name: string; }, slot: number, isOffhand: boolean) => void; 'highlightCursorBlock': (data?: { block: Block; }) => void; 'mouseBlockPlaced': (block: Block, direction: Vec3, delta: Vec3, offhand: boolean, wasPredicted: boolean) => void; } } export { MouseManager as MousePlugin };