Minecraft服务器菜单点击报错求助:Server rejected transaction问题
Minecraft机器人点击动态菜单报错解决方案
问题详情
- 操作服务器菜单时触发报错:
throw new Error(
Server rejected transaction for clicking on slot ${slot}, on window with id ${window?.id}.)
- 排查发现:静态菜单环境下,机器人单次点击正确槽位操作完全正常;推测报错原因是服务器在持续更新菜单,导致点击时窗口状态已变化。
- 当前使用的代码片段:
bot.setQuickBarSlot(0) bot.activateItem() setTimeout(() => bot.simpleClick.rightMouse(10), 1000)
- 服务器菜单会动态变化(期间会触发
windowOpen事件打开新窗口),已尝试调整点击延迟但无效。

解决办法
放弃固定延迟的setTimeout,改用事件驱动的方式追踪窗口状态,确保在最新窗口加载完成后执行点击:
方案1:监听窗口打开事件,操作最新窗口
bot.setQuickBarSlot(0) bot.activateItem() let latestWindowId = null; // 监听窗口打开,记录最新窗口ID bot.on('windowOpen', (window) => { latestWindowId = window.id; // 短延迟确保窗口内容同步完成 setTimeout(() => { // 确认当前操作的是最新窗口 if (bot.currentWindow?.id === latestWindowId) { bot.simpleClick.rightMouse(10); } }, 200); }); // 监听窗口关闭,清除无效的窗口ID bot.on('windowClose', (window) => { if (window.id === latestWindowId) { latestWindowId = null; } });
方案2:仅等待第一次窗口打开后操作(适合单次交互场景)
bot.setQuickBarSlot(0) bot.activateItem() // 只监听一次窗口打开事件,避免重复操作 bot.once('windowOpen', () => { // 短延迟适配服务器内容加载 setTimeout(() => { bot.simpleClick.rightMouse(10); }, 200); });
核心思路
服务器动态更新菜单时,窗口ID和内容会频繁变化,固定延迟无法精准匹配窗口状态。通过监听windowOpen/windowClose事件,能准确捕捉窗口的更新时机,确保点击操作在正确的窗口状态下执行,从根源避免服务器拒绝交易的报错。
内容的提问来源于stack exchange,提问作者kostya
相关产品推荐
相关产品推荐

