From 4b8f00ce99240863101cb20a150b575aa09227fc Mon Sep 17 00:00:00 2001 From: Rin Date: Wed, 21 Jan 2026 21:46:38 +0800 Subject: [PATCH] feat(minecraft): borrow patch from mindcraft --- patches/mineflayer-pathfinder.patch | 286 ++++++++++++++++++++++++++++ patches/mineflayer@4.33.0.patch | 75 ++++++++ pnpm-lock.yaml | 73 ++++--- pnpm-workspace.yaml | 2 + 4 files changed, 399 insertions(+), 37 deletions(-) create mode 100644 patches/mineflayer-pathfinder.patch create mode 100644 patches/mineflayer@4.33.0.patch diff --git a/patches/mineflayer-pathfinder.patch b/patches/mineflayer-pathfinder.patch new file mode 100644 index 000000000..e181e6f2b --- /dev/null +++ b/patches/mineflayer-pathfinder.patch @@ -0,0 +1,286 @@ +# MIT License + +# Copyright (c) 2024 Kolby Nottingham + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +diff --git a/index.js b/index.js +index b38bd30..2ca8205 100644 +--- a/index.js ++++ b/index.js +@@ -14,6 +14,7 @@ const interactableBlocks = require('./lib/interactable.json') + + function inject (bot) { + const waterType = bot.registry.blocksByName.water.id ++ const lavaType = bot.registry.blocksByName.lava.id + const ladderId = bot.registry.blocksByName.ladder.id + const vineId = bot.registry.blocksByName.vine.id + let stateMovements = new Movements(bot) +@@ -61,6 +62,10 @@ function inject (bot) { + } + + bot.pathfinder.getPathTo = (movements, goal, timeout) => { ++ // Update lava avoidance based on current bot state ++ if (movements.updateLavaAvoidance) { ++ movements.updateLavaAvoidance() ++ } + const generator = bot.pathfinder.getPathFromTo(movements, bot.entity.position, goal, { timeout }) + const { value: { result, astarContext: context } } = generator.next() + astarContext = context +@@ -170,6 +175,16 @@ function inject (bot) { + const curPoint = path[i] + if (curPoint.toBreak.length > 0 || curPoint.toPlace.length > 0) break + const b = bot.blockAt(new Vec3(curPoint.x, curPoint.y, curPoint.z)) ++ ++ // openned doors have small Collision box ++ // that may stop the bot from moving forward ++ if(i === 0 && b?.name.includes('door')) { ++ curPoint.x = Math.floor(curPoint.x) + 0.5 ++ curPoint.y = Math.floor(curPoint.y) ++ curPoint.z = Math.floor(curPoint.z) + 0.5 ++ continue ++ } ++ + if (b && (b.type === waterType || ((b.type === ladderId || b.type === vineId) && i + 1 < path.length && path[i + 1].y < curPoint.y))) { + curPoint.x = Math.floor(curPoint.x) + 0.5 + curPoint.y = Math.floor(curPoint.y) +@@ -524,6 +539,9 @@ function inject (bot) { + bot.activateBlock(bot.blockAt(new Vec3(placingBlock.x, placingBlock.y, placingBlock.z))).then(() => { + lockUseBlock.release() + placingBlock = nextPoint.toPlace.shift() ++ if (!placingBlock) { ++ placing = false ++ } + }, err => { + console.error(err) + lockUseBlock.release() +@@ -550,6 +568,7 @@ function inject (bot) { + lockEquipItem.release() + const refBlock = bot.blockAt(new Vec3(placingBlock.x, placingBlock.y, placingBlock.z), false) + if (!lockPlaceBlock.tryAcquire()) return ++ bot.world.setBlockStateId(refBlock.position.offset(placingBlock.dx, placingBlock.dy, placingBlock.dz), 1) + if (interactableBlocks.includes(refBlock.name)) { + bot.setControlState('sneak', true) + } +@@ -557,6 +576,7 @@ function inject (bot) { + .then(function () { + // Dont release Sneak if the block placement was not successful + bot.setControlState('sneak', false) ++ bot.setControlState('jump', false) + if (bot.pathfinder.LOSWhenPlacingBlocks && placingBlock.returnPos) returningPos = placingBlock.returnPos.clone() + }) + .catch(_ignoreError => { +@@ -576,7 +596,7 @@ function inject (bot) { + let dx = nextPoint.x - p.x + const dy = nextPoint.y - p.y + let dz = nextPoint.z - p.z +- if (Math.abs(dx) <= 0.35 && Math.abs(dz) <= 0.35 && Math.abs(dy) < 1) { ++ if (Math.abs(dx) <= 0.175 && Math.abs(dz) <= 0.175 && Math.abs(dy) < 1) { + // arrived at next point + lastNodeTime = performance.now() + if (stopPathing) { +@@ -611,6 +631,9 @@ function inject (bot) { + if (bot.entity.isInWater) { + bot.setControlState('jump', true) + bot.setControlState('sprint', false) ++ } else if (bot.entity.isInLava) { ++ bot.setControlState('jump', true) ++ bot.setControlState('sprint', false) + } else if (stateMovements.allowSprinting && physics.canStraightLine(path, true)) { + bot.setControlState('jump', false) + bot.setControlState('sprint', true) +diff --git a/lib/movements.js b/lib/movements.js +index a7e3505..84a0841 100644 +--- a/lib/movements.js ++++ b/lib/movements.js +@@ -50,7 +50,12 @@ class Movements { + this.blocksToAvoid.add(registry.blocksByName.fire.id) + if (registry.blocksByName.cobweb) this.blocksToAvoid.add(registry.blocksByName.cobweb.id) + if (registry.blocksByName.web) this.blocksToAvoid.add(registry.blocksByName.web.id) +- this.blocksToAvoid.add(registry.blocksByName.lava.id) ++ ++ // Only avoid lava if bot is not currently in lava ++ // Check if bot.entity exists and is initialized ++ if (!bot.entity || !bot.entity.isInLava) { ++ this.blocksToAvoid.add(registry.blocksByName.lava.id) ++ } + + this.liquids = new Set() + this.liquids.add(registry.blocksByName.water.id) +@@ -62,7 +67,13 @@ class Movements { + + this.climbables = new Set() + this.climbables.add(registry.blocksByName.ladder.id) +- // this.climbables.add(registry.blocksByName.vine.id) ++ if (registry.blocksByName.vine) this.climbables.add(registry.blocksByName.vine.id) ++ if (registry.blocksByName.weeping_vines) this.climbables.add(registry.blocksByName.weeping_vines.id) ++ if (registry.blocksByName.weeping_vines_plant) this.climbables.add(registry.blocksByName.weeping_vines_plant.id) ++ if (registry.blocksByName.twisting_vines) this.climbables.add(registry.blocksByName.twisting_vines.id) ++ if (registry.blocksByName.twisting_vines_plant) this.climbables.add(registry.blocksByName.twisting_vines_plant.id) ++ if (registry.blocksByName.cave_vines) this.climbables.add(registry.blocksByName.cave_vines.id) ++ if (registry.blocksByName.cave_vines_plant) this.climbables.add(registry.blocksByName.cave_vines_plant.id) + this.emptyBlocks = new Set() + + this.replaceables = new Set() +@@ -92,13 +103,15 @@ class Movements { + } + }) + registry.blocksArray.forEach(block => { +- if (this.interactableBlocks.has(block.name) && block.name.toLowerCase().includes('gate') && !block.name.toLowerCase().includes('iron')) { ++ if (this.interactableBlocks.has(block.name) ++ && (block.name.toLowerCase().includes('gate') || block.name.toLowerCase().includes('door') || block.name.toLowerCase().includes('trapdoor')) ++ && !block.name.toLowerCase().includes('iron')) { + // console.info(block) + this.openable.add(block.id) + } + }) + +- this.canOpenDoors = false // Causes issues. Probably due to none paper servers. ++ this.canOpenDoors = true + + this.exclusionAreasStep = [] + this.exclusionAreasBreak = [] +@@ -230,8 +243,13 @@ class Movements { + } + } + b.climbable = this.climbables.has(b.type) +- b.safe = (b.boundingBox === 'empty' || b.climbable || this.carpets.has(b.type)) && !this.blocksToAvoid.has(b.type) +- b.physical = b.boundingBox === 'block' && !this.fences.has(b.type) ++ ++ // Enhanced trapdoor logic - open trapdoors are safe to pass through ++ const isOpenTrapdoor = this.openable.has(b.type) && b.name.includes('trapdoor') && b._properties?.open === true ++ const isClosedTrapdoor = this.openable.has(b.type) && b.name.includes('trapdoor') && b._properties?.open !== true ++ ++ b.safe = (b.boundingBox === 'empty' || b.climbable || this.carpets.has(b.type) || isOpenTrapdoor) && !this.blocksToAvoid.has(b.type) ++ b.physical = (b.boundingBox === 'block' && !this.fences.has(b.type)) || isClosedTrapdoor + b.replaceable = this.replaceables.has(b.type) && !b.physical + b.liquid = this.liquids.has(b.type) + b.height = pos.y + dy +@@ -284,6 +302,18 @@ class Movements { + cost += this.exclusionStep(block) // Is excluded so can't move or break + cost += this.getNumEntitiesAt(block.position, 0, 0, 0) * this.entityCost + if (block.safe) return cost ++ ++ // process door cost ++ if ((this.canOpenDoors && block.openable) ++ || (block.openable && block._properties?.open === true)) { ++ return cost ++ } ++ ++ // Handle trapdoors specifically - they can be opened instead of broken ++ if (this.canOpenDoors && block.openable && block.name.includes('trapdoor') && !block.name.includes('iron')) { ++ return cost + 1 // Small cost for opening trapdoor ++ } ++ + if (!this.safeToBreak(block)) return 100 // Can't break, so can't move + toBreak.push(block.position) + +@@ -387,8 +417,8 @@ class Movements { + cost += this.safeOrBreak(blockB, toBreak) + if (cost > 100) return + +- // Open fence gates +- if (this.canOpenDoors && blockC.openable && blockC.shapes && blockC.shapes.length !== 0) { ++ // Open fence gates and doors ++ if (this.canOpenDoors && blockC.openable && !blockC._properties.open) { + toPlace.push({ x: node.x + dir.x, y: node.y, z: node.z + dir.z, dx: 0, dy: 0, dz: 0, useOne: true }) // Indicate that a block should be used on this block not placed + } else { + cost += this.safeOrBreak(blockC, toBreak) +@@ -554,6 +584,54 @@ class Movements { + neighbors.push(new Move(node.x, node.y + 1, node.z, node.remainingBlocks - toPlace.length, cost, toBreak, toPlace)) + } + ++ getMoveClimbUpThroughTrapdoor (node, neighbors) { ++ const blockCurrent = this.getBlock(node, 0, 0, 0) // Current position (should be climbable) ++ const blockAbove = this.getBlock(node, 0, 1, 0) // Block directly above ++ const blockCeiling = this.getBlock(node, 0, 2, 0) // Trapdoor or ceiling block ++ ++ // Only attempt this move if we're on a climbable block (ladder/vine) ++ if (!blockCurrent.climbable) return ++ ++ // Check if there's a closed trapdoor above us ++ if (!blockCeiling.openable || blockCeiling._properties?.open === true) return ++ ++ let cost = 2 // Base cost for climbing up and opening trapdoor ++ const toBreak = [] ++ const toPlace = [] ++ ++ // Make sure we can break/pass through the block above if needed ++ cost += this.safeOrBreak(blockAbove, toBreak) ++ if (cost > 100) return ++ ++ // Add cost for opening the trapdoor ++ toPlace.push({ x: node.x, y: node.y + 2, z: node.z, dx: 0, dy: 0, dz: 0, useOne: true }) ++ ++ neighbors.push(new Move(node.x, node.y + 2, node.z, node.remainingBlocks - toPlace.length, cost, toBreak, toPlace)) ++ } ++ ++ // Enhanced ladder/vine climbing that can handle stepping on top and jumping ++ getMoveClimbTop (node, neighbors) { ++ const blockCurrent = this.getBlock(node, 0, 0, 0) // Current position (should be climbable) ++ const blockAbove = this.getBlock(node, 0, 1, 0) // Block directly above ++ ++ // Only attempt this move if we're on a climbable block (ladder/vine) ++ if (!blockCurrent.climbable) return ++ ++ // Check if we can step on top of the ladder/vine and then jump up ++ if (!blockAbove.safe) return ++ ++ let cost = 2 // Cost for climbing to top of ladder and jumping ++ const toBreak = [] ++ const toPlace = [] ++ ++ // Check if there's space to jump up from the top of the ladder ++ const blockJumpTarget = this.getBlock(node, 0, 2, 0) ++ cost += this.safeOrBreak(blockJumpTarget, toBreak) ++ if (cost > 100) return ++ ++ neighbors.push(new Move(node.x, node.y + 2, node.z, node.remainingBlocks - toPlace.length, cost, toBreak, toPlace)) ++ } ++ + // Jump up, down or forward over a 1 block gap + getMoveParkourForward (node, dir, neighbors) { + const block0 = this.getBlock(node, 0, -1, 0) +@@ -656,8 +734,27 @@ class Movements { + this.getMoveDown(node, neighbors) + this.getMoveUp(node, neighbors) + ++ // Enhanced climbing moves for ladders, vines, and trapdoors ++ this.getMoveClimbUpThroughTrapdoor(node, neighbors) ++ this.getMoveClimbTop(node, neighbors) ++ + return neighbors + } ++ ++ // Update lava avoidance based on bot's current state ++ updateLavaAvoidance () { ++ const registry = this.bot.registry ++ const lavaId = registry.blocksByName.lava.id ++ ++ // Check if bot.entity exists and is initialized ++ if (this.bot.entity && this.bot.entity.isInLava) { ++ // If bot is in lava, allow pathfinding through lava to escape ++ this.blocksToAvoid.delete(lavaId) ++ } else { ++ // If bot is not in lava, avoid lava blocks ++ this.blocksToAvoid.add(lavaId) ++ } ++ } + } + + module.exports = Movements diff --git a/patches/mineflayer@4.33.0.patch b/patches/mineflayer@4.33.0.patch new file mode 100644 index 000000000..50751c0ee --- /dev/null +++ b/patches/mineflayer@4.33.0.patch @@ -0,0 +1,75 @@ +# MIT License + +# Copyright (c) 2024 Kolby Nottingham + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +diff --git a/lib/plugins/digging.js b/lib/plugins/digging.js +index 496cf63..813a667 100644 +--- a/lib/plugins/digging.js ++++ b/lib/plugins/digging.js +@@ -242,11 +242,14 @@ function inject (bot) { + enchantments = enchantments.concat(helmetEnchantments) + } + ++ if (block.material === 'incorrect_for_wooden_tool') ++ block.material = 'mineable/pickaxe' ++ + const creative = bot.game.gameMode === 'creative' + return block.digTime( + type, + creative, +- bot.entity.isInWater, ++ false, // isInWater, water calc is bugged, so always false + !bot.entity.onGround, + enchantments, + bot.entity.effects +diff --git a/lib/plugins/inventory.js b/lib/plugins/inventory.js +index 70db312..93d2054 100644 +--- a/lib/plugins/inventory.js ++++ b/lib/plugins/inventory.js +@@ -125,10 +125,15 @@ function inject (bot, { hideErrors }) { + cursorZ: -1 + }) + } else if (bot.supportFeature('useItemWithOwnPacket')) { ++ const yawDeg = -bot.entity.yaw * 180 / Math.PI + 180 // invert + shift ++ const pitchDeg = -bot.entity.pitch * 180 / Math.PI // invert + bot._client.write('use_item', { + hand: offHand ? 1 : 0, + sequence, +- rotation: { x: 0, y: 0 } ++ rotation: { ++ x: yawDeg, ++ y: pitchDeg ++ } + }) + } + } +diff --git a/lib/plugins/place_block.js b/lib/plugins/place_block.js +index fdaec6b..08983b6 100644 +--- a/lib/plugins/place_block.js ++++ b/lib/plugins/place_block.js +@@ -11,7 +11,7 @@ function inject (bot) { + let newBlock = bot.blockAt(dest) + if (oldBlock.type === newBlock.type) { + [oldBlock, newBlock] = await onceWithCleanup(bot, `blockUpdate:${dest}`, { +- timeout: 5000, ++ timeout: 500, + // Condition to wait to receive block update actually changing the block type, in case the bot receives block updates with no changes + // oldBlock and newBlock will both be null when the world unloads + checkCondition: (oldBlock, newBlock) => !oldBlock || !newBlock || oldBlock.type !== newBlock.type diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4027806ea..af923ec6d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -243,6 +243,12 @@ overrides: string.prototype.matchall: npm:@nolyfill/string.prototype.matchall@^1.0.44 patchedDependencies: + mineflayer-pathfinder: + hash: 4e932c106617efe7663216fc5ed42556761146633ebae88a5c831dc253abafa1 + path: patches/mineflayer-pathfinder.patch + mineflayer@4.33.0: + hash: 03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a + path: patches/mineflayer@4.33.0.patch srvx@0.9.8: hash: f0151386fdcbcb6f53833cf8f66926ef2eb31b71a2782d6e0960dec832ef108d path: patches/srvx@0.9.8.patch @@ -3153,25 +3159,25 @@ importers: version: 3.102.3 mineflayer: specifier: ^4.33.0 - version: 4.33.0 + version: 4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a) mineflayer-armor-manager: specifier: ^2.0.1 - version: 2.0.1(mineflayer@4.33.0) + version: 2.0.1(mineflayer@4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a)) mineflayer-auto-eat: specifier: ^5.0.3 version: 5.0.3 mineflayer-collectblock: specifier: ^1.6.0 - version: 1.6.0(prismarine-registry@1.11.0) + version: 1.6.0 mineflayer-pathfinder: specifier: ^2.4.5 - version: 2.4.5(prismarine-registry@1.11.0) + version: 2.4.5(patch_hash=4e932c106617efe7663216fc5ed42556761146633ebae88a5c831dc253abafa1) mineflayer-pvp: specifier: ^1.3.2 version: 1.3.2(prismarine-registry@1.11.0) mineflayer-tool: specifier: ^1.2.0 - version: 1.2.0(prismarine-registry@1.11.0) + version: 1.2.0 nanoid: specifier: 'catalog:' version: 5.1.6 @@ -3180,7 +3186,7 @@ importers: version: 0.2.1(zod-to-json-schema@3.25.1(zod@4.3.5))(zod@4.3.5) prismarine-block: specifier: ^1.22.0 - version: 1.22.0(prismarine-registry@1.11.0) + version: 1.22.0 prismarine-entity: specifier: ^2.5.0 version: 2.5.0 @@ -3192,7 +3198,7 @@ importers: version: 1.3.1(prismarine-registry@1.11.0) prismarine-viewer: specifier: ^1.33.0 - version: 1.33.0(bufferutil@4.1.0)(prismarine-registry@1.11.0)(utf-8-validate@5.0.10) + version: 1.33.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) prismarine-windows: specifier: ^2.9.0 version: 2.9.0 @@ -27915,59 +27921,55 @@ snapshots: - encoding - supports-color - mineflayer-armor-manager@2.0.1(mineflayer@4.33.0): + mineflayer-armor-manager@2.0.1(mineflayer@4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a)): dependencies: minecraft-data: 3.102.3 - mineflayer: 4.33.0 + mineflayer: 4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a) mineflayer-auto-eat@5.0.3: dependencies: '@nxg-org/mineflayer-util-plugin': 1.8.4 - mineflayer: 4.33.0 + mineflayer: 4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a) transitivePeerDependencies: - encoding - supports-color - mineflayer-collectblock@1.6.0(prismarine-registry@1.11.0): + mineflayer-collectblock@1.6.0: dependencies: - mineflayer: 4.33.0 - mineflayer-pathfinder: 2.4.5(prismarine-registry@1.11.0) - mineflayer-tool: 1.2.0(prismarine-registry@1.11.0) + mineflayer: 4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a) + mineflayer-pathfinder: 2.4.5(patch_hash=4e932c106617efe7663216fc5ed42556761146633ebae88a5c831dc253abafa1) + mineflayer-tool: 1.2.0 transitivePeerDependencies: - encoding - - prismarine-registry - supports-color - mineflayer-pathfinder@2.4.5(prismarine-registry@1.11.0): + mineflayer-pathfinder@2.4.5(patch_hash=4e932c106617efe7663216fc5ed42556761146633ebae88a5c831dc253abafa1): dependencies: minecraft-data: 3.102.3 - prismarine-block: 1.22.0(prismarine-registry@1.11.0) + prismarine-block: 1.22.0 prismarine-entity: 2.5.0 prismarine-item: 1.17.0 prismarine-nbt: 2.8.0 prismarine-physics: 1.10.0 vec3: 0.1.10 - transitivePeerDependencies: - - prismarine-registry mineflayer-pvp@1.3.2(prismarine-registry@1.11.0): dependencies: - mineflayer: 4.33.0 - mineflayer-pathfinder: 2.4.5(prismarine-registry@1.11.0) + mineflayer: 4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a) + mineflayer-pathfinder: 2.4.5(patch_hash=4e932c106617efe7663216fc5ed42556761146633ebae88a5c831dc253abafa1) mineflayer-utils: 0.1.4(prismarine-registry@1.11.0) transitivePeerDependencies: - encoding - prismarine-registry - supports-color - mineflayer-tool@1.2.0(prismarine-registry@1.11.0): + mineflayer-tool@1.2.0: dependencies: - mineflayer: 4.33.0 - mineflayer-pathfinder: 2.4.5(prismarine-registry@1.11.0) + mineflayer: 4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a) + mineflayer-pathfinder: 2.4.5(patch_hash=4e932c106617efe7663216fc5ed42556761146633ebae88a5c831dc253abafa1) prismarine-nbt: 2.8.0 transitivePeerDependencies: - encoding - - prismarine-registry - supports-color mineflayer-utils@0.1.4(prismarine-registry@1.11.0): @@ -27987,7 +27989,7 @@ snapshots: minecraft-data: 2.221.0 minecraft-protocol: 1.62.0(encoding@0.1.13) prismarine-biome: 1.3.0(minecraft-data@2.221.0)(prismarine-registry@1.11.0) - prismarine-block: 1.22.0(prismarine-registry@1.11.0) + prismarine-block: 1.22.0 prismarine-chat: 1.12.0 prismarine-chunk: 1.39.0(minecraft-data@2.221.0) prismarine-entity: 1.2.0 @@ -28004,12 +28006,12 @@ snapshots: - prismarine-registry - supports-color - mineflayer@4.33.0: + mineflayer@4.33.0(patch_hash=03a5a80439dece74f880cf754f7317b3c9e4c5dbc6488eba67c36ab4fbfbea3a): dependencies: minecraft-data: 3.102.3 minecraft-protocol: 1.62.0(encoding@0.1.13) prismarine-biome: 1.3.0(minecraft-data@3.102.3)(prismarine-registry@1.11.0) - prismarine-block: 1.22.0(prismarine-registry@1.11.0) + prismarine-block: 1.22.0 prismarine-chat: 1.12.0 prismarine-chunk: 1.39.0(minecraft-data@3.102.3) prismarine-entity: 2.5.0 @@ -29071,7 +29073,7 @@ snapshots: minecraft-data: 3.102.3 prismarine-registry: 1.11.0 - prismarine-block@1.22.0(prismarine-registry@1.11.0): + prismarine-block@1.22.0: dependencies: minecraft-data: 3.102.3 prismarine-biome: 1.3.0(minecraft-data@3.102.3)(prismarine-registry@1.11.0) @@ -29079,8 +29081,6 @@ snapshots: prismarine-item: 1.17.0 prismarine-nbt: 2.8.0 prismarine-registry: 1.11.0 - transitivePeerDependencies: - - prismarine-registry prismarine-chat@1.12.0: dependencies: @@ -29091,7 +29091,7 @@ snapshots: prismarine-chunk@1.39.0(minecraft-data@2.221.0): dependencies: prismarine-biome: 1.3.0(minecraft-data@2.221.0)(prismarine-registry@1.11.0) - prismarine-block: 1.22.0(prismarine-registry@1.11.0) + prismarine-block: 1.22.0 prismarine-nbt: 2.8.0 prismarine-registry: 1.11.0 smart-buffer: 4.2.0 @@ -29104,7 +29104,7 @@ snapshots: prismarine-chunk@1.39.0(minecraft-data@3.102.3): dependencies: prismarine-biome: 1.3.0(minecraft-data@3.102.3)(prismarine-registry@1.11.0) - prismarine-block: 1.22.0(prismarine-registry@1.11.0) + prismarine-block: 1.22.0 prismarine-nbt: 2.8.0 prismarine-registry: 1.11.0 smart-buffer: 4.2.0 @@ -29155,16 +29155,16 @@ snapshots: prismarine-registry@1.11.0: dependencies: minecraft-data: 3.102.3 - prismarine-block: 1.22.0(prismarine-registry@1.11.0) + prismarine-block: 1.22.0 prismarine-nbt: 2.8.0 - prismarine-viewer@1.33.0(bufferutil@4.1.0)(prismarine-registry@1.11.0)(utf-8-validate@5.0.10): + prismarine-viewer@1.33.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): dependencies: '@tweenjs/tween.js': 23.1.3 compression: 1.8.1 express: 4.22.1 minecraft-data: 3.102.3 - prismarine-block: 1.22.0(prismarine-registry@1.11.0) + prismarine-block: 1.22.0 prismarine-chunk: 1.39.0(minecraft-data@3.102.3) prismarine-world: 3.6.3 socket.io: 4.8.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -29174,7 +29174,6 @@ snapshots: vec3: 0.1.10 transitivePeerDependencies: - bufferutil - - prismarine-registry - supports-color - utf-8-validate diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a574cadc9..f15a9e5ab 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,6 +23,8 @@ overrides: string.prototype.matchall: npm:@nolyfill/string.prototype.matchall@^1.0.44 patchedDependencies: + mineflayer-pathfinder: patches/mineflayer-pathfinder.patch + mineflayer@4.33.0: patches/mineflayer@4.33.0.patch srvx@0.9.8: patches/srvx@0.9.8.patch catalog: '@capacitor/cli': ^8.0.1