跳到主要内容

MC-BngeuitBridge 机器人桥接 ​

把 Minecraft 服务器和 Bngeuit 机器人 连起来的双向通道。

装上它之后,QQ 群里能看到玩家上下线、能在群里直接执行服务器命令、能把服务器的任何状态推到群里,也能让群里的一句话触发服务器里的任何逻辑。它自己不绑定业务,只负责把消息送过去、送回来。

三个组件,缺一不可 ​

组件跑在哪干什么
Bngeuit机器人主机QQ 机器人本体,负责收发 QQ 消息。见 Bngeuit 文档
BngeuitBridgeBngeuit 的 plugins/WebSocket 服务端,等 MC 服务器连过来
MC-BngeuitBridgeMC 服务端的 plugins/WebSocket 客户端,连到 BngeuitBridge

三者关系:

      QQ 群 / 私聊
          ↕
   Bngeuit 机器人主程序          ← 装 BngeuitBridge 插件
          ↕  ws://ip:8765
   ┌──────┴──────┐
  MC-1          MC-2              ← 各自装 MC-BngeuitBridge
(client-id:    (client-id:
 survival)      creative)
  • 一个 BngeuitBridge 可以同时接多台 MC 服务器
  • 每台服务器用 client-id 区分身份,名字随便起,但不能重复
  • 消息可以发给所有服务器,也可以只发给指定的那一台

只装一边没用

MC-BngeuitBridge 是客户端,它必须连上 BngeuitBridge 才能工作;而 BngeuitBridge 是 Bngeuit 的插件,必须由 Bngeuit 加载。所以 Bngeuit + BngeuitBridge + MC-BngeuitBridge 三件套要同时存在,缺一个通道就不通。

能做什么 ​

  • 玩家上下线 → QQ 群通知(内置脚本,开箱可用)
  • QQ 群发 /命令 → 服务器以控制台身份执行(内置脚本,开箱可用)
  • 服务器状态、TPS、在线人数 → 群里查询(写个脚本即可)
  • 群里发公告 → 服务器内广播(写个脚本即可)
  • 多台服务器之间的消息中转
  • 任何「QQ ↔ MC」的双向通信

快速开始 ​

  1. Bngeuit 侧:把 BngeuitBridge.jar 放进 plugins/,改 token
  2. MC 侧:把 MC-BngeuitBridge.jar 放进 plugins/,填同样的 token、起个 client-id、写对 url
  3. 重启两边,MC 控制台看到 已通过 BngeuitBridge 认证 就是通了
  4. Bngeuit 侧再放配套脚本(McJoinAndQuit.nc / McCommandRelay.nc / McBridgeStatus.nc),QQ 群里才会有反应

详细步骤见 安装与配置。

两侧都要配

通道只负责搬数据,QQ 群里的最终效果由 Bngeuit 侧的脚本决定;游戏内的 /bngeuitbridge status 也依赖 Bngeuit 侧装 McBridgeStatus.nc 才能应答。只装 MC 侧 = 数据发出去没人接。

两种扩展方式 ​

MC 侧既可以写脚本,也可以写附属插件。两者拿到的是同一套通道和事件,只是语言和生效方式不同:

脚本(.nc)附属插件(Java / Kotlin)
要不要编译不用,丢进 plugins/MC-BngeuitBridge/script/ 就行要,自己打个 jar
改完怎么生效/bngeuitbridge r,秒生效不重启重载插件或重启服务器
适合上下线通知、消息转发、状态查询等轻量业务复杂逻辑、跨插件调用、数据库、自定义 GUI

脚本引擎(nacre)已内置在本插件里,不需要额外装 CraneCore 之类的额外前置。一个最小脚本:

nc
package my.first.script

import cn.org.bukkit.bngeuit.bridge.MCBngeuitBridge
import org.bukkit.Bukkit

fun enable() {
    val channel = MCBngeuitBridge.INSTANCE.getChannel()
    if (channel != null && channel.isConnected()) {
        val payload = HashMap<String, String>()
        payload.put("msg", "服务器启动了")
        channel.send("demo", "startup", payload)
    }
    Bukkit.getLogger().info("[MyScript] 已启用")
}

fun disable() {
}

详见 脚本与插件开发,插件方式在那页文末。

文档目录 ​

页面内容
安装与配置两侧 jar 放置、config.yml 每一项、联调检查清单
消息与事件JSON 消息格式、认证流程、请求-响应、事件列表
脚本与插件开发两种扩展方式:.nc 脚本怎么写、附属插件怎么接、能调哪些 API、线程注意事项
内置示例上下线通知、QQ 执行命令,两端配置全流程
常见问题连不上 / 认证失败 / 命令不执行 / 脚本报错