You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:07:34