From bcfe87080717715362a23d34ce5a62ee3b701882 Mon Sep 17 00:00:00 2001 From: uukelele Date: Tue, 8 Apr 2025 10:03:04 +0100 Subject: [PATCH 1/3] added 10ms delay to /setblock --- src/agent/library/skills.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/agent/library/skills.js b/src/agent/library/skills.js index 7b9e723..33dd04d 100644 --- a/src/agent/library/skills.js +++ b/src/agent/library/skills.js @@ -533,6 +533,7 @@ export async function breakBlockAt(bot, x, y, z) { let block = bot.blockAt(Vec3(x, y, z)); if (block.name !== 'air' && block.name !== 'water' && block.name !== 'lava') { if (bot.modes.isOn('cheat')) { + await new Promise(resolve => setTimeout(resolve, 10)); let msg = '/setblock ' + Math.floor(x) + ' ' + Math.floor(y) + ' ' + Math.floor(z) + ' air'; bot.chat(msg); log(bot, `Used /setblock to break block at ${x}, ${y}, ${z}.`); @@ -629,11 +630,14 @@ export async function placeBlock(bot, blockType, x, y, z, placeOn='bottom', dont if (blockType.includes('stairs')) { blockType += `[facing=${face}]`; } + await new Promise(resolve => setTimeout(resolve, 10)); let msg = '/setblock ' + Math.floor(x) + ' ' + Math.floor(y) + ' ' + Math.floor(z) + ' ' + blockType; bot.chat(msg); if (blockType.includes('door')) + await new Promise(resolve => setTimeout(resolve, 10)); bot.chat('/setblock ' + Math.floor(x) + ' ' + Math.floor(y+1) + ' ' + Math.floor(z) + ' ' + blockType + '[half=upper]'); if (blockType.includes('bed')) + await new Promise(resolve => setTimeout(resolve, 10)); bot.chat('/setblock ' + Math.floor(x) + ' ' + Math.floor(y) + ' ' + Math.floor(z-1) + ' ' + blockType + '[part=head]'); log(bot, `Used /setblock to place ${blockType} at ${target_dest}.`); return true; From 7c3b06caba54213d23a83f2cdfd0983b91209d4d Mon Sep 17 00:00:00 2001 From: uukelele Date: Fri, 11 Apr 2025 16:26:17 +0100 Subject: [PATCH 2/3] added settings control for block_place_delay --- settings.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/settings.js b/settings.js index e63c9fb..a507947 100644 --- a/settings.js +++ b/settings.js @@ -44,6 +44,8 @@ const settings = { "verbose_commands": true, // show full command syntax "narrate_behavior": true, // chat simple automatic actions ('Picking up item!') "chat_bot_messages": true, // publicly chat messages to other bots + + "block_place_delay": 10, // delay between placing blocks (ms) if using newAction. helps avoid bot being kicked by anti-cheat mechanisms on servers. } // these environment variables override certain settings From c5892c0c403f24b17da9d576ca84067cb0a78aef Mon Sep 17 00:00:00 2001 From: uukelele Date: Fri, 11 Apr 2025 16:29:54 +0100 Subject: [PATCH 3/3] added usage of block_place_delay to timeout --- src/agent/library/skills.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/agent/library/skills.js b/src/agent/library/skills.js index 33dd04d..1df6ea8 100644 --- a/src/agent/library/skills.js +++ b/src/agent/library/skills.js @@ -2,6 +2,7 @@ import * as mc from "../../utils/mcdata.js"; import * as world from "./world.js"; import pf from 'mineflayer-pathfinder'; import Vec3 from 'vec3'; +import settings from "../../../settings.js"; export function log(bot, message) { @@ -533,7 +534,7 @@ export async function breakBlockAt(bot, x, y, z) { let block = bot.blockAt(Vec3(x, y, z)); if (block.name !== 'air' && block.name !== 'water' && block.name !== 'lava') { if (bot.modes.isOn('cheat')) { - await new Promise(resolve => setTimeout(resolve, 10)); + await new Promise(resolve => setTimeout(resolve, settings.block_place_delay || 10)); let msg = '/setblock ' + Math.floor(x) + ' ' + Math.floor(y) + ' ' + Math.floor(z) + ' air'; bot.chat(msg); log(bot, `Used /setblock to break block at ${x}, ${y}, ${z}.`); @@ -630,14 +631,14 @@ export async function placeBlock(bot, blockType, x, y, z, placeOn='bottom', dont if (blockType.includes('stairs')) { blockType += `[facing=${face}]`; } - await new Promise(resolve => setTimeout(resolve, 10)); + await new Promise(resolve => setTimeout(resolve, settings.block_place_delay || 10)); let msg = '/setblock ' + Math.floor(x) + ' ' + Math.floor(y) + ' ' + Math.floor(z) + ' ' + blockType; bot.chat(msg); if (blockType.includes('door')) - await new Promise(resolve => setTimeout(resolve, 10)); + await new Promise(resolve => setTimeout(resolve, settings.block_place_delay || 10)); bot.chat('/setblock ' + Math.floor(x) + ' ' + Math.floor(y+1) + ' ' + Math.floor(z) + ' ' + blockType + '[half=upper]'); if (blockType.includes('bed')) - await new Promise(resolve => setTimeout(resolve, 10)); + await new Promise(resolve => setTimeout(resolve, settings.block_place_delay || 10)); bot.chat('/setblock ' + Math.floor(x) + ' ' + Math.floor(y) + ' ' + Math.floor(z-1) + ' ' + blockType + '[part=head]'); log(bot, `Used /setblock to place ${blockType} at ${target_dest}.`); return true;