Skip to content

feat(mcim): 重新启用 MCIM 镜像源#6657

Closed
LinQingYuu wants to merge 7 commits into
Meloong-Git:mainfrom
LuoYun-Team:mcim
Closed

feat(mcim): 重新启用 MCIM 镜像源#6657
LinQingYuu wants to merge 7 commits into
Meloong-Git:mainfrom
LuoYun-Team:mcim

Conversation

@LinQingYuu

@LinQingYuu LinQingYuu commented Jun 27, 2025

Copy link
Copy Markdown
Collaborator

Resolve #6656

是的,我又来开坑了(因为 CE 那个也是我做的.jpg)

喜欢做 feature belike

@LinQingYuu LinQingYuu marked this pull request as draft June 27, 2025 10:16
@LinQingYuu LinQingYuu added · 新功能 社区处理中 社区正在调查或处理该项 labels Jun 27, 2025
@LinQingYuu LinQingYuu marked this pull request as ready for review July 5, 2025 09:11
@LinQingYuu LinQingYuu requested a review from LTCatt July 5, 2025 09:11
@LinQingYuu LinQingYuu added 等待确认 已经过社区确认,等待开发者确认 and removed 社区处理中 社区正在调查或处理该项 labels Jul 5, 2025
@LinQingYuu

Copy link
Copy Markdown
Collaborator Author

重新调整了解析 Json 的时机,现在会在下载列表结束后立刻进行 Json 解析,以确保镜像源响应无效时可以重试

@LTCatt LTCatt added 处理中 开发者正在调查或处理该项 🟥 高 优先度:高 and removed 等待确认 已经过社区确认,等待开发者确认 labels Jul 6, 2025
@z0z0r4

z0z0r4 commented Jul 12, 2025

Copy link
Copy Markdown

有针对整合包的问题考虑下吗?比如整合包不到最后不用镜像...

整合包这个逻辑太坑了,镜像可能少文件,但是看错误日志就只有写作者可能删除了之类的。

也许应该特别加上提示?

或者统一都加上提示...

@LinQingYuu

Copy link
Copy Markdown
Collaborator Author

有针对整合包的问题考虑下吗?比如整合包不到最后不用镜像...

整合包这个逻辑太坑了,镜像可能少文件,但是看错误日志就只有写作者可能删除了之类的。

也许应该特别加上提示?

或者统一都加上提示...

