|
@@ -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,
|
|
|
|
|
- Encoding:=New UTF8Encoding(False), Timeout:=15000, Accept:="text/html", SimulateBrowserHeaders:=True)
|
|
|
|
|
|
|
+ PageData = NetRequestByClientRetry("https://optifine.net/adloadx?f=" & DownloadInfo.FileName,
|
|
|
|
|
+ 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,
|
|
|
|
|
- Encoding:=New UTF8Encoding(False), Timeout:=15000, Accept:="text/html", SimulateBrowserHeaders:=True)
|
|
|
|
|
|
|
+ PageData = NetRequestByClientRetry("https://optifine.net/adloadx?f=" & DownloadInfo.FileName,
|
|
|
|
|
+ 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
|
|
|
'合并安装
|
|
'合并安装
|