import mineflayer, { BotOptions, Bot as MineflayerBot } from "mineflayer"; import { Config } from "../config/config"; import { Logger } from "../logger/logger"; export class Bot { private bot: MineflayerBot | undefined = undefined; private readonly botArgs: BotOptions; private readonly config: Config; private readonly logger: Logger; constructor(config: Config, logger: Logger) { this.config = config; this.logger = logger; this.botArgs = { username: "AFKBot", auth: "offline", version: this.config.get("minecraft_version"), chatLengthLimit: 512, host: this.config.get("minecraft_host"), port: this.config.get("minecraft_port"), } } public connect() { this.initBot(); } private initBot() { this.bot = mineflayer.createBot(this.botArgs); this.bot.on("login", () => { this.logger.info(`[Minecraft Bot]: Connected to: ${this.botArgs.host}:${this.botArgs.port}`); }) this.bot.on("end", () => { this.logger.info("[Minecraft Bot]: Disconnected.") this.logger.info("[Minecraft Bot]: Reconnecting...") setTimeout(this.initBot, 5000); }) this.bot.on("kicked", (reason: string, _loggedIn: boolean) => { this.logger.warn(`[Minecraft Bot]: Kicked for ${reason}`); this.logger.info("[Minecraft Bot]: Reconnecting...") setTimeout(this.initBot, 5000); }) this.bot.on("error", (error: unknown) => { if (typeof error === "object" && error !== null && "code" in error && (error as { code: string }).code === "ECONNREFUSED") { this.logger.error(`[Minecraft Bot]: Failed to connect to: ${this.botArgs.host}:${this.botArgs.port}`); } else { this.logger.error(`[Minecraft Bot]: Unhandled error: ${error}`); } }) } }