banner
约 1,500 字
5 分钟

Server Chat Translator:让 Minecraft 英文服里的交流顺畅一点

摘要

一个基于 DeepSeek API 的客户端聊天翻译模组:从双向翻译、游戏术语与命令正文处理,到异步队列、失败反馈和隐私边界。

在 Minecraft 英文服务器里,语言障碍经常出现在最需要赶快回应的时候:队友发来一句缩写,你还在想它是什么意思;想告诉别人来中路,又不得不先切出去翻译。聊天窗口里的几秒钟,有时比一整段长文更难处理。

Server Chat Translator (点击可访问GitHub仓库)围绕这个场景提供双向翻译:别人发来的英文可以显示中文译文,自己输入的中文先翻成英文再发送;直接输入英文则原样发送。它是纯客户端模组,服务器不需要安装配套插件。

把翻译放回聊天发生的地方#

模组通过 DeepSeek API 翻译聊天。接收方向默认把原文与译文合并在一行,形如“原文 ▏ [译] 译文”,方便在多人同时说话时对照。想让译文另起一行,可以用 /translator merge off 切换。

网络慢时,原文也不该一直被扣住。当前默认设置给合并显示留出三秒:译文及时到达就合并,超过期限则先显示原文,译文稍后补为从属行。这个设计让翻译服务的延迟尽量少影响原本的聊天。

发送方向也有一个明确的选择:翻译失败时,默认取消发送,并给出失败提示。按方向键上可以找回刚才输入的内容。对于本来就希望用英文交流的人,知道“这句话还没有发出去”很重要;模型返回的内容仍含汉字时,也会被视为失败处理。

游戏里的词,需要放回游戏里理解#

普通翻译器很容易把游戏缩写翻得过于字面化。Bed Wars 里的 obby、mid、rush 都带着具体语境。仓库内置术语表,并把它同时用于接收和发送两个方向。

术语项使用“英文写法=中文含义”的格式。例如 obby=黑曜石,既帮助接收方向理解缩写,也能在发送方向给模型提供更符合玩家习惯的表达。它仍是给模型的提示,不能保证每次都逐字采用。

随着术语表变长,维护也会成为问题。因此项目提供 /translator glossary,检查写反、缺少等号、重复含义等情况。检查会给出提示,配置仍由用户决定如何修改;改好后用 /translator reload 重载。

命令正文可以翻译,玩家名要保留#

聊天不只发生在普通输入框里,也藏在私聊、队伍和公会命令中。例如:

纯文本
/msg Steve 你好
/shout 大家快来中路
/party chat 集合

这些输入里,命令名、目标玩家名和正文承担不同的作用。模组会拆出正文进行翻译,再保留前缀重新发送。对于 /party invite 这类管理操作,则需要避免把玩家名当成一句话翻掉。

源码中的 CommandMessage 把识别分成显式聊天命令、聊天与管理混用的命令,以及受保护命令等层次。这让翻译能够进入更多交流场景,也为配置扩展留出了位置。

流畅体验背后的队列与限制#

翻译需要联网,不能让游戏主线程等着接口返回。项目把请求放到后台处理,接收和发送使用分开的工作池;发送方向使用单工作线程,维持需要翻译的消息之间的顺序。纯英文消息直接发送,因此不会等前面的中文译文。

缓存减少重复请求,限流控制调用频率,队列背压限制积压;等得太久的任务会被丢弃,避免一条已经失去上下文的旧译文很晚才出现。当前版本还设置了单条请求的时间预算,并在连续失败后熔断。读超时和 HTTP 429 不会立即自动重试。

这些机制不能保证网络永远可用,却能让“服务变慢”有可控的表现。排错时可以先看 /translator status,再按需开启 /translator debug on 查看具体跳过原因。

按游戏版本选择安装包#

截至本文所依据的仓库版本,Fabric 线面向 Minecraft 26.3;Minecraft 1.8.9 的 Forge 线冻结在模组 v3.1.1。选择下载文件时,需要同时核对游戏版本与加载器,不能只看 Release 的“最新”标记。

两条线共用 src/shared/java 下的核心逻辑,配置格式也相同。平台接入则不同:Fabric 使用客户端事件;1.8.9 的发送拦截需要 coremod 字节码注入,和其他修改聊天路径的核心插件组合时更需要留意兼容性。

使用前了解数据会去哪里#

翻译依赖外部 AI 服务:发送方向会传出自己输入的正文,接收方向会传出其他玩家的聊天正文,并附带相关提示词与术语表。默认服务是 DeepSeek,实际目标由配置的接口地址决定。只想翻译自己的消息,可以关闭接收方向。

API Key 保存在本机配置中,调试日志还可能包含聊天原文与译文,分享排错材料前应清理敏感信息。服务器对模组和代发行为的规则也各不相同,应以所在服务器的规定为准。

此外,其他玩家的聊天是模型的输入,存在提示词注入风险。项目做了提示与输出检查,但无法保证所有译文都忠实。保留原文,正是为了在机器翻译不可靠时仍有对照。

可以从 Releases 选择对应安装包,再用状态与测试命令逐步确认配置。翻译能够减少切出游戏的次数,判断一句话的意思时,仍要结合原文和当时的游戏情境。

源码与阅读入口#

本文依据仓库快照 78265a6,未在游戏中实测。

END