2.12.6.2
This commit is contained in:
@@ -11,6 +11,10 @@ Public Class FormMain
|
|||||||
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
|
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
|
||||||
'统计更新日志条目
|
'统计更新日志条目
|
||||||
#If BETA Then
|
#If BETA Then
|
||||||
|
If LastVersion < 391 Then 'Release 2.12.6.2
|
||||||
|
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:会为部分 Forge / NeoForge 选择不支持的 Java"))
|
||||||
|
BugCount += 4
|
||||||
|
End If
|
||||||
If LastVersion < 389 Then 'Release 2.12.6.1
|
If LastVersion < 389 Then 'Release 2.12.6.1
|
||||||
If LastVersion = 387 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法使用 Java 25+ 启动 Forge"))
|
If LastVersion = 387 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法使用 Java 25+ 启动 Forge"))
|
||||||
FeatureCount += 4
|
FeatureCount += 4
|
||||||
@@ -106,6 +110,10 @@ Public Class FormMain
|
|||||||
'3:BUG+ IMP* FEAT-
|
'3:BUG+ IMP* FEAT-
|
||||||
'2:BUG* IMP-
|
'2:BUG* IMP-
|
||||||
'1:BUG-
|
'1:BUG-
|
||||||
|
If LastVersion < 390 Then 'Snapshot 2.12.6.2
|
||||||
|
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:会为部分 Forge / NeoForge 选择不支持的 Java"))
|
||||||
|
BugCount += 4
|
||||||
|
End If
|
||||||
If LastVersion < 388 Then 'Snapshot 2.12.6.1
|
If LastVersion < 388 Then 'Snapshot 2.12.6.1
|
||||||
If LastVersion = 386 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法使用 Java 25+ 启动 Forge"))
|
If LastVersion = 386 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法使用 Java 25+ 启动 Forge"))
|
||||||
FeatureCount += 4
|
FeatureCount += 4
|
||||||
@@ -268,7 +276,7 @@ Public Class FormMain
|
|||||||
'输出更新日志
|
'输出更新日志
|
||||||
RunInNewThread(
|
RunInNewThread(
|
||||||
Sub()
|
Sub()
|
||||||
If MyMsgBox(Content, "PCL 已更新至 " & VersionDisplayName, "确定", "完整更新日志") = 2 Then
|
If MyMsgBox(Content, "PCL 已更新至" & VersionDisplayName, "确定", "完整更新日志") = 2 Then
|
||||||
OpenWebsite("https://meloong.com/afd/a/LTCat?tab=feed")
|
OpenWebsite("https://meloong.com/afd/a/LTCat?tab=feed")
|
||||||
End If
|
End If
|
||||||
End Sub, "UpdateLog Output")
|
End Sub, "UpdateLog Output")
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ Public Module ModBase
|
|||||||
#Region "声明"
|
#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 自动替换
|
Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
|
||||||
#If BETA Then
|
#If BETA Then
|
||||||
Public Const VersionCode As Integer = 389 '正式版
|
Public Const VersionCode As Integer = 391 '正式版
|
||||||
#Else
|
#Else
|
||||||
Public Const VersionCode As Integer = 388 '快照版
|
Public Const VersionCode As Integer = 390 '快照版
|
||||||
#End If
|
#End If
|
||||||
'自动生成的版本信息
|
'自动生成的版本信息
|
||||||
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
|
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
|
||||||
|
|||||||
@@ -262,8 +262,7 @@ Retry:
|
|||||||
End If
|
End If
|
||||||
'发送请求
|
'发送请求
|
||||||
SyncLock RequestClientLock
|
SyncLock RequestClientLock
|
||||||
'延迟初始化,以避免在程序启动前加载 CacheCow 导致 DLL 加载失败
|
If RequestClient Is Nothing Then '延迟初始化,以避免在程序启动前加载 CacheCow 导致 DLL 加载失败
|
||||||
If RequestClient Is Nothing Then
|
|
||||||
RequestClient = CacheCow.Client.ClientExtensions.CreateClient(New CacheCow.Client.FileCacheStore.FileStore(PathTemp & "Cache/Http/"), New HttpClientHandler With {
|
RequestClient = CacheCow.Client.ClientExtensions.CreateClient(New CacheCow.Client.FileCacheStore.FileStore(PathTemp & "Cache/Http/"), New HttpClientHandler With {
|
||||||
.AutomaticDecompression = DecompressionMethods.Deflate Or DecompressionMethods.GZip,
|
.AutomaticDecompression = DecompressionMethods.Deflate Or DecompressionMethods.GZip,
|
||||||
.UseCookies = False '不设为 False 就不能从 Header 手动传入 Cookies
|
.UseCookies = False '不设为 False 就不能从 Header 手动传入 Cookies
|
||||||
|
|||||||
@@ -211,9 +211,10 @@
|
|||||||
'提取所有 Drop 序数
|
'提取所有 Drop 序数
|
||||||
Dim Drops As New List(Of Integer)
|
Dim Drops As New List(Of Integer)
|
||||||
For Each Version As JObject In Loader.Output.Value("versions")
|
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
|
Next
|
||||||
Drops.Remove(209)
|
|
||||||
AllDrops = Drops.Distinct.OrderByDescending(Function(d) d).ToList()
|
AllDrops = Drops.Distinct.OrderByDescending(Function(d) d).ToList()
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|||||||
@@ -1202,7 +1202,7 @@ Retry:
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'Forge 检测
|
'Forge 检测(部分测试结果见 #8432)
|
||||||
If McInstanceSelected.Version.HasForge Then
|
If McInstanceSelected.Version.HasForge Then
|
||||||
If McInstanceSelected.Version.Vanilla >= New Version(6, 0, 1) AndAlso McInstanceSelected.Version.Vanilla <= New Version(7, 0, 2) 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
|
'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)
|
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)
|
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
|
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)
|
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
|
'1.18:若安装了 OptiFine,最高 Java 18
|
||||||
MaxVer = If(New Version(1, 18, 999, 999) < MaxVer, New Version(1, 18, 999, 999), MaxVer)
|
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
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@@ -1354,22 +1375,21 @@ NextInstance:
|
|||||||
McLaunchLog($"新版 JVM 参数:从版本 JSON 获取({CurrentInstance.Name})")
|
McLaunchLog($"新版 JVM 参数:从版本 JSON 获取({CurrentInstance.Name})")
|
||||||
If CurrentInstance.JsonObject("arguments") IsNot Nothing AndAlso CurrentInstance.JsonObject("arguments")("jvm") IsNot Nothing Then
|
If CurrentInstance.JsonObject("arguments") IsNot Nothing AndAlso CurrentInstance.JsonObject("arguments")("jvm") IsNot Nothing Then
|
||||||
For Each SubJson As JToken In CurrentInstance.JsonObject("arguments")("jvm")
|
For Each SubJson As JToken In CurrentInstance.JsonObject("arguments")("jvm")
|
||||||
If SubJson.Type = JTokenType.String Then
|
Select Case SubJson.Type
|
||||||
'字符串类型
|
Case JTokenType.String
|
||||||
Args.Add(SubJson.ToString.Trim)
|
Args.Add(SubJson.ToString.Trim)
|
||||||
Else
|
Case JTokenType.Object
|
||||||
'非字符串类型
|
Dim Argument As JObject = CType(SubJson, JObject)
|
||||||
If McJsonRuleCheck(SubJson("rules")) Then
|
If Argument.ContainsKey("rules") AndAlso Not McJsonRuleCheck(Argument("rules")) Then Continue For '不满足准则
|
||||||
'满足准则
|
If Not Argument.ContainsKey("value") Then Continue For '没有 value 字段
|
||||||
If SubJson("value").Type = JTokenType.String Then
|
If Argument("value").Type = JTokenType.String Then
|
||||||
Args.Add(SubJson("value").ToString.Trim)
|
Args.Add(Argument("value").ToString.Trim)
|
||||||
Else
|
Else
|
||||||
For Each value As JToken In SubJson("value")
|
For Each value As JToken In Argument("value")
|
||||||
Args.Add(value.ToString.Trim)
|
Args.Add(value.ToString.Trim)
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
End If
|
End Select
|
||||||
End If
|
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
If CurrentInstance.InheritName <> "" Then
|
If CurrentInstance.InheritName <> "" Then
|
||||||
@@ -1525,18 +1545,21 @@ NextInstance:
|
|||||||
McLaunchLog($"新版游戏参数:从版本 JSON 获取({CurrentInstance.Name})")
|
McLaunchLog($"新版游戏参数:从版本 JSON 获取({CurrentInstance.Name})")
|
||||||
If CurrentInstance.JsonObject("arguments") IsNot Nothing AndAlso CurrentInstance.JsonObject("arguments")("game") IsNot Nothing Then
|
If CurrentInstance.JsonObject("arguments") IsNot Nothing AndAlso CurrentInstance.JsonObject("arguments")("game") IsNot Nothing Then
|
||||||
For Each SubJson As JToken In CurrentInstance.JsonObject("arguments")("game")
|
For Each SubJson As JToken In CurrentInstance.JsonObject("arguments")("game")
|
||||||
If SubJson.Type = JTokenType.String Then '字符串类型
|
Select Case SubJson.Type
|
||||||
AppendArg(SubJson.ToString)
|
Case JTokenType.String
|
||||||
Else '非字符串类型
|
AppendArg(SubJson.ToString)
|
||||||
If Not McJsonRuleCheck(SubJson("rules")) Then Continue For '检查要求
|
Case JTokenType.Object
|
||||||
If SubJson("value").Type = JTokenType.String Then
|
Dim Argument As JObject = CType(SubJson, JObject)
|
||||||
AppendArg(SubJson("value").ToString)
|
If Argument.ContainsKey("rules") AndAlso Not McJsonRuleCheck(Argument("rules")) Then Continue For '不满足准则
|
||||||
Else
|
If Not Argument.ContainsKey("value") Then Continue For '没有 value 字段
|
||||||
For Each value As JToken In SubJson("value")
|
If Argument("value").Type = JTokenType.String Then
|
||||||
AppendArg(value.ToString)
|
AppendArg(Argument("value").ToString)
|
||||||
Next
|
Else
|
||||||
End If
|
For Each value As JToken In Argument("value")
|
||||||
End If
|
AppendArg(value.ToString)
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End Select
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
If CurrentInstance.InheritName <> "" Then
|
If CurrentInstance.InheritName <> "" Then
|
||||||
@@ -1823,7 +1846,7 @@ NextInstance:
|
|||||||
''' 获取 Natives 文件夹路径,不以 \ 结尾。
|
''' 获取 Natives 文件夹路径,不以 \ 结尾。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Private Function GetNativesFolder() As String
|
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
|
If Not (IsGBKEncoding OrElse Result.IsASCII()) Then
|
||||||
Result = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft\bin\natives"
|
Result = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft\bin\natives"
|
||||||
If Not Result.IsASCII() Then
|
If Not Result.IsASCII() Then
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ Public Module ModMinecraft
|
|||||||
|
|
||||||
#Region "版本处理"
|
#Region "版本处理"
|
||||||
|
|
||||||
Public Const McInstanceCacheVersion As Integer = 34
|
Public Const McInstanceCacheVersion As Integer = 35
|
||||||
|
|
||||||
Private _McInstanceSelected As McInstance
|
Private _McInstanceSelected As McInstance
|
||||||
''' <summary>
|
''' <summary>
|
||||||
@@ -747,8 +747,11 @@ Recheck:
|
|||||||
Case Else '根据 API 进行筛选
|
Case Else '根据 API 进行筛选
|
||||||
Dim RealJson As String = If(JsonObject, JsonText).ToString
|
Dim RealJson As String = If(JsonObject, JsonText).ToString
|
||||||
'愚人节与快照版本
|
'愚人节与快照版本
|
||||||
If If(JsonObject("type"), "").ToString = "fool" OrElse
|
Dim FixedReleaseTime = ReleaseTime.ToUniversalTime().AddHours(2)
|
||||||
(ReleaseTime.ToUniversalTime.Month = 4 AndAlso ReleaseTime.ToUniversalTime.Day = 1) OrElse GetMcFoolName(Version.VanillaName) <> "" Then
|
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
|
State = McInstanceState.Fool
|
||||||
ElseIf IsSnapshot() Then
|
ElseIf IsSnapshot() Then
|
||||||
State = McInstanceState.Snapshot
|
State = McInstanceState.Snapshot
|
||||||
@@ -971,7 +974,7 @@ ExitDataLoad:
|
|||||||
Public VanillaName As String
|
Public VanillaName As String
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 可比较的三段式原版版本号。
|
''' 可比较的三段式原版版本号。
|
||||||
''' 对老版本格式,例如 1.20.3,会被转换为 20.0.3。
|
''' 对老版本格式,例如 1.20.1,会被转换为 20.0.1。
|
||||||
''' 若没有版本号,例如旧快照,则为 9999.0.0。
|
''' 若没有版本号,例如旧快照,则为 9999.0.0。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Public Vanilla As Version
|
Public Vanilla As Version
|
||||||
@@ -1058,7 +1061,7 @@ ExitDataLoad:
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
Public Forge As String = ""
|
Public Forge As String = ""
|
||||||
''' <summary>
|
''' <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>
|
''' </summary>
|
||||||
Public NeoForge As String = ""
|
Public NeoForge As String = ""
|
||||||
''' <summary>
|
''' <summary>
|
||||||
|
|||||||
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
||||||
' 方法是按如下所示使用“*”
|
' 方法是按如下所示使用“*”
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2.12.6.1")>
|
<Assembly: AssemblyVersion("2.12.6.2")>
|
||||||
<Assembly: AssemblyFileVersion("2.12.6.1")>
|
<Assembly: AssemblyFileVersion("2.12.6.2")>
|
||||||
<Assembly: NeutralResourcesLanguage("")>
|
<Assembly: NeutralResourcesLanguage("")>
|
||||||
|
|||||||
@@ -4,49 +4,6 @@ Public Module ModDownloadLib
|
|||||||
|
|
||||||
#Region "Minecraft 下载"
|
#Region "Minecraft 下载"
|
||||||
|
|
||||||
''' <summary>
|
|
||||||
''' 下载某个 Minecraft 版本,这会创造一个单独的下载任务,失败会跳过执行并要求反馈。
|
|
||||||
''' 返回正在下载的任务,若跳过或失败,则返回 Nothing。
|
|
||||||
''' </summary>
|
|
||||||
''' <param name="Id">所下载的 Minecraft 的版本名。</param>
|
|
||||||
''' <param name="JsonUrl">Json 文件的 Mojang 官方地址。</param>
|
|
||||||
Public Function McDownloadClient(Behaviour As NetPreDownloadBehaviour, Id As String, Optional JsonUrl As String = Nothing) As LoaderCombo(Of String)
|
|
||||||
Try
|
|
||||||
Dim VersionFolder As String = McFolderSelected & "versions\" & Id & "\"
|
|
||||||
|
|
||||||
'重复任务检查
|
|
||||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
||||||
If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For
|
|
||||||
If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Return OngoingLoader
|
|
||||||
Hint("该版本正在下载中!", HintType.Red)
|
|
||||||
Return OngoingLoader
|
|
||||||
Next
|
|
||||||
|
|
||||||
'已有版本检查
|
|
||||||
If Behaviour <> NetPreDownloadBehaviour.IgnoreCheck AndAlso File.Exists(VersionFolder & Id & ".json") AndAlso File.Exists(VersionFolder & Id & ".jar") Then
|
|
||||||
If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Return Nothing
|
|
||||||
If MyMsgBox("版本 " & Id & " 已存在,是否重新下载?" & vbCrLf & "这会覆盖版本的 json 与 jar 文件,但不会影响版本隔离的文件。", "版本已存在", "继续", "取消") = 1 Then
|
|
||||||
File.Delete(VersionFolder & Id & ".jar")
|
|
||||||
File.Delete(VersionFolder & Id & ".json")
|
|
||||||
Else
|
|
||||||
Return Nothing
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
'启动
|
|
||||||
Dim Loader As New LoaderCombo(Of String)("Minecraft " & Id & " 下载", McDownloadClientLoader(Id, JsonUrl)) With {.OnStateChanged = AddressOf McInstallState}
|
|
||||||
Loader.Start(VersionFolder)
|
|
||||||
LoaderTaskbarAdd(Loader)
|
|
||||||
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
||||||
FrmMain.BtnExtraDownload.Ribble()
|
|
||||||
Return Loader
|
|
||||||
|
|
||||||
Catch ex As Exception
|
|
||||||
Log(ex, "开始 Minecraft 下载失败", LogLevel.Feedback)
|
|
||||||
Return Nothing
|
|
||||||
End Try
|
|
||||||
End Function
|
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 获取下载某个 Minecraft 版本的加载器列表。
|
''' 获取下载某个 Minecraft 版本的加载器列表。
|
||||||
''' 它必须安装到 McFolderSelected,但是可以自定义版本名(不过自定义的版本名不会修改 Json 中的 id 项)。
|
''' 它必须安装到 McFolderSelected,但是可以自定义版本名(不过自定义的版本名不会修改 Json 中的 id 项)。
|
||||||
@@ -226,7 +183,7 @@ Public Module ModDownloadLib
|
|||||||
Dim Instance As New McInstance(VersionFolder)
|
Dim Instance As New McInstance(VersionFolder)
|
||||||
If Instance.JsonObject("downloads") Is Nothing OrElse Instance.JsonObject("downloads")("server") Is Nothing OrElse Instance.JsonObject("downloads")("server")("url") Is Nothing Then
|
If Instance.JsonObject("downloads") Is Nothing OrElse Instance.JsonObject("downloads")("server") Is Nothing OrElse Instance.JsonObject("downloads")("server")("url") Is Nothing Then
|
||||||
File.Delete(VersionFolder & Id & ".json")
|
File.Delete(VersionFolder & Id & ".json")
|
||||||
If Not New DirectoryInfo(VersionFolder).GetFileSystemInfos.Any() Then Directory.Delete(VersionFolder)
|
If Not New DirectoryInfo(VersionFolder).GetFileSystemInfos.Any() Then DeleteDirectory(VersionFolder)
|
||||||
Task.Output = New List(Of NetFile)
|
Task.Output = New List(Of NetFile)
|
||||||
Hint($"Mojang 没有给 Minecraft {Id} 提供官方服务端下载,没法下,撤退!", HintType.Red)
|
Hint($"Mojang 没有给 Minecraft {Id} 提供官方服务端下载,没法下,撤退!", HintType.Red)
|
||||||
Thread.Sleep(2000) '等玩家把上一个提示看完
|
Thread.Sleep(2000) '等玩家把上一个提示看完
|
||||||
@@ -520,11 +477,11 @@ pause"
|
|||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 获取下载某个 OptiFine 版本的加载器列表。
|
''' 获取下载某个 OptiFine 版本的加载器列表。
|
||||||
|
''' 这不会补全所需的支持库文件,需要后续手动补全支持库。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Private Function McDownloadOptiFineLoader(DownloadInfo As DlOptiFineListEntry, Optional McFolder As String = Nothing, Optional ClientDownloadLoader As LoaderCombo(Of String) = Nothing, Optional ClientFolder As String = Nothing, Optional FixLibrary As Boolean = True) As List(Of LoaderBase)
|
Private Function McDownloadOptiFineLoader(DownloadInfo As DlOptiFineListEntry, McFolder As String, ClientDownloadLoader As LoaderCombo(Of String), ClientFolder As String) As List(Of LoaderBase)
|
||||||
|
|
||||||
'参数初始化
|
'参数初始化
|
||||||
McFolder = If(McFolder, McFolderSelected)
|
|
||||||
Dim IsCustomFolder As Boolean = McFolder <> McFolderSelected
|
Dim IsCustomFolder As Boolean = McFolder <> McFolderSelected
|
||||||
Dim Id As String = DownloadInfo.InstanceName
|
Dim Id As String = DownloadInfo.InstanceName
|
||||||
Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
|
Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
|
||||||
@@ -537,12 +494,6 @@ pause"
|
|||||||
'获取下载地址
|
'获取下载地址
|
||||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("获取 OptiFine 主文件下载地址",
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("获取 OptiFine 主文件下载地址",
|
||||||
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
||||||
'启动依赖版本的下载
|
|
||||||
If ClientDownloadLoader Is Nothing Then
|
|
||||||
If IsCustomFolder Then Throw New Exception("如果没有指定原版下载器,则不能指定 MC 安装文件夹")
|
|
||||||
ClientDownloadLoader = McDownloadClient(NetPreDownloadBehaviour.ExitWhileExistsOrDownloading, DownloadInfo.Inherit)
|
|
||||||
End If
|
|
||||||
Task.Progress = 0.1
|
|
||||||
Dim Sources As New List(Of String)
|
Dim Sources As New List(Of String)
|
||||||
'BMCLAPI 源
|
'BMCLAPI 源
|
||||||
Dim BmclapiInherit As String = DownloadInfo.Inherit
|
Dim BmclapiInherit As String = DownloadInfo.Inherit
|
||||||
@@ -555,8 +506,8 @@ pause"
|
|||||||
'官方源
|
'官方源
|
||||||
Dim PageData As String
|
Dim PageData As String
|
||||||
Try
|
Try
|
||||||
PageData = NetRequestByClient("https://optifine.net/adloadx?f=" & DownloadInfo.FileName,
|
PageData = NetRequestByClientRetry("https://optifine.net/adloadx?f=" & DownloadInfo.FileName,
|
||||||
Encoding:=New UTF8Encoding(False), Timeout:=15000, Accept:="text/html", SimulateBrowserHeaders:=True)
|
Encoding:=New UTF8Encoding(False), Accept:="text/html", SimulateBrowserHeaders:=True)
|
||||||
Task.Progress = 0.8
|
Task.Progress = 0.8
|
||||||
Sources.Add("https://optifine.net/" & RegexSearch(PageData, "downloadx\?f=[^""']+")(0))
|
Sources.Add("https://optifine.net/" & RegexSearch(PageData, "downloadx\?f=[^""']+")(0))
|
||||||
Log("[Download] OptiFine " & DownloadInfo.DisplayName & " 官方下载地址:" & Sources.Last)
|
Log("[Download] OptiFine " & DownloadInfo.DisplayName & " 官方下载地址:" & Sources.Last)
|
||||||
@@ -570,7 +521,6 @@ pause"
|
|||||||
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("等待原版下载",
|
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("等待原版下载",
|
||||||
Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
||||||
'等待原版文件下载完成
|
'等待原版文件下载完成
|
||||||
If ClientDownloadLoader Is Nothing Then Return
|
|
||||||
Dim TargetLoaders As List(Of LoaderBase) =
|
Dim TargetLoaders As List(Of LoaderBase) =
|
||||||
ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
||||||
Where(Function(l) l.State <> LoadState.Finished).ToList
|
Where(Function(l) l.State <> LoadState.Finished).ToList
|
||||||
@@ -690,13 +640,6 @@ Retry:
|
|||||||
End Sub) With {.ProgressWeight = 1})
|
End Sub) With {.ProgressWeight = 1})
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'下载支持库
|
|
||||||
If FixLibrary Then
|
|
||||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析 OptiFine 支持库文件",
|
|
||||||
Sub(Task) Task.Output = McLibNetFilesFromInstance(New McInstance(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
||||||
Loaders.Add(New LoaderDownload("下载 OptiFine 支持库文件", New List(Of NetFile)) With {.ProgressWeight = 4})
|
|
||||||
End If
|
|
||||||
|
|
||||||
Return Loaders
|
Return Loaders
|
||||||
End Function
|
End Function
|
||||||
''' <summary>
|
''' <summary>
|
||||||
@@ -719,8 +662,8 @@ Retry:
|
|||||||
'官方源
|
'官方源
|
||||||
Dim PageData As String
|
Dim PageData As String
|
||||||
Try
|
Try
|
||||||
PageData = NetRequestByClient("https://optifine.net/adloadx?f=" & DownloadInfo.FileName,
|
PageData = NetRequestByClientRetry("https://optifine.net/adloadx?f=" & DownloadInfo.FileName,
|
||||||
Encoding:=New UTF8Encoding(False), Timeout:=15000, Accept:="text/html", SimulateBrowserHeaders:=True)
|
Encoding:=New UTF8Encoding(False), Accept:="text/html", SimulateBrowserHeaders:=True)
|
||||||
Task.Progress = 0.8
|
Task.Progress = 0.8
|
||||||
Sources.Add("https://optifine.net/" & RegexSearch(PageData, "downloadx\?f=[^""']+")(0))
|
Sources.Add("https://optifine.net/" & RegexSearch(PageData, "downloadx\?f=[^""']+")(0))
|
||||||
Log("[Download] OptiFine " & DownloadInfo.DisplayName & " 官方下载地址:" & Sources.Last)
|
Log("[Download] OptiFine " & DownloadInfo.DisplayName & " 官方下载地址:" & Sources.Last)
|
||||||
@@ -809,41 +752,6 @@ Retry:
|
|||||||
|
|
||||||
#Region "LiteLoader 下载"
|
#Region "LiteLoader 下载"
|
||||||
|
|
||||||
Public Sub McDownloadLiteLoader(DownloadInfo As DlLiteLoaderListEntry)
|
|
||||||
Try
|
|
||||||
Dim Id As String = DownloadInfo.Inherit
|
|
||||||
Dim Target As String = PathTemp & "Download\" & Id & "-Liteloader.jar"
|
|
||||||
Dim InstanceName As String = DownloadInfo.Inherit & "-LiteLoader"
|
|
||||||
Dim VersionFolder As String = McFolderSelected & "versions\" & InstanceName & "\"
|
|
||||||
|
|
||||||
'重复任务检查
|
|
||||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
||||||
If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
|
||||||
Hint("该版本正在下载中!", HintType.Red)
|
|
||||||
Return
|
|
||||||
Next
|
|
||||||
|
|
||||||
'已有版本检查
|
|
||||||
If File.Exists(VersionFolder & InstanceName & ".json") Then
|
|
||||||
If MyMsgBox("版本 " & InstanceName & " 已存在,是否重新下载?" & vbCrLf & "这会覆盖版本的 json 和 jar 文件,但不会影响版本隔离的文件。", "版本已存在", "继续", "取消") = 1 Then
|
|
||||||
File.Delete(VersionFolder & InstanceName & ".jar")
|
|
||||||
File.Delete(VersionFolder & InstanceName & ".json")
|
|
||||||
Else
|
|
||||||
Return
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
'启动
|
|
||||||
Dim Loader As New LoaderCombo(Of String)("LiteLoader " & Id & " 下载", McDownloadLiteLoaderLoader(DownloadInfo)) With {.OnStateChanged = AddressOf McInstallState}
|
|
||||||
Loader.Start(VersionFolder)
|
|
||||||
LoaderTaskbarAdd(Loader)
|
|
||||||
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
||||||
FrmMain.BtnExtraDownload.Ribble()
|
|
||||||
|
|
||||||
Catch ex As Exception
|
|
||||||
Log(ex, "开始 LiteLoader 下载失败", LogLevel.Feedback)
|
|
||||||
End Try
|
|
||||||
End Sub
|
|
||||||
Private Sub McDownloadLiteLoaderSave(DownloadInfo As DlLiteLoaderListEntry)
|
Private Sub McDownloadLiteLoaderSave(DownloadInfo As DlLiteLoaderListEntry)
|
||||||
Try
|
Try
|
||||||
Dim Id As String = DownloadInfo.Inherit
|
Dim Id As String = DownloadInfo.Inherit
|
||||||
@@ -896,11 +804,11 @@ Retry:
|
|||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 获取下载某个 LiteLoader 版本的加载器列表。
|
''' 获取下载某个 LiteLoader 版本的加载器列表。
|
||||||
|
''' 这不会补全所需的支持库文件,需要后续手动补全支持库。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Private Function McDownloadLiteLoaderLoader(DownloadInfo As DlLiteLoaderListEntry, Optional McFolder As String = Nothing, Optional ClientDownloadLoader As LoaderCombo(Of String) = Nothing, Optional FixLibrary As Boolean = True) As List(Of LoaderBase)
|
Private Function McDownloadLiteLoaderLoader(DownloadInfo As DlLiteLoaderListEntry, McFolder As String) As List(Of LoaderBase)
|
||||||
|
|
||||||
'参数初始化
|
'参数初始化
|
||||||
McFolder = If(McFolder, McFolderSelected)
|
|
||||||
Dim IsCustomFolder As Boolean = McFolder <> McFolderSelected
|
Dim IsCustomFolder As Boolean = McFolder <> McFolderSelected
|
||||||
Dim Id As String = DownloadInfo.Inherit
|
Dim Id As String = DownloadInfo.Inherit
|
||||||
Dim Target As String = PathTemp & "Download\" & Id & "-Liteloader.jar"
|
Dim Target As String = PathTemp & "Download\" & Id & "-Liteloader.jar"
|
||||||
@@ -908,14 +816,6 @@ Retry:
|
|||||||
Dim VersionFolder As String = McFolder & "versions\" & VersionName & "\"
|
Dim VersionFolder As String = McFolder & "versions\" & VersionName & "\"
|
||||||
Dim Loaders As New List(Of LoaderBase)
|
Dim Loaders As New List(Of LoaderBase)
|
||||||
|
|
||||||
'启动依赖版本的下载
|
|
||||||
If ClientDownloadLoader Is Nothing Then
|
|
||||||
Loaders.Add(New LoaderTask(Of String, String)("启动 LiteLoader 依赖版本下载",
|
|
||||||
Sub()
|
|
||||||
If IsCustomFolder Then Throw New Exception("如果没有指定原版下载器,则不能指定 MC 安装文件夹")
|
|
||||||
ClientDownloadLoader = McDownloadClient(NetPreDownloadBehaviour.ExitWhileExistsOrDownloading, DownloadInfo.Inherit)
|
|
||||||
End Sub) With {.ProgressWeight = 0.2, .Show = False, .Block = False})
|
|
||||||
End If
|
|
||||||
'安装
|
'安装
|
||||||
Loaders.Add(New LoaderTask(Of String, String)("安装 LiteLoader",
|
Loaders.Add(New LoaderTask(Of String, String)("安装 LiteLoader",
|
||||||
Sub(Task As LoaderTask(Of String, String))
|
Sub(Task As LoaderTask(Of String, String))
|
||||||
@@ -941,12 +841,6 @@ Retry:
|
|||||||
Throw New Exception("安装新 LiteLoader 版本失败", ex)
|
Throw New Exception("安装新 LiteLoader 版本失败", ex)
|
||||||
End Try
|
End Try
|
||||||
End Sub) With {.ProgressWeight = 1})
|
End Sub) With {.ProgressWeight = 1})
|
||||||
'下载支持库
|
|
||||||
If FixLibrary Then
|
|
||||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析 LiteLoader 支持库文件",
|
|
||||||
Sub(Task) Task.Output = McLibNetFilesFromInstance(New McInstance(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
||||||
Loaders.Add(New LoaderDownload("下载 LiteLoader 支持库文件", New List(Of NetFile)) With {.ProgressWeight = 6})
|
|
||||||
End If
|
|
||||||
|
|
||||||
Return Loaders
|
Return Loaders
|
||||||
End Function
|
End Function
|
||||||
@@ -1236,7 +1130,7 @@ Retry:
|
|||||||
''' <summary>
|
''' <summary>
|
||||||
''' 获取下载某个 Forgelike 版本的加载器列表。
|
''' 获取下载某个 Forgelike 版本的加载器列表。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Private Function McDownloadForgelikeLoader(IsNeoForge As Boolean, LoaderVersion As String, NewInstanceName As String, Inherit As String, Optional Info As DlForgelikeEntry = Nothing, Optional McFolder As String = Nothing, Optional ClientDownloadLoader As LoaderCombo(Of String) = Nothing, Optional ClientFolder As String = Nothing) As List(Of LoaderBase)
|
Private Function McDownloadForgelikeLoader(IsNeoForge As Boolean, LoaderVersion As String, NewInstanceName As String, Inherit As String, Info As DlForgelikeEntry, McFolder As String, ClientDownloadLoader As LoaderCombo(Of String), ClientFolder As String) As List(Of LoaderBase)
|
||||||
|
|
||||||
'参数初始化
|
'参数初始化
|
||||||
McFolder = If(McFolder, McFolderSelected)
|
McFolder = If(McFolder, McFolderSelected)
|
||||||
@@ -1282,11 +1176,6 @@ Retry:
|
|||||||
'下载 Forgelike 主文件
|
'下载 Forgelike 主文件
|
||||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))($"准备下载 {LoaderName}",
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))($"准备下载 {LoaderName}",
|
||||||
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
||||||
'启动依赖版本的下载
|
|
||||||
If ClientDownloadLoader Is Nothing Then
|
|
||||||
If IsCustomFolder Then Throw New Exception("如果没有指定原版下载器,则不能指定 MC 安装文件夹")
|
|
||||||
ClientDownloadLoader = McDownloadClient(NetPreDownloadBehaviour.ExitWhileExistsOrDownloading, Inherit)
|
|
||||||
End If
|
|
||||||
'添加主文件下载
|
'添加主文件下载
|
||||||
Dim Files As New List(Of NetFile)
|
Dim Files As New List(Of NetFile)
|
||||||
If Info.IsNeoForge Then
|
If Info.IsNeoForge Then
|
||||||
@@ -1376,7 +1265,6 @@ Retry:
|
|||||||
#End Region
|
#End Region
|
||||||
#Region "原版文件"
|
#Region "原版文件"
|
||||||
'等待原版文件下载完成
|
'等待原版文件下载完成
|
||||||
If ClientDownloadLoader Is Nothing Then Return
|
|
||||||
Dim TargetLoaders As List(Of LoaderBase) =
|
Dim TargetLoaders As List(Of LoaderBase) =
|
||||||
ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
||||||
Where(Function(l) l.State <> LoadState.Finished).ToList()
|
Where(Function(l) l.State <> LoadState.Finished).ToList()
|
||||||
@@ -1823,11 +1711,11 @@ Retry:
|
|||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 获取下载某个 Fabric 版本的加载器列表。
|
''' 获取下载某个 Fabric 版本的加载器列表。
|
||||||
|
''' 这不会补全所需的支持库文件,需要后续手动补全支持库。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Private Function McDownloadFabricLoader(FabricVersion As String, MinecraftName As String, Optional McFolder As String = Nothing, Optional FixLibrary As Boolean = True) As List(Of LoaderBase)
|
Private Function McDownloadFabricLoader(FabricVersion As String, MinecraftName As String, McFolder As String) As List(Of LoaderBase)
|
||||||
|
|
||||||
'参数初始化
|
'参数初始化
|
||||||
McFolder = If(McFolder, McFolderSelected)
|
|
||||||
Dim IsCustomFolder As Boolean = McFolder <> McFolderSelected
|
Dim IsCustomFolder As Boolean = McFolder <> McFolderSelected
|
||||||
Dim Id As String = "fabric-loader-" & FabricVersion & "-" & MinecraftName
|
Dim Id As String = "fabric-loader-" & FabricVersion & "-" & MinecraftName
|
||||||
Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
|
Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
|
||||||
@@ -1837,26 +1725,13 @@ Retry:
|
|||||||
MinecraftName = MinecraftName.Replace("∞", "infinite") '放在 ID 后面避免影响版本文件夹名称
|
MinecraftName = MinecraftName.Replace("∞", "infinite") '放在 ID 后面避免影响版本文件夹名称
|
||||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("获取 Fabric 主文件下载地址",
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("获取 Fabric 主文件下载地址",
|
||||||
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
||||||
'启动依赖版本的下载
|
|
||||||
If FixLibrary Then
|
|
||||||
McDownloadClient(NetPreDownloadBehaviour.ExitWhileExistsOrDownloading, MinecraftName)
|
|
||||||
End If
|
|
||||||
Task.Progress = 0.5
|
|
||||||
'构造文件请求
|
|
||||||
Task.Output = New List(Of NetFile) From {New NetFile({
|
Task.Output = New List(Of NetFile) From {New NetFile({
|
||||||
"https://bmclapi2.bangbang93.com/fabric-meta/v2/versions/loader/" & MinecraftName & "/" & FabricVersion & "/profile/json",
|
"https://bmclapi2.bangbang93.com/fabric-meta/v2/versions/loader/" & MinecraftName & "/" & FabricVersion & "/profile/json",
|
||||||
"https://meta.fabricmc.net/v2/versions/loader/" & MinecraftName & "/" & FabricVersion & "/profile/json"
|
"https://meta.fabricmc.net/v2/versions/loader/" & MinecraftName & "/" & FabricVersion & "/profile/json"
|
||||||
}, VersionFolder & Id & ".json", New FileChecker(IsJson:=True))}
|
}, VersionFolder & Id & ".json", New FileChecker(IsJson:=True))} '构造文件请求
|
||||||
End Sub) With {.ProgressWeight = 0.5})
|
End Sub) With {.ProgressWeight = 0.5})
|
||||||
Loaders.Add(New LoaderDownload("下载 Fabric 主文件", New List(Of NetFile)) With {.ProgressWeight = 2.5})
|
Loaders.Add(New LoaderDownload("下载 Fabric 主文件", New List(Of NetFile)) With {.ProgressWeight = 2.5})
|
||||||
|
|
||||||
'下载支持库
|
|
||||||
If FixLibrary Then
|
|
||||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析 Fabric 支持库文件",
|
|
||||||
Sub(Task) Task.Output = McLibNetFilesFromInstance(New McInstance(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
||||||
Loaders.Add(New LoaderDownload("下载 Fabric 支持库文件", New List(Of NetFile)) With {.ProgressWeight = 8})
|
|
||||||
End If
|
|
||||||
|
|
||||||
Return Loaders
|
Return Loaders
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
@@ -2002,8 +1877,9 @@ Retry:
|
|||||||
Case LoadState.Finished
|
Case LoadState.Finished
|
||||||
WriteIni(McFolderSelected & "PCL.ini", "InstanceCache", "") '清空缓存(合并安装会先生成文件夹,这会在刷新时误判为可以使用缓存)
|
WriteIni(McFolderSelected & "PCL.ini", "InstanceCache", "") '清空缓存(合并安装会先生成文件夹,这会在刷新时误判为可以使用缓存)
|
||||||
Hint(Loader.Name & "成功!", HintType.Green)
|
Hint(Loader.Name & "成功!", HintType.Green)
|
||||||
|
'TODO: 自动选择安装成功的版本
|
||||||
Case LoadState.Failed
|
Case LoadState.Failed
|
||||||
Hint(Loader.Name & "失败:" & Loader.Error.GetBrief(), HintType.Red)
|
MyMsgBox(Loader.Error.GetDetail, Loader.Name & "失败", IsWarn:=True)
|
||||||
Case LoadState.Interrupted
|
Case LoadState.Interrupted
|
||||||
Hint(Loader.Name & "已取消!", HintType.Blue)
|
Hint(Loader.Name & "已取消!", HintType.Blue)
|
||||||
Case LoadState.Loading
|
Case LoadState.Loading
|
||||||
@@ -2135,7 +2011,7 @@ Retry:
|
|||||||
LoaderList.Add(New LoaderCombo(Of String)("下载 OptiFine " & Request.OptiFineEntry.DisplayName, McDownloadOptiFineSaveLoader(Request.OptiFineEntry, OptiFineFolder & Request.OptiFineEntry.FileName)) With {.Show = False, .ProgressWeight = 16,
|
LoaderList.Add(New LoaderCombo(Of String)("下载 OptiFine " & Request.OptiFineEntry.DisplayName, McDownloadOptiFineSaveLoader(Request.OptiFineEntry, OptiFineFolder & Request.OptiFineEntry.FileName)) With {.Show = False, .ProgressWeight = 16,
|
||||||
.Block = Request.ForgeVersion Is Nothing AndAlso Request.NeoForgeVersion Is Nothing AndAlso Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing})
|
.Block = Request.ForgeVersion Is Nothing AndAlso Request.NeoForgeVersion Is Nothing AndAlso Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing})
|
||||||
Else
|
Else
|
||||||
LoaderList.Add(New LoaderCombo(Of String)("下载 OptiFine " & Request.OptiFineEntry.DisplayName, McDownloadOptiFineLoader(Request.OptiFineEntry, TempMcFolder, ClientLoader, Request.VersionFolder, False)) With {.Show = False, .ProgressWeight = 24,
|
LoaderList.Add(New LoaderCombo(Of String)("下载 OptiFine " & Request.OptiFineEntry.DisplayName, McDownloadOptiFineLoader(Request.OptiFineEntry, TempMcFolder, ClientLoader, Request.VersionFolder)) With {.Show = False, .ProgressWeight = 24,
|
||||||
.Block = Request.ForgeVersion Is Nothing AndAlso Request.NeoForgeVersion Is Nothing AndAlso Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing})
|
.Block = Request.ForgeVersion Is Nothing AndAlso Request.NeoForgeVersion Is Nothing AndAlso Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing})
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
@@ -2151,12 +2027,12 @@ Retry:
|
|||||||
End If
|
End If
|
||||||
'LiteLoader
|
'LiteLoader
|
||||||
If Request.LiteLoaderEntry IsNot Nothing Then
|
If Request.LiteLoaderEntry IsNot Nothing Then
|
||||||
LoaderList.Add(New LoaderCombo(Of String)("下载 LiteLoader " & Request.MinecraftName, McDownloadLiteLoaderLoader(Request.LiteLoaderEntry, TempMcFolder, ClientLoader, False)) With {.Show = False, .ProgressWeight = 1,
|
LoaderList.Add(New LoaderCombo(Of String)("下载 LiteLoader " & Request.MinecraftName, McDownloadLiteLoaderLoader(Request.LiteLoaderEntry, TempMcFolder)) With {.Show = False, .ProgressWeight = 1,
|
||||||
.Block = Request.FabricVersion Is Nothing})
|
.Block = Request.FabricVersion Is Nothing})
|
||||||
End If
|
End If
|
||||||
'Fabric
|
'Fabric
|
||||||
If Request.FabricVersion IsNot Nothing Then
|
If Request.FabricVersion IsNot Nothing Then
|
||||||
LoaderList.Add(New LoaderCombo(Of String)("下载 Fabric " & Request.FabricVersion, McDownloadFabricLoader(Request.FabricVersion, Request.MinecraftName, TempMcFolder, False)) With {.Show = False, .ProgressWeight = 2,
|
LoaderList.Add(New LoaderCombo(Of String)("下载 Fabric " & Request.FabricVersion, McDownloadFabricLoader(Request.FabricVersion, Request.MinecraftName, TempMcFolder)) With {.Show = False, .ProgressWeight = 2,
|
||||||
.Block = True})
|
.Block = True})
|
||||||
End If
|
End If
|
||||||
'合并安装
|
'合并安装
|
||||||
|
|||||||
@@ -676,7 +676,7 @@ Public Class PageInstanceExport
|
|||||||
'首次压缩整合包
|
'首次压缩整合包
|
||||||
ZipFile.CreateFromDirectory(CacheFolder & "modpack\", CacheFolder & "modpack.mrpack")
|
ZipFile.CreateFromDirectory(CacheFolder & "modpack\", CacheFolder & "modpack.mrpack")
|
||||||
Loader.Progress = 0.5
|
Loader.Progress = 0.5
|
||||||
Directory.Delete(CacheFolder & "modpack\", True)
|
DeleteDirectory(CacheFolder & "modpack\")
|
||||||
Loader.Progress = 0.6
|
Loader.Progress = 0.6
|
||||||
'二次压缩整合包
|
'二次压缩整合包
|
||||||
ZipFile.CreateFromDirectory(CacheFolder, PackPath)
|
ZipFile.CreateFromDirectory(CacheFolder, PackPath)
|
||||||
@@ -686,7 +686,7 @@ Public Class PageInstanceExport
|
|||||||
ZipFile.CreateFromDirectory(CacheFolder & "modpack\", PackPath)
|
ZipFile.CreateFromDirectory(CacheFolder & "modpack\", PackPath)
|
||||||
Loader.Progress = 0.8
|
Loader.Progress = 0.8
|
||||||
End If
|
End If
|
||||||
Directory.Delete(CacheFolder, True)
|
DeleteDirectory(CacheFolder, True)
|
||||||
OpenExplorer(PackPath)
|
OpenExplorer(PackPath)
|
||||||
End Sub) With {.ProgressWeight = 6})
|
End Sub) With {.ProgressWeight = 6})
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,7 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="le" />
|
<TextBlock Margin="0,1.5,6,0" Text="le" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="vv" />
|
<TextBlock Margin="0,1.5,6,0" Text="vv" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="雨" />
|
<TextBlock Margin="0,1.5,6,0" Text="雨" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="辰" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="李" />
|
<TextBlock Margin="0,1.5,6,0" Text="李" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="莫" />
|
<TextBlock Margin="0,1.5,6,0" Text="莫" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="尊" />
|
<TextBlock Margin="0,1.5,6,0" Text="尊" />
|
||||||
@@ -218,6 +219,7 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="颜峰" />
|
<TextBlock Margin="0,1.5,6,0" Text="颜峰" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="符符" />
|
<TextBlock Margin="0,1.5,6,0" Text="符符" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="莫林" />
|
<TextBlock Margin="0,1.5,6,0" Text="莫林" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="Gun" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="唐匡" />
|
<TextBlock Margin="0,1.5,6,0" Text="唐匡" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="腐蠱" />
|
<TextBlock Margin="0,1.5,6,0" Text="腐蠱" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="别打" />
|
<TextBlock Margin="0,1.5,6,0" Text="别打" />
|
||||||
@@ -226,6 +228,7 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="sadv" />
|
<TextBlock Margin="0,1.5,6,0" Text="sadv" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="gate" />
|
<TextBlock Margin="0,1.5,6,0" Text="gate" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="king" />
|
<TextBlock Margin="0,1.5,6,0" Text="king" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="ZHH" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Ezzo" />
|
<TextBlock Margin="0,1.5,6,0" Text="Ezzo" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="^O^" />
|
<TextBlock Margin="0,1.5,6,0" Text="^O^" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="HJYz" />
|
<TextBlock Margin="0,1.5,6,0" Text="HJYz" />
|
||||||
@@ -249,6 +252,7 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="ZDHK" />
|
<TextBlock Margin="0,1.5,6,0" Text="ZDHK" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="ziqian" />
|
<TextBlock Margin="0,1.5,6,0" Text="ziqian" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="调试器" />
|
<TextBlock Margin="0,1.5,6,0" Text="调试器" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="xuque" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="张卿予" />
|
<TextBlock Margin="0,1.5,6,0" Text="张卿予" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="剑骨头" />
|
<TextBlock Margin="0,1.5,6,0" Text="剑骨头" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="栀熙阳" />
|
<TextBlock Margin="0,1.5,6,0" Text="栀熙阳" />
|
||||||
@@ -311,8 +315,10 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="Sphinx" />
|
<TextBlock Margin="0,1.5,6,0" Text="Sphinx" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="kimma" />
|
<TextBlock Margin="0,1.5,6,0" Text="kimma" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Jupiter" />
|
<TextBlock Margin="0,1.5,6,0" Text="Jupiter" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="Corpus" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Thgink" />
|
<TextBlock Margin="0,1.5,6,0" Text="Thgink" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="forever" />
|
<TextBlock Margin="0,1.5,6,0" Text="forever" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="一哥3.0" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="114514" />
|
<TextBlock Margin="0,1.5,6,0" Text="114514" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="YEYEYE" />
|
<TextBlock Margin="0,1.5,6,0" Text="YEYEYE" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Phuket" />
|
<TextBlock Margin="0,1.5,6,0" Text="Phuket" />
|
||||||
@@ -322,6 +328,7 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="kvmvvx" />
|
<TextBlock Margin="0,1.5,6,0" Text="kvmvvx" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="sabrina" />
|
<TextBlock Margin="0,1.5,6,0" Text="sabrina" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="XIruotE" />
|
<TextBlock Margin="0,1.5,6,0" Text="XIruotE" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="Dr.Ayin" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="ling141" />
|
<TextBlock Margin="0,1.5,6,0" Text="ling141" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Decade" />
|
<TextBlock Margin="0,1.5,6,0" Text="Decade" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="laobide" />
|
<TextBlock Margin="0,1.5,6,0" Text="laobide" />
|
||||||
@@ -331,16 +338,19 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="饺子MC" />
|
<TextBlock Margin="0,1.5,6,0" Text="饺子MC" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="kill1122" />
|
<TextBlock Margin="0,1.5,6,0" Text="kill1122" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="猫yi巴草" />
|
<TextBlock Margin="0,1.5,6,0" Text="猫yi巴草" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="goblind" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="秦爅QIN" />
|
<TextBlock Margin="0,1.5,6,0" Text="秦爅QIN" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="weather" />
|
<TextBlock Margin="0,1.5,6,0" Text="weather" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="qwptpw" />
|
<TextBlock Margin="0,1.5,6,0" Text="qwptpw" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="RedLink" />
|
<TextBlock Margin="0,1.5,6,0" Text="RedLink" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="SkyArea" />
|
<TextBlock Margin="0,1.5,6,0" Text="SkyArea" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="奶酪Jzy_" />
|
<TextBlock Margin="0,1.5,6,0" Text="奶酪Jzy_" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="筱星辰⭐" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Starying" />
|
<TextBlock Margin="0,1.5,6,0" Text="Starying" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="wwwww" />
|
<TextBlock Margin="0,1.5,6,0" Text="wwwww" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="疾驰火车" />
|
<TextBlock Margin="0,1.5,6,0" Text="疾驰火车" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="鸿星天帝" />
|
<TextBlock Margin="0,1.5,6,0" Text="鸿星天帝" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="云映鹤影" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="金禾向暖" />
|
<TextBlock Margin="0,1.5,6,0" Text="金禾向暖" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="只见伊人" />
|
<TextBlock Margin="0,1.5,6,0" Text="只见伊人" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="苏家阿辰" />
|
<TextBlock Margin="0,1.5,6,0" Text="苏家阿辰" />
|
||||||
@@ -444,6 +454,7 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="BeiWu_CN" />
|
<TextBlock Margin="0,1.5,6,0" Text="BeiWu_CN" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="289775340" />
|
<TextBlock Margin="0,1.5,6,0" Text="289775340" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="baicai1339" />
|
<TextBlock Margin="0,1.5,6,0" Text="baicai1339" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="星野源.小毅" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="mreaaaaay" />
|
<TextBlock Margin="0,1.5,6,0" Text="mreaaaaay" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Swampday" />
|
<TextBlock Margin="0,1.5,6,0" Text="Swampday" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Kizuner630" />
|
<TextBlock Margin="0,1.5,6,0" Text="Kizuner630" />
|
||||||
@@ -491,6 +502,7 @@
|
|||||||
<TextBlock Margin="0,1.5,6,0" Text="MrFudgeSquare" />
|
<TextBlock Margin="0,1.5,6,0" Text="MrFudgeSquare" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="WeimingFanzhe" />
|
<TextBlock Margin="0,1.5,6,0" Text="WeimingFanzhe" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="PolarPanda2333" />
|
<TextBlock Margin="0,1.5,6,0" Text="PolarPanda2333" />
|
||||||
|
<TextBlock Margin="0,1.5,6,0" Text="大笨蛋你在里面吗" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="Black_Banana_Cat" />
|
<TextBlock Margin="0,1.5,6,0" Text="Black_Banana_Cat" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="山有扶苏,隰有荷华" />
|
<TextBlock Margin="0,1.5,6,0" Text="山有扶苏,隰有荷华" />
|
||||||
<TextBlock Margin="0,1.5,6,0" Text="月亮呼了星星一巴掌" />
|
<TextBlock Margin="0,1.5,6,0" Text="月亮呼了星星一巴掌" />
|
||||||
|
|||||||
@@ -286,7 +286,7 @@
|
|||||||
If File.Exists(Target.Location & "PCL.ini") Then File.Delete(Target.Location & "PCL.ini")
|
If File.Exists(Target.Location & "PCL.ini") Then File.Delete(Target.Location & "PCL.ini")
|
||||||
If Directory.Exists(Target.Location & "versions\") Then
|
If Directory.Exists(Target.Location & "versions\") Then
|
||||||
For Each InstanceInfo In New DirectoryInfo(Target.Location & "versions\").EnumerateDirectories
|
For Each InstanceInfo In New DirectoryInfo(Target.Location & "versions\").EnumerateDirectories
|
||||||
If Directory.Exists(InstanceInfo.FullName & "\PCL\") Then Directory.Delete(InstanceInfo.FullName & "\PCL\", True)
|
If Directory.Exists(InstanceInfo.FullName & "\PCL\") Then DeleteDirectory(InstanceInfo.FullName & "\PCL\", True)
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
Case 2
|
Case 2
|
||||||
|
|||||||
Reference in New Issue
Block a user