Installation command
!!MCDR plugin install mod_update_checkerAuthor
Repository
Synced at
...
Last update
...
Latest version
Total downloads
102
Back to catalogue
ModUpdateChecker-v1.6.1.mcdr
Version
1.6.1
Date
October 14, 2026
Size
89.79 KiB
Downloads
7
MD5
867cbedf55354f6085ac138e59fb32b0SHA256
24f2f11e903b9b3149356fffc57b1f97262f7a4a6738b8ed8ddef0394300b88fDependencies
MCDR Plugin Dependencies
| Plugin ID | Requirement |
|---|---|
| mcdreforged | >=2.13.0 |
Python Package Requirements
| Python Package | Requirement |
|---|---|
none |
Release notes
CHANGELOG
本插件所有值得一提的变更都记录在此。插件包内也附带同一份 CHANGELOG.md。
格式参考 Keep a Changelog,版本号遵循 语义化版本。
本文件只保留最新一个版本的条目,更早版本的记录见 GitHub Releases。
v1.6.1
这一版是一轮全代码审查的修复轮:下载台账的并发写入、频道开关失效、mods 目录读不到时的误报, 以及十几处「坏了但不出声」的路径。
修复
- 并发下载不再丢台账。 下载台账以前由多个实例各自把内存快照整份写回,
!!muc download的两个后台线程、命令线程上的install与检查线程会互相覆盖(实测 9 条记录被清成 0 条),后果是「关服自动安装已批准的版本」静默失效。现在写入是进程级加锁的重读-合并-写回,JSON 的临时文件名也带上进程与线程号。 check.include_beta/check.include_alpha之前完全不起作用(频道过滤函数没有任何调用者),默认配置下 beta 会被当成可用更新推荐。现在两个开关生效;某个项目在所选频道里没有版本时会回落到更旧的频道,并在报告里说明这次回落。project-map.json存成 GBK / ANSI 不再让整次检查失败。 以前UnicodeDecodeError会穿过映射表的错误处理:!!muc status整页报错,一次检查以「check failed」收场、一条结论都不产出。- 关掉
sources.modrinth不再污染解析缓存。 以前「没问过」会被写成「确认不存在」,打开 Modrinth 之后这些 jar 在缓存有效期内(默认 24 小时)一次名字搜索都不会发,永久显示为「认不出」。 - 下载失败不再先删掉旧版本。 旧文件要等新文件就位之后才删,否则新版本 404 时新旧两份都没有,回滚点消失。
- 游戏版本投票只取下界。 以前区间上界与下界等权计票、平局按字典序取最大者,猜错版本会让每个 Mod 都显示「无适配构建」。
mods/目录读不到时不再报成「0 个 jar」。 状态页写明目录与原因,检查直接跳过并说明原因——读不到的目录与空目录是两件事。- 安装失败不再在
mods/留下半截新 jar。 改成同目录临时文件 + 原子替换;万一仍然留下东西,安装结果会点名那个文件。 - 上游整体不可用时不再对每个 Mod 逐个搜索(以前 12 个 Mod 会发 48 次搜索请求)。
- 其余收紧:
resolve-cache.json里的坏记录不再让每次检查失败;scan_mods在目录可 stat 不可列举时返回可解释的结果而不是抛异常;备份名判定改用fullmatch;台账里的文件名做安全校验(不再接受..);加密或损坏的 jar 不再打破scan_jar的「不抛异常」承诺;元数据解压加 4 MiB 上限;下载失败文案不再把不重试的失败说成「重试 N 次后失败」。 - 停服后在途的检查不再覆盖报告;
checker不再在关闭客户端之后继续发请求。
变更
!!muc status改成两段式:命令线程先回一句「正在读取」,扫描与渲染在后台线程完成后整屏给出——页面不再占用 MCDR 唯一的同步执行器线程;同一时间只允许一份状态页在生成。- 数值选项超出范围会被钳制并在控制台提示一次(范围写进 README 的配置表;只改内存,不回写管理员写的文件)。
!!muc别名下不再有写死!!modupdate的提示行;cleanup.notice_confirm/command.delete.usage/command.delete.disabled_hint的占位符随之调整(翻译者注意)。- 版本识别是从日志或 Mod 元数据推断出来的时候,状态页会多一行说明来源。
- 版本号 1.6.0 → 1.6.1。
内部整理
- 新增
tools/mutation_check.py:把每条守卫逐个改坏(在仓库的临时副本里改,工作树不受影响),对应的用例必须失败;没被抓住的守卫与「锚点挪走」分开报告。 - 新增
tools/check_python_floor.py与 CI 的python-floor作业:每个文件都必须能以 3.8 解析、且不用更新的注解写法或标准库名字。 - 新增 CI 的
lint与mutation作业;两个 workflow 都补上permissions、timeout-minutes与concurrency。 README-dev.md引用的测量脚本(7 个)连同bench/README.md一起进仓库,并新增tests/test_documented_paths.py守卫文档里写出的仓库路径确实存在。- 入口模块顶部按主题列出段落顺序与拆分计划(未搬迁)。
验证
- 测试 827 项全部通过(其中 2 项是真实 MCDR 端到端)。
- 变异检查 12 条全部被抓。
- 真实 MCDR 2.13.0 / 2.14.1 / 2.15.0 / 2.15.7 / 2.16.0 五版本各跑一遍完整流程,逐项一致。
- 产物可复现、换行归一、包内无注释与 docstring、包内 changelog 只留本节且与版本号一致。