Skip to content

About

Horizon 服务端聊天格式化与跨服转发模组(1.7.10 GTNH/Thermos)

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

AEMobileChat

面向 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 自行解析。

使用

  1. 把 jar 放进服务端 mods/
  2. 启动一次,生成 config/gtnchat/config.yml 与 style.yml
  3. 按需修改,/gtchat reload 生效
  4. 多台服务器共用聊天时,给每台设置不同的 server.id
  5. 装了 NecroTempus 的服一般不用额外配置,chat.chat-heads 保持 auto 即可

配置说明见文档。

版本兼容

服务端升级功能不会强制客户端跟着升级。 协议版本号只管一件事:帧结构是否还能读取; 其余差别全走能力位,对端不认识的位直接忽略。

  • 服务端在握手时告知客户端「自身能提供什么」(跨服 / 成就公告 / NEI / 手机端 / 头像留边);
  • 客户端回执时告知服务端「自身能做什么」(会画头像 / 会报成就);
  • 双方均未上报的旧版本,按「全都有」处理,不会因任一侧升级而减少功能。

所以常见组合都能正常工作:新服务端 + 旧客户端、旧服务端 + 新客户端,功能按各自能力降级, 连接失败、强制断开连接、聊天无法送达这几种情况都不会发生。/gtchat status 会列出当前上报了几台客户端、 各自什么协议、什么能力。

只有改帧结构时才需要大家一起换 jar(改魔数、帧长编码、字段含义或顺序这类), 那种情况下服务端会把 relay.min-protocol 抬上去并写明理由。日常加功能不改这两个号。

配置项 作用
relay.protocol 本端能读到的最高帧版本,只有改帧结构才动
relay.min-protocol 还能读懂的最低帧版本,是给别人的承诺,动格式必须一起抬

配置说明见文档。

许可

MIT

说明

本项目为独立实现。不包含、不复制任何第三方模组的代码; 与 NEI 的交互只通过反射与一处注入完成,与 NecroTempus 的交互只通过反射读它的配置项判断是否启用, 未打包对方任何代码或资源。

About

Horizon 服务端聊天格式化与跨服转发模组(1.7.10 GTNH/Thermos)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages