@bkm016/calcite 0.2.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +206 -18
  3. package/dist/accounts.js +4 -2
  4. package/dist/accounts.js.map +1 -1
  5. package/dist/cli.js +16 -127
  6. package/dist/cli.js.map +1 -1
  7. package/dist/client-core.d.ts +23 -12
  8. package/dist/client-core.js +227 -244
  9. package/dist/client-core.js.map +1 -1
  10. package/dist/client.d.ts +60 -13
  11. package/dist/client.js +76 -18
  12. package/dist/client.js.map +1 -1
  13. package/dist/display.d.ts +0 -6
  14. package/dist/display.js +31 -44
  15. package/dist/display.js.map +1 -1
  16. package/dist/feed.d.ts +17 -0
  17. package/dist/feed.js +47 -0
  18. package/dist/feed.js.map +1 -0
  19. package/dist/game-run.d.ts +30 -0
  20. package/dist/game-run.js +51 -0
  21. package/dist/game-run.js.map +1 -0
  22. package/dist/hmc.d.ts +7 -0
  23. package/dist/hmc.js +42 -31
  24. package/dist/hmc.js.map +1 -1
  25. package/dist/index.d.ts +4 -2
  26. package/dist/index.js +2 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/install.d.ts +6 -0
  29. package/dist/install.js +26 -3
  30. package/dist/install.js.map +1 -1
  31. package/dist/java.js +11 -2
  32. package/dist/java.js.map +1 -1
  33. package/dist/launch.d.ts +79 -0
  34. package/dist/launch.js +142 -0
  35. package/dist/launch.js.map +1 -0
  36. package/dist/lock.js +18 -18
  37. package/dist/lock.js.map +1 -1
  38. package/dist/mcp/accounts.d.ts +3 -0
  39. package/dist/mcp/accounts.js +45 -0
  40. package/dist/mcp/accounts.js.map +1 -0
  41. package/dist/mcp/act.d.ts +3 -0
  42. package/dist/mcp/act.js +129 -0
  43. package/dist/mcp/act.js.map +1 -0
  44. package/dist/mcp/extensions.d.ts +3 -0
  45. package/dist/mcp/extensions.js +21 -0
  46. package/dist/mcp/extensions.js.map +1 -0
  47. package/dist/mcp/index.d.ts +13 -0
  48. package/dist/mcp/index.js +58 -0
  49. package/dist/mcp/index.js.map +1 -0
  50. package/dist/mcp/items.d.ts +3 -0
  51. package/dist/mcp/items.js +71 -0
  52. package/dist/mcp/items.js.map +1 -0
  53. package/dist/mcp/lifecycle.d.ts +3 -0
  54. package/dist/mcp/lifecycle.js +120 -0
  55. package/dist/mcp/lifecycle.js.map +1 -0
  56. package/dist/mcp/observe.d.ts +3 -0
  57. package/dist/mcp/observe.js +110 -0
  58. package/dist/mcp/observe.js.map +1 -0
  59. package/dist/mcp/shared.d.ts +49 -0
  60. package/dist/mcp/shared.js +56 -0
  61. package/dist/mcp/shared.js.map +1 -0
  62. package/dist/mcp/tasks.d.ts +15 -0
  63. package/dist/mcp/tasks.js +46 -0
  64. package/dist/mcp/tasks.js.map +1 -0
  65. package/dist/mcp.js +35 -3
  66. package/dist/mcp.js.map +1 -1
  67. package/dist/mods.d.ts +2 -0
  68. package/dist/mods.js +35 -4
  69. package/dist/mods.js.map +1 -1
  70. package/dist/mojang.d.ts +5 -1
  71. package/dist/mojang.js.map +1 -1
  72. package/dist/names.js +30 -8
  73. package/dist/names.js.map +1 -1
  74. package/dist/net.js +25 -19
  75. package/dist/net.js.map +1 -1
  76. package/dist/paper.d.ts +46 -0
  77. package/dist/paper.js +200 -0
  78. package/dist/paper.js.map +1 -0
  79. package/dist/probe-server.d.ts +14 -4
  80. package/dist/probe-server.js +15 -10
  81. package/dist/probe-server.js.map +1 -1
  82. package/dist/repl.d.ts +6 -0
  83. package/dist/repl.js +207 -0
  84. package/dist/repl.js.map +1 -0
  85. package/dist/stage.d.ts +6 -0
  86. package/dist/stage.js +19 -0
  87. package/dist/stage.js.map +1 -0
  88. package/dist/types.d.ts +167 -3
  89. package/dist/types.js +12 -1
  90. package/dist/types.js.map +1 -1
  91. package/dist/zip.js.map +1 -1
  92. package/package.json +11 -3
  93. package/vendor/calcite-probe.jar +0 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,35 @@
