From 29573d5d24797e874dd88ef34fe0a9c457e3641f Mon Sep 17 00:00:00 2001 From: Moonlit Jolteon Date: Thu, 5 Dec 2024 01:57:56 -0500 Subject: [PATCH] Way too much progress in one commit Signed-off-by: Moonlit Jolteon --- .vscode/settings.json | 3 + __pycache__/manager.cpython-311.pyc | Bin 0 -> 2054 bytes __pycache__/mcbot.cpython-311.pyc | Bin 0 -> 8608 bytes __pycache__/task_funcs.cpython-311.pyc | Bin 0 -> 8362 bytes __pycache__/webui.cpython-311.pyc | Bin 0 -> 665 bytes main.py | 115 +--- manager.py | 31 + mcbot.py | 118 ++++ package-lock.json | 875 +++++++++++++++++++++++++ package.json | 5 + task_funcs.py | 124 ++++ templates/index.html | 5 + 12 files changed, 1192 insertions(+), 84 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 __pycache__/manager.cpython-311.pyc create mode 100644 __pycache__/mcbot.cpython-311.pyc create mode 100644 __pycache__/task_funcs.cpython-311.pyc create mode 100644 __pycache__/webui.cpython-311.pyc create mode 100644 manager.py create mode 100644 mcbot.py create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 task_funcs.py create mode 100644 templates/index.html diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..1bcba0f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.detectIndentation": false +} \ No newline at end of file diff --git a/__pycache__/manager.cpython-311.pyc b/__pycache__/manager.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..531eb8c21264d22de4b34ddb7cc0f93a7d2fb7a8 GIT binary patch literal 2054 zcmb_d&1)M+6o0cH*6Pb?DjV6cov7Hf2tw49TpEg@(6pzTrY;0@SrqMBQ6jDE*;Q$T z4n71bf=QfW(A6gw<9|jjI+%q(p{L#ylv7T9Z$>*_S?#T(o!`EBZ}xr9==W?k1vp-P z{jm0{4)7N(qG3#k@wZ6y!2yRgpvlUNfd=1!qrCt}KhXfraLQ5Egv3CJc}1c-bK6i% z{7oB+EHods-L_kud?#LPvKW7gL?2uzGY86=!(KpHCu?QH(Gg7t^_S-y6ZOr7iSH|3 zrRMT#^f_rEhcFx%|A^3sASOFO&KXWQx?n3=U`AYknO&q!3y=otsew~II4JUV)WWU7b1G0LH; z%7F{|jOO@0LLa*D6yI_jtH>h`y}RrL`DaSTu<+Z!6DTTboVq2{ciREd8KMmlG+8VZ zc$PTk9#yuJjRFu$+B@<7!pa<^UeCXrKMc;T)uFXIh#r0ocTLq%dCyTYT}O;W`S?^t zJng%~o{1*r%kkaEq;+OYSA1JUUDUQXsitB#Tu(&LbI1twnj7#mQnJi4@+>lK&;2E^ zDJh-BC<9Y$iqXG|fOSmI_kx4Y@Y=2ObYYk-9N+yTy)j5{T;%dc_xqc_ZJy`Whq?7Z zX8q4x{_vhmj|vr4sPz0l#Z98hP_H5i zsnp5W*_YWv=iFKuS}TL-5wUC)6V&l!#J0nfZ8uv^yFqluw)fhVhLrGm)F{%<^F*y6 zoPy9G^3Lhp3LsDY9}xD{Z=`AF+6WYU%xI}#&M=oopdiD{Rgzu>X^iYtajFqD;P?iz z{_DoVTgnKHpRgmU@x~)x=}?V77vFXnUPVaB(beJ?Q&-28s{7?})H&G=jh(hv4UGz~ z`9(vVO2OyrDC8RmzJXA{A=5?a>}1Iyb-66lF3RgZTr4cn#WMZsC3{KPeo@G{_p<%S zNFOiV`0Wxuaj#(d7Ezwf9HGpv%XeD5DNoRK;bfe36D|4VEjnslCr1zO9ep{l*3>iU zER$0U@-+hbNH!7uv+!F4bPQ!WJ|T)=38()BLcDu)b9n>`Qp~(b{c#nfI#Pmv46;?J z*0M8&foY>3tgmFRZ}QJ@AH(VIA&hj!*ahSV)6Ym-VAztg@Q!%zF9o*~3|*Urcf@=D IF9PBCKgUggU;qFB literal 0 HcmV?d00001 diff --git a/__pycache__/mcbot.cpython-311.pyc b/__pycache__/mcbot.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5e90237680f50a0162806c9f28b31e7a0b8257c GIT binary patch literal 8608 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 literal 0 HcmV?d00001 diff --git a/__pycache__/task_funcs.cpython-311.pyc b/__pycache__/task_funcs.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..737a609947dbb0d9c58cc0eac8af873e5b3bd908 GIT binary patch literal 8362 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".join([task.name for task in manager.queue.queue]) + +num = 0 +@app.route('/add_task') +def add_tasks(): + global num + manager.queue(Task(f"Task {num}", demo_task, num)) + num += 1 + return "Done" -class MCBot: - def __init__(self, bot_name, bot_args = BOT_ARGS): - self.bot_args = { - 'host': bot_args['host'], - 'port': bot_args['port'], - 'username': bot_name - } - self.reconnect = True - self.bot_name = bot_name - self.start_bot() +def run(): + for i in range(1): + MCBot(f"bot{i}", manager, is_king = (i == 0)) + app.run() - def start_bot(self): - self.bot = mineflayer.createBot(self.bot_args) - self.bot.loadPlugin(pathfinder.pathfinder) - print(f"Started mineflayer but with the name {self.bot_name}") - self.start_listeners() +def demo_task(num): + sleep(1) + print(f"Task {num}") - def start_listeners(self): - @On(self.bot, 'login') - def handle_login(this): - bot_socket = self.bot._client.socket - print( - f"Logged in to {bot_socket.server if bot_socket.server else bot_socket._host }" - ) - - @On(self.bot, 'spawn') - def handle_spawn(this): - print("I spawned 👋") - - @On(self.bot, 'chat') - def handle_chat(this, sender, message, *args): - print(f"{self.bot_name} got a message: {sender}> {message}") - if sender and (sender != self.bot_name) and (message.startswith(f"{self.bot_name}: ") or (message.startswith(f"Bots: "))): - command = " ".join(message.split(' ')[1:]) - if 'come' in command: - player = self.bot.players[sender] - print("Target", player) - target = player.entity - if not target: - self.bot.chat("I don't see you !") - return - - pos = target.position - movements = pathfinder.Movements(self.bot) - movements.canDig = False - self.bot.pathfinder.setMovements(movements) - self.bot.pathfinder.setGoal(pathfinder.goals.GoalNear(pos.x, pos.y, pos.z, RANGE_GOAL)) - - if 'quit' in command: - self.reconnect = False - self.bot.quit() - - @On(self.bot, "kicked") - def handle_kicked(this, reason, loggedIn): - if loggedIn: - print(f"Kicked from server: {reason}") - else: - print(f"Kicked whilst trying to connect: {reason}") - - @On(self.bot, "end") - def handle_end(this, reason): - print(f"Disconnected: {reason}") - - # Turn off event listeners - off(self.bot, "login", handle_login) - off(self.bot, "kicked", handle_kicked) - off(self.bot, "spawn", handle_spawn) - off(self.bot, "chat", handle_chat) - if self.reconnect: - print("Bot restarting...") - print(self.bot_name) - self.start_bot() - off(self.bot, "end", handle_end) - -for i in range(5): - bot = MCBot(f"bot{i}") \ No newline at end of file +if __name__ == '__main__': + run() \ No newline at end of file diff --git a/manager.py b/manager.py new file mode 100644 index 0000000..fc5b9cf --- /dev/null +++ b/manager.py @@ -0,0 +1,31 @@ +from queue import Queue +class Manager: + def __init__(self): + self.bots = set() + self.tasks = Queue() + # self.tasks.put(Task("Task A", lambda: print("Task A"))) + # self.tasks.put(Task("Task B", lambda: print("Task B"))) + # self.tasks.put(Task("Task C", lambda: print("Task C"))) + # self.tasks.put(Task("Task D", lambda: print("Task D"))) + # self.tasks.put(Task("Task E", lambda: print("Task E"))) + + def queue(self, task): + self.tasks.put(task) + + def get_next_task(self): + if len(self.tasks.queue) > 0: + return self.tasks.get() + else: + return None + + def register_bot(self, name): + self.bots.add(name) + +class Task: + def __init__(self, name, func, *args): + self.name = name + self.func = func + self.args = args + + def perform_task(self): + self.func(*self.args) \ No newline at end of file diff --git a/mcbot.py b/mcbot.py new file mode 100644 index 0000000..6edefc1 --- /dev/null +++ b/mcbot.py @@ -0,0 +1,118 @@ +from javascript import require, On, off, AsyncTask +from simple_chalk import chalk +from manager import Task +from task_funcs import come, collect_wood, print_inventory, craft_item, place_crafting_table +mineflayer = require('mineflayer') +pathfinder = require('mineflayer-pathfinder').pathfinder +mineflayerViewer = require('prismarine-viewer').mineflayer +blockFinderPlugin = require('mineflayer-blockfinder')(mineflayer) + +SERVER_IP = '127.0.0.1' +SERVER_PORT = 25565 +BOT_ARGS = { + 'host': SERVER_IP, + 'port': SERVER_PORT +} + +class MCBot: + def __init__(self, bot_name, manager, bot_args = BOT_ARGS, is_king = False): + self.bot_args = { + 'host': bot_args['host'], + 'port': bot_args['port'], + 'username': bot_name + } + self.manager = manager + self.manager.register_bot(bot_name) + self.reconnect = True + self.bot_name = bot_name + self.start_bot() + self.is_king = is_king + self.mc_data = None + if is_king: + mineflayerViewer(self.bot, { 'port': 3007, 'firstPerson': False }) + + def log(self, message): + print(f"{self.bot_name}: {message}") + + def chat(self, message): + print(chalk.cyan(f"{self.bot_name} sent: {message}")) + self.bot.chat(message) + + def start_bot(self): + self.bot = mineflayer.createBot(self.bot_args) + self.bot.loadPlugin(pathfinder) + self.bot.loadPlugin(blockFinderPlugin) + print(f"Started mineflayer bot with the name {self.bot_name}") + self.start_listeners() + + def start_listeners(self): + @On(self.bot, 'login') + def handle_login(this): + bot_socket = self.bot._client.socket + self.log( + chalk.green( + f"Logged in to {bot_socket.server if bot_socket.server else bot_socket._host }" + ) + ) + + @On(self.bot, 'spawn') + def handle_spawn(this): + self.log("I spawned 👋") + + @AsyncTask(start=True) + @On(self.bot, 'time') + def handle_tick_update(this): + task = self.manager.get_next_task() + if task: + task.perform_task() + + @On(self.bot, 'chat') + def handle_chat(this, sender, message, *args): + if not self.is_king: + return + if sender not in self.manager.bots: + self.log(f"chat message: {sender}> {message}") + + if sender and (sender != self.bot_name) and (message.startswith(f"~")): + args = message.split(' ') + if 'come' in message: + self.manager.queue(Task(f"Come to {sender}", come, self, sender)) + + if 'collect-wood' in message: + self.manager.queue(Task(f"Collect {args[1]} wood", collect_wood, self, args[1])) + + if 'list-inv' in message: + self.manager.queue(Task(f"Listing inventory", print_inventory, self)) + + if 'place-table' in message: + self.manager.queue(Task(f"Placing crafting table", place_crafting_table, self)) + + if 'craft' in message: + self.manager.queue(Task(f"Attempting to craft {args[1]}", craft_item, self, args[1])) + + if 'quit' in message: + self.reconnect = False + self.bot.quit() + + @On(self.bot, "kicked") + def handle_kicked(this, reason, loggedIn): + if loggedIn: + self.log(chalk.redBright(f"Kicked from server: {reason}")) + else: + self.log(chalk.redBright(f"Kicked whilst trying to connect: {reason}")) + + @On(self.bot, "end") + def handle_end(this, reason): + self.log(chalk.red(f"Disconnected: {reason}")) + + # Turn off event listeners + off(self.bot, "login", handle_login) + off(self.bot, "kicked", handle_kicked) + off(self.bot, "spawn", handle_spawn) + off(self.bot, "chat", handle_chat) + off(self.bot, "time", handle_tick_update) + if self.reconnect: + self.log(chalk.blue("Attempting to reconnect")) + self.start_bot() + off(self.bot, "end", handle_end) + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b0137fd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,875 @@ +{ + "name": "hivemine", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "mineflayer-blockfinder": "^0.0.7" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.16.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.0.tgz", + "integrity": "sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.2.tgz", + "integrity": "sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==", + "dependencies": { + "@azure/msal-common": "14.16.0", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@xboxreplay/errors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@xboxreplay/errors/-/errors-0.1.0.tgz", + "integrity": "sha512-Tgz1d/OIPDWPeyOvuL5+aai5VCcqObhPnlI3skQuf80GVF3k1I0lPCnGC+8Cm5PV9aLBT5m8qPcJoIUQ2U4y9g==" + }, + "node_modules/@xboxreplay/xboxlive-auth": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@xboxreplay/xboxlive-auth/-/xboxlive-auth-3.3.3.tgz", + "integrity": "sha512-j0AU8pW10LM8O68CTZ5QHnvOjSsnPICy0oQcP7zyM7eWkDQ/InkiQiirQKsPn1XRYDl4ccNu0WM582s3UKwcBg==", + "dependencies": { + "@xboxreplay/errors": "^0.1.0", + "axios": "^0.21.1" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w==" + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/endian-toggle": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/endian-toggle/-/endian-toggle-0.0.0.tgz", + "integrity": "sha512-ShfqhXeHRE4TmggSlHXG8CMGIcsOsqDw/GcoPcosToE59Rm9e4aXaMhEQf2kPBsBRrKem1bbOAv5gOKnkliMFQ==" + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "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.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==" + }, + "node_modules/macaddress": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.5.3.tgz", + "integrity": "sha512-vGBKTA+jwM4KgjGZ+S/8/Mkj9rWzePyGY6jManXPGhiWu63RYwW8dKPyk5koP+8qNVhPhHgFa1y/MJ4wrjsNrg==" + }, + "node_modules/minecraft-data": { + "version": "3.78.0", + "resolved": "https://registry.npmjs.org/minecraft-data/-/minecraft-data-3.78.0.tgz", + "integrity": "sha512-Ssks8QD31lsoxqa7LySTqeP9romsfAbfsSGiUHiGMeqfxRi/PtOxGLyKD1BXB8V/tXLztFcbQYqzIhprDkPguw==" + }, + "node_modules/minecraft-folder-path": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minecraft-folder-path/-/minecraft-folder-path-1.2.0.tgz", + "integrity": "sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==" + }, + "node_modules/minecraft-protocol": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/minecraft-protocol/-/minecraft-protocol-1.50.0.tgz", + "integrity": "sha512-GiZy8g4YG0iZEKifX6ulCyhVnTDGZ1gH0ouUdxjo6xkKwp4KOf+ptbBgZ8G5+WHCumrI91+v/JYU07uCvKdi0w==", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "aes-js": "^3.1.2", + "buffer-equal": "^1.0.0", + "debug": "^4.3.2", + "endian-toggle": "^0.0.0", + "lodash.get": "^4.1.2", + "lodash.merge": "^4.3.0", + "minecraft-data": "^3.78.0", + "minecraft-folder-path": "^1.2.0", + "node-fetch": "^2.6.1", + "node-rsa": "^0.4.2", + "prismarine-auth": "^2.2.0", + "prismarine-chat": "^1.10.0", + "prismarine-nbt": "^2.5.0", + "prismarine-realms": "^1.2.0", + "protodef": "^1.17.0", + "readable-stream": "^4.1.0", + "uuid-1345": "^1.0.1", + "yggdrasil": "^1.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/mineflayer": { + "version": "2.41.0", + "resolved": "https://registry.npmjs.org/mineflayer/-/mineflayer-2.41.0.tgz", + "integrity": "sha512-IFFy4NgF24FU2PkAwazJphl2F+3gpbpN578ex0sq1XfcBBRge3kCz1UC2KDMjKI+V/8vffOL+OEnug9jt3f7Vw==", + "dependencies": { + "minecraft-data": "^2.70.0", + "minecraft-protocol": "^1.17.0", + "prismarine-biome": "^1.1.0", + "prismarine-block": "^1.6.0", + "prismarine-chat": "^1.0.0", + "prismarine-chunk": "^1.20.3", + "prismarine-entity": "^1.0.0", + "prismarine-item": "^1.5.0", + "prismarine-physics": "^1.0.4", + "prismarine-recipe": "^1.1.0", + "prismarine-windows": "^1.5.0", + "prismarine-world": "^3.2.0", + "protodef": "^1.8.0", + "typed-emitter": "^1.2.0", + "vec3": "^0.1.6" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/mineflayer-blockfinder": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mineflayer-blockfinder/-/mineflayer-blockfinder-0.0.7.tgz", + "integrity": "sha512-1+r7AwMw90E2qforbhpJ1T/G2sBfb7Lu7efepZ9BZ1xu0npL/FW71ZLPbwq8w8IwW9H0ogOLBn7lIWbQIf/KEw==", + "dependencies": { + "mineflayer": "^2.1.0", + "vec3": "^0.1.3" + } + }, + "node_modules/mineflayer/node_modules/minecraft-data": { + "version": "2.221.0", + "resolved": "https://registry.npmjs.org/minecraft-data/-/minecraft-data-2.221.0.tgz", + "integrity": "sha512-0AhqzbIKb6WqPSF6qBevaPryeWOz545hLxt6q+gfJF8YIQX/YfkyX/nXWhl+pSIS2rTBcQ0RJkRCtTeRzQwHDA==" + }, + "node_modules/mojangson": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mojangson/-/mojangson-2.0.4.tgz", + "integrity": "sha512-HYmhgDjr1gzF7trGgvcC/huIg2L8FsVbi/KacRe6r1AswbboGVZDS47SOZlomPuMWvZLas8m9vuHHucdZMwTmQ==", + "dependencies": { + "nearley": "^2.19.5" + } + }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dependencies": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "bin": { + "nearley-railroad": "bin/nearley-railroad.js", + "nearley-test": "bin/nearley-test.js", + "nearley-unparse": "bin/nearley-unparse.js", + "nearleyc": "bin/nearleyc.js" + }, + "funding": { + "type": "individual", + "url": "https://nearley.js.org/#give-to-nearley" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-rsa": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-0.4.2.tgz", + "integrity": "sha512-Bvso6Zi9LY4otIZefYrscsUpo2mUpiAVIEmSZV2q41sP8tHZoert3Yu6zv4f/RXJqMNZQKCtnhDugIuCma23YA==", + "dependencies": { + "asn1": "0.2.3" + } + }, + "node_modules/prismarine-auth": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/prismarine-auth/-/prismarine-auth-2.5.0.tgz", + "integrity": "sha512-CRv/pL6d/T+4cdjWS223PXG+ygHbz40Kef04L59SLMT+axNdAQro23eZZhgiIIu6u7rlvJcZYlIY93gFNtKxXA==", + "dependencies": { + "@azure/msal-node": "^2.0.2", + "@xboxreplay/xboxlive-auth": "^3.3.3", + "debug": "^4.3.3", + "jose": "^4.1.4", + "node-fetch": "^2.6.1", + "smart-buffer": "^4.1.0", + "uuid-1345": "^1.0.2" + } + }, + "node_modules/prismarine-biome": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/prismarine-biome/-/prismarine-biome-1.3.0.tgz", + "integrity": "sha512-GY6nZxq93mTErT7jD7jt8YS1aPrOakbJHh39seYsJFXvueIOdHAmW16kYQVrTVMW5MlWLQVxV/EquRwOgr4MnQ==", + "peerDependencies": { + "minecraft-data": "^3.0.0", + "prismarine-registry": "^1.1.0" + } + }, + "node_modules/prismarine-block": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/prismarine-block/-/prismarine-block-1.19.0.tgz", + "integrity": "sha512-2tMDqRBrIxOZc2X3HNsGb1LqqA/oyTmKSucktS52aMyxclNdYMWgUcHER0bwrYwbJ00xdQDB6EHByO3QWp1PhQ==", + "dependencies": { + "minecraft-data": "^3.38.0", + "prismarine-biome": "^1.1.0", + "prismarine-chat": "^1.5.0", + "prismarine-item": "^1.10.1", + "prismarine-nbt": "^2.0.0", + "prismarine-registry": "^1.1.0" + } + }, + "node_modules/prismarine-chat": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/prismarine-chat/-/prismarine-chat-1.10.1.tgz", + "integrity": "sha512-XukYcuueuhDxzEXG7r8BZyt6jOObrPPB4JESCgb+/XenB9nExoSHF8eTQWWj8faKPLqm1dRQaYwFJlNBlJZJUw==", + "dependencies": { + "mojangson": "^2.0.1", + "prismarine-nbt": "^2.0.0", + "prismarine-registry": "^1.4.0" + } + }, + "node_modules/prismarine-chunk": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/prismarine-chunk/-/prismarine-chunk-1.36.0.tgz", + "integrity": "sha512-RqXtCBz7n4iNG44nkwjqvGebbQIWZYjyCp3ORi3nBeLJ6AnmOH+qauaHkqH8hcyUFS6ObQeFx/xYYMwgMSoCKw==", + "dependencies": { + "prismarine-biome": "^1.2.0", + "prismarine-block": "^1.14.1", + "prismarine-nbt": "^2.2.1", + "prismarine-registry": "^1.1.0", + "smart-buffer": "^4.1.0", + "uint4": "^0.1.2", + "vec3": "^0.1.3", + "xxhash-wasm": "^0.4.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/prismarine-entity": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/prismarine-entity/-/prismarine-entity-1.2.0.tgz", + "integrity": "sha512-4dQ9LYl6HDJQrwZHjSKU4D5VNyHRnfrjcw7eVLlbRPkuR50utW5mmfPi4ys9U7tHNmGWHC/cwjH9xzT75LUovQ==", + "dependencies": { + "vec3": "^0.1.4" + } + }, + "node_modules/prismarine-item": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/prismarine-item/-/prismarine-item-1.15.0.tgz", + "integrity": "sha512-DysyiCzaI8S7PpRLFylAZnQo2CppXiBbaUp+8rhK+EzvzmMdS+D1/oETQm9ysB5Jw9eCer6iWGMgzZXxJE5+/w==", + "dependencies": { + "prismarine-nbt": "^2.0.0", + "prismarine-registry": "^1.4.0" + } + }, + "node_modules/prismarine-nbt": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/prismarine-nbt/-/prismarine-nbt-2.6.0.tgz", + "integrity": "sha512-z65ijm6hVlYOmhg8IEzdYfUz1u3AOiQtzyTSAwD8NLBCr96ZUPtUH5o/6sGAoDaN+rkDe0DNBCiO7bvXXO1fkQ==", + "dependencies": { + "protodef": "^1.9.0" + } + }, + "node_modules/prismarine-physics": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/prismarine-physics/-/prismarine-physics-1.9.0.tgz", + "integrity": "sha512-4qYF6mQ9fOyONaJIF18eZBzsXPq9RD30gxiXoqFjB7sk/rtLIb5ye72YxeYZA3Q9PyBhGH1ANdrHwJ+21WEedQ==", + "dependencies": { + "minecraft-data": "^3.0.0", + "prismarine-nbt": "^2.0.0", + "vec3": "^0.1.7" + } + }, + "node_modules/prismarine-realms": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prismarine-realms/-/prismarine-realms-1.3.2.tgz", + "integrity": "sha512-5apl9Ru8veTj5q2OozRc4GZOuSIcs3yY4UEtALiLKHstBe8bRw8vNlaz4Zla3jsQ8yP/ul1b1IJINTRbocuA6g==", + "dependencies": { + "debug": "^4.3.3", + "node-fetch": "^2.6.1" + } + }, + "node_modules/prismarine-recipe": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prismarine-recipe/-/prismarine-recipe-1.3.1.tgz", + "integrity": "sha512-xfa9E9ACoaDi+YzNQ+nk8kWSIqt5vSZOOCHIT+dTXscf/dng2HaJ/59uwe1D/jvOkAd2OvM6RRJM6fFe0q/LDA==", + "peerDependencies": { + "prismarine-registry": "^1.4.0" + } + }, + "node_modules/prismarine-registry": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/prismarine-registry/-/prismarine-registry-1.10.0.tgz", + "integrity": "sha512-6TYQiZHtsJ87HsB2E0yamCFp77ZyyLT16OmW5iXB5V30yCPflhHvR5TR2IqISmmiRc2093BkHfiIhsOZaMatmQ==", + "dependencies": { + "minecraft-data": "^3.70.0", + "prismarine-nbt": "^2.0.0" + } + }, + "node_modules/prismarine-windows": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/prismarine-windows/-/prismarine-windows-1.6.0.tgz", + "integrity": "sha512-026LG1yR76Xb62kM+W83IWT7Wy2yKplllbXNFBF2m0Lr4k4YpYKnpLb8tRft8MLOLRbYAt/KnxE/YKvRZul7kw==", + "dependencies": { + "prismarine-item": "^1.4.0" + } + }, + "node_modules/prismarine-world": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/prismarine-world/-/prismarine-world-3.6.3.tgz", + "integrity": "sha512-zqdqPEYCDHzqi6hglJldEO63bOROXpbZeIdxBmoQq7o04Lf81t016LU6stFHo3E+bmp5+xU74eDFdOvzYNABkA==", + "dependencies": { + "vec3": "^0.1.7" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/protodef": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/protodef/-/protodef-1.17.0.tgz", + "integrity": "sha512-mnpNPV3xwu63u3NwZuXM1RCp979vjHxUGHzVrb6dxbvof5Fx+b8Rs0G0c3xtEuFDreGAMWS7VrlNkDUDBMsFWQ==", + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.reduce": "^4.6.0", + "protodef-validator": "^1.3.0", + "readable-stream": "^4.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/protodef-validator": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/protodef-validator/-/protodef-validator-1.3.1.tgz", + "integrity": "sha512-lZ5FWKZYR9xOjpMw1+EfZRfCjzNRQWPq+Dk+jki47Sikl2EeWEPnTfnJERwnU/EwFq6us+0zqHHzSsmLeYX+Lg==", + "dependencies": { + "ajv": "^6.5.4" + }, + "bin": { + "protodef-validator": "cli.js" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, + "node_modules/randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dependencies": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/typed-emitter": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-1.4.0.tgz", + "integrity": "sha512-weBmoo3HhpKGgLBOYwe8EB31CzDFuaK7CCL+axXhUYhn4jo6DSkHnbefboCF5i4DQ2aMFe0C/FdTWcPdObgHyg==" + }, + "node_modules/uint4": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uint4/-/uint4-0.1.2.tgz", + "integrity": "sha512-lhEx78gdTwFWG+mt6cWAZD/R6qrIj0TTBeH5xwyuDJyswLNlGe+KVlUPQ6+mx5Ld332pS0AMUTo9hIly7YsWxQ==" + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uuid-1345": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uuid-1345/-/uuid-1345-1.0.2.tgz", + "integrity": "sha512-bA5zYZui+3nwAc0s3VdGQGBfbVsJLVX7Np7ch2aqcEWFi5lsAEcmO3+lx3djM1npgpZI8KY2FITZ2uYTnYUYyw==", + "dependencies": { + "macaddress": "^0.5.1" + } + }, + "node_modules/vec3": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/vec3/-/vec3-0.1.10.tgz", + "integrity": "sha512-Sr1U3mYtMqCOonGd3LAN9iqy0qF6C+Gjil92awyK/i2OwiUo9bm7PnLgFpafymun50mOjnDcg4ToTgRssrlTcw==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==" + }, + "node_modules/yggdrasil": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/yggdrasil/-/yggdrasil-1.7.0.tgz", + "integrity": "sha512-QBIo5fiNd7688G3FqXXYGr36uyrYzczlNuzpWFy2zL3+R+3KT2lF+wFxm51synfA3l3z6IBiGOc1/EVXWCYY1Q==", + "dependencies": { + "node-fetch": "^2.6.1", + "uuid": "^8.2.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9aef423 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "mineflayer-blockfinder": "^0.0.7" + } +} diff --git a/task_funcs.py b/task_funcs.py new file mode 100644 index 0000000..fb929b9 --- /dev/null +++ b/task_funcs.py @@ -0,0 +1,124 @@ +from javascript import require +from simple_chalk import chalk +from time import sleep +import threading +pathfinder = require('mineflayer-pathfinder') + +def dig_with_wait(bot, block): + finished = threading.Event() + def on_dig_complete(err): + if err: + bot.chat("Failed to dig block!") + else: + bot.chat("Successfully dug block!") + finished.set() # Unblock the thread + + bot.dig(block, on_dig_complete) + finished.wait() # Block until the dig operation completes + + +def collect_wood(bot_obj, quantity): + bot = bot_obj.bot + def process_found_wood(err, blockPoints): + if err: + bot.chat("Error finding oak logs!") + return + for block in blockPoints: + bot.chat(f"Found oak log at {block.position}") + pos = block.position + bot.pathfinder.goto(pathfinder.goals.GoalNear(pos.x, pos.y, pos.z), lambda: dig_with_wait(bot, block)) + sleep(5) + + + bot_obj.log(chalk.magenta(f"Collecting {quantity} oak wood...")) + bot.findBlock({ + "point": bot.entity.position, + "matching": bot.registry.blocksByName["oak_log"].id + }, process_found_wood) + +def print_inventory(bot_obj): + bot = bot_obj.bot + inv = list(bot.inventory.items()) + bot.chat("My inventory contains [") + for i in range(len(inv)): + bot.chat(f"Item {i+1}: {inv[i].displayName} x{inv[i].count}") + bot.chat("]") + +def place_crafting_table(bot_obj): + bot = bot_obj.bot + # Check if the bot has a crafting table in its inventory + crafting_table_id = bot.registry.itemsByName["crafting_table"].id + crafting_table_count = bot.inventory.count(crafting_table_id) + + if crafting_table_count > 0: + # Get the bot's current position + pos = bot.entity.position + # Define the position directly below the bot (y - 1) + target_pos = {'x': pos.x, 'y': pos.y - 1, 'z': pos.z} + + # Get the block at the target position + target_block = bot.world.getBlock(target_pos) + + # If the block below is empty (not a solid block), place the crafting table + if target_block and target_block.name == 'air': + # Place the crafting table at the target position + bot.placeBlock(target_pos, bot.registry.itemsByName["crafting_table"], None, lambda err: place_callback(err, bot)) + else: + bot.chat("Cannot place crafting table, position is blocked.") + else: + bot.chat("No crafting table in inventory to place.") + + +def craft_item(bot_obj, item_name, quantity=1): + bot = bot_obj.bot + + def on_craft_complete(err): + if err: + bot.chat(f"Failed to craft {item_name}: {err}") + else: + bot.chat(f"Successfully crafted {quantity} {item_name}(s).") + + try: + try: + # Get the item details from the bot's registry + item = bot.registry.itemsByName[item_name] + item_id = item.id + bot.chat(f"Attempting to craft {item.displayName} with ID {item_id}...") + except KeyError: + bot.chat(f"Unknown item: {item_name}.") + return + + recipe = bot.recipesFor(item_id, None, quantity, bot.inventory) + if len(list(recipe)) < 1: + bot.chat(f"No available recipe for {item_name} with the items I have.") + return + + # Check if a crafting table is required + if recipe[0].requiresTable and not bot.inventory.count(bot.registry.itemsByName["crafting_table"].id): + bot.chat(f"Crafting {item_name} requires a crafting table. I don't have one.") + return + + # Start crafting + bot.craft(recipe[0], quantity, None, on_craft_complete) + bot.chat(f"Successfully crafted {item.displayName}") + + except Exception as e: + bot.chat(f"Error during crafting: {str(e)}") + + + + +def come(bot_obj, sender): + bot = bot_obj.bot + sleep(1) + player = bot.players[sender] + bot_obj.log(chalk.magenta(f"Target {player.username}")) + target = player.entity + if not target: + bot_obj.chat(f"I don't see you {player.username}!") + return + pos = target.position + movements = pathfinder.Movements(bot) + movements.canDig = False + bot.pathfinder.setMovements(movements) + bot.pathfinder.setGoal(pathfinder.goals.GoalNear(pos.x, pos.y, pos.z, 2)) \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..15a84a9 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,5 @@ + + HiveMine Control + + + \ No newline at end of file