UltiTools-API 6.3.2 更新说明
UltiTools-API 6.3.2 修复了模块加载与更新、配置处理、存储和诊断中的正确性问题,并支持根据命令发送者提供补全,在启动时警告未声明的配置键。 面向模块作者的完整清单见 COMPATIBILITY.md, 发布页见 GitHub 上的 v6.3.2。
修复
- 主类简单名称相同的不同模块,不再被依赖解析遗漏;现有依赖别名仍然受支持(#770)。
- JAR 中的组件发现遵守包边界,不再同时扫描文本前缀相同的相邻包(#808)。
- 从目录发现组件以及读取模块元数据时,正确解析含空格或其他 URL 转义字符的路径(#785)。
- JAR 元数据无法读取时,延迟执行的模块移除仍会保留记录;更新暂存会报告元数据或哈希读取失败,不再误报为缺少模块标识(#785)。
- 外部插件注册失败时,在释放被拒绝插件的上下文之前,撤销本次尝试注册的任务、玩家缓存、事件、命令和监听器(#796)。
- SQLite 锁等待按实际经过的时间计量,原生性能分析信号不再提前耗尽现有等待时限(#771)。
- 事务完成后,若恢复自动提交失败,则丢弃该 JDBC 连接,不改变已经完成的提交或回滚结果(#793)。
- 内存查询的过滤和排序保留标准有限数值的精度;JSON 读取和删除遇到无效的非等值 null 过滤条件时,会抛出具有明确类型的数据访问异常(#789)。
- 带有声明注释的缺失配置键,可以插入到未写值的 YAML 键之后,不再错误拒绝写入(#772)。
- 配置初始化复用类发现结果,文档样式检测避免重复扫描文本,在不改变验证或文件格式的前提下减少处理工作(#792、#794)。
- 配置转换警告保持为单行;框架 YAML 加载和迁移诊断会报告问题位置,但不暴露解析器摘录(#790、#795)。
- 配置编辑被拒绝时,提示会指出已声明的配置键,并要求提供修正后的值,不再要求重启服务器(#791)。
- 模块部分重载的摘要在控制台只出现一次,准确说明后续失败之前已应用的计时更新,并将框架计时和冷却原因翻译为中文(#773、#791)。
- 模块加载诊断链接到公开的兼容性指南,并将服务器 API 较旧列为跳过类的另一种可能原因(#767、#804)。
/upm check、/upm update <module>和/upm update all会报告启动检查尚未完成,不再使用不完整的更新结果(#787)。- 诊断后备路径失败时,不再通过故障日志处理器递归调用;GUI 帧异常仅记录一条插件警告,日志失败也不会中断后续帧处理(#803)。
变更
- 配置初始化会对没有
@ConfigEntry声明的键或子树发出警告,不记录其值、不删除它们,也不会在普通重载时重复警告(#799)。 - 模块 Tab 补全通过能够识别命令发送者的提供器,支持控制台、RCON 和其他命令发送者;调用提供器之前,会先按不可用目标、权限和 OP 要求过滤(#801)。
弃用
没有新增弃用项;6.3.1 中现有的弃用保持不变。
破坏性变更
本补丁未发现公开 API 移除或不兼容的 public/protected 签名变更;现有玩家补全 API 仍然可用。
自定义注册的 Tab 补全器现在也会收到非玩家请求,因此模块作者必须使用 TabCompletionContext#getSender(),并在访问玩家状态之前处理 getPlayer() 为 null 的情况(#801)。
Ling Bao