This commit is contained in:
龙腾猫跃
2026-04-03 16:54:26 +08:00
parent 2a01043261
commit 7879112bc9
11 changed files with 110 additions and 188 deletions
@@ -14,12 +14,12 @@ Public Module ModBase
#Region "声明"
'下列版本信息由更新器自动修改
Public Const VersionBaseName As String = "2.12.6.1" '显示用版本名
Public Const VersionBaseName As String = "2.12.6.2" '显示用版本名
Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
#If BETA Then
Public Const VersionCode As Integer = 389 '正式版
Public Const VersionCode As Integer = 391 '正式版
#Else
Public Const VersionCode As Integer = 388 '快照版
Public Const VersionCode As Integer = 390 '快照版
#End If
'自动生成的版本信息
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -262,8 +262,7 @@ Retry:
End If
'发送请求
SyncLock RequestClientLock
'延迟初始化,以避免在程序启动前加载 CacheCow 导致 DLL 加载失败
If RequestClient Is Nothing Then
If RequestClient Is Nothing Then '延迟初始化,以避免在程序启动前加载 CacheCow 导致 DLL 加载失败
RequestClient = CacheCow.Client.ClientExtensions.CreateClient(New CacheCow.Client.FileCacheStore.FileStore(PathTemp & "Cache/Http/"), New HttpClientHandler With {
.AutomaticDecompression = DecompressionMethods.Deflate Or DecompressionMethods.GZip,
.UseCookies = False '不设为 False 就不能从 Header 手动传入 Cookies
@@ -211,9 +211,10 @@
'提取所有 Drop 序数
Dim Drops As New List(Of Integer)
For Each Version As JObject In Loader.Output.Value("versions")
Drops.Add(McVersion.VersionToDrop(Version("id")))
Dim Drop As Integer = McVersion.VersionToDrop(Version("id"))
If Drop = 209 Then Continue For
Drops.Add(Drop)
Next
Drops.Remove(209)
AllDrops = Drops.Distinct.OrderByDescending(Function(d) d).ToList()
End Sub
@@ -1202,7 +1202,7 @@ Retry:
End If
End If
'Forge 检测
'Forge 检测(部分测试结果见 #8432)
If McInstanceSelected.Version.HasForge Then
If McInstanceSelected.Version.Vanilla >= New Version(6, 0, 1) AndAlso McInstanceSelected.Version.Vanilla <= New Version(7, 0, 2) Then
'1.6.1 - 1.7.2:必须 Java 7
@@ -1220,11 +1220,32 @@ Retry:
MinVer = If(New Version(1, 8, 0, 0) > MinVer, New Version(1, 8, 0, 0), MinVer)
MaxVer = If(New Version(1, 15, 999, 999) < MaxVer, New Version(1, 15, 999, 999), MaxVer)
ElseIf CompareVersionGE(McInstanceSelected.Version.Forge, "34.0.0") AndAlso CompareVersionGE("36.2.25", McInstanceSelected.Version.Forge) Then
'1.16,Forge 34.X ~ 36.2.25:最高 Java 8u320
'1.16.3~5,Forge 34.0.0 ~ 36.2.25:最高 Java 8u320
MaxVer = If(New Version(1, 8, 0, 320) < MaxVer, New Version(1, 8, 0, 320), MaxVer)
ElseIf McInstanceSelected.Version.Vanilla.Major >= 18 AndAlso McInstanceSelected.Version.Vanilla.Major < 19 AndAlso McInstanceSelected.Version.HasOptiFine Then '#305
ElseIf CompareVersionGE(McInstanceSelected.Version.Forge, "36.2.26") AndAlso CompareVersionGE("36.999.999", McInstanceSelected.Version.Forge) Then
'1.16.5,Forge 36.2.26+,<37.0.0:最高 Java 23
MaxVer = If(New Version(1, 23, 999, 999) < MaxVer, New Version(1, 23, 999, 999), MaxVer)
ElseIf CompareVersionGE(McInstanceSelected.Version.Forge, "37.0.0") AndAlso CompareVersionGE("37.0.79", McInstanceSelected.Version.Forge) Then
'1.17.1,Forge 37.0.0 ~ 37.0.79:最高 Java 16
MaxVer = If(New Version(1, 16, 999, 999) < MaxVer, New Version(1, 16, 999, 999), MaxVer)
ElseIf McInstanceSelected.Version.Vanilla.Major = 18 AndAlso McInstanceSelected.Version.HasOptiFine Then '#305
'1.18:若安装了 OptiFine,最高 Java 18
MaxVer = If(New Version(1, 18, 999, 999) < MaxVer, New Version(1, 18, 999, 999), MaxVer)
ElseIf CompareVersionGE(McInstanceSelected.Version.Forge, "45.0.21") AndAlso CompareVersionGE("45.0.65", McInstanceSelected.Version.Forge) Then
'1.19.4,Forge 45.0.21 ~ 45.0.65:最高 Java 19
MaxVer = If(New Version(1, 19, 999, 999) < MaxVer, New Version(1, 19, 999, 999), MaxVer)
ElseIf CompareVersionGE(McInstanceSelected.Version.Forge, "45.0.66") AndAlso CompareVersionGE("47.4.8", McInstanceSelected.Version.Forge) Then
'1.19.4~1.20.1,Forge 45.0.66 ~ 47.4.8:最高 Java 21
MaxVer = If(New Version(1, 21, 999, 999) < MaxVer, New Version(1, 21, 999, 999), MaxVer)
End If
End If
'NeoForge 检测
If McInstanceSelected.Version.HasNeoForge Then
If McInstanceSelected.Version.Vanilla = New Version(20, 0, 1) OrElse
(CompareVersionGE("20.2.62-beta", McInstanceSelected.Version.NeoForge) AndAlso Not McInstanceSelected.Version.NeoForge.Contains("25w14craftmine")) Then
'1.20.1,以及 1.20.2 的 20.2.62-beta 之前:最高 Java 21
MaxVer = If(New Version(1, 21, 999, 999) < MaxVer, New Version(1, 21, 999, 999), MaxVer)
End If
End If
@@ -1354,22 +1375,21 @@ NextInstance:
McLaunchLog($"新版 JVM 参数:从版本 JSON 获取({CurrentInstance.Name})")
If CurrentInstance.JsonObject("arguments") IsNot Nothing AndAlso CurrentInstance.JsonObject("arguments")("jvm") IsNot Nothing Then
For Each SubJson As JToken In CurrentInstance.JsonObject("arguments")("jvm")
If SubJson.Type = JTokenType.String Then
'字符串类型
Args.Add(SubJson.ToString.Trim)
Else
'非字符串类型
If McJsonRuleCheck(SubJson("rules")) Then
'满足准则
If SubJson("value").Type = JTokenType.String Then
Args.Add(SubJson("value").ToString.Trim)
Select Case SubJson.Type
Case JTokenType.String
Args.Add(SubJson.ToString.Trim)
Case JTokenType.Object
Dim Argument As JObject = CType(SubJson, JObject)
If Argument.ContainsKey("rules") AndAlso Not McJsonRuleCheck(Argument("rules")) Then Continue For '不满足准则
If Not Argument.ContainsKey("value") Then Continue For '没有 value 字段
If Argument("value").Type = JTokenType.String Then
Args.Add(Argument("value").ToString.Trim)
Else
For Each value As JToken In SubJson("value")
For Each value As JToken In Argument("value")
Args.Add(value.ToString.Trim)
Next
End If
End If
End If
End Select
Next
End If
If CurrentInstance.InheritName <> "" Then
@@ -1525,18 +1545,21 @@ NextInstance:
McLaunchLog($"新版游戏参数:从版本 JSON 获取({CurrentInstance.Name})")
If CurrentInstance.JsonObject("arguments") IsNot Nothing AndAlso CurrentInstance.JsonObject("arguments")("game") IsNot Nothing Then
For Each SubJson As JToken In CurrentInstance.JsonObject("arguments")("game")
If SubJson.Type = JTokenType.String Then '字符串类型
AppendArg(SubJson.ToString)
Else '非字符串类型
If Not McJsonRuleCheck(SubJson("rules")) Then Continue For '检查要求
If SubJson("value").Type = JTokenType.String Then
AppendArg(SubJson("value").ToString)
Else
For Each value As JToken In SubJson("value")
AppendArg(value.ToString)
Next
End If
End If
Select Case SubJson.Type
Case JTokenType.String
AppendArg(SubJson.ToString)
Case JTokenType.Object
Dim Argument As JObject = CType(SubJson, JObject)
If Argument.ContainsKey("rules") AndAlso Not McJsonRuleCheck(Argument("rules")) Then Continue For '不满足准则
If Not Argument.ContainsKey("value") Then Continue For '没有 value 字段
If Argument("value").Type = JTokenType.String Then
AppendArg(Argument("value").ToString)
Else
For Each value As JToken In Argument("value")
AppendArg(value.ToString)
Next
End If
End Select
Next
End If
If CurrentInstance.InheritName <> "" Then
@@ -1823,7 +1846,7 @@ NextInstance:
''' 获取 Natives 文件夹路径,不以 \ 结尾。
''' </summary>
Private Function GetNativesFolder() As String
Dim Result As String = McInstanceSelected.PathVersion & McInstanceSelected.Name & "-natives"
Dim Result As String = ShortenPath(McInstanceSelected.PathVersion) & McInstanceSelected.Name & "-natives"
If Not (IsGBKEncoding OrElse Result.IsASCII()) Then
Result = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft\bin\natives"
If Not Result.IsASCII() Then
@@ -170,7 +170,7 @@ Public Module ModMinecraft
#Region "版本处理"
Public Const McInstanceCacheVersion As Integer = 34
Public Const McInstanceCacheVersion As Integer = 35
Private _McInstanceSelected As McInstance
''' <summary>
@@ -747,8 +747,11 @@ Recheck:
Case Else '根据 API 进行筛选
Dim RealJson As String = If(JsonObject, JsonText).ToString
'愚人节与快照版本
If If(JsonObject("type"), "").ToString = "fool" OrElse
(ReleaseTime.ToUniversalTime.Month = 4 AndAlso ReleaseTime.ToUniversalTime.Day = 1) OrElse GetMcFoolName(Version.VanillaName) <> "" Then
Dim FixedReleaseTime = ReleaseTime.ToUniversalTime().AddHours(2)
Dim JsonType = If(JsonObject("type"), "").ToString
If JsonType = "fool" OrElse
(FixedReleaseTime.Month = 4 AndAlso FixedReleaseTime.Day = 1 AndAlso JsonType = "snapshot") OrElse
GetMcFoolName(Version.VanillaName) <> "" Then
State = McInstanceState.Fool
ElseIf IsSnapshot() Then
State = McInstanceState.Snapshot
@@ -971,7 +974,7 @@ ExitDataLoad:
Public VanillaName As String
''' <summary>
''' 可比较的三段式原版版本号。
''' 对老版本格式,例如 1.20.3,会被转换为 20.0.3。
''' 对老版本格式,例如 1.20.1,会被转换为 20.0.1。
''' 若没有版本号,例如旧快照,则为 9999.0.0。
''' </summary>
Public Vanilla As Version
@@ -1058,7 +1061,7 @@ ExitDataLoad:
''' </summary>
Public Forge As String = ""
''' <summary>
''' NeoForge 版本名,如 21.0.2-beta、47.1.79。
''' NeoForge 版本名,如 47.1.79、21.0.2-beta、26.1.0.0-alpha.14+snapshot-11。
''' </summary>
Public NeoForge As String = ""
''' <summary>