Releases: copper-lamp/BSChat
Release list
BSChat 0.1.3-mc26.51 (MC 26.51)
Moves both builds onto the LeviLamina 26.51 line (MC 26.51.x). Same feature version as
0.1.3-mc26.40, different MC line. Voice behaviour, the wire protocol and the configuration format
are unchanged — only the host version moved, and this time no code changes were needed.
Changed
- 开发基线从 LeviLamina
26.40.6升到26.51.6(xmake.lua/tooth.json两个 variant /
README 中英双版 / building.md / getting-started.md / THIRD_PARTY_NOTICES.md 同步)。服务端与
客户端两个 target 均在 26.51.6 下编译链接通过,零错误零警告。 - 迁移前把项目 include 的全部 59 个 SDK 头在
v26.40.6与v26.51.6之间逐文件做了内容比对,
结论是本项目实际使用到的 API 全部未变,因此src/与tests/零改动。核对细节见
docs/upgrading-levilamina.md的「26.51.x 上的新发现」一节,含 8 个有差异但与本项目无关的头
的逐条说明(MemoryOperators.h的_allocate改名、AppPlatform的 pimpl 拆分等)。
Verified
- 构建 flavor:server 产物不引用任何客户端事件符号,client 产物链接正确。
- 事件 ID:模组产物与 SDK
LeviLamina.dll的ll::event::*字符串逐条比对,client 侧 5 个、
server 侧 3 个全部命中且不带 inline 段,src/shared/event/EventIdBindings.h的绑定继续有效。 - 依赖集合与
rapidjson 钉版逐条相同,add_requireconfs` 覆盖依旧不需要。
BSChat 0.1.3-mc26.40 (MC 26.40)
Moves both builds onto the LeviLamina 26.40 line (MC 26.40.x). Voice behaviour, the wire protocol
and the configuration format are unchanged — only the host version moved, together with the fixes
needed to keep working on it.
Changed
- 开发基线从 LeviLamina
26.10.14升到26.40.6(xmake.lua/tooth.json两个 variant /
README 中英双版 / building.md / getting-started.md / THIRD_PARTY_NOTICES.md 同步)。服务端与
客户端两个 target 均在 26.40.6 下编译链接通过,零警告。 - 删除
xmake.lua里对levilamina.rapidjson的add_requireconfs覆盖。26.40.6 的 SDK 自己
就是add_requires("rapidjson 2025.02.05"),被覆盖的v1.1.0钉版不再出现。删掉覆盖并
xmake f -c重新解析后仍编译通过,编译命令行里的 rapidjson 头路径不变。 src/client/entry/ClientEventIds.h扩为src/shared/event/EventIdBindings.h,服务端与客户端的
事件 ID 绑定收敛到同一份清单,新增事件监听只需登记一处。
Fixed
- 事件 ID 绑定去掉 inline 段(双端全部事件监听)。26.40.6 把
ll::event下所有子命名空间
(client/command/entity/input/io/player/render/server/world)
都定义成 inline namespace。SDK 由 MSVC 编译、__FUNCSIG__不打印 inline namespace,本模组由
clang-cl 编译、__PRETTY_FUNCTION__打印,于是同一个事件在两侧算出不同 ID,emplaceListener
静默返回空监听器且不产生任何日志。原绑定带 inline 段(ll::event::client::ClientJoinLevelEvent、
ll::event::player::PlayerJoinEvent等),在 26.40.6 上是错的;现按 SDK 的LeviLamina.dll
实测结果统一绑定为无 inline 段的规范 ID,8 个事件逐条核对通过。 - 事件前置声明补上
inline。非 inline 的前置声明会被 clang 判为
-Winline-namespace-reopened-noninline,且与后续头文件的定义不匹配。 - 删除
GamePacketTransport.cpp里为ll::network::Packet::getRuntimeId手写的兜底实现。
26.40.6 起该函数在 SDK 头里带LLNDAPI并随 DLL 导出(导入库中可见
?getRuntimeId@Packet@network@ll@@UEBA_KXZ),26.10.14 的导入库则没有这个符号。留着这份
重复定义会遮蔽 SDK 实现(语义与 SDK 的doHash(getName())一致),并触发
-Winconsistent-dllimport。 - HUD 文本绘制适配
RectangleArea变更:26.40.6 移除了
RectangleArea(x0, y0, x1, y1, checkForValidity)构造(26.10.14 里也只在LL_PLAT_C下声明),
现在只剩 public 成员_x0/_x1/_y0/_y1,改由HudRenderer.cpp的makeRect()按成员赋值,
语义等价于旧的checkForValidity=false。 - 状态图标贴图链路适配 SDK 收窄的 API:
AppPlatform::loadTexture/loadTextureFromStream
已移除,改用仍在的loadImage;TexturePtr::getClientTexture()已移除,改为取
mClientTexture->mClientTexture.get(),并补BedrockTextureData.h/ClientTexture.h头。
drawImage/flushImages签名未变,绘制行为不变。
BSChat 0.1.3-mc26.20 (MC 26.20)
Moves both builds onto the LeviLamina 26.20 line. Voice behaviour, the v1 wire protocol and the
configuration format are unchanged; only the host SDK moved.
Changed
- 开发基线从 LeviLamina
26.10.14升到26.20.7(xmake.lua/tooth.json两个 variant /
README / building.md / getting-started.md / THIRD_PARTY_NOTICES.md 同步)。服务端与客户端两个
target 均在 26.20.7 下编译链接通过,无缺失符号。
Fixed
ClientEventIds.h的事件前置声明补上inline。26.20.7 的 SDK 头把ll::event::client/
world/input/render改成了 inline namespace,非 inline 的前置声明会被 clang 判为
-Winline-namespace-reopened-noninline,且与后续头文件的定义不匹配。
v0.1.2
Lets server operators pick the speech-to-text model instead of shipping one fixed model, and fixes
the downloader shipped alongside it.
Added
- STT 模型下载器 —
Install-SttModel.cmd交互式选型,下载并安装 sherpa-onnx 运行时与
所选模型到 bschat 模组目录,并写入config/bschat.json的sttModel段。部署目录只分发
这一个文件。五档模型:纯中文极速/标准/高配,中英双语,中英粤三语。全部为 sherpa-onnx 在线
识别器的真流式模型,非 VAD 模拟流式。支持Install-SttModel.cmd <tier>静默安装。 sttModel.modelType— 服务端不再假定 transducer。新增modelType与modelPath配置
字段,支持 sherpa-onnx 在线识别器的全部模型族(transducer、paraformer、zipformer2_ctc、
nemo_ctc、t_one_ctc)。缺省transducer,旧配置无需改动;无法识别的取值回退
transducer而非静默产生空识别器。
Changed
- 服务端加载失败时的日志会提示检查
modelType与模型文件是否匹配。 - 模型许可清单移入
THIRD_PARTY_NOTICES.md的可选模型小节,并标注许可待核实项。
Fixed
Install-SttModel.cmd部署目录此前会带出三个.ps1,其中两个是开发工具。现在只分发单个
.cmd,实现以内嵌 PowerShell 载荷的形式随文件携带,运行时抽到临时文件执行后删除。
v0.1.1
Pins the v1 wire protocol as a stable, append-only contract, and makes capability negotiation and
handshake admission explicit on both ends. Also adds diagnostics that attribute dropped uplink frames.
Added
- Protocol compatibility contract — the v1 envelope and existing payloads are now pinned by
byte-for-byte fixtures forHelloandWelcome. Evolution is append-only: new message types, or
optional payload tails that also raise the declared payload length. Envelope-level trailing bytes are
rejected. - Capability negotiation — the client declares capabilities in
Hello; the server intersects them
with what it supports (PTT is the base capability, subtitles follow STT availability) and returns the
result inWelcome.serverCapabilities. Only negotiated options are enabled, and no new wire field was
needed because the byte already existed in 0.1.0. - Handshake admission — business messages are dropped on both ends before the handshake completes,
and a stale or duplicateWelcomeno longer flips the client state. Unregistered senders are rejected
by the server. - Per-receiver downlink filtering — subtitles are only delivered to sessions that negotiated the
subtitle capability.
Changed
- Uplink diagnostics — the server logs a speech summary per push-to-talk burst: duration, received
and accepted frames, and drops split into rate-limited, late, duplicate, buffer-full and evicted.
Repeating rejection logs are throttled instead of printed per frame. - Jitter buffer reporting — pushing a frame now reports whether it was accepted, accepted with
eviction, late, duplicate or rejected because the buffer was full, instead of a silent boolean, so
every dropped frame is attributable.
Known limitations
- The limitations listed for 0.1.0 still apply.
- The old/new interoperability combinations are covered by fixtures and unit tests only; they have not
been exercised on real game binaries across two mod versions yet.
v0.1.0
First development release: the core voice engine, the wire protocol and both adaptation layers (the
server plugin and the client mod) are implemented, covered by a host unit test target for the core.
Added
- Core engine (
bschat-core) — Opus codec wrapper, protocol envelopes, audio frame types, jitter
buffer, WAV reading, per-receiver mixing core, spatial policy and the JSON configuration model. - Server voice — a dedicated mixing thread on a 120 ms tick that mixes per receiver and keeps the
sender's own voice out of their mix; no downlink traffic while nobody speaks; bounded pending queue. - Client audio — WASAPI shared-mode capture and playback, automatic gain control, Opus uplink and
jitter-buffered playback of the mixed downlink. - Push-to-talk — hold V (configurable) to talk; J (configurable) opens the voice settings
panel. - HUD — status icons plus text and on-screen subtitles drawn natively; the status PNGs are decoded
at runtime and uploaded to the engine texture group, so no resource pack is needed. - Native form panels — the client settings panel is relayed by the server as a native form, and the
operator admin panel is built and sent by the server. - Server commands —
/bsc test,/bsc play <file>,/bsc stop,/bsc admin. - Speech to text — optional server-side sherpa-onnx streaming Zipformer transcription delivered as
subtitles; a missing model disables subtitles alone and leaves voice untouched. - In-game self-check —
/bsc testruns a handshake / uplink / downlink check on the requesting
client and writes the result to the client log. - Internationalization — both the server and the client ship
en_USandzh_CN. - Build and release — one repository produces the server plugin and the client mod through
--target_type; CI builds both flavors and the release workflow publishes two Windows x64 archives. - Unit tests — the host target
bschat-testscovers the codec, protocol, mixing, spatial policy,
sessions, speech-to-text queueing, WAV parsing, configuration and panels.
Known limitations
- Test release: configuration and protocol may still change between versions.
- Subtitles show the text only, without the speaker's name, and the HUD layout is not yet calibrated for
every GUI scale. - No proximity/distance attenuation, no environmental reverb and no multi-room channels yet; VAD is
wired but off by default. - The admin panel exposes the server voice switch only.