TabQQVelocity 插件(三合一)部署指南
本文是运维经验笔记,适用于「Velocity + 多后端(Paper/Folia)」架构的服务器。文中的具体地址、端口、凭据均已省略,请以自己的环境为准。
是什么
TabQQVelocity 是比奇堡自研的三合一通用插件(借鉴 LuckPerms 的多平台模式):一个 jar 同时包含 Bukkit 与 Velocity 双入口描述符,部署到哪个端就自动激活对应模块。它取代了原先的三个插件(TabVelocity + QQVelocity + ItemProvider),消除多插件之间的格式不一致与版本漂移问题。
| 模块 | 运行端 | 功能 |
|---|---|---|
| common | 共享 | 消息格式构建器(本服条/跨服条统一来源,单格式保证一致) |
| bukkit | 每个后端服 | 物品数据 / 简中翻译(官方 zh_cn)/ 地图数据接收 / 本服聊天条 |
| velocity | 代理端 ×1 | 跨服聊天转发 / QQ 互通 / 物品图片渲染 / tab 服务器列表 |
功能一览
- 聊天条:
[服务器标签] 头像 玩家名: 消息—— 点标签传送到对应服、点玩家名预填/msg回复、名字前显示皮肤头像 - 跨服转发:本服显示 + 其他服同款格式转发(不回流发送者)
- QQ 互通:MC ↔ QQ 群双向文字;
[item]渲染成物品 tooltip 图片发群 - 物品链接:聊天中发
[item],MC 内显示行内物品图标(1.21.9+ Atlas Sprite 贴图)+ 悬停物品 tooltip - tab 列表:玩家 tab 界面的服务器列表与前缀
构建
- Gradle 多模块工程(common / bukkit / velocity),产物
TabQQVelocity-<版本>.jar - 产物命名带版本号(版本来自根 build.gradle,git 管理、每批改动 commit)
部署要点(血泪教训)
- 删旧再传,禁留多版本:同插件 ID 多个版本 jar 并存时,先加载者占坑(日志报
Refusing to load plugin ... same ID),后传的新版永远不生效。部署 = 先删 plugins 里全部旧版本 jar → 传新版 → 重启。 - 逐端核对:上传后列出 plugins 目录确认只剩一个 jar,再重启。
- 配置:
- 代理端:
plugins/tabqqvelocity/config.toml(QQ 机器人凭据、群开关、跨服、tablist) - 每个后端:
plugins/TabQQVelocity/config.yml(分服标签): - 全子服安装:每个后端都要放 jar(本服条由各后端自己渲染),代理端放一份(跨服/QQ/tab)。
验证清单
进服发条消息逐项核对:
- 聊天单条显示
[标签] 🧑 玩家名: 消息(不双条、不掉线) - 点标签 → 传送到对应服;点玩家名 → 聊天框预填
/msg 玩家名 - 手持物品发
[item]→ MC 内行内物品图标 + 悬停 tooltip - QQ 群收到同条消息;带
[item]时收到物品 tooltip 图片 - 按 tab → 服务器列表正常
常见坑
| 现象 | 原因 | 处理 |
|---|---|---|
| 一条消息显示两遍 | 旧插件(ItemProvider/TabVelocity/SignedVelocity 等)残留并行运行 | 停进程→移除旧 jar→核实→重启(勿吞 mv 报错) |
新功能不生效、日志有 Refusing ... same ID |
plugins 里堆了多版本 jar | 删旧版本只留一个 |
QQ 收到文字 [item] 不出图 |
物品数据通道未注册(日志应有 Item channel registered) |
确认为最新版 jar;查代理端启动日志 |
MC 内 [item] 显示原文 |
hover 缓存空(后端未推送物品数据) | 查后端日志"已发送物品信息";确认全子服都装了插件 |
| 聊天变回原版 | 后端 chat.enabled 未开或 config 未生成 |
确认 config.yml 三键;插件需调用 saveDefaultConfig |