From 273aaf31ee7c88457d68c263d02b3109c963c27c Mon Sep 17 00:00:00 2001 From: Andrew nuark G Date: Sun, 26 Mar 2023 17:02:24 +0700 Subject: [PATCH] All done --- .dockerignore | 5 + .gitignore | 145 ++++++++++++ Dockerfile | 14 ++ config.js | 10 + index.js | 252 +++++++++++++++++++++ package.json | 20 ++ pnpm-lock.yaml | 602 +++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 1048 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 config.js create mode 100644 index.js create mode 100644 package.json create mode 100644 pnpm-lock.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..18622e0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +node_modules +Dockerfile +.dockerignore +.git +.gitignore \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4eb78c5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,145 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/node +# Edit at https://www.toptal.com/developers/gitignore?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +# End of https://www.toptal.com/developers/gitignore/api/node \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ccf634a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM node:16.13.2-alpine3.14 + +RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app +WORKDIR /home/node/app + +COPY --chown=node:node . . + +RUN corepack enable +RUN corepack prepare pnpm@6.28.0 --activate +RUN pnpm install + +USER node + +CMD [ "pnpm", "start" ] \ No newline at end of file diff --git a/config.js b/config.js new file mode 100644 index 0000000..c8875da --- /dev/null +++ b/config.js @@ -0,0 +1,10 @@ +export default class Config { + static mc = { + bot: { + host: "localhost", + port: 25565, + username: "__farmadon", + version: "1.18.1", + } + } +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..795ecdd --- /dev/null +++ b/index.js @@ -0,0 +1,252 @@ +import Config from "./config.js"; +import mcdataLib from "minecraft-data"; +import { createBot } from "mineflayer"; +import { pathfinder, Movements, default as mpf } from "mineflayer-pathfinder"; +const { GoalBlock, GoalNear } = mpf.goals; +import Vec3 from "vec3"; + +const bot = createBot(Config.mc.bot); +const mcData = mcdataLib(bot.version); + +let upperLeft = null; +let bottomRight = null; + +bot.loadPlugin(pathfinder); + +const defaultMove = new Movements(bot, mcData); +bot.pathfinder.setMovements(defaultMove); + +bot.once("spawn", () => { + console.log("[MC] Bot spawned!"); +}); + +bot.on('chat', (username, message) => { + if (username === bot.username) return; + + const cmd = message.split(" ", 2)[0]; + switch (cmd) { + case "!help": + bot.chat("Prefix: !; Commands: help, check, holding, field-set, field, till, sow, reap, stop"); + break; + case "!check": + checkBlockUnder(); + break; + case "!holding": + bot.chat(`holding ${bot.heldItem}`); + console.log("holding: %s", bot.heldItem); + break; + case "!field-set": + let parts = message.split(" "); + let [x1, y1, z1, x2, y2, z2] = parts.slice(1); + upperLeft = new Vec3(~~x1, ~~y1, ~~z1); + bottomRight = new Vec3(~~x2, ~~y2, ~~z2); + bot.chat(`Set field rect to ${upperLeft} til ${bottomRight}`); + break; + case "!field": + findFieldBorders(); + break; + case "!till": + startTilling(); + break; + case "!sow": + startSowing(); + break; + case "!reap": + startReaping(); + break; + case "!stop": + bot.pathfinder.stop(); + break; + default: + break; + } +}); + +bot.on('kicked', console.log); +bot.on('error', console.log); + + +const gotoUntill = async (dx, dy, dz, predicateOnBlock) => { + try { + let ul = bot.entity.position.offset(dx, dy, dz); + let targetBlock = bot.blockAt(ul); + while (predicateOnBlock(targetBlock)) { + await bot.pathfinder.goto(new GoalBlock(ul.x, ul.y, ul.z)); + ul = bot.entity.position.offset(dx, dy, dz); + targetBlock = bot.blockAt(ul); + } + } catch (e) { + bot.chat(`Shit happened! ${e}`); + console.error(e); + } +} + + +const checkBlockUnder = async () => { + let targetBlock = bot.blockAt(bot.entity.position.offset(0, -1, 0)); + bot.chat(`Block under: ${targetBlock}`) +} + +const findFieldBorders = async () => { + try { + await gotoUntill(1, 0, 0, block => block.name === "air"); // go left + await gotoUntill(0, 0, 1, block => block.name === "air"); // go up + upperLeft = bot.entity.position; + await gotoUntill(-1, 0, 0, block => block.name === "air"); // go right + await gotoUntill(0, 0, -1, block => block.name === "air"); // go down + bottomRight = bot.entity.position; + bot.chat(`Done, ${upperLeft} to ${bottomRight}`); + } catch (e) { + bot.chat(`Shit happened! ${e}`); + console.error(e); + } +} + +const isSowable = (block) => { + const blockAbove = bot.blockAt(block.position.offset(0, 1, 0)); + return !blockAbove || blockAbove.name === mcData.blocksByName.air.name; +} + +const findDrops = (dropItemId) => { + return Object.values(bot.entities).filter(entity => { + return entity.name === "item" && entity.metadata.length >= 8 && entity.metadata[8].itemId == dropItemId + }).map(item => { + return item.position; + }); +} + +const startTilling = async () => { + if (!upperLeft || !bottomRight) { + bot.chat("I dont know about field rect!"); + return; + } + + const diamond_hoe_id = mcData.itemsByName.diamond_hoe.id; + await bot.equip(diamond_hoe_id, "hand"); + if (bot.heldItem === null || bot.heldItem.type !== diamond_hoe_id) { + bot.chat("No hoe in my inventory :("); + return; + } + + let uy = ~~bot.entity.position.y; + + let lx = Math.floor(Math.min(upperLeft.x, bottomRight.x)); + let hx = Math.floor(Math.max(upperLeft.x, bottomRight.x)); + + let lz = Math.floor(Math.min(upperLeft.z, bottomRight.z)); + let hz = Math.floor(Math.max(upperLeft.z, bottomRight.z)); + + bot.chat("Started tilling the field"); + + try { + for (let desiredX = lx; desiredX <= hx; desiredX++) { + for (let desiredZ = lz; desiredZ <= hz; desiredZ++) { + await bot.pathfinder.goto(new GoalBlock(desiredX, uy, desiredZ)); + + let targetBlock = bot.blockAt(new Vec3(desiredX, uy - 1, desiredZ)); + await bot.activateBlock(targetBlock); + } + } + } catch (e) { + bot.chat(`Shit happened! ${e}`); + console.error(e); + } + + bot.chat("Done, tilled the field"); +} + +const startSowing = async () => { + if (!upperLeft || !bottomRight) { + bot.chat("I dont know about field rect!"); + return; + } + + const carrot_id = mcData.itemsByName.carrot.id; + await bot.equip(carrot_id, "hand"); + if (bot.heldItem === null || bot.heldItem.type !== carrot_id) { + bot.chat("No carrot in my inventory :("); + return; + } + + let uy = ~~bot.entity.position.y; + + let lx = Math.floor(Math.min(upperLeft.x, bottomRight.x)); + let hx = Math.floor(Math.max(upperLeft.x, bottomRight.x)); + + let lz = Math.floor(Math.min(upperLeft.z, bottomRight.z)); + let hz = Math.floor(Math.max(upperLeft.z, bottomRight.z)); + + bot.chat("Started sowing the field"); + + try { + for (let desiredX = lx; desiredX <= hx; desiredX++) { + for (let desiredZ = lz; desiredZ <= hz; desiredZ++) { + await bot.pathfinder.goto(new GoalNear(desiredX, uy, desiredZ, 2)); + + let targetBlock = bot.blockAt(new Vec3(desiredX, uy, desiredZ)); + if (isSowable(targetBlock)) { + await bot.placeBlock(targetBlock, new Vec3(0, 1, 0)) + } + } + } + } catch (e) { + bot.chat(`Shit happened! ${e}`); + console.error(e); + } + + bot.chat("Done, sowed the field"); +} + +const startReaping = async () => { + if (!upperLeft || !bottomRight) { + bot.chat("I dont know about field rect!"); + return; + } + + const carrot_id = mcData.itemsByName.carrot.id; + const carrot_block_id = mcData.blocksByName.carrots.id; + + let uy = ~~bot.entity.position.y; + + let lx = Math.floor(Math.min(upperLeft.x, bottomRight.x)); + let hx = Math.floor(Math.max(upperLeft.x, bottomRight.x)); + + let lz = Math.floor(Math.min(upperLeft.z, bottomRight.z)); + let hz = Math.floor(Math.max(upperLeft.z, bottomRight.z)); + + bot.chat("Started reaping the field"); + + try { + for (let desiredX = lx; desiredX <= hx; desiredX++) { + for (let desiredZ = lz; desiredZ <= hz; desiredZ++) { + await bot.pathfinder.goto(new GoalNear(desiredX, uy, desiredZ, 2)); + + let targetBlock = bot.blockAt(new Vec3(desiredX, uy + 1, desiredZ)); + if (targetBlock.type === carrot_block_id && targetBlock.metadata === 7) { + await bot.dig(targetBlock); + + try { + await bot.equip(carrot_id, "hand"); + if (bot.heldItem === null || bot.heldItem.type !== carrot_id) { + bot.chat("No carrot in my inventory :("); + return; + } + await bot.placeBlock(bot.blockAt(targetBlock.position.offset(0, -1, 0)), new Vec3(0, 1, 0)) + } catch (e) { + console.error(e); + } + } + } + } + } catch (e) { + bot.chat(`Shit happened! ${e}`); + console.error(e); + } + + for (let pos of findDrops(mcData.itemsByName.carrot.id)) { + await bot.pathfinder.goto(new GoalNear(pos.x, pos.y, pos.z, 1)); + await bot.waitForTicks(5); + } + + bot.chat("Done, reaped the field"); +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b4da417 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "mc_autobot", + "version": "1.0.0", + "description": "Minecraft bot for SibMC", + "private": true, + "main": "index.js", + "type": "module", + "scripts": { + "start": "node index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "nuark", + "license": "MIT", + "dependencies": { + "minecraft-data": "^2.110.0", + "mineflayer": "^3.15.0", + "mineflayer-pathfinder": "^1.9.1", + "vec3": "^0.1.7" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..e0d7591 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,602 @@ +lockfileVersion: 5.3 + +specifiers: + minecraft-data: ^2.110.0 + mineflayer: ^3.15.0 + mineflayer-pathfinder: ^1.9.1 + vec3: ^0.1.7 + +dependencies: + minecraft-data: 2.110.0 + mineflayer: 3.15.0 + mineflayer-pathfinder: 1.9.1 + vec3: 0.1.7 + +packages: + + /@azure/msal-common/6.0.0: + resolution: {integrity: sha512-Vva3snqmWPHJNDCBb4lz3D0rvZsi/0QikAxHvVFNwtNg5pP4NZE4U34tNiXN+m9KhlQFrZBPkE5rk7dIEOGcWw==} + engines: {node: '>=0.8.0'} + dependencies: + debug: 4.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@azure/msal-node/1.5.0_debug@4.3.3: + resolution: {integrity: sha512-FiCra/3ZyLXSQltoI9ndeN/lvXsPsFDsqVKgH7SWXVQjL3OpEXiqKkj0CB2UWGCk1U6bZGMJfkUZCXzhMQTObQ==} + engines: {node: 10 || 12 || 14 || 16} + dependencies: + '@azure/msal-common': 6.0.0 + axios: 0.21.4_debug@4.3.3 + jsonwebtoken: 8.5.1 + uuid: 8.3.2 + transitivePeerDependencies: + - debug + - supports-color + dev: false + + /@xboxreplay/errors/0.1.0: + resolution: {integrity: sha512-Tgz1d/OIPDWPeyOvuL5+aai5VCcqObhPnlI3skQuf80GVF3k1I0lPCnGC+8Cm5PV9aLBT5m8qPcJoIUQ2U4y9g==} + dev: false + + /@xboxreplay/xboxlive-auth/3.3.3_debug@4.3.3: + resolution: {integrity: sha512-j0AU8pW10LM8O68CTZ5QHnvOjSsnPICy0oQcP7zyM7eWkDQ/InkiQiirQKsPn1XRYDl4ccNu0WM582s3UKwcBg==} + dependencies: + '@xboxreplay/errors': 0.1.0 + axios: 0.21.4_debug@4.3.3 + transitivePeerDependencies: + - debug + dev: false + + /aes-js/3.1.2: + resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} + dev: false + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: false + + /asn1/0.2.3: + resolution: {integrity: sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=} + dev: false + + /axios/0.21.4_debug@4.3.3: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.14.7_debug@4.3.3 + transitivePeerDependencies: + - debug + dev: false + + /buffer-equal-constant-time/1.0.1: + resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} + dev: false + + /buffer-equal/1.0.0: + resolution: {integrity: sha1-WWFrSYME1Var1GaWayLu2j7KX74=} + engines: {node: '>=0.4.0'} + dev: false + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /discontinuous-range/1.0.0: + resolution: {integrity: sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=} + dev: false + + /ecdsa-sig-formatter/1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /endian-toggle/0.0.0: + resolution: {integrity: sha1-5cx1eLEDLW7gHq/Nc3ZdsNtNwKY=} + dev: false + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: false + + /follow-redirects/1.14.7_debug@4.3.3: + resolution: {integrity: sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.3 + dev: false + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /jose/4.4.0: + resolution: {integrity: sha512-3CsqCQWuEUPpNlSLRcLRC8eO/ATFe1tLJMZCtjx2+ma1gkjGQ62HF50oWs3cwtWjLCpM8bdMPpQbxpgc3fhxrQ==} + dev: false + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: false + + /jsonwebtoken/8.5.1: + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.1 + dev: false + + /jwa/1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + + /jws/3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: false + + /lodash.get/4.4.2: + resolution: {integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=} + dev: false + + /lodash.includes/4.3.0: + resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=} + dev: false + + /lodash.isboolean/3.0.3: + resolution: {integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=} + dev: false + + /lodash.isinteger/4.0.4: + resolution: {integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=} + dev: false + + /lodash.isnumber/3.0.3: + resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=} + dev: false + + /lodash.isplainobject/4.0.6: + resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} + dev: false + + /lodash.isstring/4.0.1: + resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=} + dev: false + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: false + + /lodash.once/4.1.1: + resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} + dev: false + + /lodash.reduce/4.6.0: + resolution: {integrity: sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=} + dev: false + + /macaddress/0.5.2: + resolution: {integrity: sha512-cYYBbT3b84hTEHssWE6OmsuqF/NiLXE2RGK9Sc9SwwE9kMoKrbaUAJtKs6ucd0FFgZjXE1Wm3hoGEEYas0N6EA==} + dev: false + + /minecraft-data/2.110.0: + resolution: {integrity: sha512-mp5TQmcLXBmBpBOgzbVGt0tvRjsjpWyOj1Zmpi+5ZuxHSlHuS7naTrgTlHPuLgWhSY0wbip0iJmIjDoea+jebw==} + dev: false + + /minecraft-folder-path/1.2.0: + resolution: {integrity: sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==} + dev: false + + /minecraft-protocol/1.30.0: + resolution: {integrity: sha512-Zi/TAYyLQrGV8HjBAs2z4DnusezcVdgxEVZH0cxilOElI/xJuPZ7fwXhixHPvyJnuK3RPyCvwOUjhHX27tGcoA==} + engines: {node: '>=6'} + dependencies: + aes-js: 3.1.2 + buffer-equal: 1.0.0 + debug: 4.3.3 + endian-toggle: 0.0.0 + lodash.get: 4.4.2 + lodash.merge: 4.6.2 + minecraft-data: 2.110.0 + minecraft-folder-path: 1.2.0 + node-fetch: 2.6.7 + node-rsa: 0.4.2 + prismarine-auth: 1.4.1_debug@4.3.3 + prismarine-nbt: 2.1.0 + protodef: 1.14.0 + readable-stream: 3.6.0 + uuid-1345: 1.0.2 + yggdrasil: 1.6.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /mineflayer-pathfinder/1.9.1: + resolution: {integrity: sha512-4mslXjn7NU5NNXUsYfieQwaycUzAg9Henzqs/ZaBT1Hc53VwmsQK1M2TEqFCOwdU8Q6Urk0LcY/87SBPIz8BZQ==} + dependencies: + minecraft-data: 2.110.0 + prismarine-block: 1.12.0_minecraft-data@2.110.0 + prismarine-entity: 2.0.0 + prismarine-item: 1.11.2_minecraft-data@2.110.0 + prismarine-nbt: 2.1.0 + prismarine-physics: 1.3.1 + vec3: 0.1.7 + dev: false + + /mineflayer/3.15.0: + resolution: {integrity: sha512-eognd3MOrC72W2TSRYhyWRw7FNSzEQd91o2Rl10nuk+yLBFaOsI3ZKKpBK7VBnMCuioHDGFHe2DhMGIRTxAGWQ==} + engines: {node: '>=14'} + dependencies: + minecraft-data: 2.110.0 + minecraft-protocol: 1.30.0 + prismarine-biome: 1.1.2_minecraft-data@2.110.0 + prismarine-block: 1.12.0_minecraft-data@2.110.0 + prismarine-chat: 1.5.0 + prismarine-chunk: 1.28.1 + prismarine-entity: 2.0.0 + prismarine-item: 1.11.2_minecraft-data@2.110.0 + prismarine-nbt: 2.1.0 + prismarine-physics: 1.3.1 + prismarine-recipe: 1.1.0_minecraft-data@2.110.0 + prismarine-windows: 2.4.3 + prismarine-world: 3.6.0 + protodef: 1.14.0 + typed-emitter: 2.1.0 + vec3: 0.1.7 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /mojangson/2.0.2: + resolution: {integrity: sha512-iGPRE1Ez+W+42Dt4Ao91c9VVs+FmuRUlAFDef76xRX3mbZrTNuezDtFI0PbfYqheg/B0fSiq0Q0V1emZNt37cw==} + dependencies: + nearley: 2.20.1 + dev: false + + /moo/0.5.1: + resolution: {integrity: sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==} + dev: false + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /nearley/2.20.1: + resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} + hasBin: true + dependencies: + commander: 2.20.3 + moo: 0.5.1 + railroad-diagrams: 1.0.0 + randexp: 0.4.6 + dev: false + + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /node-rsa/0.4.2: + resolution: {integrity: sha1-1jkXKewWqDDtWjgEKzFX0tXXJTA=} + dependencies: + asn1: 0.2.3 + dev: false + + /prismarine-auth/1.4.1_debug@4.3.3: + resolution: {integrity: sha512-IyFz+TWkngtRPs19MWP/7dYU1vheiASoil5d7amvIXhbK4zWb/w7uGcwLvOO0fwX9qw5hCt/JKimPrRcw8La0w==} + dependencies: + '@azure/msal-node': 1.5.0_debug@4.3.3 + '@xboxreplay/xboxlive-auth': 3.3.3_debug@4.3.3 + jose: 4.4.0 + node-fetch: 2.6.7 + smart-buffer: 4.2.0 + uuid-1345: 1.0.2 + transitivePeerDependencies: + - debug + - encoding + - supports-color + dev: false + + /prismarine-biome/1.1.2_minecraft-data@2.110.0: + resolution: {integrity: sha512-X/P5kUzRrF5NkZclHV2RbJO4FrdxRJJbTKINpeSedG4hIXcrj2U7elh6Pw2NgLyWt17q9A35q70NciXbkq//WA==} + peerDependencies: + minecraft-data: ^2.0.0 + dependencies: + minecraft-data: 2.110.0 + dev: false + + /prismarine-block/1.12.0_minecraft-data@2.110.0: + resolution: {integrity: sha512-UilPe3nWI4xqvwtOpVu+LDYxtWb7fUfYDpNhsETjP7iiibTieP9L/bydc5mM3Lk6+ZTNK/Urj9m/UHjpwET6yQ==} + peerDependencies: + minecraft-data: ^2.62.1 + dependencies: + minecraft-data: 2.110.0 + prismarine-biome: 1.1.2_minecraft-data@2.110.0 + prismarine-item: 1.11.2_minecraft-data@2.110.0 + prismarine-nbt: 2.1.0 + prismarine-registry: 1.1.0 + dev: false + + /prismarine-chat/1.5.0: + resolution: {integrity: sha512-rdztHiG5qJngU3O3beNiO+7JZGtZMIrzZAYVUcMK4/l7RV1A6wT3ifFpMwMHc1u2b7z6sRHELwFw5q63jEppeA==} + dependencies: + minecraft-data: 2.110.0 + mojangson: 2.0.2 + prismarine-item: 1.11.2_minecraft-data@2.110.0 + prismarine-nbt: 2.1.0 + sprintf-js: 1.1.2 + dev: false + + /prismarine-chunk/1.28.1: + resolution: {integrity: sha512-bJHOuFt26l+HQIYEfLCD5ee/oRjlU7U4PfVmfqyRDczpzBLhqyLX563hhIA/2s9q2RPhZ+Kd3f3ltBuFeMTKJg==} + engines: {node: '>=14'} + dependencies: + minecraft-data: 2.110.0 + prismarine-block: 1.12.0_minecraft-data@2.110.0 + smart-buffer: 4.2.0 + uint4: 0.1.2 + vec3: 0.1.7 + dev: false + + /prismarine-entity/2.0.0: + resolution: {integrity: sha512-6TPldMDiUhK8drNHKVW5783IHkkgHQWQwPO9NPRUXyZNKYzhqLKeTxOAsmtcR9mjTORbrILzJUyB0qZgSyfOrA==} + dependencies: + prismarine-chat: 1.5.0 + vec3: 0.1.7 + dev: false + + /prismarine-item/1.11.2_minecraft-data@2.110.0: + resolution: {integrity: sha512-OMkI/4g4N+Z0+63MIVbnxRZOjjyGs9E0KZ/v5UQZ0M6ZsxTGLHl2IqQAxVr59GrM4DsB8S+2Cp3A7t3EKZ1asQ==} + peerDependencies: + minecraft-data: ^2.79.0 + dependencies: + minecraft-data: 2.110.0 + prismarine-nbt: 2.1.0 + dev: false + + /prismarine-nbt/1.6.0: + resolution: {integrity: sha512-h0ECvIjjwjMOtsmHxHc8hNY7kzktnKqKXmOHF0AkmH7OjkcHNAFsWRiZNvfc76rOhNonRutHvTVAlh/eLtK0oA==} + dependencies: + protodef: 1.14.0 + dev: false + + /prismarine-nbt/2.1.0: + resolution: {integrity: sha512-0k8295mPzAr1H7CbZvUuwGc3oKCdGvHWxIXSQ1C867kyoReZj/gOo+Stocxiu/R9WOMAGFTv0xc9q6cBVSIblw==} + dependencies: + protodef: 1.14.0 + dev: false + + /prismarine-physics/1.3.1: + resolution: {integrity: sha512-K8aT/Nq0GvDyGsohv2dRugpPMBgZwVpdTURb8/Mh8Br3fOFsn/IJ81zcOJEK2IulTuvuho3vzYM6ayQm7ibUFQ==} + dependencies: + minecraft-data: 2.110.0 + prismarine-nbt: 1.6.0 + vec3: 0.1.7 + dev: false + + /prismarine-recipe/1.1.0_minecraft-data@2.110.0: + resolution: {integrity: sha512-eFmriEWoe6S6OSVbOJnsXpaBuzeIzjaGymDUTCtrOu80734NWKI7outdLI6R2ztJ+f2PFIkFmpkazAdScStGNA==} + peerDependencies: + minecraft-data: ^2.0.0 + dependencies: + minecraft-data: 2.110.0 + dev: false + + /prismarine-registry/1.1.0: + resolution: {integrity: sha512-zCI4LRRGATsqz2KQ6JKbgWMCTAsYcSDq/GuUQohS5XVW223byzZNHqwsqZLBScAvLnvWmfhe/Ok/UgJcrXxfRw==} + dependencies: + minecraft-data: 2.110.0 + prismarine-nbt: 2.1.0 + dev: false + + /prismarine-windows/2.4.3: + resolution: {integrity: sha512-cwY8Pw8LcfWmTMlxg88hwj4JbEqqKivuwbWnu/jy9Qd6dPI80AtLBSrxsdVkJ9siy2imc1xP5vs+RxInzZo+TA==} + dependencies: + minecraft-data: 2.110.0 + prismarine-item: 1.11.2_minecraft-data@2.110.0 + dev: false + + /prismarine-world/3.6.0: + resolution: {integrity: sha512-rAudKWNOfiDrDaBlXx9/5B4CO/kc5G1RBq3GFAu1ov6GwUq8Ib8KXYeHPsoJwN3tfVDuFaJjncgsShqdoSmP0w==} + engines: {nodejs: '>=8.0.0'} + dependencies: + vec3: 0.1.7 + dev: false + + /protodef-validator/1.3.1: + resolution: {integrity: sha512-lZ5FWKZYR9xOjpMw1+EfZRfCjzNRQWPq+Dk+jki47Sikl2EeWEPnTfnJERwnU/EwFq6us+0zqHHzSsmLeYX+Lg==} + hasBin: true + dependencies: + ajv: 6.12.6 + dev: false + + /protodef/1.14.0: + resolution: {integrity: sha512-rL1WRlBC8LbAgBTa401eHMqnkX6zy1pHgS4kTSJVJ8rwP/AgVuWijGE3S3XHRkRjB/+4U1jMTqRdmtGdIqVOKQ==} + engines: {node: '>=14'} + dependencies: + lodash.get: 4.4.2 + lodash.reduce: 4.6.0 + protodef-validator: 1.3.1 + readable-stream: 3.6.0 + dev: false + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: false + + /railroad-diagrams/1.0.0: + resolution: {integrity: sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=} + dev: false + + /randexp/0.4.6: + resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} + engines: {node: '>=0.12'} + dependencies: + discontinuous-range: 1.0.0 + ret: 0.1.15 + dev: false + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: false + + /rxjs/7.5.2: + resolution: {integrity: sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==} + requiresBuild: true + dependencies: + tslib: 2.3.1 + dev: false + optional: true + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: false + + /smart-buffer/4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: false + + /sprintf-js/1.1.2: + resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} + dev: false + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /tr46/0.0.3: + resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} + dev: false + + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: false + optional: true + + /typed-emitter/2.1.0: + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + optionalDependencies: + rxjs: 7.5.2 + dev: false + + /uint4/0.1.2: + resolution: {integrity: sha1-UMWuBLhdKBKPLfPMDsxNQavC9oE=} + dev: false + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: false + + /util-deprecate/1.0.2: + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + dev: false + + /uuid-1345/1.0.2: + resolution: {integrity: sha512-bA5zYZui+3nwAc0s3VdGQGBfbVsJLVX7Np7ch2aqcEWFi5lsAEcmO3+lx3djM1npgpZI8KY2FITZ2uYTnYUYyw==} + dependencies: + macaddress: 0.5.2 + dev: false + + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /vec3/0.1.7: + resolution: {integrity: sha512-EZSeXBL+L3go2wWwtQQse4fEcNGIQjT14qvi4LYVj1ifZt/J5XZ1QZqkDuOVVH07YwTEIFbsAv3pzwUpF7x9Wg==} + dev: false + + /webidl-conversions/3.0.1: + resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} + dev: false + + /whatwg-url/5.0.0: + resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /yggdrasil/1.6.1: + resolution: {integrity: sha512-6rUJ0A7YNVNd1K+8EvmVUc+l8CbhW7VKnN747BrC+YCukZj9C5rNsGxIZGf4MwxMHFDy/YNY++Gqf0VUxKy2ww==} + dependencies: + node-fetch: 2.6.7 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + dev: false