Skip to content

Conversation

@luochen1990
Copy link

@luochen1990 luochen1990 commented Jan 25, 2026

问题

修复服务端自动更新整合包时,用户主动禁用的模组(.disabled / .old)会被错误地判定为"丢失"并重新下载的问题(#3955)。

根本原因

之前的逻辑在判断是否需要下载时,会优先检查目标文件是否存在(!Files.exists(actualPath))。对于已禁用的模组,其原始文件名(如 Mod.jar)确实不存在(已被重命名为 Mod.jar.disabled),导致逻辑误判为文件丢失,从而触发下载。

此前的修复尝试(如处理运算符优先级)未能解决核心的逻辑顺序问题。

修复逻辑

重构了 ServerModpackCompletionTask.java 中的判断逻辑:

  1. 优先检查禁用状态:在检查文件是否存在之前,先判断该文件是否已被重命名为 .disabled.old
  2. 逻辑短路:如果发现对应的禁用文件存在,直接标记 download = false,跳过后续所有检查。
  3. 保留原有逻辑:仅在确认未被禁用的情况下,才继续执行标准的文件存在性检查和 hash 校验。

这一修改确保了用户禁用的模组不会在更新时“复活”。

Fixes #3955

PR HMCL-dev#3956 试图修复服务端自动更新整合包时重新下载已禁用模组的问题,
但由于运算符优先级错误导致修复无效。

此外,原修复逻辑在模组文件缺失(因被重命名为 .disabled)时,
仍会因 `!Files.exists(actualPath)` 为真而触发下载。

修复方案:
优先检查模组是否被禁用(存在 .disabled 或 .old 文件)。
如果被禁用,明确跳过下载。
只有在未禁用且满足“新文件”或“文件缺失”条件时,才执行下载。

Fixes HMCL-dev#3955
@luochen1990 luochen1990 force-pushed the fix-server-modpack-disabled branch from 685fc06 to 4b8365b Compare January 26, 2026 06:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 在使用服务端自动更新整合包的情况下,无法在模组管理中disable客户端模组

1 participant