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!

117 lines (116 loc) 4.16 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 */ blockPlacePrediction?: boolean; /** @default 0 */ blockPlacePredictionDelay?: number; /** @default true */ blockPlacePredictionCheckEntities?: boolean; blockPlacePredictionHandler?: BlockPlacePredictionOverride; blockInteractionHandlers?: Record<string, BlockInteractionHandler>; } export interface CursorState { cursorBlock: Block | null; cursorBlockDiggable: Block | null; cursorChanged: boolean; entity: Entity | null; } export declare class MouseManager { private bot; settings: BotPluginSettings; buttons: [boolean, boolean, boolean]; lastButtons: [boolean, boolean, boolean]; cursorBlock: Block | null; 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; 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; placeBlock(cursorBlock: Block, direction: Vec3, delta: Vec3, offhand: boolean, forceLook?: 'ignore' | 'lookAt' | 'lookAtForce'): Promise<void>; private updatePlaceInteract; digTime(block: Block): number; private startUsingItem; private stopUsingItem; private updateBreaking; private updateBreakingBlockState; private maybeStartBreaking; 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 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 };