我明天看看能不能调下这个逻辑(叹气

@LinQingYuu

LinQingYuu commented Jul 15, 2025

Copy link
Copy Markdown
Collaborator Author

合并必看 Message:这里弄了 Breaking Change,龙猫记得看仔细了(

@LTCatt

LTCatt commented Jul 15, 2025

Copy link
Copy Markdown
Member

合并必看 Message:这里弄了 Breaking Change,龙猫记得看仔细了(

umm 具体哪儿?

@LinQingYuu

Copy link
Copy Markdown
Collaborator Author

合并必看 Message:这里弄了 Breaking Change,龙猫记得看仔细了(

umm 具体哪儿?

ModModpack.vb

CurseForge 获取 Mod 信息那部分,把两个列表都改成了 Dictionary(Of Integer,Integer)

(以此记录 file ID 和 mod ID)

Comment on lines +238 to +265
ModList.Add(ModEntry("fileID"),ModEntry("projectID"))
If ModEntry("required") IsNot Nothing AndAlso Not ModEntry("required").ToObject(Of Boolean) Then ModOptionalList.Add(ModEntry("fileID"),ModEntry("projectID"))
Next
If ModList.Any Then
If ModList.Keys.Any Then
Dim ModDownloadLoaders As New List(Of LoaderBase)
'获取 Mod 下载信息
ModDownloadLoaders.Add(New LoaderTask(Of Integer, JArray)("获取 Mod 下载信息",
Sub(Task As LoaderTask(Of Integer, JArray))
Task.Output = GetJson(DlModRequest("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList, ",") & "]}", "application/json"))("data")
ModDownloadLoaders.Add(New LoaderTask(Of Dictionary(Of Integer,Integer), JArray)("获取 Mod 下载信息",
Sub(Task As LoaderTask(Of Dictionary(Of Integer,Integer), JArray))
Task.Output = GetJson(DlModRequest("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList.Keys, ",") & "]}", "application/json"))("data")
'如果文件已被删除,则 API 会跳过那一项
If ModList.Count > Task.Output.Count Then Throw New Exception("整合包中的部分 Mod 版本已被 Mod 作者删除,所以没法继续安装了,请向整合包作者反馈该问题")
If ModList.Keys.Count > Task.Output.Count Then
Dim missTip As String = "缺失的 Mod 列表" & vbCrLf
Dim realModList As New Dictionary(Of Integer,Integer)
For Each Id In Task.Output
Dim modId = Integer.Parse(If(Id("data")?("modId"),-1).ToString)
Dim fileId = Integer.Parse(If(Id("data")?("id"),-1).ToString)
realModList.Add(fileId,modId)
Next
missTip += String.Join(vbCrLf,ModList.Keys.ToList.Except(realModList.Keys.ToList).Select(Of String)(
Function(id As Integer)
Dim modId As Integer = ModList.TryGetValue(id,-1)
Return "缺少文件:" & id & "对应的工程 ID 为:" & If(modId = -1,"未找到对应的工程 ID",modId.ToString)
End Function
)
)
Log("[Mod] 缺失的 Mod 列表" & vbCrLf & missTip)
Throw New Exception("整合包中的部分 Mod 版本已被 Mod 作者删除,所以没法继续安装了,请向整合包作者反馈该问题")
End If

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不要在一个 PR 里提交与 PR 本身无关的东西,这些得单开另一个 PR……

@LTCatt

LTCatt commented Jul 19, 2025

Copy link
Copy Markdown
Member

此外编译没过,ModModpack.vb 开头混了脏东西

Replace("media.forgecdn.net","mcim-files.pysio.online").
Replace("mediafilez.forgecdn.net","mcim-files.pysio.online").
Replace("edge.forgecdn.net","mcim-files.pysio.online").
Replace("api.curseforge.net","mod.mcimirror.top/curseforge").

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

api.curseforge.net 是什么鬼啊,压根就不是这个域名啊

Comment on lines 1146 to +1152
Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
Urls.Add(New KeyValuePair(Of String, Integer)(Url, 20))
'Dim McimUrl As String = DlSourceModGet(Url)
'If McimUrl <> Url Then
' Select Case Setup.Get("ToolDownloadMod")
' Case 0
' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5))
' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
' Case 1
' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5))
' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
' Case Else
' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
' End Select
'End If
Dim McimUrl As String = DlSourceModGet(Url)
If McimUrl <> Url Then
Select Case Setup.Get("ToolDownloadMod")
Case 0
Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这也不是镜像源优先啊

@LTCatt

LTCatt commented Jul 19, 2025

Copy link
Copy Markdown
Member

……这个 PR 的 bug 太多了合不了一点,我自己重写了(

@LTCatt LTCatt closed this Jul 19, 2025
@LTCatt LTCatt removed 处理中 开发者正在调查或处理该项 🟥 高 优先度:高 labels Jul 19, 2025
@LTCatt LTCatt added the 忽略 因为各种杂项原因而关闭 label Jul 19, 2025
@LinQingYuu LinQingYuu deleted the mcim branch July 19, 2025 13:12
@LinQingYuu

LinQingYuu commented Jul 19, 2025

Copy link
Copy Markdown
Collaborator Author

此外编译没过,ModModpack.vb 开头混了脏东西

我开过 VSCode 还有 Rider 压根没看到哪里混东西进去了 Orz

手动复制然后本地编译也没见哪里报错了(

@LTCatt

LTCatt commented Jul 19, 2025

Copy link
Copy Markdown
Member

Actions 报 fail 了(

@LTCatt

LTCatt commented Jul 20, 2025

Copy link
Copy Markdown
Member

考虑到隔壁 #6656 被关了,我觉得有必要再聊一聊这个 PR。
虽然我不知道 CE 是什么情况,但这个 PR 完全就是一个灾难,字面意义上的,没有 任何一个函数 能够正常工作,每!一!个! 地方都有严重问题。


先看获取镜像源链接的部分,这里固定地将官方源添加到了数组顶部,所以 无论如何都是官方源优先
我怀疑这里只是无脑取消了注释,压根没管逻辑是哪样的。

Image

由于这个 bug,我怀疑整个 PR 在测试过程中,实际上几乎没有对 MCIM 源进行过调用,一切东西都走的官方源——因为无论如何,都会先对官方源进行两次调用尝试。


然后 Mod 镜像源的地址替换,错误地将 api.curseforge.com 写成了 api.curseforge.net,导致所有 CurseForge 的调用都无法正常替换域名。

Image

所以,整个 CurseForge 源都只能走官方源,根本不会、也不可能走 MCIM 源。


然后是这一大段完全和 PR 主题不相干的代码。

Image

不要在同一个 PR 里提交其他功能的代码,它不应该在这里进行审查。


以及,ModModpack.vb 夹带了 BOM 头,导致 Action 自动编译失败。

image

所以我即使合并了这个 PR,Action 也无法完成编译,还需要我手动还原此处。


本 PR 意为重新启用 MCIM 源,但却没有还原镜像源设置项。
说实话,如果没有遗漏此处,那么还有可能发现前面提到的无论如何都是官方源优先的问题……

image

再退一步,即使这个 PR 正常运作,也会遇到 #6656 (comment) 的问题,无法使用 MCIM 源进行 CurseForge Mod 更新检查。


就,还是希望能够在交 PR 前至少完整测试一遍……
包括 #6407,里面也是有一大堆极为低级的问题,什么 Return New Exception 啊,.ToLower() = "Content-Type" 啊,回滚了主线的好几处更改但没发现啊……虽然最后 GitHub 上是 Merge 了,但实际上我把所有代码全部重写了一遍,这代码压根不敢用。
求求了别让我扫雷了。

@LTCatt LTCatt mentioned this pull request Jul 20, 2025
3 tasks
@LinQingYuu

Copy link
Copy Markdown
Collaborator Author

先看获取镜像源链接的部分,这里固定地将官方源添加到了数组顶部,所以 无论如何都是官方源优先。
我怀疑这里只是无脑取消了注释,压根没管逻辑是哪样的。

这确实,我没咋研究过(也几乎没空研究)官方版怎么处理下载源设定

然后 Mod 镜像源的地址替换,错误地将 api.curseforge.com 写成了 api.curseforge.net,导致所有 CurseForge 的调用都无法正常替换域名。

也许复制粘贴会好点,因为我现在访问爱发电还是会把 afdian.com 打成旧域名 afdian.net

以及,ModModpack.vb 夹带了 BOM 头,导致 Action 自动编译失败。

我在 Rider 贴了看开头是啥但是压根没显示,所以我当 MSBuild 有 Bug 就没管它(我也没法解释这个 BOM 哪来的)

什么 Return New Exception 啊,.ToLower() = "Content-Type" 啊

这个我尽量避免(这个问题也太离谱了点 ....)

就,还是希望能够在交 PR 前至少完整测试一遍……

这种情况下进 Mod 下载大概率会有提示,但是可能被我忽略了 Orz

但是坦白说新功能代码的问题往往拖个几天几个月才会暴露出来,或者一开始就炸出来了但是被拦下来导致看起来是正常的,高耦合也让我没法把某段代码抽出来单独做白盒测试,所以只能说尽量避免了(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

· 新功能 忽略 因为各种杂项原因而关闭

Projects

None yet

Development

Successfully merging this pull request may close these issues.

重新启用 MCIM 镜像

3 participants