[MD]
## CatCraftTitle 1.6.0 更新日志
---
### 中文版本
**本次更新需要注意:**
> 本次更新是一次较大的功能与稳定性更新,新增并重做了 **管理员 GUI 控制面板**、**面板内玩家称号管理**、**商店商品管理面板**、**商品三态(不可售卖的头衔)**、**内置金币 / Vault 经济与每日签到**、**自动称号条件引擎增强**、**更新检测重做**、**Tab / 头顶称号显示** 以及 **离线(非正版)服务器支持** 等。所有增强功能默认处于关闭状态,需要管理员在配置或面板中手动开启。
>
> **<span style="color:#c0392b">请务必删除 `.\plugins\CatCraftTitle` 中的 `config.yml` 文件</span>**,让插件重新生成包含全部新配置项与最新注释的干净配置文件,避免旧配置与新功能产生兼容性问题;不删除可能无法使用新功能或出现未知 BUG。删除前建议先备份一份,或先记下你自己改动过的设置。
>
> 玩家数据不受影响:数据库会在启动时自动迁移(`player_titles` 增加 `is_auto` 列、`shop_items` 主键改为 `(id, type)` 并增加 `state` / `note` 列、新增 `player_names` 名字缓存表),迁移带备份与行数校验,失败会自动回滚为原表。
**新增内容:**
+ **管理员 GUI 控制面板重做** – 通过 `/titleadmin panel` 打开:按「信息区 / 功能开关区 / 管理入口区 / 底部摘要」分区,可查看真实 TPS、在线人数、内存、数据库与调度器状态,一键切换语言、开关 RGB / 商店 / 属性支持 / Tab 显示 / 聊天格式、重载配置、立即检查更新
+ **面板内直接管理玩家称号** – 在线玩家列表(头像分页)与 **按名字或 UUID 搜索玩家**(支持离线玩家),可直接发放、激活、改名、删除头衔与后缀,清空要求二次确认
+ **商店商品管理面板** – 在面板中完成新增商品、修改价格、切换状态、填写备注、删除商品,无需敲命令
+ **不可售卖的头衔(商品三态)** – 每个商品可设为「可购买 / 展示但不可购买 / 完全隐藏」,并可写备注(如「活动限定」);隐藏商品在购买接口上与不存在的商品一视同仁,玩家无法探测
+ **经济系统与每日签到** – 内置金币或 Vault 经济二选一(`shop.currency: internal|vault`),支持每日签到奖励(`shop.signin-reward`)
+ **属性插件支持(自动称号系统)大幅增强** – 基于 PlaceholderAPI 与内置变量,按等级、金币、击杀数、权限等条件自动授予或移除称号;条件支持 `>=`、`<=`、`==`、`!=`、`>`、`<`(也接受 `=>` `=<` `<>`),并支持且 / 或 / 非、括号、区间 `in 10..30`、字符串比较、正则与真值判断
+ **数值容错** – `1,234`、`85%`、`物理攻击 120` 这类文本都能解析出数字参与比较(旧版会直接判定为不满足,这是很多人觉得「属性插件不兼容」的原因)
+ **30+ 内置变量,不需要 PlaceholderAPI** – `{level}` `{health}` `{food}` `{playtime_minutes}` `{kills}` `{deaths}` `{balance}` `{titles}` `{online_players}` `{hour}` `{perm:权限节点}` `{has_title:ID}` 等
+ **更新检测重做** – 5 个回退来源(GitHub API → 网页 latest → tags → `build.gradle`)、失败自动重试、默认每 6 小时自动检查一次;发现新版本时在控制台提示,并 **在聊天栏通知在线管理员**(含管理员进服时的延迟提醒)
+ **Tab 列表 + 头顶昵称显示称号 / 后缀** – 基于记分板队伍实现,可独立开关;若玩家已被其他记分板 / Rank 插件接管,插件会尊重原有显示,不强行覆盖
+ **RGB 渐变色支持** – `settings.gradient-colors` 支持 1 段纯色到多段平滑渐变,任意文本可使用 `&#RRGGBB` 十六进制颜色
+ **自定义消息文件** – 自动生成 `messages_zh.yml` / `messages_en.yml`,所有文案服主都能改;升级后新增的键会自动补进现有文件,不会覆盖你的修改
+ **配置自动升级** – 插件启动 / 重载时会把新版本新增的配置项补进现有 `config.yml`(1.18 及以上服务端还会保留注释)
+ **离线(非正版)服务器支持** – 新增 `player_names` 名字缓存表,启动时自动从 `usercache.json` 回填;面板可按名字搜索从未在插件中记录过的老玩家,离线服还会按离线 UUID 规则匹配
+ **权限节点可配置** – `permissions.admin / use / shop`,可对接服务器现有的权限体系
+ **新增指令** – `/titleadmin panel`、`/titleadmin reload`、`/titleadmin autotest [玩家]`、`/titleadmin updatecheck`、`/titleadmin shop add / remove / setprice / state / note / list / givebalance / setbalance / toggle / currency`
**改进与优化:**
• 调度器统一封装:Spigot / Paper / Purpur 走 Bukkit 调度器,Folia 自动识别并使用区域调度器(全局区域 + 实体调度),且任何调度失败都不会再影响插件加载
• 启动流程加固:可选功能(属性支持、TPS 统计、名字回填、更新检测、启动信息)初始化失败只记录警告并跳过,不会导致插件被禁用
• 玩家相关操作统一改到玩家线程执行:聊天栏输入回调、更新提示、自动称号判定、显示刷新等,避免异步线程操作玩家(Folia 上尤其重要)
• 命令与文案体系:`/catcraft` 与 `/titleadmin` 的 Tab 补全与执行分支完全对齐,控制台执行玩家命令不再报错;命令输出统一走颜色转换(`&e` `&6` `&#RRGGBB` 正常上色),中英文案占位符顺序与类型一致
• 数据库迁移安全化:迁移前建立备份表、校验行数、失败自动回滚;余额首次建行走同一把锁,避免并发覆盖
• 构建与源码:Gradle wrapper 升级到 9.3.0(旧版 8.10.2 在 JDK 24+ 上无法构建);打包出的 jar 内已包含 MySQL / PostgreSQL / SQLite 三种驱动;移除 Java 源码内注释,只保留配置文件说明
**修复问题:**
• **修复商品表主键迁移会丢数据** – 旧结构迁移时只复制 4 列,会让「展示 / 隐藏」状态被重置为可购买、备注丢失;现在会保留 `state` / `note`,并在迁移后校验行数、失败自动回滚
• **修复每日签到可能白吃一次** – 旧逻辑先记录签到日期再发奖励,发奖失败会导致当天无法再签;现在奖励为 0 不算失败,发奖失败会回滚签到记录
• **修复自动称号规则可能「全服都满足」** – 比较运算符右侧解析为空(变量名写错、插件未装)时字符串比较恒为真;现在一律判定为不满足
• **修复 Folia 上插件被禁用** – 1.19.4 没有 `RegionizedServer` 类导致 Folia 识别失败,所有定时任务走 Bukkit 调度器并抛异常;现在改为多标记探测 + 按 API 可用性选路
• **修复聊天输入在异步线程操作界面** – 在聊天栏输入搜索 / 发放内容时,旧版直接在异步聊天线程里开界面、改显示;现在统一调度回玩家线程
• **修复离线玩家发放不查重** – 会导致同 ID 的已有头衔被覆盖成后缀;现在与在线路径一致地查重
• **修复管理面板误触发** – `Q` 键、数字键、交换副手等点击也会触发购买或切换状态;现在只响应左 / 右 / Shift 点击
• **修复余额并发覆盖** – 首次读取余额时「建行」不在锁内,可能覆盖刚充值的余额;现在同一把锁内完成
• **修复价格与金额校验** – 负数价格会被当作免费商品;超大金额强转 `int` 会溢出成负数余额;负数 ID 可被发放但永远无法显示,均已拦截
• **修复界面与文案细节** – 管理面板「首页 / 末页」箭头无效、空列表提示被背景覆盖、超长称号丢失颜色码、英文提示占位符顺序错误、控制台执行 `/catcraft help` 提示缺少消息键、`/titleadmin autotest` 不显示 PlaceholderAPI 状态、TPS 显示假值等
---
**修复问题 / Bug Fixes:**
• **修复 `/titleadmin` 部分子命令补全不全的问题** s
• **修复旧版 `config.yml` 缺少新配置项导致功能无法启用**
• **统一玩家命令为 `/catcraft`**,避免与原版 `/title` 冲突 / Player command unified as `/catcraft` to avoid the vanilla `/title` conflict
[/MD]