1
+ # 更新日志
2
+
3
+ ## 0.5.0
4
+
5
+ ### 新增
6
+
7
+ - **单人世界**:`world` 选项(命令行 `-w, --world`、`--game-mode`、`--seed`,MCP `launch_client` 的 `world` 参数),从标题界面打开存档,不存在时按指定模式与种子创建;`stop` 时先保存世界再退出。
8
+ - **插件测试服**:`startPaperServer` 拉起一次性的 Paper 服务器,自动下载对应版本、挑选 Java、写入离线超平坦测试配置并安装插件(Java 17+ 时附带 ViaVersion/ViaBackwards);`keepWorld` 用于验证重启后的持久化,换版本时自动重置配置与世界。另导出 `offlineUuid`。
9
+
10
+ ### 修复
11
+
12
+ - 游戏、启动器与 Paper 的控制台统一以 UTF-8 输出。此前 Java 17 及更早版本在 POSIX/C 区域设置下会把中文等非 ASCII 聊天内容变成 `?`。
13
+
14
+ ### 其他
15
+
16
+ - 端到端测试改用托管的 Paper 服务器与单人世界;MCP 服务器通过内存传输测试;TypeScript 引入 ESLint 与 Prettier,探针测试迁移到 JUnit 5 并开启全部编译警告。
17
+
18
+ ## 0.4.0
19
+
20
+ ### 新增
21
+
22
+ - **寻路**:`walk_to` / `walkTo` 改为 A* 寻路,可绕墙、跳上一格台阶、安全下落,路线受阻时重新规划;`direct: true` 保留原来的直线行走。
23
+ - **方块搜索**:`find_blocks` / `findBlocks`,按 ID 或通配符(如 `*_ore`)在已加载区块中搜索并按距离排序。
24
+ - **周边感知**:`surroundings`,返回以玩家为中心的俯视字符地图、脚下与所处方块、附近方块统计、实体、群系、时间与天气。
25
+ - **合成**:`craft`,按配方书合成指定数量的物品;3×3 配方自动打开附近的工作台并在结束后关闭。
26
+ - **物品搬运**:`transfer`,在当前容器与背包之间按物品移动,可指定数量与目标槽位;`get_container` 对熔炉额外返回燃烧状态与进度。
27
+ - **内置游戏事件**:`world.join/leave`、`player.hurt/death/respawn/food/dimension`、`inventory.change`、`container.open/close`、`screen.change`,与扩展事件共用同一事件流。
28
+ - **长时操作**:寻路、挖掘、合成统一由探针调度,同一时间只运行一个;`task` / `get_task` 查询进度,`stop_actions` 取消(等待中的调用以 `cancelled` 结束);`stopOnDamage` 在受伤时以 `damaged` 中止。MCP 工具支持 `background: true` 后台运行。
29
+ - 交互模式新增 `:around`、`:find`、`:task`、`:craft`、`:transfer`、`:events`。
30
+
31
+ ### 变更
32
+
33
+ - `Client` 的 `extension` 事件更名为 `event`,同时携带内置游戏事件;`ExtensionEvent` 类型更名为 `GameEvent`(旧名保留为已弃用别名)。
34
+ - 资源文件在首次成功启动时完整校验,之后的启动跳过逐文件哈希,启动约快 2–3 秒。
35
+ - MCP 服务器与交互模式拆分为独立模块,工具说明面向 Agent 重写。
package/README.md CHANGED
@@ -29,6 +29,7 @@ Calcite 用于以编程方式驱动**真实的 Minecraft Java 版客户端**。
29
29
  - [平台与账号](#平台与账号)
30
30
  - [渲染模式](#渲染模式)
31
31
  - [模组](#模组)
32
+ - [扩展](#扩展)
32
33
  - [版本兼容性](#版本兼容性)
33
34
  - [数据目录与环境变量](#数据目录与环境变量)
34
35
  - [故障排查](#故障排查)
@@ -42,9 +43,13 @@ Calcite 用于以编程方式驱动**真实的 Minecraft Java 版客户端**。
42
43
  - **账号**:支持离线账号,也支持微软正版账号。正版账号使用设备码登录,凭据持久保存并自动刷新。
43
44
  - **无显卡环境截图**:在 Linux 服务器上通过 Xvfb 与 Mesa 软件渲染完成截图。
44
45
  - **模组加载器**:一行参数安装 Fabric、Forge 或 NeoForge,并从本地文件、URL 或 Modrinth 加载模组(自动补全前置依赖),探针功能在模组环境中同样可用。
45
- - **玩家操作**:转向、移动、寻路到坐标、攻击、使用物品与方块、挖掘、切换快捷栏、丢弃物品,以及打开箱子等容器并点击槽位。操作走原版客户端逻辑,与真实玩家输入等价。
46
+ - **玩家操作**:转向、移动、A* 寻路(绕墙、跳台阶、安全下落)、攻击、使用物品与方块、挖掘、切换快捷栏、丢弃物品,以及打开箱子等容器并点击槽位。操作走原版客户端逻辑,与真实玩家输入等价。
47
+ - **合成与熔炉**:按配方书合成物品(2×2 用背包合成格,3×3 自动打开附近的工作台),在容器与背包之间按物品搬运,可直接给熔炉装原料和燃料。
48
+ - **面向 Agent 的感知**:周边俯视字符地图、按 ID 或通配符搜索方块,以及受伤、死亡、背包变化、容器开关等内置游戏事件。
49
+ - **长时操作**:寻路、挖掘、合成可在后台运行,随时查询进度或取消;受到伤害时可自动中止。
46
50
  - **按需渲染**:默认不渲染画面,截图时临时渲染。单次截图约 0.5 秒,进服后首次截图需等待区块编译,约 2–4 秒。
47
51
  - **Java 自动管理**:按游戏版本自动选择 Java(render `off` 时原本需要 Java 8 的版本改用 Java 17,HeadlessMC 3 的 LWJGL 替身不支持 Java 8);本机缺少时从 Eclipse Adoptium 下载 Temurin,并校验 SHA-256。HeadlessMC 3 本身运行在 Java 25 上,同样按需下载。
52
+ - **可扩展**:第三方可用 Java 编写扩展 jar,为 bot 增加自定义命令与事件;游戏内的模组也可以零依赖地注册命令。Node.js、MCP、命令行均可直接调用,见[扩展](#扩展)。
48
53
  - **自动重连**:掉线或崩溃后按指数退避自动重连。
49
54
  - **多客户端**:一个进程可同时管理多个相互隔离的客户端实例。
50
55
 
@@ -95,24 +100,32 @@ calcite launch play.example.com -V 1.21.11 -n Bot1
95
100
  | `:render on\|off` | 开启或关闭持续渲染 |
96
101
  | `:respawn` | 死亡后重生 |
97
102
  | `:look <yaw> <pitch>` / `:lookat <x> <y> <z>` | 设置视角 / 看向坐标 |
98
- | `:goto <x> <z>` | 直线走到指定坐标,遇到台阶自动跳跃 |
103
+ | `:around [半径]` | 周边俯视地图、附近方块统计与实体 |
104
+ | `:find <方块> [半径]` | 搜索方块,支持通配符,如 `*_ore` |
105
+ | `:goto <x> <z> [y]` | 寻路走到指定坐标 |
99
106
  | `:move <按键,...> [tick]` | 按住按键若干 tick(默认 20),按键为 `forward`、`back`、`left`、`right`、`jump`、`sneak`、`sprint`、`attack`、`use` |
100
107
  | `:stop` | 停止当前移动、挖掘等持续操作 |
108
+ | `:task` | 查看正在运行的长时操作及进度 |
101
109
  | `:attack [实体ID]` | 攻击指定实体;省略时攻击准星所指 |
102
110
  | `:use [实体ID \| x y z] [tick]` | 右键实体或方块;省略目标时使用手中物品,可指定按住时长 |
103
111
  | `:dig <x> <y> <z>` | 挖掘方块直至破坏 |
104
112
  | `:block <x> <y> <z>` / `:target` | 查看方块 / 查看准星目标 |
105
113
  | `:inv` / `:slot <0-8>` | 查看背包 / 切换快捷栏 |
114
+ | `:craft <物品> [数量]` | 合成物品 |
106
115
  | `:container` / `:close` | 查看 / 关闭当前打开的容器 |
116
+ | `:transfer <物品> [数量] [inventory]` | 把物品放进当前容器(加 `inventory` 则取回背包) |
107
117
  | `:click <槽位> [按键] [模式]` | 点击容器槽位,模式见下文 |
108
118
  | `:drop [all]` | 丢弃手中物品(`all` 丢弃整组) |
119
+ | `:events [名称正则]` | 最近的游戏事件 |
120
+ | `:ext` | 列出扩展命令 |
121
+ | `:call <命令> [JSON 参数]` | 调用扩展命令,例如 `:call hud.tablist {"limit":5}` |
109
122
  | `:quit` | 退出并关闭客户端 |
110
123
 
111
124
  ### 命令一览
112
125
 
113
126
  | 命令 | 说明 |
114
127
  | --- | --- |
115
- | `calcite launch [server]` | 启动客户端并在终端中交互 |
128
+ | `calcite launch [server]` | 启动客户端并在终端中交互;`-w <存档>` 进入单人世界 |
116
129
  | `calcite install [version]` | 预下载指定版本(客户端、库、资源、Java),不启动游戏;`-l, --loader` 同时安装模组加载器 |
117
130
  | `calcite versions` | 列出可用版本(`-t release\|snapshot\|old_beta\|old_alpha\|all`,`-l <数量>`) |
118
131
  | `calcite login` | 微软账号登录(设备码) |
@@ -132,6 +145,10 @@ calcite launch play.example.com -V 1.21.11 -n Bot1
132
145
  | `-r, --render <mode>` | `on-demand` | 渲染模式:`on-demand`、`always`、`off` |
133
146
  | `-l, --loader <loader>` | — | 模组加载器:`fabric`、`forge`、`neoforge`,可加 `@<版本>`,见[模组](#模组) |
134
147
  | `--mod <spec>` | — | 加载模组,可重复;需同时指定加载器 |
148
+ | `--ext <jar>` | — | 加载探针扩展(本地 jar 或 URL),可重复;游戏事件与扩展事件输出到标准错误 |
149
+ | `-w, --world <name>` | — | 进入单人世界(不加入服务器),存档不存在时新建 |
150
+ | `--game-mode <mode>` | `survival` | 新建世界的游戏模式:`survival`、`creative`、`hardcore` |
151
+ | `--seed <seed>` | 随机 | 新建世界的种子 |
135
152
  | `--java <path>` | 自动选择 | 指定游戏使用的 Java |
136
153
  | `--no-java-download` | — | 禁止自动下载 Java |
137
154
  | `--memory <size>` | `2G` | 最大堆内存 |
@@ -147,6 +164,15 @@ calcite accounts
147
164
  calcite launch mc.example.com -V 1.21.11 --microsoft
148
165
  ```
149
166
 
167
+ ### 单人世界
168
+
169
+ ```bash
170
+ calcite launch -w 生存测试 -V 1.21.11 # 存档不存在时新建,允许作弊
171
+ calcite launch -w Creative --game-mode creative --seed 42
172
+ ```
173
+
174
+ 存档位于实例目录的 `saves/` 下,`stop()` 或 `:quit` 会先让内置服务器保存世界再退出。
175
+
150
176
  ## MCP 服务器
151
177
 
152
178
  在支持 MCP 的客户端(Claude Code、Claude Desktop、Cursor 等)中添加如下配置:
@@ -165,7 +191,7 @@ Claude Code 也可以通过命令添加:
165
191
  claude mcp add calcite -- npx -y @bkm016/calcite mcp
166
192
  ```
167
193
 
168
- `calcite mcp` 支持 `-r, --render <mode>` 和 `--memory <size>`,用于设置新客户端的默认值。
194
+ `calcite mcp` 支持 `-r, --render <mode>`、`--memory <size>` 和 `--ext <jar>`(可重复),用于设置新客户端的默认值。
169
195
 
170
196
  ### 工具列表
171
197
 
@@ -175,19 +201,22 @@ claude mcp add calcite -- npx -y @bkm016/calcite mcp
175
201
  | `stop_client` | 停止客户端 |
176
202
  | `list_clients` | 列出当前管理的客户端 |
177
203
  | `get_state` | 获取生命周期阶段与游戏状态(界面、坐标、生命值、维度、帧率、断开原因) |
204
+ | `surroundings` | 周边概况:俯视字符地图、脚下与所处方块、附近方块统计(含最近坐标)、附近实体、群系、时间、天气 |
205
+ | `find_blocks` | 按 ID 或通配符(如 `*_ore`)搜索已加载区块中的方块,按距离排序 |
178
206
  | `get_entities` | 获取客户端已接收的实体,可按半径、类型、名称、UUID 过滤 |
179
207
  | `send_chat` | 发送聊天消息 |
180
208
  | `run_command` | 执行指令,并返回执行期间收到的聊天 |
181
209
  | `screenshot` | 渲染并返回 PNG 截图 |
182
- | `wait_for` | 等待条件成立:聊天匹配正则、实体出现或消失、进入指定阶段 |
210
+ | `wait_for` | 等待条件成立:聊天匹配正则、实体出现或消失、进入指定阶段、收到游戏或扩展事件 |
183
211
  | `get_chat` | 获取聊天记录 |
184
212
  | `get_logs` | 获取游戏日志与 Calcite 日志,用于排查崩溃 |
185
213
  | `set_render` | 开启或关闭持续渲染 |
186
214
  | `respawn` | 死亡后重生 |
187
215
  | `look` | 设置视角,或看向指定坐标 |
188
- | `walk_to` | 直线走到指定坐标,遇障碍自动跳跃,返回是否到达 |
216
+ | `walk_to` | A* 寻路走到指定坐标,返回是否到达及失败原因(`no_path`、`stuck`、`off_path`、`timeout`、`damaged`) |
189
217
  | `move` | 按住移动、跳跃、潜行、疾跑等按键若干 tick |
190
- | `stop_actions` | 停止所有持续操作并松开按键 |
218
+ | `stop_actions` | 停止所有持续操作并松开按键,正在运行的长时操作以 `cancelled` 结束 |
219
+ | `get_task` | 查询正在运行的长时操作的进度,以及后台任务的结果;`waitSeconds` 可等待其结束 |
191
220
  | `attack` | 攻击实体(按 ID 或准星目标) |
192
221
  | `use` | 右键:使用手中物品、与方块交互(开箱、放置)、与实体交互 |
193
222
  | `dig` | 挖掘方块直至破坏 |
@@ -195,10 +224,15 @@ claude mcp add calcite -- npx -y @bkm016/calcite mcp
195
224
  | `get_target` | 查询准星所指的方块或实体 |
196
225
  | `get_inventory` | 查询背包、快捷栏与手持物品 |
197
226
  | `select_slot` | 切换快捷栏槽位 |
198
- | `get_container` | 查询当前打开的容器(类型、标题、槽位物品) |
227
+ | `craft` | 按配方书合成指定数量的物品,3×3 配方自动使用附近的工作台 |
228
+ | `get_container` | 查询当前打开的容器(类型、标题、槽位物品;熔炉另含燃烧状态与进度) |
229
+ | `transfer` | 在当前容器与背包之间按物品搬运,可指定数量与目标槽位 |
199
230
  | `click_slot` | 点击容器槽位,支持拾取、快速移动、数字键交换、丢弃等模式 |
200
231
  | `close_container` | 关闭当前容器 |
201
232
  | `drop_item` | 丢弃手中物品 |
233
+ | `list_extensions` | 列出扩展与模组注册的命令(名称、说明、参数 schema)及已加载的扩展 jar |
234
+ | `call_extension` | 调用扩展命令 |
235
+ | `get_events` | 获取游戏事件与扩展事件(可按序号、名称正则过滤) |
202
236
  | `install_version` | 预下载指定版本,可同时安装模组加载器 |
203
237
  | `list_versions` | 列出可用版本 |
204
238
  | `account_login_start` | 开始微软账号登录,返回验证链接 |
@@ -208,6 +242,8 @@ claude mcp add calcite -- npx -y @bkm016/calcite mcp
208
242
 
209
243
  仅运行一个客户端时,各工具的 `client` 参数可以省略。工具调用失败时返回 `isError` 结果,错误信息格式为 `[错误码] 描述`。
210
244
 
245
+ `walk_to`、`dig`、`craft` 是长时操作,同一客户端同时只运行一个。默认等到结束再返回;传 `background: true` 则立即返回,之后用 `get_task` 跟进、用 `stop_actions` 取消。`walk_to` 与 `dig` 支持 `stopOnDamage`,受到伤害时以 `damaged` 中止,便于 Agent 及时应对。
246
+
211
247
  ## Node.js API
212
248
 
213
249
  ```js
@@ -239,11 +275,13 @@ await bot.stop();
239
275
  | --- | --- |
240
276
  | `name` | 实例名,只允许字母、数字、`-`、`_`、`.` |
241
277
  | `version` | 版本号、`release` 或 `snapshot` |
242
- | `server` | `host[:port]`;省略时停留在标题界面 |
278
+ | `server` | `host[:port]`;与 `world` 都省略时停留在标题界面 |
279
+ | `world` | 单人世界:存档名,或 `{ name, create?, gameMode?, seed? }`;存档不存在时默认新建(允许作弊),`stop()` 时先存档 |
243
280
  | `account` | `{ type: 'offline', username }` 或 `{ type: 'microsoft', name? }` |
244
281
  | `render` | `on-demand`(默认)、`always`、`off` |
245
282
  | `loader` | 模组加载器:`fabric`、`forge`、`neoforge`,可加 `@<版本>` |
246
283
  | `mods` | 模组列表:本地 jar 或目录、http(s) URL、`modrinth:<项目>[@<版本>]` |
284
+ | `extensions` | 探针扩展 jar:本地路径或 http(s) URL |
247
285
  | `memory` | 最大堆内存,默认 `2G` |
248
286
  | `javaPath` / `allowJavaDownload` | 指定 Java 路径 / 是否允许自动下载 |
249
287
  | `jvmArgs` / `gameArgs` | 额外的 JVM 参数 / 游戏参数 |
@@ -255,29 +293,38 @@ await bot.stop();
255
293
 
256
294
  | 方法 | 说明 |
257
295
  | --- | --- |
258
- | `start()` / `stop()` | 启动(进入服务器后返回)/ 停止 |
296
+ | `start()` / `stop()` | 启动(进入服务器或单人世界后返回)/ 停止 |
259
297
  | `prepare()` | 仅下载与校验依赖 |
260
298
  | `status()` | 生命周期阶段、最近错误、玩家信息 |
261
299
  | `state()` | 游戏状态 |
262
300
  | `entities(query)` | 实体列表,`query` 支持 `radius`、`type`、`name`、`uuid`、`limit` |
263
301
  | `chat(text)` / `command(cmd)` | 发送聊天 / 执行指令 |
264
302
  | `screenshot({ keep })` | 返回 `{ png, path? }` |
265
- | `waitFor(cond, timeoutMs)` | 等待聊天、实体或阶段条件 |
303
+ | `waitFor(cond, timeoutMs)` | 等待聊天、实体、阶段条件或扩展事件(`{ event: '正则' }`) |
266
304
  | `setRender(enabled)` / `respawn()` | 切换持续渲染 / 重生 |
267
305
  | `chatSince(seq)` / `logsSince(opts)` | 读取聊天与日志缓冲 |
268
306
  | `look({ yaw, pitch } \| { x, y, z })` | 设置视角或看向坐标 |
269
- | `walkTo(x, z, { range, sprint, timeoutMs })` | 走到坐标,返回 `{ arrived, reason?, distance, x, y, z }` |
307
+ | `walkTo(x, z, { y, range, sprint, direct, stopOnDamage, timeoutMs })` | 寻路走到坐标(`direct` 为直线行走),返回 `{ arrived, reason?, distance, x, y, z, replans? }` |
308
+ | `task()` | 正在运行的长时操作:`{ running, name?, ticks?, ...进度 }` |
270
309
  | `move(controls, { ticks })` / `stopActions()` | 按住按键若干 tick / 停止所有持续操作 |
271
310
  | `attack(entityId?)` | 攻击实体,省略时攻击准星目标 |
272
311
  | `use({ entityId?, block?, holdTicks? })` | 右键实体、方块或使用手中物品 |
273
- | `dig(block, { timeoutMs })` | 挖掘方块,返回 `{ broken, block, ticks?, reason? }` |
312
+ | `dig(block, { stopOnDamage, timeoutMs })` | 挖掘方块,返回 `{ broken, block, ticks?, reason? }` |
313
+ | `surroundings({ radius })` | 周边概况,含以玩家为中心的俯视字符地图 `map` 与图例 `legend` |
314
+ | `findBlocks({ blocks, radius, limit })` | 搜索方块,`blocks` 为 ID、通配符或其数组 |
315
+ | `craft(item, { count, timeoutMs })` | 合成物品,返回 `{ item, crafted, count, reason? }` |
274
316
  | `block(pos)` / `target()` | 查询方块 / 准星目标 |
275
317
  | `inventory()` / `selectSlot(n)` | 查询背包 / 切换快捷栏 |
276
318
  | `container({ waitMs })` / `closeContainer()` | 查询 / 关闭当前容器 |
277
319
  | `click(slot, { button, mode })` | 点击容器槽位 |
320
+ | `transfer(item, { to, count, slot })` | 在容器与背包之间搬运物品,返回 `{ item, moved, container }` |
278
321
  | `drop({ all })` | 丢弃手中物品 |
322
+ | `extensions()` / `call(name, args)` | 列出扩展命令 / 调用扩展命令 |
323
+ | `eventsSince({ since, name, limit })` / `lastSeq` | 读取游戏与扩展事件缓冲(最多保留 1000 条)/ 最新序号 |
279
324
 
280
- 事件:`phase`、`state`、`chat`、`log`、`exit`。
325
+ 事件:`phase`、`state`、`chat`、`log`、`exit`、`event`(游戏事件与扩展事件,`{ seq, time, name, data }`)。
326
+
327
+ 长时操作(`walkTo`、`dig`、`craft`)同一时间只运行一个;`stopActions()` 会让正在等待的调用以 `cancelled` 错误结束。
281
328
 
282
329
  ### 玩家操作示例
283
330
 
@@ -290,11 +337,56 @@ for (const item of chest.items.filter((i) => i.slot < chest.containerSlots)) {
290
337
  await bot.click(item.slot, { mode: 'quick_move' }); // Shift+点击 取出物品
291
338
  }
292
339
  await bot.closeContainer();
340
+
341
+ await bot.craft('oak_planks', { count: 8 }); // 背包合成格
342
+ await bot.craft('wooden_pickaxe'); // 自动打开 4.5 格内的工作台
343
+ await bot.use({ block: furnacePos }); // 打开熔炉
344
+ await bot.container({ waitMs: 3000 });
345
+ await bot.transfer('raw_iron', { slot: 0 }); // 原料放入输入槽
346
+ await bot.transfer('coal'); // 不指定槽位时由游戏分配(燃料进燃料槽)
293
347
  ```
294
348
 
295
349
  容器槽位编号与原版一致:容器自身的槽位在前(`0` 到 `containerSlots - 1`),玩家背包在后;`item.inventorySlot` 给出对应的背包槽位。`click` 的 `mode` 可取 `pickup`(默认,`button` 0 为左键、1 为右键)、`quick_move`(Shift+点击)、`swap`(数字键,`button` 为快捷栏序号 0–8)、`clone`、`throw`、`quick_craft`、`pickup_all`;槽位 `-999` 表示点击界面外部。未打开容器时,`click` 作用于玩家自身的背包界面。
296
350
 
297
- 操作有距离限制(6 格):目标过远时返回 `out_of_reach` 错误,需先用 `walkTo` 靠近。
351
+ 操作距离与生存模式一致(约 4.5 格),目标超过 6 格时返回 `out_of_reach` 错误,需先用 `walkTo` 靠近。
352
+
353
+ ### 游戏事件
354
+
355
+ 探针内置以下事件,与扩展事件一起通过 `event`、`eventsSince`、`waitFor({ event })` 和 MCP 的 `get_events` 获取:
356
+
357
+ | 事件 | 数据 |
358
+ | --- | --- |
359
+ | `world.join` / `world.leave` | 进入世界时的维度与坐标 |
360
+ | `player.respawn` / `player.dimension` | 重生或切换维度后的维度与坐标 |
361
+ | `player.hurt` | `{ health, amount, source? }` |
362
+ | `player.death` | `{ message }` 死亡信息 |
363
+ | `player.food` | `{ food, previous }` |
364
+ | `inventory.change` | `{ changes: [{ slot, item, previous }] }` |
365
+ | `container.open` / `container.close` | 容器类型、标题、槽位数 |
366
+ | `screen.change` | `{ screen, previous }` 界面类名 |
367
+
368
+ ### 插件测试服
369
+
370
+ `startPaperServer` 拉起一个一次性的 Paper 服务器,用来给插件写端到端测试:自动下载对应版本最新的 Paper 构建、按版本挑选 Java、写入离线模式与超平坦等测试默认配置,并装好 ViaVersion/ViaBackwards(Java 17+ 时)。
371
+
372
+ ```ts
373
+ import { Client, startPaperServer } from '@bkm016/calcite';
374
+
375
+ const server = await startPaperServer({
376
+ dir: '.e2e/server',
377
+ version: '1.21.11',
378
+ plugins: ['build/libs/MyPlugin.jar'],
379
+ operators: ['Bot'],
380
+ });
381
+ const bot = new Client({ name: 'Bot', version: '1.21.11', server: server.address, render: 'off' });
382
+ await bot.start();
383
+ await bot.command('myplugin hello');
384
+ await server.run('myplugin status', /ready/); // 控制台指令,等待匹配的输出
385
+ await bot.stop();
386
+ await server.stop();
387
+ ```
388
+
389
+ 默认每次启动都重新生成世界;`keepWorld: true` 保留上次的世界,用于验证重启后的持久化。`properties` 覆盖 `server.properties`,`onLine` 接收全部控制台输出。
298
390
 
299
391
  此外还导出 `ClientManager`(多客户端管理)、`installVersion`、`startLogin`、`listAccounts`、`removeAccount` 等函数,类型定义随包发布。
300
392
 
@@ -334,6 +426,12 @@ calcite install 1.21.11 -l neoforge
334
426
  new Client({ version: '1.21.11', loader: 'fabric', mods: ['modrinth:fabric-api', './my-mod.jar'] });
335
427
  ```
336
428
 
429
+ <p align="center">
430
+ <img src="docs/images/mods-fabric.jpg" alt="Fabric 1.21.11:Xaero's Minimap 与 Jade" width="49%">
431
+ <img src="docs/images/mods-neoforge.jpg" alt="NeoForge 1.21.11:JEI 物品列表" width="49%">
432
+ </p>
433
+ <p align="center"><sub>左:Fabric 1.21.11,加载 Fabric API、Xaero's Minimap、Jade、Mod Menu,准星对准羊时 Jade 显示其信息。右:NeoForge 1.21.11,加载 JEI 与 Xaero's Minimap,通过 <code>use</code> 打开箱子后右侧为 JEI 物品列表。模组均以 <code>modrinth:</code> 参数自动下载。</sub></p>
434
+
337
435
  - 加载器由 HeadlessMC 安装到共享的 `minecraft/versions/`,省略版本时使用最新版本(已安装过则复用本地最新版)。
338
436
  - 模组来源:本地 jar、包含 jar 的目录、http(s) URL,或 `modrinth:<项目>[@<版本号>]`。Modrinth 模组按游戏版本与加载器挑选最新正式版,并自动下载必需的前置模组;下载文件按哈希校验并缓存在 `mods/`。
339
437
  - 模组复制到实例的 `mods/` 目录。Calcite 只管理自己放入的文件(记录在 `mods/.calcite-mods.json`),手动放入的模组不受影响。
@@ -350,14 +448,102 @@ Forge 与 NeoForge 的安装器要求与游戏版本完全一致的 Java 主版
350
448
 
351
449
  已验证:Fabric 1.21.11 / 26.3(含 Fabric API)、NeoForge 1.20.4 / 1.21.11、Forge 1.20.1 / 1.21.1。
352
450
 
451
+ ## 扩展
452
+
453
+ 内置操作之外的能力可以由第三方补充,有两种方式:
454
+
455
+ - **扩展 jar**:用 Java 编写,通过探针 API 注册命令、发送事件,启动时用 `extensions` / `--ext` 加载。适合为 bot 增加读取界面、执行复杂操作等能力,不需要模组加载器。
456
+ - **模组桥接**:游戏中已安装的模组无需依赖 Calcite,直接通过系统属性注册命令。适合模组作者为自己的模组提供测试接口。
457
+
458
+ 两种方式注册的命令都可以从 Node.js、MCP 与命令行调用;事件推送到 Node.js 端,可以监听、查询,也可以在 `wait_for` 中等待。
459
+
460
+ ### 使用扩展
461
+
462
+ ```js
463
+ const bot = new Client({ version: '1.21.11', server: 'localhost', extensions: ['./calcite-hud.jar'] });
464
+ bot.on('event', (e) => console.log(e.name, e.data)); // 例如 hud.title { title: 'Hello', subtitle: null }
465
+ await bot.start();
466
+
467
+ console.log(await bot.extensions()); // { commands: [...], extensions: [{ jar, ids }] }
468
+ console.log(await bot.call('hud.sidebar')); // { title: 'Kills', lines: [{ name: 'Bot1', score: 7 }] }
469
+ await bot.waitFor({ event: '^hud\\.title$' }, 10_000);
470
+ ```
471
+
472
+ ```bash
473
+ calcite launch localhost -V 1.21.11 --ext ./calcite-hud.jar # 交互模式中用 :ext 与 :call
474
+ calcite mcp --ext ./calcite-hud.jar # MCP 中用 list_extensions / call_extension / get_events
475
+ ```
476
+
477
+ [`examples/extension-hud`](examples/extension-hud) 是一个完整示例,提供 `hud.bossbars`(Boss 栏)、`hud.sidebar`(计分板侧边栏)、`hud.tablist`(Tab 列表)、`hud.title`(标题与动作栏)四个命令,并在标题或动作栏变化时发送 `hud.title`、`hud.actionbar` 事件。已在原版 1.21.11、Fabric 1.21.11、Forge 1.20.1 上验证。构建方法:`npm run build:probe && node examples/extension-hud/build.mjs`。
478
+
479
+ ### 编写扩展 jar
480
+
481
+ 扩展针对探针 API 编译。API 位于 npm 包内的 `vendor/calcite-probe.jar`(包名 `calcite.probe.api`),只在编译时需要,不要打包进扩展。以 Java 8 为目标编译即可在所有版本上运行。
482
+
483
+ ```java
484
+ package com.example;
485
+
486
+ import calcite.probe.api.*;
487
+
488
+ public final class MyExtension implements CalciteExtension {
489
+ @Override public String id() { return "my"; } // 命令与事件名的前缀
490
+
491
+ @Override public void init(final Calcite c) {
492
+ c.command("health", "玩家生命值", null, args -> c.onGameThread(() -> {
493
+ Object player = c.ref().get(c.minecraft(), "player"); // Mojang 官方名称,任何加载器下都可用
494
+ return player == null ? null : c.ref().call(player, "getHealth");
495
+ }, 5000)); // 注册为 my.health
496
+ c.emit("ready", c.minecraftVersion()); // 发送事件 my.ready
497
+ }
498
+ }
499
+ ```
500
+
501
+ 在 jar 中添加 `META-INF/services/calcite.probe.api.CalciteExtension`,内容为实现类的全名(一个 jar 可以包含多个扩展)。
502
+
503
+ `Calcite` 接口:
504
+
505
+ | 方法 | 说明 |
506
+ | --- | --- |
507
+ | `command(name, [description, schema,] handler)` | 注册命令 `<id>.<name>`。`handler` 接收参数 `Map`,返回值序列化为 JSON(支持 `Map`、`List`、数组、字符串、数字、布尔、`null`);`schema` 为参数的 JSON Schema,会显示在 `list_extensions` 中 |
508
+ | `emit(name, data)` | 发送事件 `<id>.<name>` |
509
+ | `onGameThread(task, timeoutMs)` | 在游戏主线程上执行;读写游戏状态必须在主线程进行。命令处理器本身运行在工作线程 |
510
+ | `ref()` | 反射工具,按 Mojang 官方名称访问类、字段与方法(`cls`、`get`、`call`、`method` 等),自动转换为运行时的 intermediary / SRG 名称 |
511
+ | `minecraft()` / `minecraftVersion()` / `headless()` | `Minecraft` 实例 / 版本号 / 是否以无渲染方式运行 |
512
+ | `call(op, args)` | 调用探针内置操作,例如 `state`、`entities`、`chat` |
513
+ | `log(message)` | 写入游戏日志 |
514
+
515
+ 处理器抛出 `CalciteException(code, message)` 时,调用方收到对应的错误码;其他异常的错误码为 `error`。扩展的类加载器可以看到游戏(含模组)的全部类,但为了兼容所有加载器与版本,推荐通过 `ref()` 以官方名称反射访问。
516
+
517
+ ### 模组桥接
518
+
519
+ 模组无需依赖 Calcite。探针在游戏启动前通过系统属性发布两个对象:
520
+
521
+ | 系统属性 | 类型 | 用途 |
522
+ | --- | --- | --- |
523
+ | `calcite.commands` | `Map<String, Object>` | 放入命令。值可以是 `Function<Map<String, Object>, Object>`、`Callable`、`Runnable`,或 `Map`:`{ handler, description, schema }` |
524
+ | `calcite.emit` | `BiConsumer<String, Object>` | 发送事件 |
525
+
526
+ ```java
527
+ @SuppressWarnings("unchecked")
528
+ static void registerCalcite() {
529
+ Object commands = System.getProperties().get("calcite.commands");
530
+ if (!(commands instanceof Map)) return; // 不是由 Calcite 启动
531
+ ((Map<String, Object>) commands).put("mymod.status", (Function<Map<String, Object>, Object>) args -> MyMod.status());
532
+ }
533
+ ```
534
+
535
+ 模组命令在 `list_extensions` 中的 `source` 为 `mod`,命令名不会自动加前缀,建议使用 `<模组 ID>.<命令>`。
536
+
353
537
  ## 版本兼容性
354
538
 
355
539
  | 版本范围 | 支持情况 |
356
540
  | --- | --- |
357
- | 1.14.4 及以上 | 全部功能(状态、实体、聊天、指令、截图、玩家操作) |
541
+ | 1.14.4 及以上 | 全部功能(状态、实体、聊天、指令、截图、玩家操作、寻路、合成、游戏事件) |
358
542
  | 1.14.4 以前 | 可以启动并进入服务器;Mojang 未发布这些版本的映射表,探针功能不可用 |
359
543
 
360
- 已验证的版本:1.16.5、1.20.4、1.21.11、26.3。
544
+ 已验证的版本:1.16.5、1.20.1、1.20.4、1.21.1、1.21.11、26.3。
545
+
546
+ 通过 ViaBackwards 以低版本客户端进入高版本服务器时,服务器下发的配方会被替换为占位物品,合成不可用;其余功能不受影响。
361
547
 
362
548
  ## 数据目录与环境变量
363
549
 
@@ -400,12 +586,14 @@ Forge 与 NeoForge 的安装器要求与游戏版本完全一致的 Java 主版
400
586
  | `install_failed` | HeadlessMC 未能安装加载器(该游戏版本可能没有对应构建) |
401
587
  | `bad_mod` / `mod_not_found` | 模组参数错误 / 找不到模组文件或 Modrinth 上没有适配的版本 |
402
588
  | `mod_loading_failed` | 模组加载失败(缺少前置、版本不兼容等),错误信息附带日志 |
589
+ | `extension_not_found` | 找不到扩展 jar |
590
+ | `unknown_command` | 没有该扩展命令,可用 `list_extensions` 查看;扩展 jar 加载失败的原因见 `extensions()` 返回的 `error` |
403
591
 
404
592
  排查环境问题时,建议先运行 `calcite doctor`。
405
593
 
406
594
  ## 工作原理
407
595
 
408
- 1. Calcite 解析 Mojang 版本清单,下载客户端、库与资源文件,并逐一校验哈希。
596
+ 1. Calcite 解析 Mojang 版本清单,下载客户端、库与资源文件,并逐一校验哈希。资源文件在首次成功启动时完整校验一次,之后的启动不再逐个计算哈希。
409
597
  2. 使用 [HeadlessMC](https://github.com/headlesshq/headlessmc) 3 启动游戏。每个实例拥有独立的游戏目录、HeadlessMC 配置和启动参数,并发启动互不干扰。
410
598
  3. 向游戏注入一个轻量 Java Agent(探针)。探针借助 Mojang 官方映射表(模组环境下转换为 intermediary 或 SRG 名称)定位游戏内部类,并通过本地 TCP 连接与 Calcite 交换 JSON 消息。
411
599
  4. 在 Linux 无显示环境中,Calcite 启动共享的 Xvfb,并配置 Mesa 软件渲染。Minecraft 26.x 的渲染器改用 EGL。
package/dist/accounts.js CHANGED
@@ -81,7 +81,7 @@ export async function removeAccount(paths, name) {
81
81
  const key = findKey(accounts, name);
82
82
  if (!key)
83
83
  return false;
84
- delete accounts[key];
84
+ Reflect.deleteProperty(accounts, key);
85
85
  await writeStore(accountsFile(paths), accounts);
86
86
  return true;
87
87
  });
@@ -115,7 +115,9 @@ export async function prepareAccount(paths, location, account) {
115
115
  const wanted = account.name;
116
116
  const match = wanted ? accounts.find((a) => a.name.toLowerCase() === wanted.toLowerCase()) : accounts.find((a) => a.primary);
117
117
  if (!match) {
118
- throw Object.assign(new Error(`No stored Microsoft account named "${wanted}" (have: ${accounts.map((a) => a.name).join(', ')})`), { code: 'unknown_account' });
118
+ throw Object.assign(new Error(`No stored Microsoft account named "${wanted}" (have: ${accounts.map((a) => a.name).join(', ')})`), {
119
+ code: 'unknown_account',
120
+ });
119
121
  }
120
122
  const session = (await readStore(accountsFile(paths)))[match.name];
121
123
  await rm(storeFile(location, OFFLINE), { force: true });
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}