|
|
@@ -1,4 +1,5 @@
|
|
|
Imports System.IO.Compression
|
|
|
+Imports System.Net.Http
|
|
|
|
|
|
Public Module ModDownloadLib
|
|
|
|
|
|
@@ -28,15 +29,12 @@ Public Module ModDownloadLib
|
|
|
Dim VersionFolder As String = PathMcFolder & "versions\" & Id & "\"
|
|
|
|
|
|
'重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = "Minecraft " & Id & " 下载" Then
|
|
|
- If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Return LoaderTaskbar(i)
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Return LoaderTaskbar(i)
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
+ If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For
|
|
|
+ If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Return OngoingLoader
|
|
|
+ Hint("该版本正在下载中!", HintType.Critical)
|
|
|
+ Return OngoingLoader
|
|
|
+ Next
|
|
|
|
|
|
'已有版本检查
|
|
|
If Behaviour <> NetPreDownloadBehaviour.IgnoreCheck AndAlso File.Exists(VersionFolder & Id & ".json") AndAlso File.Exists(VersionFolder & Id & ".jar") Then
|
|
|
@@ -62,50 +60,6 @@ Public Module ModDownloadLib
|
|
|
Return Nothing
|
|
|
End Try
|
|
|
End Function
|
|
|
- ''' <summary>
|
|
|
- ''' 保存某个 Minecraft 版本的核心文件(仅 Json 与核心 Jar)。
|
|
|
- ''' </summary>
|
|
|
- ''' <param name="Id">所下载的 Minecraft 的版本名。</param>
|
|
|
- ''' <param name="JsonUrl">Json 文件的 Mojang 官方地址。</param>
|
|
|
- Public Sub McDownloadClientCore(Id As String, JsonUrl As String, Behaviour As NetPreDownloadBehaviour)
|
|
|
- Try
|
|
|
- Dim VersionFolder As String = SelectFolder()
|
|
|
- If Not VersionFolder.Contains("\") Then Exit Sub
|
|
|
- VersionFolder = VersionFolder & Id & "\"
|
|
|
-
|
|
|
- '重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = "Minecraft " & Id & " 下载" Then
|
|
|
- If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Exit Sub
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
-
|
|
|
- Dim Loaders As New List(Of LoaderBase)
|
|
|
- '下载版本 Json 文件
|
|
|
- Loaders.Add(New LoaderDownload("下载版本 json 文件", New List(Of NetFile) From {
|
|
|
- New NetFile(DlSourceLauncherOrMetaGet(JsonUrl), VersionFolder & Id & ".json", New FileChecker(CanUseExistsFile:=False, IsJson:=True))
|
|
|
- }) With {.ProgressWeight = 2})
|
|
|
- '获取支持库文件地址
|
|
|
- Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析核心 jar 文件下载地址",
|
|
|
- Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionFolder), True)) With {.ProgressWeight = 0.5, .Show = False})
|
|
|
- '下载支持库文件
|
|
|
- Loaders.Add(New LoaderDownload("下载核心 jar 文件", New List(Of NetFile)) With {.ProgressWeight = 5})
|
|
|
-
|
|
|
- '启动
|
|
|
- Dim Loader As New LoaderCombo(Of String)("Minecraft " & Id & " 下载", Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
|
|
|
- Loader.Start(Id)
|
|
|
- LoaderTaskbarAdd(Loader)
|
|
|
- FrmMain.BtnExtraDownload.ShowRefresh()
|
|
|
- FrmMain.BtnExtraDownload.Ribble()
|
|
|
-
|
|
|
- Catch ex As Exception
|
|
|
- Log(ex, "开始 Minecraft 下载失败", LogLevel.Feedback)
|
|
|
- End Try
|
|
|
- End Sub
|
|
|
|
|
|
''' <summary>
|
|
|
''' 获取下载某个 Minecraft 版本的加载器列表。
|
|
|
@@ -161,7 +115,7 @@ Public Module ModDownloadLib
|
|
|
LoadersAssets.Add(New LoaderDownload("下载资源文件索引(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 3, .Show = False})
|
|
|
LoadersAssets.Add(New LoaderTask(Of String, List(Of NetFile))("分析所需资源文件(副加载器)",
|
|
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
|
|
- Task.Output = McAssetsFixList(McAssetsGetIndexName(New McVersion(VersionFolder)), True, Task)
|
|
|
+ Task.Output = McAssetsFixList(New McVersion(VersionFolder), True, Task)
|
|
|
End Sub) With {.ProgressWeight = 3, .Show = False})
|
|
|
LoadersAssets.Add(New LoaderDownload("下载资源文件(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 14, .Show = False})
|
|
|
Loaders.Add(New LoaderCombo(Of String)("下载原版资源文件", LoadersAssets) With {.Block = False, .ProgressWeight = 21})
|
|
|
@@ -213,7 +167,12 @@ Public Module ModDownloadLib
|
|
|
ToolTipService.SetVerticalOffset(BtnInfo, 30)
|
|
|
ToolTipService.SetHorizontalOffset(BtnInfo, 2)
|
|
|
AddHandler BtnInfo.Click, AddressOf McDownloadMenuLog
|
|
|
- sender.Buttons = {BtnInfo}
|
|
|
+ Dim BtnServer As New MyIconButton With {.LogoScale = 1, .Logo = Logo.IconButtonServer, .ToolTip = "下载服务端"}
|
|
|
+ ToolTipService.SetPlacement(BtnServer, Primitives.PlacementMode.Center)
|
|
|
+ ToolTipService.SetVerticalOffset(BtnServer, 30)
|
|
|
+ ToolTipService.SetHorizontalOffset(BtnServer, 2)
|
|
|
+ AddHandler BtnServer.Click, AddressOf McDownloadMenuSaveServer
|
|
|
+ sender.Buttons = {BtnServer, BtnInfo}
|
|
|
End Sub
|
|
|
Private Sub McDownloadMenuBuild(sender As Object, e As EventArgs)
|
|
|
Dim BtnSave As New MyIconButton With {.Logo = Logo.IconButtonSave, .ToolTip = "另存为"}
|
|
|
@@ -226,7 +185,12 @@ Public Module ModDownloadLib
|
|
|
ToolTipService.SetVerticalOffset(BtnInfo, 30)
|
|
|
ToolTipService.SetHorizontalOffset(BtnInfo, 2)
|
|
|
AddHandler BtnInfo.Click, AddressOf McDownloadMenuLog
|
|
|
- sender.Buttons = {BtnSave, BtnInfo}
|
|
|
+ Dim BtnServer As New MyIconButton With {.LogoScale = 1, .Logo = Logo.IconButtonServer, .ToolTip = "下载服务端"}
|
|
|
+ ToolTipService.SetPlacement(BtnServer, Primitives.PlacementMode.Center)
|
|
|
+ ToolTipService.SetVerticalOffset(BtnServer, 30)
|
|
|
+ ToolTipService.SetHorizontalOffset(BtnServer, 2)
|
|
|
+ AddHandler BtnServer.Click, AddressOf McDownloadMenuSaveServer
|
|
|
+ sender.Buttons = {BtnSave, BtnInfo, BtnServer}
|
|
|
End Sub
|
|
|
Private Sub McDownloadMenuLog(sender As Object, e As RoutedEventArgs)
|
|
|
Dim Version As JToken
|
|
|
@@ -239,6 +203,83 @@ Public Module ModDownloadLib
|
|
|
End If
|
|
|
McUpdateLogShow(Version)
|
|
|
End Sub
|
|
|
+ Private Sub McDownloadMenuSaveServer(sender As Object, e As RoutedEventArgs)
|
|
|
+ Dim Version As MyListItem
|
|
|
+ If TypeOf sender Is MyListItem Then
|
|
|
+ Version = sender
|
|
|
+ ElseIf TypeOf sender.Parent Is MyListItem Then
|
|
|
+ Version = sender.Parent
|
|
|
+ Else
|
|
|
+ Version = sender.Parent.Parent
|
|
|
+ End If
|
|
|
+ Try
|
|
|
+ Dim Id = Version.Title
|
|
|
+ Dim JsonUrl = Version.Tag("url").ToString
|
|
|
+ Dim VersionFolder As String = SelectFolder()
|
|
|
+ If Not VersionFolder.Contains("\") Then Exit Sub
|
|
|
+ VersionFolder = VersionFolder & Id & "\"
|
|
|
+
|
|
|
+ '重复任务检查
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
+ If OngoingLoader.Name <> $"Minecraft {Id} 服务端下载" Then Continue For
|
|
|
+ Hint("该服务端正在下载中!", HintType.Critical)
|
|
|
+ Exit Sub
|
|
|
+ Next
|
|
|
+
|
|
|
+ Dim Loaders As New List(Of LoaderBase)
|
|
|
+ '下载版本 JSON 文件
|
|
|
+ Loaders.Add(New LoaderDownload("下载版本 JSON 文件", New List(Of NetFile) From {
|
|
|
+ New NetFile(DlSourceLauncherOrMetaGet(JsonUrl), VersionFolder & Id & ".json", New FileChecker(CanUseExistsFile:=False, IsJson:=True))
|
|
|
+ }) With {.ProgressWeight = 2})
|
|
|
+ '构建服务端
|
|
|
+ Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("构建服务端",
|
|
|
+ Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
|
|
+ '分析服务端 JAR 文件下载地址
|
|
|
+ Dim McVersion As New McVersion(VersionFolder)
|
|
|
+ If McVersion.JsonObject("downloads") Is Nothing OrElse McVersion.JsonObject("downloads")("server") Is Nothing OrElse McVersion.JsonObject("downloads")("server")("url") Is Nothing Then
|
|
|
+ File.Delete(VersionFolder & Id & ".json")
|
|
|
+ If Not New DirectoryInfo(VersionFolder).GetFileSystemInfos.Any() Then Directory.Delete(VersionFolder)
|
|
|
+ Task.Output = New List(Of NetFile)
|
|
|
+ Hint($"Mojang 没有给 Minecraft {Id} 提供官方服务端下载,没法下,撤退!", HintType.Critical)
|
|
|
+ Thread.Sleep(2000) '等玩家把上一个提示看完
|
|
|
+ Task.Abort()
|
|
|
+ Exit Sub
|
|
|
+ End If
|
|
|
+ Dim JarUrl As String = McVersion.JsonObject("downloads")("server")("url")
|
|
|
+ Dim Checker As New FileChecker(MinSize:=1024, ActualSize:=If(McVersion.JsonObject("downloads")("server")("size"), -1), Hash:=McVersion.JsonObject("downloads")("server")("sha1"))
|
|
|
+ Task.Output = New List(Of NetFile) From {New NetFile(DlSourceLauncherOrMetaGet(JarUrl), VersionFolder & Id & "-server.jar", Checker)}
|
|
|
+ '添加启动脚本
|
|
|
+ Dim Bat As String =
|
|
|
+$"@echo off
|
|
|
+title {Id} 原版服务端
|
|
|
+echo 如果服务端立即停止,请右键编辑该脚本,将下一行开头的 java 替换为适合该 Minecraft 版本的完整 java.exe 的路径。
|
|
|
+echo 你可以在 PCL 的 [设置 → 启动选项] 中查看已安装的 java,所需的 java.exe 一般在其中的 bin 文件夹下。
|
|
|
+echo ------------------------------
|
|
|
+echo 如果提示 ""You need to agree to the EULA in order to run the server"",请打开 eula.txt,按说明阅读并同意 Minecraft EULA 后,将该文件最后一行中的 eula=false 改为 eula=true。
|
|
|
+echo ------------------------------
|
|
|
+""java"" -server -XX:+UseG1GC -Xmx4096M -Xms1024M -XX:+UseCompressedOops -jar {Id}-server.jar nogui
|
|
|
+echo ----------------------
|
|
|
+echo 服务端已停止。
|
|
|
+pause"
|
|
|
+ WriteFile(VersionFolder & "Launch Server.bat", Bat,
|
|
|
+ Encoding:=If(Encoding.Default.Equals(Encoding.UTF8), Encoding.UTF8, Encoding.GetEncoding("GB18030")))
|
|
|
+ '删除版本 JSON
|
|
|
+ File.Delete(VersionFolder & Id & ".json")
|
|
|
+ End Sub
|
|
|
+ ) With {.ProgressWeight = 0.5, .Show = False})
|
|
|
+ '下载服务端文件
|
|
|
+ Loaders.Add(New LoaderDownload("下载服务端文件", New List(Of NetFile)) With {.ProgressWeight = 5})
|
|
|
+
|
|
|
+ '启动
|
|
|
+ Dim Loader As New LoaderCombo(Of String)("Minecraft " & Id & " 服务端下载", Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
|
|
|
+ Loader.Start(Id)
|
|
|
+ LoaderTaskbarAdd(Loader)
|
|
|
+ FrmMain.BtnExtraDownload.ShowRefresh()
|
|
|
+ FrmMain.BtnExtraDownload.Ribble()
|
|
|
+ Catch ex As Exception
|
|
|
+ Log(ex, "开始 Minecraft 服务端下载失败", LogLevel.Feedback)
|
|
|
+ End Try
|
|
|
+ End Sub
|
|
|
Public Sub McDownloadMenuSave(sender As Object, e As RoutedEventArgs)
|
|
|
Dim Version As MyListItem
|
|
|
If TypeOf sender Is MyListItem Then
|
|
|
@@ -248,7 +289,41 @@ Public Module ModDownloadLib
|
|
|
Else
|
|
|
Version = sender.Parent.Parent
|
|
|
End If
|
|
|
- McDownloadClientCore(Version.Title, Version.Tag("url").ToString, NetPreDownloadBehaviour.HintWhileExists)
|
|
|
+ Try
|
|
|
+ Dim Id = Version.Title
|
|
|
+ Dim JsonUrl = Version.Tag("url").ToString
|
|
|
+ Dim VersionFolder As String = SelectFolder()
|
|
|
+ If Not VersionFolder.Contains("\") Then Exit Sub
|
|
|
+ VersionFolder = VersionFolder & Id & "\"
|
|
|
+
|
|
|
+ '重复任务检查
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
+ If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For
|
|
|
+ Hint("该版本正在下载中!", HintType.Critical)
|
|
|
+ Exit Sub
|
|
|
+ Next
|
|
|
+
|
|
|
+ Dim Loaders As New List(Of LoaderBase)
|
|
|
+ '下载版本 JSON 文件
|
|
|
+ Loaders.Add(New LoaderDownload("下载版本 JSON 文件", New List(Of NetFile) From {
|
|
|
+ New NetFile(DlSourceLauncherOrMetaGet(JsonUrl), VersionFolder & Id & ".json", New FileChecker(CanUseExistsFile:=False, IsJson:=True))
|
|
|
+ }) With {.ProgressWeight = 2})
|
|
|
+ '获取支持库文件地址
|
|
|
+ Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析核心 JAR 文件下载地址",
|
|
|
+ Sub(Task) Task.Output = New List(Of NetFile) From {DlClientJarGet(New McVersion(VersionFolder), False)}
|
|
|
+ ) With {.ProgressWeight = 0.5, .Show = False})
|
|
|
+ '下载支持库文件
|
|
|
+ Loaders.Add(New LoaderDownload("下载核心 JAR 文件", New List(Of NetFile)) With {.ProgressWeight = 5})
|
|
|
+
|
|
|
+ '启动
|
|
|
+ Dim Loader As New LoaderCombo(Of String)("Minecraft " & Id & " 下载", Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
|
|
|
+ Loader.Start(Id)
|
|
|
+ LoaderTaskbarAdd(Loader)
|
|
|
+ FrmMain.BtnExtraDownload.ShowRefresh()
|
|
|
+ FrmMain.BtnExtraDownload.Ribble()
|
|
|
+ Catch ex As Exception
|
|
|
+ Log(ex, "开始 Minecraft 下载失败", LogLevel.Feedback)
|
|
|
+ End Try
|
|
|
End Sub
|
|
|
''' <summary>
|
|
|
''' 显示某 Minecraft 版本的更新日志。
|
|
|
@@ -316,46 +391,6 @@ Public Module ModDownloadLib
|
|
|
|
|
|
#Region "OptiFine 下载"
|
|
|
|
|
|
- Public Sub McDownloadOptiFine(DownloadInfo As DlOptiFineListEntry)
|
|
|
- Try
|
|
|
- Dim Id As String = DownloadInfo.NameVersion
|
|
|
- Dim VersionFolder As String = PathMcFolder & "versions\" & Id & "\"
|
|
|
- Dim IsNewVersion As Boolean = Val(DownloadInfo.Inherit.Split(".")(1)) >= 14
|
|
|
- Dim Target As String = If(IsNewVersion,
|
|
|
- PathTemp & "Cache\Code\" & DownloadInfo.NameVersion & "_" & GetUuid(),
|
|
|
- PathMcFolder & "libraries\optifine\OptiFine\" & DownloadInfo.NameFile.Replace("OptiFine_", "").Replace(".jar", "").Replace("preview_", "") & "\" & DownloadInfo.NameFile.Replace("OptiFine_", "OptiFine-").Replace("preview_", ""))
|
|
|
-
|
|
|
- '重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = "OptiFine " & DownloadInfo.NameDisplay & " 下载" Then
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
-
|
|
|
- '已有版本检查
|
|
|
- If File.Exists(VersionFolder & Id & ".json") Then
|
|
|
- If MyMsgBox("版本 " & Id & " 已存在,是否重新下载?" & vbCrLf & "这会覆盖版本的 json 和 jar 文件,但不会影响版本隔离的文件。", "版本已存在", "继续", "取消") = 1 Then
|
|
|
- File.Delete(VersionFolder & Id & ".jar")
|
|
|
- File.Delete(VersionFolder & Id & ".json")
|
|
|
- Else
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- End If
|
|
|
-
|
|
|
- '启动
|
|
|
- Dim Loader As New LoaderCombo(Of String)("OptiFine " & DownloadInfo.NameDisplay & " 下载", McDownloadOptiFineLoader(DownloadInfo)) With {.OnStateChanged = AddressOf McInstallState}
|
|
|
- Loader.Start(VersionFolder)
|
|
|
- LoaderTaskbarAdd(Loader)
|
|
|
- FrmMain.BtnExtraDownload.ShowRefresh()
|
|
|
- FrmMain.BtnExtraDownload.Ribble()
|
|
|
-
|
|
|
- Catch ex As Exception
|
|
|
- Log(ex, "开始 OptiFine 下载失败", LogLevel.Feedback)
|
|
|
- End Try
|
|
|
- End Sub
|
|
|
Private Sub McDownloadOptiFineSave(DownloadInfo As DlOptiFineListEntry)
|
|
|
Try
|
|
|
Dim Id As String = DownloadInfo.NameVersion
|
|
|
@@ -363,14 +398,11 @@ Public Module ModDownloadLib
|
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
|
|
|
|
'重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = "OptiFine " & DownloadInfo.NameDisplay & " 下载" Then
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
+ If OngoingLoader.Name <> $"OptiFine {DownloadInfo.NameDisplay} 下载" Then Continue For
|
|
|
+ Hint("该版本正在下载中!", HintType.Critical)
|
|
|
+ Exit Sub
|
|
|
+ Next
|
|
|
|
|
|
Dim Loader As New LoaderCombo(Of DlOptiFineListEntry)("OptiFine " & DownloadInfo.NameDisplay & " 下载", McDownloadOptiFineSaveLoader(DownloadInfo, Target)) With {.OnStateChanged = AddressOf DownloadStateSave}
|
|
|
Loader.Start(DownloadInfo)
|
|
|
@@ -408,7 +440,7 @@ Public Module ModDownloadLib
|
|
|
'添加 Java Wrapper 作为主 Jar
|
|
|
Dim Arguments As String
|
|
|
If UseJavaWrapper Then
|
|
|
- Arguments = $"-Doolloo.jlw.tmpdir=""{GetJavaWrapperDir()}"" -Duser.home=""{BaseMcFolderHome}"" -cp ""{Target}"" -jar ""{ExtractJavaWrapper()}"" optifine.Installer"
|
|
|
+ Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -Duser.home=""{BaseMcFolderHome}"" -cp ""{Target}"" -jar ""{ExtractJavaWrapper()}"" optifine.Installer"
|
|
|
Else
|
|
|
Arguments = $"-Duser.home=""{BaseMcFolderHome}"" -cp ""{Target}"" optifine.Installer"
|
|
|
End If
|
|
|
@@ -527,10 +559,12 @@ Public Module ModDownloadLib
|
|
|
Task.Progress = 0.1
|
|
|
Dim Sources As New List(Of String)
|
|
|
'BMCLAPI 源
|
|
|
+ Dim BmclapiInherit As String = DownloadInfo.Inherit
|
|
|
+ If BmclapiInherit = "1.8" OrElse BmclapiInherit = "1.9" Then BmclapiInherit &= ".0" '#4281
|
|
|
If DownloadInfo.IsPreview Then
|
|
|
- Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & DownloadInfo.Inherit & "/HD_U_" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", "").Replace(" ", "/"))
|
|
|
+ Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & BmclapiInherit & "/HD_U_" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", "").Replace(" ", "/"))
|
|
|
Else
|
|
|
- Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & DownloadInfo.Inherit & "/HD_U/" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", ""))
|
|
|
+ Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & BmclapiInherit & "/HD_U/" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", ""))
|
|
|
End If
|
|
|
'官方源
|
|
|
Dim PageData As String
|
|
|
@@ -538,12 +572,10 @@ Public Module ModDownloadLib
|
|
|
PageData = NetGetCodeByClient("https://optifine.net/adloadx?f=" & DownloadInfo.NameFile, New UTF8Encoding(False), 15000, "text/html", True)
|
|
|
Task.Progress = 0.8
|
|
|
Sources.Add("https://optifine.net/" & RegexSearch(PageData, "downloadx\?f=[^""']+")(0))
|
|
|
- Log("[Download] OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址:" & Sources(0))
|
|
|
+ Log("[Download] OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址:" & Sources.Last)
|
|
|
Catch ex As Exception
|
|
|
Log(ex, "获取 OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址失败")
|
|
|
End Try
|
|
|
- 'OptiFine 中文镜像源
|
|
|
- Sources.Add("https://optifine.cn/download/" & DownloadInfo.NameFile)
|
|
|
'构造文件请求
|
|
|
Task.Output = New List(Of NetFile) From {New NetFile(Sources.ToArray, Target, New FileChecker(MinSize:=300 * 1024))}
|
|
|
End Sub) With {.ProgressWeight = 8})
|
|
|
@@ -690,10 +722,12 @@ Retry:
|
|
|
Sub(Task As LoaderTask(Of DlOptiFineListEntry, List(Of NetFile)))
|
|
|
Dim Sources As New List(Of String)
|
|
|
'BMCLAPI 源
|
|
|
+ Dim BmclapiInherit As String = DownloadInfo.Inherit
|
|
|
+ If BmclapiInherit = "1.8" OrElse BmclapiInherit = "1.9" Then BmclapiInherit &= ".0" '#4281
|
|
|
If DownloadInfo.IsPreview Then
|
|
|
- Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & DownloadInfo.Inherit & "/HD_U_" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", "").Replace(" ", "/"))
|
|
|
+ Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & BmclapiInherit & "/HD_U_" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", "").Replace(" ", "/"))
|
|
|
Else
|
|
|
- Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & DownloadInfo.Inherit & "/HD_U/" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", ""))
|
|
|
+ Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & BmclapiInherit & "/HD_U/" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", ""))
|
|
|
End If
|
|
|
'官方源
|
|
|
Dim PageData As String
|
|
|
@@ -701,7 +735,7 @@ Retry:
|
|
|
PageData = NetGetCodeByClient("https://optifine.net/adloadx?f=" & DownloadInfo.NameFile, New UTF8Encoding(False), 15000, "text/html", True)
|
|
|
Task.Progress = 0.8
|
|
|
Sources.Add("https://optifine.net/" & RegexSearch(PageData, "downloadx\?f=[^""']+")(0))
|
|
|
- Log("[Download] OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址:" & Sources(0))
|
|
|
+ Log("[Download] OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址:" & Sources.Last)
|
|
|
Catch ex As Exception
|
|
|
Log(ex, "获取 OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址失败")
|
|
|
End Try
|
|
|
@@ -793,14 +827,11 @@ Retry:
|
|
|
Dim VersionFolder As String = PathMcFolder & "versions\" & VersionName & "\"
|
|
|
|
|
|
'重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = "LiteLoader " & Id & " 下载" Then
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
+ If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
|
|
+ Hint("该版本正在下载中!", HintType.Critical)
|
|
|
+ Exit Sub
|
|
|
+ Next
|
|
|
|
|
|
'已有版本检查
|
|
|
If File.Exists(VersionFolder & VersionName & ".json") Then
|
|
|
@@ -830,14 +861,11 @@ Retry:
|
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
|
|
|
|
'重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = "LiteLoader " & Id & " 下载" Then
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
+ If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
|
|
+ Hint("该版本正在下载中!", HintType.Critical)
|
|
|
+ Exit Sub
|
|
|
+ Next
|
|
|
|
|
|
'构造步骤加载器
|
|
|
Dim Loaders As New List(Of LoaderBase)
|
|
|
@@ -1007,73 +1035,6 @@ Retry:
|
|
|
|
|
|
#Region "Forgelike 下载"
|
|
|
|
|
|
- Public Sub McDownloadForgelike(Info As DlForgelikeEntry)
|
|
|
- '老版本提示
|
|
|
- If Not Info.IsNeoForge Then
|
|
|
- Dim ForgeInfo As DlForgeVersionEntry = Info
|
|
|
- If ForgeInfo.Category = "client" Then
|
|
|
- If MyMsgBox("该 Forge 版本过于古老,PCL 暂不支持该版本的自动安装。" & vbCrLf &
|
|
|
- "若你仍然希望继续,PCL 将把安装程序下载到你指定的位置,但不会进行安装。",
|
|
|
- "版本过老", "继续", "取消") = 1 Then
|
|
|
- McDownloadForgelikeSave(Info)
|
|
|
- End If
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- If ForgeInfo.Category = "universal" OrElse ForgeInfo.Inherit.StartsWithF("1.5") Then
|
|
|
- If MyMsgBox("该 Forge 版本过于古老,PCL 暂不支持该版本的自动安装。" & vbCrLf &
|
|
|
- "若你仍然希望继续,PCL 将把安装程序下载到你指定的位置,但不会进行安装。",
|
|
|
- "版本过老", "继续", "取消") = 1 Then
|
|
|
- McDownloadForgelikeSave(Info)
|
|
|
- End If
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- End If
|
|
|
- '初始化参数
|
|
|
- Dim McVersionName As String = $"{Info.Inherit}-{Info.LoaderName.ToLower}-{Info.VersionName}"
|
|
|
- Dim TempFolder As String = $"{PathTemp}Cache\Code\{Info.LoaderName}Install-{Info.Version}_{GetUuid()}.{Info.FileExtension}"
|
|
|
- Dim McVersionFolder As String = $"{PathMcFolder}versions\{McVersionName}\"
|
|
|
- Dim DisplayName As String = $"{Info.LoaderName} {Info.Inherit} - {Info.VersionName}"
|
|
|
- Try
|
|
|
-
|
|
|
- '重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = Info.LoaderName & " 下载" Then
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
-
|
|
|
- '已有版本检查
|
|
|
- If File.Exists(McVersionFolder & McVersionName & ".json") Then
|
|
|
- If MyMsgBox("版本 " & McVersionName & " 已存在,是否重新下载?" & vbCrLf & "这会覆盖版本的 json 和 jar 文件,但不会影响版本隔离的文件。", "版本已存在", "继续", "取消") = 1 Then
|
|
|
- File.Delete(McVersionFolder & McVersionName & ".jar")
|
|
|
- File.Delete(McVersionFolder & McVersionName & ".json")
|
|
|
- Else
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- End If
|
|
|
-
|
|
|
- '启动
|
|
|
- Dim Loader As New LoaderCombo(Of String)(Info.LoaderName & " 下载",
|
|
|
- McDownloadForgelikeLoader(Info.IsNeoForge, If(Info.IsNeoForge, CType(Info, DlNeoForgeListEntry).ApiName, Info.VersionName), Info.Inherit, Info)) With
|
|
|
- {.OnStateChanged = AddressOf McInstallState}
|
|
|
- Loader.Start(McVersionFolder)
|
|
|
- LoaderTaskbarAdd(Loader)
|
|
|
- FrmMain.BtnExtraDownload.ShowRefresh()
|
|
|
- FrmMain.BtnExtraDownload.Ribble()
|
|
|
-
|
|
|
- Catch ex As Exception
|
|
|
- Log(ex, $"开始 {Info.LoaderName} 下载失败", LogLevel.Feedback)
|
|
|
- Finally
|
|
|
- '删除安装包
|
|
|
- Try
|
|
|
- If File.Exists(TempFolder) Then File.Delete(TempFolder)
|
|
|
- Catch
|
|
|
- End Try
|
|
|
- End Try
|
|
|
- End Sub
|
|
|
Public Sub McDownloadForgelikeSave(Info As DlForgelikeEntry)
|
|
|
Try
|
|
|
Dim Target As String = SelectAs("选择保存位置", $"{Info.LoaderName}-{Info.Inherit}-{Info.VersionName}.{Info.FileExtension}",
|
|
|
@@ -1082,14 +1043,11 @@ Retry:
|
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
|
|
|
|
'重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = DisplayName & " 下载" Then
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
+ If OngoingLoader.Name <> $"{DisplayName} 下载" Then Continue For
|
|
|
+ Hint("该版本正在下载中!", HintType.Critical)
|
|
|
+ Exit Sub
|
|
|
+ Next
|
|
|
|
|
|
'获取下载地址
|
|
|
Dim Files As New List(Of NetFile)
|
|
|
@@ -1151,7 +1109,7 @@ Retry:
|
|
|
'添加 Java Wrapper 作为主 Jar
|
|
|
Dim Arguments As String
|
|
|
If UseJavaWrapper Then
|
|
|
- Arguments = $"-Doolloo.jlw.tmpdir=""{GetJavaWrapperDir()}"" -cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" -jar ""{ExtractJavaWrapper()}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
|
|
+ Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" -jar ""{ExtractJavaWrapper()}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
|
|
Else
|
|
|
Arguments = $"-cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
|
|
End If
|
|
|
@@ -1242,79 +1200,74 @@ Retry:
|
|
|
End SyncLock
|
|
|
End Sub
|
|
|
Private Sub ForgelikeInjectorLine(Content As String, Task As LoaderTask(Of Boolean, Boolean))
|
|
|
- If Content.StartsWithF(" Data") OrElse Content.StartsWithF(" Slim") Then
|
|
|
- If ModeDebug Then Log("[Installer] " & Content)
|
|
|
- ElseIf Content.StartsWithF(" Reading patch ") Then
|
|
|
- If ModeDebug Then Log("[Installer] " & Content)
|
|
|
- Task.Progress = 0.86
|
|
|
- Else
|
|
|
- Select Case Content
|
|
|
- Case "Extracting json"
|
|
|
- Log("[Installer] " & Content)
|
|
|
- Task.Progress = 0.07
|
|
|
- Case "Downloading libraries"
|
|
|
- Log("[Installer] " & Content)
|
|
|
- Task.Progress = 0.08
|
|
|
- Case " File exists: Checksum validated."
|
|
|
- If ModeDebug Then Log("[Installer] " & Content)
|
|
|
- Task.Progress += 0.003
|
|
|
- Case "Building Processors"
|
|
|
- Task.Progress = 0.38
|
|
|
- Case "Task: DOWNLOAD_MOJMAPS" 'B
|
|
|
- Task.Progress = 0.4
|
|
|
- Case "Task: MERGE_MAPPING" 'B
|
|
|
- Task.Progress = 0.6
|
|
|
- Case "Splitting: "
|
|
|
- Task.Progress = 0.62
|
|
|
- Case "Parameter Annotations" 'B
|
|
|
- Task.Progress = 0.66
|
|
|
- Case "Processing Complete" 'B
|
|
|
- Task.Progress = 0.7
|
|
|
- Case "Remapping final jar" 'A
|
|
|
- Task.Progress = 0.72
|
|
|
- Case "Remapping jar... 50%" 'A
|
|
|
- Task.Progress = 0.76
|
|
|
- Case "Remapping jar... 100%" 'A
|
|
|
- Task.Progress = 0.81
|
|
|
- Case "Injecting profile"
|
|
|
- Task.Progress = 0.91
|
|
|
- Case Else
|
|
|
- If ModeDebug Then Log("[Installer] " & Content)
|
|
|
- Exit Sub
|
|
|
- End Select
|
|
|
- Log("[Installer] " & Content)
|
|
|
- End If
|
|
|
+ Select Case Content
|
|
|
+ Case "Extracting json"
|
|
|
+ Log("[Installer] " & Content)
|
|
|
+ Task.Progress = 0.07
|
|
|
+ Case "Downloading libraries"
|
|
|
+ Log("[Installer] " & Content)
|
|
|
+ Task.Progress = 0.08
|
|
|
+ Case " File exists: Checksum validated."
|
|
|
+ If ModeDebug Then Log("[Installer] " & Content)
|
|
|
+ Task.Progress += 0.003
|
|
|
+ Case "Building Processors"
|
|
|
+ Task.Progress = 0.18
|
|
|
+ Case "Task: DOWNLOAD_MOJMAPS" 'B
|
|
|
+ Task.Progress = 0.2
|
|
|
+ Case "Task: MERGE_MAPPING" 'B
|
|
|
+ Task.Progress = 0.3
|
|
|
+ Case "Splitting: "
|
|
|
+ Task.Progress = 0.35
|
|
|
+ Case "Parameter Annotations" 'B
|
|
|
+ Task.Progress = 0.4
|
|
|
+ Case "Processing Complete" 'B
|
|
|
+ Task.Progress = 0.5
|
|
|
+ Case "log: null" 'new
|
|
|
+ Task.Progress = 0.5
|
|
|
+ Case "Sorting" 'new
|
|
|
+ Task.Progress = 0.65
|
|
|
+ Case "Remapping final jar" 'A
|
|
|
+ Task.Progress = 0.72
|
|
|
+ Case "Remapping jar... 50%" 'A
|
|
|
+ Task.Progress = 0.76
|
|
|
+ Case "Remapping jar... 100%" 'A
|
|
|
+ Task.Progress = 0.81
|
|
|
+ Case "Injecting profile"
|
|
|
+ Task.Progress = 0.91
|
|
|
+ Case Else
|
|
|
+ If ModeDebug Then Log("[Installer] " & Content)
|
|
|
+ Exit Sub
|
|
|
+ End Select
|
|
|
+ Log("[Installer] " & Content)
|
|
|
End Sub
|
|
|
|
|
|
''' <summary>
|
|
|
''' 获取下载某个 Forgelike 版本的加载器列表。
|
|
|
''' </summary>
|
|
|
- Private Function McDownloadForgelikeLoader(IsNeoForge As Boolean, Version 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, Optional FixLibrary As Boolean = True) As List(Of LoaderBase)
|
|
|
+ Private Function McDownloadForgelikeLoader(IsNeoForge As Boolean, LoaderVersion As String, TargetVersion 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)
|
|
|
|
|
|
'参数初始化
|
|
|
McFolder = If(McFolder, PathMcFolder)
|
|
|
If IsNeoForge AndAlso Info Is Nothing Then
|
|
|
'需要传入 API Name,但整合包版本可能不以 1.20.1- 开头,所以需要进行特别处理
|
|
|
- If Inherit = "1.20.1" AndAlso Not Version.StartsWithF("1.20.1-") Then
|
|
|
- Info = New DlNeoForgeListEntry("1.20.1-" & Version)
|
|
|
+ If Inherit = "1.20.1" AndAlso Not LoaderVersion.StartsWithF("1.20.1-") Then
|
|
|
+ Info = New DlNeoForgeListEntry("1.20.1-" & LoaderVersion)
|
|
|
Else
|
|
|
- Info = New DlNeoForgeListEntry(Version)
|
|
|
+ Info = New DlNeoForgeListEntry(LoaderVersion)
|
|
|
End If
|
|
|
End If
|
|
|
- If Not IsNeoForge AndAlso Version.StartsWithF("1.") AndAlso Version.Contains("-") Then
|
|
|
+ If Not IsNeoForge AndAlso LoaderVersion.StartsWithF("1.") AndAlso LoaderVersion.Contains("-") Then
|
|
|
'类似 1.19.3-41.2.8 格式,优先使用 Version 中要求的版本而非 Inherit(例如 1.19.3 却使用了 1.19 的 Forge)
|
|
|
- Inherit = Version.Before("-")
|
|
|
- Version = Version.After("-")
|
|
|
+ Inherit = LoaderVersion.BeforeFirst("-")
|
|
|
+ LoaderVersion = LoaderVersion.AfterLast("-")
|
|
|
End If
|
|
|
Dim LoaderName As String = If(IsNeoForge, "NeoForge", "Forge")
|
|
|
Dim IsCustomFolder As Boolean = McFolder <> PathMcFolder
|
|
|
- Dim InstallerAddress As String = $"{PathTemp}Cache\Code\{LoaderName}Install-{Version}_{RandomInteger(0, 100000)}"
|
|
|
- Dim VersionName As String = If(IsNeoForge, "neoforge-" & Version.Replace("1.20.1-", ""), "forge-" & Version)
|
|
|
- Dim VersionFolder As String = $"{McFolder}versions\{VersionName}\"
|
|
|
- Log($"[Download] Forgelike 安装目标版本文件夹:{VersionFolder}")
|
|
|
- Dim DisplayName As String = $"{LoaderName} {Inherit} - {Version}"
|
|
|
+ Dim InstallerAddress As String = $"{PathTemp}Cache\Code\{LoaderName}Install-{LoaderVersion}_{RandomInteger(0, 100000)}"
|
|
|
+ Dim VersionFolder As String = $"{McFolder}versions\{TargetVersion}\"
|
|
|
+ Dim DisplayName As String = $"{LoaderName} {Inherit} - {LoaderVersion}"
|
|
|
Dim Loaders As New List(Of LoaderBase)
|
|
|
- Dim LibVersionFolder As String = $"{PathMcFolder}versions\{VersionName}\" '作为 Lib 文件目标的版本文件夹
|
|
|
+ Dim LibVersionFolder As String = $"{PathMcFolder}versions\{TargetVersion}\" '作为 Lib 文件目标的版本文件夹
|
|
|
|
|
|
'获取 Forge 下载信息
|
|
|
If Info Is Nothing Then
|
|
|
@@ -1326,12 +1279,12 @@ Retry:
|
|
|
Task.Progress = 0.8
|
|
|
'查找对应版本
|
|
|
For Each ForgeVersion In ForgeLoader.Output
|
|
|
- If VersionSortInteger(ForgeVersion.Version.ToString, Version) = 0 Then
|
|
|
+ If VersionSortInteger(ForgeVersion.Version.ToString, LoaderVersion) = 0 Then
|
|
|
Info = ForgeVersion
|
|
|
Exit Sub
|
|
|
End If
|
|
|
Next
|
|
|
- Throw New Exception($"未能找到 {LoaderName} " & Inherit & "-" & Version & " 的详细信息!")
|
|
|
+ Throw New Exception($"未能找到 {LoaderName} " & Inherit & "-" & LoaderVersion & " 的详细信息!")
|
|
|
End Sub) With {.ProgressWeight = 3})
|
|
|
End If
|
|
|
'下载 Forgelike 主文件
|
|
|
@@ -1354,9 +1307,11 @@ Retry:
|
|
|
Else
|
|
|
'Forge
|
|
|
Dim Forge As DlForgeVersionEntry = Info
|
|
|
+ Dim FileName As String =
|
|
|
+ $"{Forge.Inherit.Replace("-", "_")}-{Forge.FileVersion}/forge-{Forge.Inherit.Replace("-", "_")}-{Forge.FileVersion}-{Forge.Category}.{Forge.FileExtension}"
|
|
|
Files.Add(New NetFile({
|
|
|
- $"https://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/{Forge.Inherit}-{Forge.FileVersion}/forge-{Forge.Inherit}-{Forge.FileVersion}-{Forge.Category}.{Forge.FileExtension}",
|
|
|
- $"https://files.minecraftforge.net/maven/net/minecraftforge/forge/{Forge.Inherit}-{Forge.FileVersion}/forge-{Forge.Inherit}-{Forge.FileVersion}-{Forge.Category}.{Forge.FileExtension}"
|
|
|
+ $"https://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/{FileName}",
|
|
|
+ $"https://files.minecraftforge.net/maven/net/minecraftforge/forge/{FileName}"
|
|
|
}, InstallerAddress, New FileChecker(MinSize:=64 * 1024, Hash:=Forge.Hash)))
|
|
|
End If
|
|
|
Task.Output = Files
|
|
|
@@ -1364,8 +1319,8 @@ Retry:
|
|
|
Loaders.Add(New LoaderDownload($"下载 {LoaderName} 主文件", New List(Of NetFile)) With {.ProgressWeight = 9})
|
|
|
|
|
|
'安装(仅在新版安装时需要原版 Jar)
|
|
|
- If IsNeoForge OrElse Version.Before(".") >= 20 Then
|
|
|
- Log($"[Download] 检测为{If(IsNeoForge, " Neo", "新版 ")}Forge:" & Version)
|
|
|
+ If IsNeoForge OrElse LoaderVersion.BeforeFirst(".") >= 20 Then
|
|
|
+ Log($"[Download] 检测为{If(IsNeoForge, " Neo", "新版 ")}Forge:" & LoaderVersion)
|
|
|
Dim Libs As List(Of McLibToken) = Nothing
|
|
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))($"分析 {LoaderName} 支持库文件",
|
|
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
|
|
@@ -1386,17 +1341,19 @@ Retry:
|
|
|
Task.Progress = 0.4
|
|
|
Dim RawJson As JObject = GetJson(NetGetCodeByDownload(DlSourceLauncherOrMetaGet(DlClientListGet(Inherit)), IsJson:=True))
|
|
|
'[net.minecraft:client:1.17.1-20210706.113038:mappings@txt] 或 @tsrg]
|
|
|
- Dim OriginalName As String = Json("data")("MOJMAPS")("client").ToString.Trim("[]".ToCharArray()).Before("@")
|
|
|
+ Dim OriginalName As String = Json("data")("MOJMAPS")("client").ToString.Trim("[]".ToCharArray()).BeforeFirst("@")
|
|
|
Dim Address = McLibGet(OriginalName).Replace(".jar", "-mappings." & Json("data")("MOJMAPS")("client").ToString.Trim("[]".ToCharArray()).Split("@")(1))
|
|
|
- Libs.Add(New McLibToken With {.IsJumpLoader = False, .IsNatives = False, .LocalPath = Address, .OriginalName = OriginalName,
|
|
|
- .Url = RawJson("downloads")("client_mappings")("url"), .Size = RawJson("downloads")("client_mappings")("size"), .SHA1 = RawJson("downloads")("client_mappings")("sha1")})
|
|
|
- Log("[Download] 需要下载 Mappings:" & Address)
|
|
|
+ Dim ClientMappings As JToken = RawJson("downloads")("client_mappings")
|
|
|
+ Libs.Add(New McLibToken With {
|
|
|
+ .IsJumpLoader = False, .IsNatives = False, .LocalPath = Address, .OriginalName = OriginalName,
|
|
|
+ .Url = ClientMappings("url"), .Size = ClientMappings("size"), .SHA1 = ClientMappings("sha1")})
|
|
|
+ Log($"[Download] 需要下载 Mappings:{ClientMappings("url")} (SHA1: {ClientMappings("sha1")})")
|
|
|
End If
|
|
|
Task.Progress = 0.8
|
|
|
'去除其中的原始 Forgelike 项
|
|
|
For i = 0 To Libs.Count - 1
|
|
|
- If Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{Version}.jar") OrElse
|
|
|
- Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{Version}-client.jar") Then
|
|
|
+ If Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}.jar") OrElse
|
|
|
+Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}-client.jar") Then
|
|
|
Log($"[Download] 已从待下载 {LoaderName} 支持库中移除:" & Libs(i).LocalPath, LogLevel.Debug)
|
|
|
Libs.RemoveAt(i)
|
|
|
Exit For
|
|
|
@@ -1498,10 +1455,15 @@ Retry:
|
|
|
'如果没有新增文件夹,那么预测的文件夹名就是正确的
|
|
|
'如果只新增 1 个文件夹,那么拷贝 json 文件
|
|
|
Dim JsonFile As FileInfo = DeltaList(0).EnumerateFiles.First()
|
|
|
- WriteFile(VersionFolder & VersionName & ".json", ReadFile(JsonFile.FullName))
|
|
|
+ WriteFile(VersionFolder & TargetVersion & ".json", ReadFile(JsonFile.FullName))
|
|
|
+ Log($"[Download] 已拷贝新增的版本 JSON 文件:{JsonFile.FullName} -> {VersionFolder}{TargetVersion}.json")
|
|
|
+ ElseIf DeltaList.Count > 1 Then
|
|
|
+ '新增了多个文件夹
|
|
|
+ Log($"[Download] 有多个疑似的新增版本,无法确定:{DeltaList.Select(Function(d) d.Name).Join(";")}")
|
|
|
+ Else
|
|
|
+ '没有新增文件夹
|
|
|
+ Log("[Download] 未找到新增的版本文件夹")
|
|
|
End If
|
|
|
- '新建 mods 文件夹
|
|
|
- Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\")
|
|
|
Catch ex As Exception
|
|
|
Throw New Exception($"安装新 {LoaderName} 版本失败", ex)
|
|
|
Finally
|
|
|
@@ -1515,7 +1477,7 @@ Retry:
|
|
|
End Try
|
|
|
End Sub) With {.ProgressWeight = 10})
|
|
|
Else
|
|
|
- Log("[Download] 检测为非新版 Forge:" & Version)
|
|
|
+ Log("[Download] 检测为非新版 Forge:" & LoaderVersion)
|
|
|
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)($"安装 {LoaderName}(方式 B)",
|
|
|
Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
Dim Installer As ZipArchive = Nothing
|
|
|
@@ -1533,8 +1495,8 @@ Retry:
|
|
|
Log("[Download] 开始进行 Forge 安装,Legacy 方式 1:" & InstallerAddress)
|
|
|
'建立 Json 文件
|
|
|
Dim JsonVersion As JObject = GetJson(ReadFile(Installer.GetEntry(Json("json").ToString.TrimStart("/")).Open))
|
|
|
- JsonVersion("id") = VersionName
|
|
|
- WriteFile(VersionFolder & VersionName & ".json", JsonVersion.ToString)
|
|
|
+ JsonVersion("id") = TargetVersion
|
|
|
+ WriteFile(VersionFolder & TargetVersion & ".json", JsonVersion.ToString)
|
|
|
Task.Progress = 0.6
|
|
|
'解压支持库文件
|
|
|
Installer.Dispose()
|
|
|
@@ -1550,12 +1512,10 @@ Retry:
|
|
|
WriteFile(JarAddress, Installer.GetEntry(Json("install")("filePath")).Open)
|
|
|
Task.Progress = 0.9
|
|
|
'建立 Json 文件
|
|
|
- Json("versionInfo")("id") = VersionName
|
|
|
+ Json("versionInfo")("id") = TargetVersion
|
|
|
If Json("versionInfo")("inheritsFrom") Is Nothing Then CType(Json("versionInfo"), JObject).Add("inheritsFrom", Inherit)
|
|
|
- WriteFile(VersionFolder & VersionName & ".json", Json("versionInfo").ToString)
|
|
|
+ WriteFile(VersionFolder & TargetVersion & ".json", Json("versionInfo").ToString)
|
|
|
End If
|
|
|
- '新建 mods 文件夹
|
|
|
- Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\")
|
|
|
Catch ex As Exception
|
|
|
Throw New Exception("非新版方式安装 Forge 失败", ex)
|
|
|
Finally
|
|
|
@@ -1569,11 +1529,6 @@ Retry:
|
|
|
End Try
|
|
|
End Try
|
|
|
End Sub) With {.ProgressWeight = 1})
|
|
|
- If FixLibrary Then
|
|
|
- If IsCustomFolder Then Throw New Exception("若需要补全支持库,就不能自定义 MC 文件夹")
|
|
|
- Loaders.Add(New LoaderTask(Of String, List(Of NetFile))($"分析 {LoaderName} 支持库文件", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
|
- Loaders.Add(New LoaderDownload($"下载 {LoaderName} 支持库文件", New List(Of NetFile)) With {.ProgressWeight = 11})
|
|
|
- End If
|
|
|
End If
|
|
|
|
|
|
Return Loaders
|
|
|
@@ -1838,14 +1793,11 @@ Retry:
|
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
|
|
|
|
'重复任务检查
|
|
|
- SyncLock LoaderTaskbarLock
|
|
|
- For i = 0 To LoaderTaskbar.Count - 1
|
|
|
- If LoaderTaskbar(i).Name = "Fabric " & Version & " 安装器下载" Then
|
|
|
- Hint("该版本正在下载中!", HintType.Critical)
|
|
|
- Exit Sub
|
|
|
- End If
|
|
|
- Next
|
|
|
- End SyncLock
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
+ If OngoingLoader.Name <> $"Fabric {Version} 安装器下载" Then Continue For
|
|
|
+ Hint("该版本正在下载中!", HintType.Critical)
|
|
|
+ Exit Sub
|
|
|
+ Next
|
|
|
|
|
|
'构造步骤加载器
|
|
|
Dim Loaders As New List(Of LoaderBase)
|
|
|
@@ -1881,26 +1833,24 @@ Retry:
|
|
|
'下载 Json
|
|
|
MinecraftName = MinecraftName.Replace("∞", "infinite") '放在 ID 后面避免影响版本文件夹名称
|
|
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("获取 Fabric 主文件下载地址",
|
|
|
- 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({
|
|
|
- "https://bmclapi2.bangbang93.com/fabric-meta/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))}
|
|
|
- '新建 mods 文件夹
|
|
|
- Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\")
|
|
|
- End Sub) With {.ProgressWeight = 0.5})
|
|
|
+ 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({
|
|
|
+ "https://bmclapi2.bangbang93.com/fabric-meta/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))}
|
|
|
+ End Sub) With {.ProgressWeight = 0.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 As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
|
+ Sub(Task) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
|
Loaders.Add(New LoaderDownload("下载 Fabric 支持库文件", New List(Of NetFile)) With {.ProgressWeight = 8})
|
|
|
End If
|
|
|
|
|
|
@@ -1925,7 +1875,7 @@ Retry:
|
|
|
Public Function FabricApiDownloadListItem(Entry As CompFile, OnClick As MyListItem.ClickEventHandler) As MyListItem
|
|
|
'建立控件
|
|
|
Dim NewItem As New MyListItem With {
|
|
|
- .Title = Entry.DisplayName.Split("]")(1).Replace("Fabric API ", "").Replace(" build ", ".").Before("+").Trim, .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry,
|
|
|
+ .Title = Entry.DisplayName.Split("]")(1).Replace("Fabric API ", "").Replace(" build ", ".").BeforeFirst("+").Trim, .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry,
|
|
|
.Info = Entry.StatusDescription & ",发布于 " & Entry.ReleaseDate.ToString("yyyy'/'MM'/'dd HH':'mm"),
|
|
|
.Logo = PathImage & "Blocks/Fabric.png"
|
|
|
}
|
|
|
@@ -2090,6 +2040,8 @@ Retry:
|
|
|
FrmMain.BtnExtraDownload.Ribble()
|
|
|
Return True
|
|
|
|
|
|
+ Catch ex As CancelledException
|
|
|
+ Return False
|
|
|
Catch ex As Exception
|
|
|
Log(ex, "开始合并安装失败", LogLevel.Feedback)
|
|
|
Return False
|
|
|
@@ -2097,8 +2049,8 @@ Retry:
|
|
|
End Function
|
|
|
''' <summary>
|
|
|
''' 获取合并安装加载器列表,并进行前期的缓存清理与 Java 检查工作。
|
|
|
- ''' 如果出现已知问题且已提示用户,则返回 Nothing。出现异常则直接抛出。
|
|
|
''' </summary>
|
|
|
+ ''' <exception cref="CancelledException" />
|
|
|
Public Function McInstallLoader(Request As McInstallRequest, Optional DontFixLibraries As Boolean = False) As List(Of LoaderBase)
|
|
|
'获取缓存目录
|
|
|
Dim PathInstallTemp As String
|
|
|
@@ -2110,11 +2062,10 @@ Retry:
|
|
|
|
|
|
'清理缓存
|
|
|
Try
|
|
|
- If Not IsInstallTempCleared Then
|
|
|
- IsInstallTempCleared = True
|
|
|
- DeleteDirectory(PathInstallTemp, True)
|
|
|
- Log("[Download] 已清理合并安装缓存")
|
|
|
- End If
|
|
|
+ If IsInstallTempCleared Then Exit Try
|
|
|
+ IsInstallTempCleared = True
|
|
|
+ DeleteDirectory(PathInstallTemp, True)
|
|
|
+ Log("[Download] 已清理合并安装缓存")
|
|
|
Catch ex As Exception
|
|
|
Log(ex, "清理合并安装缓存失败")
|
|
|
End Try
|
|
|
@@ -2125,7 +2076,7 @@ Retry:
|
|
|
If Directory.Exists(TempMcFolder) Then DeleteDirectory(TempMcFolder)
|
|
|
Dim OptiFineFolder As String = Nothing
|
|
|
If Request.OptiFineVersion IsNot Nothing Then
|
|
|
- If Request.OptiFineVersion.Contains("_HD_U_") Then Request.OptiFineVersion = "HD_U_" & Request.OptiFineVersion.After("_HD_U_") '#735
|
|
|
+ If Request.OptiFineVersion.Contains("_HD_U_") Then Request.OptiFineVersion = "HD_U_" & Request.OptiFineVersion.AfterLast("_HD_U_") '#735
|
|
|
Request.OptiFineEntry = New DlOptiFineListEntry With {
|
|
|
.NameDisplay = Request.MinecraftName & " " & Request.OptiFineVersion.Replace("HD_U_", "").Replace("_", "").Replace("pre", " pre"),
|
|
|
.Inherit = Request.MinecraftName,
|
|
|
@@ -2138,7 +2089,7 @@ Retry:
|
|
|
If Request.OptiFineEntry IsNot Nothing Then OptiFineFolder = TempMcFolder & "versions\" & Request.OptiFineEntry.NameVersion
|
|
|
Dim ForgeFolder As String = Nothing
|
|
|
If Request.ForgeEntry IsNot Nothing Then Request.ForgeVersion = If(Request.ForgeVersion, Request.ForgeEntry.VersionName)
|
|
|
- If Request.ForgeVersion IsNot Nothing Then ForgeFolder = TempMcFolder & "versions\" & Request.MinecraftName & "-forge-" & Request.ForgeVersion
|
|
|
+ If Request.ForgeVersion IsNot Nothing Then ForgeFolder = TempMcFolder & "versions\forge-" & Request.ForgeVersion
|
|
|
Dim NeoForgeFolder As String = Nothing
|
|
|
If Request.NeoForgeEntry IsNot Nothing Then Request.NeoForgeVersion = If(Request.NeoForgeVersion, Request.NeoForgeEntry.VersionName)
|
|
|
If Request.NeoForgeVersion IsNot Nothing Then NeoForgeFolder = TempMcFolder & "versions\neoforge-" & Request.NeoForgeVersion
|
|
|
@@ -2147,12 +2098,16 @@ Retry:
|
|
|
Dim LiteLoaderFolder As String = Nothing
|
|
|
If Request.LiteLoaderEntry IsNot Nothing Then LiteLoaderFolder = TempMcFolder & "versions\" & Request.MinecraftName & "-LiteLoader"
|
|
|
|
|
|
- 'OptiFine 是否作为 Mod 进行下载
|
|
|
- Dim OptiFineAsMod As Boolean =
|
|
|
- (Request.OptiFineEntry IsNot Nothing OrElse Request.OptiFineVersion IsNot Nothing) AndAlso Request.FabricVersion IsNot Nothing
|
|
|
+ '判断 OptiFine 是否作为 Mod 进行下载
|
|
|
+ Dim MinecraftCode As Integer = If(Request.MinecraftName.Contains("."), Val(Request.MinecraftName.Split(".")(1)), 0)
|
|
|
+ Dim OptiFineAsMod As Boolean = Request.OptiFineEntry IsNot Nothing AndAlso '1. 选择了 OptiFine
|
|
|
+ (Request.FabricVersion IsNot Nothing OrElse '2. 选择了 Fabric...
|
|
|
+ (Request.ForgeEntry IsNot Nothing AndAlso MinecraftCode >= 14 AndAlso MinecraftCode <= 15)) '...或者 Forge 1.14~15(#4134)
|
|
|
+ Dim ModsFolder As String = New McVersion(OutputFolder).GetPathIndie(True) & "mods\"
|
|
|
+
|
|
|
If OptiFineAsMod Then
|
|
|
Log("[Download] OptiFine 将作为 Mod 进行下载")
|
|
|
- OptiFineFolder = New McVersion(OutputFolder).GetPathIndie(True) & "mods\"
|
|
|
+ OptiFineFolder = ModsFolder
|
|
|
End If
|
|
|
|
|
|
'记录日志
|
|
|
@@ -2166,7 +2121,7 @@ Retry:
|
|
|
'重复版本检查
|
|
|
If File.Exists(OutputFolder & Request.TargetVersionName & ".json") Then
|
|
|
Hint("版本 " & Request.TargetVersionName & " 已经存在!", HintType.Critical)
|
|
|
- Return Nothing
|
|
|
+ Throw New CancelledException
|
|
|
End If
|
|
|
|
|
|
Dim LoaderList As New List(Of LoaderBase)
|
|
|
@@ -2174,11 +2129,11 @@ Retry:
|
|
|
LoaderList.Add(New LoaderTask(Of Integer, Integer)("添加忽略标识", Sub() WriteFile(OutputFolder & ".pclignore", "用于临时地在 PCL 的版本列表中屏蔽此版本。")) With {.Show = False, .Block = False})
|
|
|
'Fabric API
|
|
|
If Request.FabricApi IsNot Nothing Then
|
|
|
- LoaderList.Add(New LoaderDownload("下载 Fabric API", New List(Of NetFile) From {Request.FabricApi.ToNetFile(New McVersion(OutputFolder).GetPathIndie(True) & "mods\")}) With {.ProgressWeight = 3, .Block = False})
|
|
|
+ LoaderList.Add(New LoaderDownload("下载 Fabric API", New List(Of NetFile) From {Request.FabricApi.ToNetFile(ModsFolder)}) With {.ProgressWeight = 3, .Block = False})
|
|
|
End If
|
|
|
'OptiFabric
|
|
|
If Request.OptiFabric IsNot Nothing Then
|
|
|
- LoaderList.Add(New LoaderDownload("下载 OptiFabric", New List(Of NetFile) From {Request.OptiFabric.ToNetFile(New McVersion(OutputFolder).GetPathIndie(True) & "mods\")}) With {.ProgressWeight = 3, .Block = False})
|
|
|
+ LoaderList.Add(New LoaderDownload("下载 OptiFabric", New List(Of NetFile) From {Request.OptiFabric.ToNetFile(ModsFolder)}) With {.ProgressWeight = 3, .Block = False})
|
|
|
End If
|
|
|
'原版
|
|
|
Dim ClientLoader = New LoaderCombo(Of String)("下载原版 " & Request.MinecraftName, McDownloadClientLoader(Request.MinecraftName, Request.MinecraftJson, Request.TargetVersionName)) With {.Show = False, .ProgressWeight = 39, .Block = Request.ForgeVersion Is Nothing AndAlso Request.OptiFineEntry Is Nothing AndAlso Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing}
|
|
|
@@ -2193,11 +2148,11 @@ Retry:
|
|
|
End If
|
|
|
'Forge
|
|
|
If Request.ForgeVersion IsNot Nothing Then
|
|
|
- LoaderList.Add(New LoaderCombo(Of String)("下载 Forge " & Request.ForgeVersion, McDownloadForgelikeLoader(False, Request.ForgeVersion, Request.MinecraftName, Request.ForgeEntry, TempMcFolder, ClientLoader, Request.TargetVersionFolder, False)) With {.Show = False, .ProgressWeight = 25, .Block = Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing AndAlso Request.NeoForgeEntry Is Nothing})
|
|
|
+ LoaderList.Add(New LoaderCombo(Of String)("下载 Forge " & Request.ForgeVersion, McDownloadForgelikeLoader(False, Request.ForgeVersion, "forge-" & Request.ForgeVersion, Request.MinecraftName, Request.ForgeEntry, TempMcFolder, ClientLoader, Request.TargetVersionFolder)) With {.Show = False, .ProgressWeight = 25, .Block = Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing AndAlso Request.NeoForgeEntry Is Nothing})
|
|
|
End If
|
|
|
'NeoForge
|
|
|
If Request.NeoForgeVersion IsNot Nothing Then
|
|
|
- LoaderList.Add(New LoaderCombo(Of String)("下载 NeoForge " & Request.NeoForgeVersion, McDownloadForgelikeLoader(True, Request.NeoForgeVersion, Request.MinecraftName, Request.NeoForgeEntry, TempMcFolder, ClientLoader, Request.TargetVersionFolder, False)) With {.Show = False, .ProgressWeight = 25, .Block = Request.ForgeEntry Is Nothing AndAlso Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing})
|
|
|
+ LoaderList.Add(New LoaderCombo(Of String)("下载 NeoForge " & Request.NeoForgeVersion, McDownloadForgelikeLoader(True, Request.NeoForgeVersion, "neoforge-" & Request.NeoForgeVersion, Request.MinecraftName, Request.NeoForgeEntry, TempMcFolder, ClientLoader, Request.TargetVersionFolder)) With {.Show = False, .ProgressWeight = 25, .Block = Request.ForgeEntry Is Nothing AndAlso Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing})
|
|
|
End If
|
|
|
'LiteLoader
|
|
|
If Request.LiteLoaderEntry IsNot Nothing Then
|
|
|
@@ -2213,11 +2168,16 @@ Retry:
|
|
|
InstallMerge(OutputFolder, OutputFolder, OptiFineFolder, OptiFineAsMod, ForgeFolder, Request.ForgeVersion, NeoForgeFolder, Request.NeoForgeVersion, FabricFolder, LiteLoaderFolder)
|
|
|
Task.Progress = 0.3
|
|
|
If Directory.Exists(TempMcFolder & "libraries") Then CopyDirectory(TempMcFolder & "libraries", PathMcFolder & "libraries")
|
|
|
- If Directory.Exists(TempMcFolder & "mods") Then CopyDirectory(TempMcFolder & "mods", PathMcFolder & "mods")
|
|
|
+ If Directory.Exists(TempMcFolder & "mods") Then CopyDirectory(TempMcFolder & "mods", ModsFolder)
|
|
|
+ '新建 mods 文件夹
|
|
|
+ If Request.ForgeVersion IsNot Nothing OrElse Request.FabricVersion IsNot Nothing OrElse Request.NeoForgeEntry IsNot Nothing OrElse Request.LiteLoaderEntry IsNot Nothing Then
|
|
|
+ Directory.CreateDirectory(ModsFolder)
|
|
|
+ Log("[Download] 自动创建 mods 文件夹:" & ModsFolder)
|
|
|
+ End If
|
|
|
End Sub) With {.ProgressWeight = 2, .Block = True})
|
|
|
'补全文件
|
|
|
If Not DontFixLibraries AndAlso
|
|
|
- (Request.OptiFineEntry IsNot Nothing OrElse (Request.ForgeVersion IsNot Nothing AndAlso Request.ForgeVersion.Before(".") >= 20) OrElse Request.NeoForgeVersion IsNot Nothing OrElse Request.FabricVersion IsNot Nothing OrElse Request.LiteLoaderEntry IsNot Nothing) Then
|
|
|
+ (Request.OptiFineEntry IsNot Nothing OrElse (Request.ForgeVersion IsNot Nothing AndAlso Request.ForgeVersion.BeforeFirst(".") >= 20) OrElse Request.NeoForgeVersion IsNot Nothing OrElse Request.FabricVersion IsNot Nothing OrElse Request.LiteLoaderEntry IsNot Nothing) Then
|
|
|
Dim LoadersLib As New List(Of LoaderBase)
|
|
|
LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(OutputFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
|
LoadersLib.Add(New LoaderDownload("下载游戏支持库文件(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 7, .Show = False})
|