npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

koishi-plugin-minecraft-adapter

v1.1.0

Published

Minecraft adapter for Koishi based on QueQiao V2 protocol

Downloads

291

Readme

koishi-plugin-minecraft-adapter

Koishi 的 Minecraft 适配器插件,基于 鹊桥 (QueQiao) V2 协议,通过 WebSocket 与 Minecraft 服务器交互。

功能特性

  • 鹊桥 V2 协议: 完整支持鹊桥 V2 WebSocket 协议
  • WebSocket 连接: 通过鹊桥 WebSocket Server 实时接收/发送事件和消息
  • RCON 命令执行: 通过鹊桥 WebSocket API send_rcon_command 执行服务器命令
  • 多服务器支持: 通过 servers 数组配置多个 Minecraft 服务器,每个服务器独立运行
  • 完整事件支持:
    • 玩家聊天 (PlayerChatEvent)
    • 玩家命令 (PlayerCommandEvent)
    • 玩家加入 (PlayerJoinEvent)
    • 玩家离开 (PlayerQuitEvent)
    • 玩家死亡 (PlayerDeathEvent)
    • 玩家成就 (PlayerAchievementEvent)
  • 完整 API 支持:
    • 广播消息 (broadcast)
    • 私聊消息 (send_private_msg)
    • RCON 命令 (send_rcon_command)
    • 标题显示 (title)
    • 动画栏 (action_bar)
  • 自动重连: WebSocket 断开后指数退避自动重连
  • ChatImage 支持: 按服务器独立配置 ChatImage CICode 图片显示

前置需求

安装

npm install koishi-plugin-minecraft-adapter

配置

全局配置

| 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | debug | boolean | false | 启用调试模式,输出详细日志 | | detailedLogging | boolean | false | 启用详细日志(入站解析和 dispatch 快照) | | tokenizeMode | 'split' \| 'none' | 'split' | 入站消息分词模式 | | reconnectInterval | number | 5000 | 重连间隔时间(ms) | | maxReconnectAttempts | number | 10 | 最大重连尝试次数 | | useMessagePrefix | boolean | false | 是否使用消息前缀 | | servers | array | [] | 服务器配置列表 |

服务器配置 (servers[])

每个服务器对应一个独立的 bot 实例。

| 配置项 | 类型 | 必填 | 说明 | |--------|------|------|------| | selfId | string | ✅ | 机器人唯一标识 | | serverName | string | ❌ | 服务器名称,需与鹊桥 config.yml 中的 server_name 一致 | | websocket | object | ✅ | WebSocket 配置(用于事件接收和消息发送) | | chatImage | object | ❌ | ChatImage 图片显示配置(仅对此服务器生效) |

WebSocket 配置 (servers[].websocket)

| 配置项 | 类型 | 必填 | 说明 | |--------|------|------|------| | url | string | ✅ | 鹊桥 WebSocket Server 地址(如 ws://127.0.0.1:8080) | | accessToken | string | ❌ | 访问令牌(与鹊桥 config.yml 中的 access_token 一致) | | extraHeaders | object | ❌ | 额外请求头 |

RCON(通过鹊桥 WebSocket)

插件侧不再直连 TCP RCON。执行命令时会通过鹊桥 V2 WebSocket API send_rcon_command 发送。

RCON 的启用与密码/端口等配置请在鹊桥端 config.yml 中完成。

ChatImage 配置 (servers[].chatImage)

| 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | enabled | boolean | false | 启用 CICode 图片发送(需客户端安装 ChatImage Mod) | | defaultImageName | string | '图片' | 图片在聊天栏中的默认显示名称 |

完整配置示例

单服务器

plugins:
  minecraft-adapter:
    debug: false
    tokenizeMode: split
    servers:
      - selfId: 'mc-server-1'
        serverName: 'TestServer'
        websocket:
          url: 'ws://127.0.0.1:8080'
          accessToken: 'your_token'
        chatImage:
          enabled: true
          defaultImageName: '图片'

多服务器

plugins:
  minecraft-adapter:
    debug: false
    servers:
      - selfId: 'survival'
        serverName: 'SurvivalServer'
        websocket:
          url: 'ws://192.168.1.10:8080'
          accessToken: 'token_survival'
        chatImage:
          enabled: true
      - selfId: 'creative'
        serverName: 'CreativeServer'
        websocket:
          url: 'ws://192.168.1.11:8080'
          accessToken: 'token_creative'

从旧版配置迁移

如果你使用的是旧版配置格式(bots + 全局 chatImage),插件会自动迁移并在日志中提示。建议尽快手动迁移到新格式:

旧格式(已弃用):

plugins:
  minecraft-adapter:
    chatImage:
      enabled: true
    bots:
      - selfId: 'mc-1'
        websocket:
          url: 'ws://127.0.0.1:8080'

新格式:

plugins:
  minecraft-adapter:
    servers:
      - selfId: 'mc-1'
        websocket:
          url: 'ws://127.0.0.1:8080'
        chatImage:
          enabled: true

主要变更:

  • botsservers
  • 全局 chatImage → 每服务器 chatImage
  • websocket 现在是必填项

使用方法

监听事件

ctx.on('message', (session) => {
  if (session.platform === 'minecraft') {
    console.log(`[${session.event.guild?.name}] ${session.event.user?.name}: ${session.content}`)
  }
})

ctx.on('guild-member-added', (session) => {
  if (session.platform === 'minecraft') {
    console.log(`${session.event.user?.name} 加入了服务器`)
  }
})

ctx.on('guild-member-removed', (session) => {
  if (session.platform === 'minecraft') {
    console.log(`${session.event.user?.name} 离开了服务器`)
  }
})

发送消息

// 广播消息(通过 bot 实例自动定位到对应服务器)
await bot.sendMessage('server-channel', '服务器即将重启')

// 向指定玩家发送私聊消息
await bot.sendPrivateMessage('Steve', '你好')

// 执行 RCON 命令(通过鹊桥 WebSocket API 执行)
const result = await bot.executeCommand('list')

鹊桥 V2 事件映射

| 鹊桥事件 | Koishi 事件类型 | |----------|----------------| | PlayerChatEvent | message | | PlayerCommandEvent | message (subtype: command) | | PlayerJoinEvent | guild-member-added | | PlayerQuitEvent | guild-member-removed | | PlayerDeathEvent | notice (subtype: player-death) | | PlayerAchievementEvent | notice (subtype: player-achievement) |

鹊桥 V2 API 映射

| 功能 | 鹊桥 API | 说明 | |------|----------|------| | 广播消息 | broadcast | 向所有在线玩家广播 | | 私聊消息 | send_private_msg | 向指定玩家发送消息 | | RCON 命令 | send_rcon_command | 执行服务器命令 | | 标题显示 | title | 显示标题和副标题 | | 动画栏 | action_bar | 显示动画栏消息 |

调试

启用 debug: true 后会输出详细日志,包括:

  • 适配器初始化过程
  • WebSocket 连接状态
  • 接收到的原始消息数据
  • 事件解析和会话创建过程
  • API 请求和响应
  • 断线重连过程
  • 错误详情和堆栈跟踪

注意: 调试模式会产生大量日志,请仅在排查问题时启用。

协议参考

许可证

MIT