Installation command
!!MCDR plugin install mod_update_checkerAuthor
Repository
Synced at
...
Last update
...
Latest version
Total downloads
100
Back to catalogue
ModUpdateChecker-v1.0.0.mcdr
Version
1.0.0
Date
October 7, 2026
Size
70.94 KiB
Downloads
8
MD5
3a37d8ef6a6d299283a52b79af1af1c8SHA256
20cd274864f4182a008e7bfdf2422758a175088088a344381fff3000c021fccbDependencies
MCDR Plugin Dependencies
| Plugin ID | Requirement |
|---|---|
| mcdreforged | >=2.13.0 |
Python Package Requirements
| Python Package | Requirement |
|---|---|
none |
Release notes
首个版本:扫描服务端 mods/ 目录里的每个 jar,与 Modrinth 比对,报告哪些 Mod 有更新的构建、哪些没有适配当前加载器或游戏版本的构建、哪些查不到来源。不需要任何 API key 或额外依赖。
默认只读:写 mods/ 的能力要先开启 download.install_on_stop,或者逐个 !!muc install 点名,且只在关服后执行。
功能
- 识别方式:按 SHA-1 批量识别(一两次请求识别整个 mods 目录);自编译、重新打包过的 jar 按名字兜底并在报告里标注
matched_by: name;顺带诊断重复 mod id、仅客户端 Mod 装在服务端、声明的 MC 版本范围与当前服务端不符。 - 九个状态:
update_available/awaiting_install/no_compatible_build/local_ahead/up_to_date/unresolved/not_a_mod/error/ignored。「无适配构建」分两种并分别说明:项目没发布过该加载器的构建,还是发布过但没有面向当前游戏版本。报告分「有更新但尚未下载」与「已下载待安装」两组,一个 Mod 只属于其中一组。 - 配置按功能分组:顶层只留
enabled/language/command_permission_level,其余分入server/check/report/sources/download/network六章。旧版本平铺的选项名不再被读取,插件会为此打一行警告并列出每个旧名字对应的新路径。 - 列表一行一个 Mod:详情点开才看(
!!modupdate info或点[详细信息])。每行最多一个链接且对齐成一列;只在「下一步是打开网页」时给链接;待处理优先,截断会写明还剩多少;编号取自完整列表,同一编号始终指同一个 Mod。全部聊天输出受一页预算约束(18 行)。 - 关服后自动安装(
download.install_on_stop,默认关闭):只在关服后动手;只处理插件自己下载过的文件;旧 jar 只改名(.old/.old.2)绝不覆盖;安装前校验哈希、失败回滚;mods/里那个 jar 已不在就跳过。明细在下次启动时列出,第一位上线的管理员也会收到;文件名开头的中括号备注会跟到新文件名上。 - 手动下载与安装:
download <编号>/install <编号>都先列出将要发生什么,再等!!modupdate confirm(120 秒内有效,重载配置或再跑过一次检查同样作废)。install要求文件已经下载好;只有发起人本人能确认;授权逐条生效,不会影响别的文件。详情页底部有可点的[下载此版本]/[安排安装]。 - 自动检查与提醒:开服后自动检查一次并写入控制台日志(延迟 60 秒避开 Mod 加载);管理员上线时把结果单独发给他(24 小时内的结果直接复用,且不重复广播);可选游戏内广播(默认关)。
- 可选下载(
download.enabled,默认关闭):只写能校验哈希的文件,校验不过的丢弃且不留残留;同名不同内容绝不覆盖;下载过的版本被取代时自动删旧;下载失败按download.retries重试(404/401/403 与写盘失败不重试);下载失败不影响检查结果。 - 排除不想检查的 Mod:
check.ignored_mods接受 mod id、jar 文件名或去掉.jar的名字;被排除的 Mod 完全不产生网络查询,但仍以ignored状态出现在报告里。
命令
!!modupdate 与 !!muc 两个别名,默认需要 MCDR 权限等级 3:check / list [状态] / info <编号> / download <编号> / install <编号> / confirm / status / reload / help。帮助页有标题栏与统一配色,并显示你实际输入的那个别名。
修复(开发期间的独立代码审查)
- 事件监听器被注册两次(MCDR 会合并显式注册与按名发现),导致每个事件触发两次、每次开服起两个检查线程。
!!MCDR reload plugin路径不派发on_unload,每次重载遗留一个调度线程;!!modupdate reload因停止事件没清导致定时检查被静默关闭。- 批量查询失败被当成「没有适配构建」(把瞬时故障变成一个看起来很确定的错误结论);上游失败仍写入否定缓存(把网络故障提升成 24 小时盲区);
GET /projects?ids=未容忍 404(一个坏 id 让整批丢掉标题与链接)。 covers(">= 1.21.4", "1.21.5")因运算符旁空格返回 False(版本范围退化成等值判断);int()拒绝超长数字串(畸形版本号会让整次检查抛异常)。logger.info(RText)的颜色被静默丢弃:控制台改走纯文本,回复走 RText。- 文档与死代码清理:更正过期的注释与说法、删除无人调用的函数与字段、语言目录自检补上
install家族键、「还有 N 个未显示」只在真的截断时输出。
其他
- 消息里的插件名统一为声明名,并加测试要求「任何
[方括号]开头的文案,方括号里必须是元数据里的那个名字」。 - 开发期间实现过、随后整条移除 CurseForge 支持(它的所有端点都要求 API key,且下载不保证直链),现在只查 Modrinth,不需要任何凭据。
- README 分成两份:
README.md面向使用者,README-dev.md面向开发者,互相链接;两份都不进产物。
验证
- 自动化测试覆盖版本比对与范围匹配、元数据解析、下载的各类失败模式(含「被篡改必拒绝」)、MCDR 生命周期约束、配置分组不变式、语言目录一致性、手动下载/安装的确认流程、文档与代码的一致性,以及真实 MCDR 端到端。
- 跨 5 个 MCDR 版本(2.13.0 / 2.14.1 / 2.15.0 / 2.15.7 / 2.16.0)各起一次真实 MCDR 跑完整流程,逐项检查一致。
- 产物可复现:同一份源码打两次,SHA-256 完全一致。