面向 Minecraft 1.7.10(GTNH / Thermos)服务端的聊天格式化与跨服转发模组。
把玩家聊天渲染成带悬停提示和点击动作的富文本,并在同一代理网络内的多台服务器之间互相转发。 服务端装一个 jar 即可,代理端不需要装任何东西。
- 按权限和 op 等级匹配聊天规则,规则顺序就是配置里的书写顺序
- 不同身份可用不同样式,例如管理员的名字显示为红色
- 格式片段支持颜色码、多行悬停、点击执行命令 / 补全 / 打开链接
- 跨服聊天走代理内置的
Forward子通道,转发原始数据、各服按自己的样式渲染 - 任务分享(任务书)跨服后仍可点击
- NEI 物品链接连物品数据一起转发,别的服也能点开
- 成就公告:客户端检测解锁并上报,服务端统一公告并转发
- 兼容 NecroTempus 的聊天头像:启用头像的客户端会被 自动识别,名字前留出空位,头像不会覆盖在文字上
- 无任何联网行为:不检查更新、不上报数据、不加载远程配置
| 项 | 版本 |
|---|---|
| 服务端 | Minecraft 1.7.10 + Thermos / Cauldron 类实现 |
| Java | 8 |
| 代理(可选) | BungeeCord 或其 1.7 兼容分支 |
| 客户端 | 可选,装了才有成就公告 |
| 软依赖 | NEI(物品链接桥)、BetterQuesting(任务分享)、NecroTempus(客户端聊天头像) |
NecroTempus 是个客户端模组,会把玩家皮肤头像画在 聊天栏人名前面。它是从左往右按「名字第一次出现的位置」贴图的,所以服务端把名字顶到最左边时, 头像就会覆盖在名字的第一个字上,聊天栏显得拥挤。
本模组在客户端回执里加了一个能力位,启用头像的客户端进服时会上报;服务端据此在名字左边补一个空格,
给头像让出位置。右边不补(名字后面紧跟 : ,补了会变成 名字 : 正文),悬停提示和点击命令里的名字
也不动。
三档开关,在 config.yml 的 chat.chat-heads:
| 值 | 行为 |
|---|---|
auto(默认) |
有客户端上报才留边,仅使用原版客户端的服务器不受影响 |
on |
总是留边。玩家装 NecroTempus 但没装本模组客户端时用这个 |
off |
从不留边 |
/gtchat status 会显示当前生效的模式和上报了多少台客户端。
两点要知道:
- 判定是全局的 —— 整条聊天是同一个组件一次广播出去,所以只要有一台客户端上报,所有人都留边; 没装 NecroTempus 的玩家名字前会多出一个空格,视觉上几乎无法察觉。
- 头像贴在「名字第一次出现」的位置,如果队伍名里含有人名(ServerUtilities 默认的
X's Team就是), 头像会被贴到队标上而不是名字前。这个服务端改不了,改掉默认队名即可。
打包好的 jar 挂在 Releases 里:推一个 tag 时由 GitHub Actions 构建并附上产物,
gtnchat-1.7.10-<版本>.jar 就是放进服务端 mods/ 的那一个。也可以自行编译,见下方「构建」。
git clone <repo>
cd AEMobileChat
./gradlew build产物在 build/libs/。仓库里没有二进制文件,依赖由 Gradle 自行解析。
- 把 jar 放进服务端
mods/ - 启动一次,生成
config/gtnchat/config.yml与style.yml - 按需修改,
/gtchat reload生效 - 多台服务器共用聊天时,给每台设置不同的
server.id - 装了 NecroTempus 的服一般不用额外配置,
chat.chat-heads保持auto即可
配置说明见文档。
服务端升级功能不会强制客户端跟着升级。 协议版本号只管一件事:帧结构是否还能读取; 其余差别全走能力位,对端不认识的位直接忽略。
- 服务端在握手时告知客户端「自身能提供什么」(跨服 / 成就公告 / NEI / 手机端 / 头像留边);
- 客户端回执时告知服务端「自身能做什么」(会画头像 / 会报成就);
- 双方均未上报的旧版本,按「全都有」处理,不会因任一侧升级而减少功能。
所以常见组合都能正常工作:新服务端 + 旧客户端、旧服务端 + 新客户端,功能按各自能力降级,
连接失败、强制断开连接、聊天无法送达这几种情况都不会发生。/gtchat status 会列出当前上报了几台客户端、
各自什么协议、什么能力。
只有改帧结构时才需要大家一起换 jar(改魔数、帧长编码、字段含义或顺序这类),
那种情况下服务端会把 relay.min-protocol 抬上去并写明理由。日常加功能不改这两个号。
| 配置项 | 作用 |
|---|---|
relay.protocol |
本端能读到的最高帧版本,只有改帧结构才动 |
relay.min-protocol |
还能读懂的最低帧版本,是给别人的承诺,动格式必须一起抬 |
配置说明见文档。
本项目为独立实现。不包含、不复制任何第三方模组的代码; 与 NEI 的交互只通过反射与一处注入完成,与 NecroTempus 的交互只通过反射读它的配置项判断是否启用, 未打包对方任何代码或资源。