Skip to content

fix: 模组下载不再使用属于其他版本的缓存文件夹 - #9540

Closed
150311-ma wants to merge 1 commit into
Meloong-Git:mainfrom
150311-ma:fix/mod-download-folder-cache
Closed

150311-ma wants to merge 1 commit into
Meloong-Git:mainfrom
150311-ma:fix/mod-download-folder-cache

Conversation

@150311-ma

Copy link
Copy Markdown

问题

#9536:下载 Forge 模组时偶尔被错误导向 NeoForge 版本文件夹(反之亦然)。复现方式:同一 .minecraft 下同时存在 Forge 与 NeoForge 的版本文件夹,交替下载两种加载器的 Mod。

原因

PageDownloadCompDetail.xaml.vb 在选择默认下载位置时,优先使用 CachedFolder(按 ResourceTypes 做键的「上次下载文件夹」缓存):

If CachedFolder.ContainsKey(File.ResourceType) Then
    DefaultFolder = CachedFolder(File.ResourceType)
    Logger.Info($"使用上次下载时的文件夹作为默认下载位置:{DefaultFolder}")
ElseIf McInstanceSelected IsNot Nothing AndAlso IsInstanceSuitable(McInstanceSelected) Then

注意 ElseIf 分支有 IsInstanceSuitable 检查,但缓存分支没有。用户不切换所选版本、交替下载 Forge 与 NeoForge 的 Mod 时,后一个下载会沿用前一个的版本文件夹作为默认位置。
(切换所选版本时 setter 会清缓存,所以只有不切版本的交错下载会中招。)

issue 附件 Log5.txt 中的对应日志:

22:58:07.043 I [PageDownloadCompDetail] Mod 要求的加载器种类:Forge
22:58:07.048 I [PageDownloadCompDetail] 使用当前版本作为默认下载位置:C:\MC\.minecraft\versions\Perfect Minecraft-Forge-Modified\mods\

修复

在使用缓存前校验其仍位于当前适合的版本目录下,否则弃用缓存并回退到原有逻辑:

Dim CachedValid As Boolean = CachedFolder.ContainsKey(File.ResourceType)
If CachedValid AndAlso McInstanceSelected IsNot Nothing AndAlso IsInstanceSuitable(McInstanceSelected) AndAlso
   Not CachedFolder(File.ResourceType).StartsWithF(McInstanceSelected.PathIndie) Then
    Logger.Info($"弃用上次下载的文件夹:{CachedFolder(File.ResourceType)}")
    CachedValid = False
End If
If CachedValid Then

同版本连续下载的便利性不受影响;选中版本不适配时的「自动挑选适合版本」逻辑也原样保留。

编译验证

  • .NET SDK 9.0.319 + Microsoft.NETFramework.ReferenceAssemblies 1.0.3,net48-windows + WPF,以 SDK 风格壳工程复用原 vbproj 的全部 ItemGroup 编译(XAML 参与 MarkupCompile)。
  • 基线 main:0 错误 / 650 警告;本分支:0 错误 / 650 警告(均为仓库原有 BC42017,无新增)。

说明

  • 上传及检查由 AI 负责:问题定位、补丁编写、重复性检索与编译验证均由 AI 完成,提交前经人工 review。
  • 改动 1 个文件,+9 / -1。
  • 未做运行时验证(需要构造两套加载器版本 + 实际下载流程);本修复只拦截缺陷路径,其余行为不变。
  • 如果更倾向于「按加载器类型分键缓存」之类的方案,也可以讨论替换本实现。

CachedFolder 按资源类型缓存「上次下载的文件夹」,读取时未做加载器/版本适用性校验。
用户不切换所选版本、交替下载 Forge 与 NeoForge 的 Mod 时,后一个下载会沿用
前一个版本文件夹的默认位置,Mod 落进错误的版本(Meloong-Git#9536)。

改为在使用缓存前校验其仍位于当前适合的版本目录下,否则弃用缓存并回退到
原有的「当前版本 / 自动挑选适合版本」逻辑;同版本连续下载的便利性保持不变。

Fixes Meloong-Git#9536
@CerikoSky

This comment was marked as low quality.

@150311-ma 150311-ma closed this Oct 24, 2026
@150311-ma
150311-ma deleted the fix/mod-download-folder-cache branch October 24, 2026 11:01
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.

2 participants