|
@@ -1,4 +1,5 @@
|
|
|
Imports System.IO.Compression
|
|
Imports System.IO.Compression
|
|
|
|
|
+Imports System.Net.Http
|
|
|
|
|
|
|
|
Public Module ModDownloadLib
|
|
Public Module ModDownloadLib
|
|
|
|
|
|
|
@@ -28,7 +29,7 @@ Public Module ModDownloadLib
|
|
|
Dim VersionFolder As String = PathMcFolder & "versions\" & Id & "\"
|
|
Dim VersionFolder As String = PathMcFolder & "versions\" & Id & "\"
|
|
|
|
|
|
|
|
'重复任务检查
|
|
'重复任务检查
|
|
|
- For Each OngoingLoader In LoaderTaskbar
|
|
|
|
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For
|
|
If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For
|
|
|
If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Return OngoingLoader
|
|
If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Return OngoingLoader
|
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
@@ -59,47 +60,6 @@ Public Module ModDownloadLib
|
|
|
Return Nothing
|
|
Return Nothing
|
|
|
End Try
|
|
End Try
|
|
|
End Function
|
|
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 & "\"
|
|
|
|
|
-
|
|
|
|
|
- '重复任务检查
|
|
|
|
|
- For Each OngoingLoader In LoaderTaskbar
|
|
|
|
|
- If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For
|
|
|
|
|
- If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Exit Sub
|
|
|
|
|
- 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 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>
|
|
''' <summary>
|
|
|
''' 获取下载某个 Minecraft 版本的加载器列表。
|
|
''' 获取下载某个 Minecraft 版本的加载器列表。
|
|
@@ -127,6 +87,7 @@ Public Module ModDownloadLib
|
|
|
Dim LoadersLib As New List(Of LoaderBase)
|
|
Dim LoadersLib As New List(Of LoaderBase)
|
|
|
LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析原版支持库文件(副加载器)",
|
|
LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析原版支持库文件(副加载器)",
|
|
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
|
|
|
|
+ Thread.Sleep(50) '等待 JSON 文件实际写入硬盘(#3710)
|
|
|
Log("[Download] 开始分析原版支持库文件:" & VersionFolder)
|
|
Log("[Download] 开始分析原版支持库文件:" & VersionFolder)
|
|
|
Task.Output = McLibFix(New McVersion(VersionFolder))
|
|
Task.Output = McLibFix(New McVersion(VersionFolder))
|
|
|
End Sub) With {.ProgressWeight = 1, .Show = False})
|
|
End Sub) With {.ProgressWeight = 1, .Show = False})
|
|
@@ -155,7 +116,7 @@ Public Module ModDownloadLib
|
|
|
LoadersAssets.Add(New LoaderDownload("下载资源文件索引(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 3, .Show = False})
|
|
LoadersAssets.Add(New LoaderDownload("下载资源文件索引(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 3, .Show = False})
|
|
|
LoadersAssets.Add(New LoaderTask(Of String, List(Of NetFile))("分析所需资源文件(副加载器)",
|
|
LoadersAssets.Add(New LoaderTask(Of String, List(Of NetFile))("分析所需资源文件(副加载器)",
|
|
|
Sub(Task As 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})
|
|
End Sub) With {.ProgressWeight = 3, .Show = False})
|
|
|
LoadersAssets.Add(New LoaderDownload("下载资源文件(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 14, .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})
|
|
Loaders.Add(New LoaderCombo(Of String)("下载原版资源文件", LoadersAssets) With {.Block = False, .ProgressWeight = 21})
|
|
@@ -207,7 +168,12 @@ Public Module ModDownloadLib
|
|
|
ToolTipService.SetVerticalOffset(BtnInfo, 30)
|
|
ToolTipService.SetVerticalOffset(BtnInfo, 30)
|
|
|
ToolTipService.SetHorizontalOffset(BtnInfo, 2)
|
|
ToolTipService.SetHorizontalOffset(BtnInfo, 2)
|
|
|
AddHandler BtnInfo.Click, AddressOf McDownloadMenuLog
|
|
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
|
|
End Sub
|
|
|
Private Sub McDownloadMenuBuild(sender As Object, e As EventArgs)
|
|
Private Sub McDownloadMenuBuild(sender As Object, e As EventArgs)
|
|
|
Dim BtnSave As New MyIconButton With {.Logo = Logo.IconButtonSave, .ToolTip = "另存为"}
|
|
Dim BtnSave As New MyIconButton With {.Logo = Logo.IconButtonSave, .ToolTip = "另存为"}
|
|
@@ -220,7 +186,12 @@ Public Module ModDownloadLib
|
|
|
ToolTipService.SetVerticalOffset(BtnInfo, 30)
|
|
ToolTipService.SetVerticalOffset(BtnInfo, 30)
|
|
|
ToolTipService.SetHorizontalOffset(BtnInfo, 2)
|
|
ToolTipService.SetHorizontalOffset(BtnInfo, 2)
|
|
|
AddHandler BtnInfo.Click, AddressOf McDownloadMenuLog
|
|
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
|
|
End Sub
|
|
|
Private Sub McDownloadMenuLog(sender As Object, e As RoutedEventArgs)
|
|
Private Sub McDownloadMenuLog(sender As Object, e As RoutedEventArgs)
|
|
|
Dim Version As JToken
|
|
Dim Version As JToken
|
|
@@ -233,6 +204,83 @@ Public Module ModDownloadLib
|
|
|
End If
|
|
End If
|
|
|
McUpdateLogShow(Version)
|
|
McUpdateLogShow(Version)
|
|
|
End Sub
|
|
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 LoaderStateChangedHintOnly}
|
|
|
|
|
+ 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)
|
|
Public Sub McDownloadMenuSave(sender As Object, e As RoutedEventArgs)
|
|
|
Dim Version As MyListItem
|
|
Dim Version As MyListItem
|
|
|
If TypeOf sender Is MyListItem Then
|
|
If TypeOf sender Is MyListItem Then
|
|
@@ -242,7 +290,41 @@ Public Module ModDownloadLib
|
|
|
Else
|
|
Else
|
|
|
Version = sender.Parent.Parent
|
|
Version = sender.Parent.Parent
|
|
|
End If
|
|
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 LoaderStateChangedHintOnly}
|
|
|
|
|
+ Loader.Start(Id)
|
|
|
|
|
+ LoaderTaskbarAdd(Loader)
|
|
|
|
|
+ FrmMain.BtnExtraDownload.ShowRefresh()
|
|
|
|
|
+ FrmMain.BtnExtraDownload.Ribble()
|
|
|
|
|
+ Catch ex As Exception
|
|
|
|
|
+ Log(ex, "开始 Minecraft 下载失败", LogLevel.Feedback)
|
|
|
|
|
+ End Try
|
|
|
End Sub
|
|
End Sub
|
|
|
''' <summary>
|
|
''' <summary>
|
|
|
''' 显示某 Minecraft 版本的更新日志。
|
|
''' 显示某 Minecraft 版本的更新日志。
|
|
@@ -313,17 +395,17 @@ Public Module ModDownloadLib
|
|
|
Private Sub McDownloadOptiFineSave(DownloadInfo As DlOptiFineListEntry)
|
|
Private Sub McDownloadOptiFineSave(DownloadInfo As DlOptiFineListEntry)
|
|
|
Try
|
|
Try
|
|
|
Dim Id As String = DownloadInfo.NameVersion
|
|
Dim Id As String = DownloadInfo.NameVersion
|
|
|
- Dim Target As String = SelectAs("选择保存位置", DownloadInfo.NameFile, "OptiFine Jar (*.jar)|*.jar")
|
|
|
|
|
|
|
+ Dim Target As String = SelectSaveFile("选择保存位置", DownloadInfo.NameFile, "OptiFine Jar (*.jar)|*.jar")
|
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
|
|
|
|
|
|
'重复任务检查
|
|
'重复任务检查
|
|
|
- For Each OngoingLoader In LoaderTaskbar
|
|
|
|
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
If OngoingLoader.Name <> $"OptiFine {DownloadInfo.NameDisplay} 下载" Then Continue For
|
|
If OngoingLoader.Name <> $"OptiFine {DownloadInfo.NameDisplay} 下载" Then Continue For
|
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
|
Exit Sub
|
|
Exit Sub
|
|
|
Next
|
|
Next
|
|
|
|
|
|
|
|
- Dim Loader As New LoaderCombo(Of DlOptiFineListEntry)("OptiFine " & DownloadInfo.NameDisplay & " 下载", McDownloadOptiFineSaveLoader(DownloadInfo, Target)) With {.OnStateChanged = AddressOf DownloadStateSave}
|
|
|
|
|
|
|
+ Dim Loader As New LoaderCombo(Of DlOptiFineListEntry)("OptiFine " & DownloadInfo.NameDisplay & " 下载", McDownloadOptiFineSaveLoader(DownloadInfo, Target)) With {.OnStateChanged = AddressOf LoaderStateChangedHintOnly}
|
|
|
Loader.Start(DownloadInfo)
|
|
Loader.Start(DownloadInfo)
|
|
|
LoaderTaskbarAdd(Loader)
|
|
LoaderTaskbarAdd(Loader)
|
|
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
@@ -358,10 +440,10 @@ Public Module ModDownloadLib
|
|
|
End SyncLock
|
|
End SyncLock
|
|
|
'添加 Java Wrapper 作为主 Jar
|
|
'添加 Java Wrapper 作为主 Jar
|
|
|
Dim Arguments As String
|
|
Dim Arguments As String
|
|
|
- If UseJavaWrapper Then
|
|
|
|
|
- Arguments = $"-Doolloo.jlw.tmpdir=""{GetJavaWrapperDir()}"" -Duser.home=""{BaseMcFolderHome}"" -cp ""{Target}"" -jar ""{ExtractJavaWrapper()}"" optifine.Installer"
|
|
|
|
|
|
|
+ If UseJavaWrapper AndAlso Not Setup.Get("LaunchAdvanceDisableJLW") Then
|
|
|
|
|
+ Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" -jar ""{ExtractJavaWrapper()}"" optifine.Installer"
|
|
|
Else
|
|
Else
|
|
|
- Arguments = $"-Duser.home=""{BaseMcFolderHome}"" -cp ""{Target}"" optifine.Installer"
|
|
|
|
|
|
|
+ Arguments = $"-Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" optifine.Installer"
|
|
|
End If
|
|
End If
|
|
|
If Java.VersionCode >= 9 Then Arguments = "--add-exports cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED " & Arguments
|
|
If Java.VersionCode >= 9 Then Arguments = "--add-exports cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED " & Arguments
|
|
|
'开始启动
|
|
'开始启动
|
|
@@ -373,7 +455,7 @@ Public Module ModDownloadLib
|
|
|
.CreateNoWindow = True,
|
|
.CreateNoWindow = True,
|
|
|
.RedirectStandardError = True,
|
|
.RedirectStandardError = True,
|
|
|
.RedirectStandardOutput = True,
|
|
.RedirectStandardOutput = True,
|
|
|
- .WorkingDirectory = BaseMcFolderHome
|
|
|
|
|
|
|
+ .WorkingDirectory = ShortenPath(BaseMcFolderHome)
|
|
|
}
|
|
}
|
|
|
If Info.EnvironmentVariables.ContainsKey("appdata") Then
|
|
If Info.EnvironmentVariables.ContainsKey("appdata") Then
|
|
|
Info.EnvironmentVariables("appdata") = BaseMcFolderHome
|
|
Info.EnvironmentVariables("appdata") = BaseMcFolderHome
|
|
@@ -463,76 +545,76 @@ Public Module ModDownloadLib
|
|
|
Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
|
|
Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
|
|
|
Dim IsNewVersion As Boolean = DownloadInfo.Inherit.Contains("w") OrElse Val(DownloadInfo.Inherit.Split(".")(1)) >= 14
|
|
Dim IsNewVersion As Boolean = DownloadInfo.Inherit.Contains("w") OrElse Val(DownloadInfo.Inherit.Split(".")(1)) >= 14
|
|
|
Dim Target As String = If(IsNewVersion,
|
|
Dim Target As String = If(IsNewVersion,
|
|
|
- PathTemp & "Cache\Code\" & DownloadInfo.NameVersion & "_" & GetUuid(),
|
|
|
|
|
- McFolder & "libraries\optifine\OptiFine\" & DownloadInfo.NameFile.Replace("OptiFine_", "").Replace(".jar", "").Replace("preview_", "") & "\" & DownloadInfo.NameFile.Replace("OptiFine_", "OptiFine-").Replace("preview_", ""))
|
|
|
|
|
|
|
+ $"{RequestTaskTempFolder()}OptiFine.jar",
|
|
|
|
|
+ $"{McFolder}libraries\optifine\OptiFine\{DownloadInfo.NameFile.Replace("OptiFine_", "").Replace(".jar", "").Replace("preview_", "")}\{DownloadInfo.NameFile.Replace("OptiFine_", "OptiFine-").Replace("preview_", "")}")
|
|
|
Dim Loaders As New List(Of LoaderBase)
|
|
Dim Loaders As New List(Of LoaderBase)
|
|
|
|
|
|
|
|
'获取下载地址
|
|
'获取下载地址
|
|
|
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)))
|
|
|
|
|
- '启动依赖版本的下载
|
|
|
|
|
- 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)
|
|
|
|
|
- 'BMCLAPI 源
|
|
|
|
|
- If DownloadInfo.IsPreview Then
|
|
|
|
|
- Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & DownloadInfo.Inherit & "/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 & " ", ""))
|
|
|
|
|
- End If
|
|
|
|
|
- '官方源
|
|
|
|
|
- Dim PageData As String
|
|
|
|
|
- Try
|
|
|
|
|
- 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))
|
|
|
|
|
- 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})
|
|
|
|
|
|
|
+ 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)
|
|
|
|
|
+ '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/" & BmclapiInherit & "/HD_U_" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", "").Replace(" ", "/"))
|
|
|
|
|
+ Else
|
|
|
|
|
+ Sources.Add("https://bmclapi2.bangbang93.com/optifine/" & BmclapiInherit & "/HD_U/" & DownloadInfo.NameDisplay.Replace(DownloadInfo.Inherit & " ", ""))
|
|
|
|
|
+ End If
|
|
|
|
|
+ '官方源
|
|
|
|
|
+ Dim PageData As String
|
|
|
|
|
+ Try
|
|
|
|
|
+ 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.Last)
|
|
|
|
|
+ Catch ex As Exception
|
|
|
|
|
+ Log(ex, "获取 OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址失败")
|
|
|
|
|
+ End Try
|
|
|
|
|
+ '构造文件请求
|
|
|
|
|
+ Task.Output = New List(Of NetFile) From {New NetFile(Sources.ToArray, Target, New FileChecker(MinSize:=300 * 1024))}
|
|
|
|
|
+ End Sub) With {.ProgressWeight = 8})
|
|
|
Loaders.Add(New LoaderDownload("下载 OptiFine 主文件", New List(Of NetFile)) With {.ProgressWeight = 8})
|
|
Loaders.Add(New LoaderDownload("下载 OptiFine 主文件", New List(Of NetFile)) With {.ProgressWeight = 8})
|
|
|
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))
|
|
|
|
|
- '等待原版文件下载完成
|
|
|
|
|
- If ClientDownloadLoader Is Nothing Then Exit Sub
|
|
|
|
|
- Dim TargetLoaders As List(Of LoaderBase) =
|
|
|
|
|
- ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
|
|
|
|
- Where(Function(l) l.State <> LoadState.Finished).ToList
|
|
|
|
|
- If TargetLoaders.Any Then Log("[Download] OptiFine 安装正在等待原版文件下载完成")
|
|
|
|
|
- Do While TargetLoaders.Any AndAlso Not Task.IsAborted
|
|
|
|
|
- TargetLoaders = TargetLoaders.Where(Function(l) l.State <> LoadState.Finished).ToList
|
|
|
|
|
- Thread.Sleep(50)
|
|
|
|
|
- Loop
|
|
|
|
|
- If Task.IsAborted Then Exit Sub
|
|
|
|
|
- '拷贝原版文件
|
|
|
|
|
- If Not IsCustomFolder Then Exit Sub
|
|
|
|
|
- SyncLock VanillaSyncLock
|
|
|
|
|
- Dim ClientName As String = GetFolderNameFromPath(ClientFolder)
|
|
|
|
|
- Directory.CreateDirectory(McFolder & "versions\" & DownloadInfo.Inherit)
|
|
|
|
|
- If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".json") Then
|
|
|
|
|
- CopyFile($"{ClientFolder}{ClientName}.json", $"{McFolder}versions\{DownloadInfo.Inherit}\{DownloadInfo.Inherit}.json")
|
|
|
|
|
- End If
|
|
|
|
|
- If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".jar") Then
|
|
|
|
|
- CopyFile($"{ClientFolder}{ClientName}.jar", $"{McFolder}versions\{DownloadInfo.Inherit}\{DownloadInfo.Inherit}.jar")
|
|
|
|
|
- End If
|
|
|
|
|
- End SyncLock
|
|
|
|
|
- End Sub) With {.ProgressWeight = 0.1, .Show = False})
|
|
|
|
|
|
|
+ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
|
|
+ '等待原版文件下载完成
|
|
|
|
|
+ If ClientDownloadLoader Is Nothing Then Exit Sub
|
|
|
|
|
+ Dim TargetLoaders As List(Of LoaderBase) =
|
|
|
|
|
+ ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
|
|
|
|
+ Where(Function(l) l.State <> LoadState.Finished).ToList
|
|
|
|
|
+ If TargetLoaders.Any Then Log("[Download] OptiFine 安装正在等待原版文件下载完成")
|
|
|
|
|
+ Do While TargetLoaders.Any AndAlso Not Task.IsAborted
|
|
|
|
|
+ TargetLoaders = TargetLoaders.Where(Function(l) l.State <> LoadState.Finished).ToList
|
|
|
|
|
+ Thread.Sleep(50)
|
|
|
|
|
+ Loop
|
|
|
|
|
+ If Task.IsAborted Then Exit Sub
|
|
|
|
|
+ '拷贝原版文件
|
|
|
|
|
+ If Not IsCustomFolder Then Exit Sub
|
|
|
|
|
+ SyncLock VanillaSyncLock
|
|
|
|
|
+ Dim ClientName As String = GetFolderNameFromPath(ClientFolder)
|
|
|
|
|
+ Directory.CreateDirectory(McFolder & "versions\" & DownloadInfo.Inherit)
|
|
|
|
|
+ If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".json") Then
|
|
|
|
|
+ CopyFile($"{ClientFolder}{ClientName}.json", $"{McFolder}versions\{DownloadInfo.Inherit}\{DownloadInfo.Inherit}.json")
|
|
|
|
|
+ End If
|
|
|
|
|
+ If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".jar") Then
|
|
|
|
|
+ CopyFile($"{ClientFolder}{ClientName}.jar", $"{McFolder}versions\{DownloadInfo.Inherit}\{DownloadInfo.Inherit}.jar")
|
|
|
|
|
+ End If
|
|
|
|
|
+ End SyncLock
|
|
|
|
|
+ End Sub) With {.ProgressWeight = 0.1, .Show = False})
|
|
|
|
|
|
|
|
'安装(新旧方式均需要原版 Jar 和 Json)
|
|
'安装(新旧方式均需要原版 Jar 和 Json)
|
|
|
If IsNewVersion Then
|
|
If IsNewVersion Then
|
|
|
Log("[Download] 检测为新版 OptiFine:" & DownloadInfo.Inherit)
|
|
Log("[Download] 检测为新版 OptiFine:" & DownloadInfo.Inherit)
|
|
|
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("安装 OptiFine(方式 A)",
|
|
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("安装 OptiFine(方式 A)",
|
|
|
Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
- Dim BaseMcFolderHome As String = PathTemp & "InstallOptiFine" & RandomInteger(0, 100000)
|
|
|
|
|
- Dim BaseMcFolder As String = BaseMcFolderHome & "\.minecraft\"
|
|
|
|
|
|
|
+ Dim BaseMcFolderHome As String = RequestTaskTempFolder()
|
|
|
|
|
+ Dim BaseMcFolder As String = BaseMcFolderHome & ".minecraft\"
|
|
|
Try
|
|
Try
|
|
|
'准备安装环境
|
|
'准备安装环境
|
|
|
If Directory.Exists(BaseMcFolder & "versions\" & DownloadInfo.Inherit) Then
|
|
If Directory.Exists(BaseMcFolder & "versions\" & DownloadInfo.Inherit) Then
|
|
@@ -641,10 +723,12 @@ Retry:
|
|
|
Sub(Task As LoaderTask(Of DlOptiFineListEntry, List(Of NetFile)))
|
|
Sub(Task As LoaderTask(Of DlOptiFineListEntry, List(Of NetFile)))
|
|
|
Dim Sources As New List(Of String)
|
|
Dim Sources As New List(Of String)
|
|
|
'BMCLAPI 源
|
|
'BMCLAPI 源
|
|
|
|
|
+ Dim BmclapiInherit As String = DownloadInfo.Inherit
|
|
|
|
|
+ If BmclapiInherit = "1.8" OrElse BmclapiInherit = "1.9" Then BmclapiInherit &= ".0" '#4281
|
|
|
If DownloadInfo.IsPreview Then
|
|
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
|
|
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
|
|
End If
|
|
|
'官方源
|
|
'官方源
|
|
|
Dim PageData As String
|
|
Dim PageData As String
|
|
@@ -652,7 +736,7 @@ Retry:
|
|
|
PageData = NetGetCodeByClient("https://optifine.net/adloadx?f=" & DownloadInfo.NameFile, New UTF8Encoding(False), 15000, "text/html", True)
|
|
PageData = NetGetCodeByClient("https://optifine.net/adloadx?f=" & DownloadInfo.NameFile, New UTF8Encoding(False), 15000, "text/html", 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.NameDisplay & " 官方下载地址:" & Sources(0))
|
|
|
|
|
|
|
+ Log("[Download] OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址:" & Sources.Last)
|
|
|
Catch ex As Exception
|
|
Catch ex As Exception
|
|
|
Log(ex, "获取 OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址失败")
|
|
Log(ex, "获取 OptiFine " & DownloadInfo.NameDisplay & " 官方下载地址失败")
|
|
|
End Try
|
|
End Try
|
|
@@ -675,7 +759,7 @@ Retry:
|
|
|
.Title = Entry.NameDisplay, .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry,
|
|
.Title = Entry.NameDisplay, .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry,
|
|
|
.Info = If(Entry.IsPreview, "测试版", "正式版") &
|
|
.Info = If(Entry.IsPreview, "测试版", "正式版") &
|
|
|
If(Entry.ReleaseTime = "", "", ",发布于 " & Entry.ReleaseTime) &
|
|
If(Entry.ReleaseTime = "", "", ",发布于 " & Entry.ReleaseTime) &
|
|
|
- If(Entry.RequiredForgeVersion Is Nothing, ",不兼容 Forge", If(Entry.RequiredForgeVersion = "", "", ",推荐 Forge 版本:" & Entry.RequiredForgeVersion)),
|
|
|
|
|
|
|
+ If(Entry.RequiredForgeVersion Is Nothing, ",不兼容 Forge", If(Entry.RequiredForgeVersion = "", "", ",兼容 Forge " & Entry.RequiredForgeVersion)),
|
|
|
.Logo = PathImage & "Blocks/GrassPath.png"
|
|
.Logo = PathImage & "Blocks/GrassPath.png"
|
|
|
}
|
|
}
|
|
|
AddHandler NewItem.Click, OnClick
|
|
AddHandler NewItem.Click, OnClick
|
|
@@ -744,7 +828,7 @@ Retry:
|
|
|
Dim VersionFolder As String = PathMcFolder & "versions\" & VersionName & "\"
|
|
Dim VersionFolder As String = PathMcFolder & "versions\" & VersionName & "\"
|
|
|
|
|
|
|
|
'重复任务检查
|
|
'重复任务检查
|
|
|
- For Each OngoingLoader In LoaderTaskbar
|
|
|
|
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
|
If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
|
Exit Sub
|
|
Exit Sub
|
|
@@ -774,11 +858,11 @@ Retry:
|
|
|
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
|
|
|
- Dim Target As String = SelectAs("选择保存位置", DownloadInfo.FileName.Replace("-SNAPSHOT", ""), "LiteLoader 安装器 (*.jar)|*.jar")
|
|
|
|
|
|
|
+ Dim Target As String = SelectSaveFile("选择保存位置", DownloadInfo.FileName.Replace("-SNAPSHOT", ""), "LiteLoader 安装器 (*.jar)|*.jar")
|
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
|
|
|
|
|
|
'重复任务检查
|
|
'重复任务检查
|
|
|
- For Each OngoingLoader In LoaderTaskbar
|
|
|
|
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
|
If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
|
Exit Sub
|
|
Exit Sub
|
|
@@ -810,7 +894,7 @@ Retry:
|
|
|
End If
|
|
End If
|
|
|
Loaders.Add(New LoaderDownload("下载主文件", New List(Of NetFile) From {New NetFile(Address.ToArray, Target, New FileChecker(MinSize:=1024 * 1024))}) With {.ProgressWeight = 15})
|
|
Loaders.Add(New LoaderDownload("下载主文件", New List(Of NetFile) From {New NetFile(Address.ToArray, Target, New FileChecker(MinSize:=1024 * 1024))}) With {.ProgressWeight = 15})
|
|
|
'启动
|
|
'启动
|
|
|
- Dim Loader As New LoaderCombo(Of DlLiteLoaderListEntry)("LiteLoader " & Id & " 安装器下载", Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
|
|
|
|
|
|
|
+ Dim Loader As New LoaderCombo(Of DlLiteLoaderListEntry)("LiteLoader " & Id & " 安装器下载", Loaders) With {.OnStateChanged = AddressOf LoaderStateChangedHintOnly}
|
|
|
Loader.Start(DownloadInfo)
|
|
Loader.Start(DownloadInfo)
|
|
|
LoaderTaskbarAdd(Loader)
|
|
LoaderTaskbarAdd(Loader)
|
|
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
@@ -954,13 +1038,13 @@ Retry:
|
|
|
|
|
|
|
|
Public Sub McDownloadForgelikeSave(Info As DlForgelikeEntry)
|
|
Public Sub McDownloadForgelikeSave(Info As DlForgelikeEntry)
|
|
|
Try
|
|
Try
|
|
|
- Dim Target As String = SelectAs("选择保存位置", $"{Info.LoaderName}-{Info.Inherit}-{Info.VersionName}.{Info.FileExtension}",
|
|
|
|
|
|
|
+ Dim Target As String = SelectSaveFile("选择保存位置", $"{Info.LoaderName}-{Info.Inherit}-{Info.VersionName}.{Info.FileExtension}",
|
|
|
$"{Info.LoaderName} 安装器 (*.{Info.FileExtension})|*.{Info.FileExtension}")
|
|
$"{Info.LoaderName} 安装器 (*.{Info.FileExtension})|*.{Info.FileExtension}")
|
|
|
Dim DisplayName As String = $"{Info.LoaderName} {Info.Inherit} - {Info.VersionName}"
|
|
Dim DisplayName As String = $"{Info.LoaderName} {Info.Inherit} - {Info.VersionName}"
|
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
|
|
|
|
|
|
'重复任务检查
|
|
'重复任务检查
|
|
|
- For Each OngoingLoader In LoaderTaskbar
|
|
|
|
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
If OngoingLoader.Name <> $"{DisplayName} 下载" Then Continue For
|
|
If OngoingLoader.Name <> $"{DisplayName} 下载" Then Continue For
|
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
|
Exit Sub
|
|
Exit Sub
|
|
@@ -989,7 +1073,7 @@ Retry:
|
|
|
Loaders.Add(New LoaderDownload("下载主文件", Files) With {.ProgressWeight = 6})
|
|
Loaders.Add(New LoaderDownload("下载主文件", Files) With {.ProgressWeight = 6})
|
|
|
|
|
|
|
|
'启动
|
|
'启动
|
|
|
- Dim Loader = New LoaderCombo(Of DlForgelikeEntry)(DisplayName & " 下载", Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
|
|
|
|
|
|
|
+ Dim Loader = New LoaderCombo(Of DlForgelikeEntry)(DisplayName & " 下载", Loaders) With {.OnStateChanged = AddressOf LoaderStateChangedHintOnly}
|
|
|
Loader.Start(Info)
|
|
Loader.Start(Info)
|
|
|
LoaderTaskbarAdd(Loader)
|
|
LoaderTaskbarAdd(Loader)
|
|
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
@@ -1025,8 +1109,8 @@ Retry:
|
|
|
End SyncLock
|
|
End SyncLock
|
|
|
'添加 Java Wrapper 作为主 Jar
|
|
'添加 Java Wrapper 作为主 Jar
|
|
|
Dim Arguments As String
|
|
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}"
|
|
|
|
|
|
|
+ If UseJavaWrapper AndAlso Not Setup.Get("LaunchAdvanceDisableJLW") Then
|
|
|
|
|
+ Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" -jar ""{ExtractJavaWrapper()}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
|
|
Else
|
|
Else
|
|
|
Arguments = $"-cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
|
Arguments = $"-cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
|
|
End If
|
|
End If
|
|
@@ -1175,12 +1259,12 @@ Retry:
|
|
|
End If
|
|
End If
|
|
|
If Not IsNeoForge AndAlso LoaderVersion.StartsWithF("1.") AndAlso LoaderVersion.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)
|
|
'类似 1.19.3-41.2.8 格式,优先使用 Version 中要求的版本而非 Inherit(例如 1.19.3 却使用了 1.19 的 Forge)
|
|
|
- Inherit = LoaderVersion.Before("-")
|
|
|
|
|
- LoaderVersion = LoaderVersion.After("-")
|
|
|
|
|
|
|
+ Inherit = LoaderVersion.BeforeFirst("-")
|
|
|
|
|
+ LoaderVersion = LoaderVersion.AfterLast("-")
|
|
|
End If
|
|
End If
|
|
|
Dim LoaderName As String = If(IsNeoForge, "NeoForge", "Forge")
|
|
Dim LoaderName As String = If(IsNeoForge, "NeoForge", "Forge")
|
|
|
Dim IsCustomFolder As Boolean = McFolder <> PathMcFolder
|
|
Dim IsCustomFolder As Boolean = McFolder <> PathMcFolder
|
|
|
- Dim InstallerAddress As String = $"{PathTemp}Cache\Code\{LoaderName}Install-{LoaderVersion}_{RandomInteger(0, 100000)}"
|
|
|
|
|
|
|
+ Dim InstallerAddress As String = RequestTaskTempFolder() & "forge_installer.jar"
|
|
|
Dim VersionFolder As String = $"{McFolder}versions\{TargetVersion}\"
|
|
Dim VersionFolder As String = $"{McFolder}versions\{TargetVersion}\"
|
|
|
Dim DisplayName As String = $"{LoaderName} {Inherit} - {LoaderVersion}"
|
|
Dim DisplayName As String = $"{LoaderName} {Inherit} - {LoaderVersion}"
|
|
|
Dim Loaders As New List(Of LoaderBase)
|
|
Dim Loaders As New List(Of LoaderBase)
|
|
@@ -1236,7 +1320,7 @@ Retry:
|
|
|
Loaders.Add(New LoaderDownload($"下载 {LoaderName} 主文件", New List(Of NetFile)) With {.ProgressWeight = 9})
|
|
Loaders.Add(New LoaderDownload($"下载 {LoaderName} 主文件", New List(Of NetFile)) With {.ProgressWeight = 9})
|
|
|
|
|
|
|
|
'安装(仅在新版安装时需要原版 Jar)
|
|
'安装(仅在新版安装时需要原版 Jar)
|
|
|
- If IsNeoForge OrElse LoaderVersion.Before(".") >= 20 Then
|
|
|
|
|
|
|
+ If IsNeoForge OrElse LoaderVersion.BeforeFirst(".") >= 20 Then
|
|
|
Log($"[Download] 检测为{If(IsNeoForge, " Neo", "新版 ")}Forge:" & LoaderVersion)
|
|
Log($"[Download] 检测为{If(IsNeoForge, " Neo", "新版 ")}Forge:" & LoaderVersion)
|
|
|
Dim Libs As List(Of McLibToken) = Nothing
|
|
Dim Libs As List(Of McLibToken) = Nothing
|
|
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))($"分析 {LoaderName} 支持库文件",
|
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))($"分析 {LoaderName} 支持库文件",
|
|
@@ -1256,9 +1340,9 @@ Retry:
|
|
|
If Json("data") IsNot Nothing AndAlso Json("data")("MOJMAPS") IsNot Nothing Then
|
|
If Json("data") IsNot Nothing AndAlso Json("data")("MOJMAPS") IsNot Nothing Then
|
|
|
'下载原版 Json 文件
|
|
'下载原版 Json 文件
|
|
|
Task.Progress = 0.4
|
|
Task.Progress = 0.4
|
|
|
- Dim RawJson As JObject = GetJson(NetGetCodeByDownload(DlSourceLauncherOrMetaGet(DlClientListGet(Inherit)), IsJson:=True))
|
|
|
|
|
|
|
+ Dim RawJson As JObject = GetJson(NetGetCodeByLoader(DlSourceLauncherOrMetaGet(DlClientListGet(Inherit)), IsJson:=True))
|
|
|
'[net.minecraft:client:1.17.1-20210706.113038:mappings@txt] 或 @tsrg]
|
|
'[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))
|
|
Dim Address = McLibGet(OriginalName).Replace(".jar", "-mappings." & Json("data")("MOJMAPS")("client").ToString.Trim("[]".ToCharArray()).Split("@")(1))
|
|
|
Dim ClientMappings As JToken = RawJson("downloads")("client_mappings")
|
|
Dim ClientMappings As JToken = RawJson("downloads")("client_mappings")
|
|
|
Libs.Add(New McLibToken With {
|
|
Libs.Add(New McLibToken With {
|
|
@@ -1270,7 +1354,7 @@ Retry:
|
|
|
'去除其中的原始 Forgelike 项
|
|
'去除其中的原始 Forgelike 项
|
|
|
For i = 0 To Libs.Count - 1
|
|
For i = 0 To Libs.Count - 1
|
|
|
If Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}.jar") OrElse
|
|
If Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}.jar") OrElse
|
|
|
-Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}-client.jar") Then
|
|
|
|
|
|
|
+ Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}-client.jar") Then
|
|
|
Log($"[Download] 已从待下载 {LoaderName} 支持库中移除:" & Libs(i).LocalPath, LogLevel.Debug)
|
|
Log($"[Download] 已从待下载 {LoaderName} 支持库中移除:" & Libs(i).LocalPath, LogLevel.Debug)
|
|
|
Libs.RemoveAt(i)
|
|
Libs.RemoveAt(i)
|
|
|
Exit For
|
|
Exit For
|
|
@@ -1381,8 +1465,6 @@ Retry:
|
|
|
'没有新增文件夹
|
|
'没有新增文件夹
|
|
|
Log("[Download] 未找到新增的版本文件夹")
|
|
Log("[Download] 未找到新增的版本文件夹")
|
|
|
End If
|
|
End If
|
|
|
- '新建 mods 文件夹
|
|
|
|
|
- Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\")
|
|
|
|
|
Catch ex As Exception
|
|
Catch ex As Exception
|
|
|
Throw New Exception($"安装新 {LoaderName} 版本失败", ex)
|
|
Throw New Exception($"安装新 {LoaderName} 版本失败", ex)
|
|
|
Finally
|
|
Finally
|
|
@@ -1398,54 +1480,52 @@ Retry:
|
|
|
Else
|
|
Else
|
|
|
Log("[Download] 检测为非新版 Forge:" & LoaderVersion)
|
|
Log("[Download] 检测为非新版 Forge:" & LoaderVersion)
|
|
|
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)($"安装 {LoaderName}(方式 B)",
|
|
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
|
|
|
|
|
- Try
|
|
|
|
|
- '解压并获取信息
|
|
|
|
|
- Installer = New ZipArchive(New FileStream(InstallerAddress, FileMode.Open))
|
|
|
|
|
- Task.Progress = 0.2
|
|
|
|
|
- Dim Json As JObject = GetJson(ReadFile(Installer.GetEntry("install_profile.json").Open))
|
|
|
|
|
- Task.Progress = 0.4
|
|
|
|
|
- '新建版本文件夹
|
|
|
|
|
- Directory.CreateDirectory(VersionFolder)
|
|
|
|
|
- Task.Progress = 0.5
|
|
|
|
|
- If Json("install") Is Nothing Then
|
|
|
|
|
- '中版:Legacy 方式 1
|
|
|
|
|
- Log("[Download] 开始进行 Forge 安装,Legacy 方式 1:" & InstallerAddress)
|
|
|
|
|
- '建立 Json 文件
|
|
|
|
|
- Dim JsonVersion As JObject = GetJson(ReadFile(Installer.GetEntry(Json("json").ToString.TrimStart("/")).Open))
|
|
|
|
|
- JsonVersion("id") = TargetVersion
|
|
|
|
|
- WriteFile(VersionFolder & TargetVersion & ".json", JsonVersion.ToString)
|
|
|
|
|
- Task.Progress = 0.6
|
|
|
|
|
- '解压支持库文件
|
|
|
|
|
- Installer.Dispose()
|
|
|
|
|
- ExtractFile(InstallerAddress, InstallerAddress & "_unrar\")
|
|
|
|
|
- CopyDirectory(InstallerAddress & "_unrar\maven\", McFolder & "libraries\")
|
|
|
|
|
- DeleteDirectory(InstallerAddress & "_unrar\")
|
|
|
|
|
- Else
|
|
|
|
|
- '旧版:Legacy 方式 2
|
|
|
|
|
- Log("[Download] 开始进行 Forge 安装,Legacy 方式 2:" & InstallerAddress)
|
|
|
|
|
- '解压 Jar 文件
|
|
|
|
|
- Dim JarAddress As String = McLibGet(Json("install")("path"), CustomMcFolder:=McFolder)
|
|
|
|
|
- If File.Exists(JarAddress) Then File.Delete(JarAddress)
|
|
|
|
|
- WriteFile(JarAddress, Installer.GetEntry(Json("install")("filePath")).Open)
|
|
|
|
|
- Task.Progress = 0.9
|
|
|
|
|
- '建立 Json 文件
|
|
|
|
|
- Json("versionInfo")("id") = TargetVersion
|
|
|
|
|
- If Json("versionInfo")("inheritsFrom") Is Nothing Then CType(Json("versionInfo"), JObject).Add("inheritsFrom", Inherit)
|
|
|
|
|
- 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
|
|
|
|
|
- Try
|
|
|
|
|
- '清理文件
|
|
|
|
|
- If Installer IsNot Nothing Then Installer.Dispose()
|
|
|
|
|
- If File.Exists(InstallerAddress) Then File.Delete(InstallerAddress)
|
|
|
|
|
- If Directory.Exists(InstallerAddress & "_unrar\") Then DeleteDirectory(InstallerAddress & "_unrar\")
|
|
|
|
|
- Catch ex As Exception
|
|
|
|
|
|
|
+ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
|
|
+ Dim Installer As ZipArchive = Nothing
|
|
|
|
|
+ Try
|
|
|
|
|
+ '解压并获取信息
|
|
|
|
|
+ Installer = New ZipArchive(New FileStream(InstallerAddress, FileMode.Open))
|
|
|
|
|
+ Task.Progress = 0.2
|
|
|
|
|
+ Dim Json As JObject = GetJson(ReadFile(Installer.GetEntry("install_profile.json").Open))
|
|
|
|
|
+ Task.Progress = 0.4
|
|
|
|
|
+ '新建版本文件夹
|
|
|
|
|
+ Directory.CreateDirectory(VersionFolder)
|
|
|
|
|
+ Task.Progress = 0.5
|
|
|
|
|
+ If Json("install") Is Nothing Then
|
|
|
|
|
+ '中版:Legacy 方式 1
|
|
|
|
|
+ Log("[Download] 开始进行 Forge 安装,Legacy 方式 1:" & InstallerAddress)
|
|
|
|
|
+ '建立 Json 文件
|
|
|
|
|
+ Dim JsonVersion As JObject = GetJson(ReadFile(Installer.GetEntry(Json("json").ToString.TrimStart("/")).Open))
|
|
|
|
|
+ JsonVersion("id") = TargetVersion
|
|
|
|
|
+ WriteFile(VersionFolder & TargetVersion & ".json", JsonVersion.ToString)
|
|
|
|
|
+ Task.Progress = 0.6
|
|
|
|
|
+ '解压支持库文件
|
|
|
|
|
+ Installer.Dispose()
|
|
|
|
|
+ ExtractFile(InstallerAddress, InstallerAddress & "_unrar\")
|
|
|
|
|
+ CopyDirectory(InstallerAddress & "_unrar\maven\", McFolder & "libraries\")
|
|
|
|
|
+ DeleteDirectory(InstallerAddress & "_unrar\")
|
|
|
|
|
+ Else
|
|
|
|
|
+ '旧版:Legacy 方式 2
|
|
|
|
|
+ Log("[Download] 开始进行 Forge 安装,Legacy 方式 2:" & InstallerAddress)
|
|
|
|
|
+ '解压 Jar 文件
|
|
|
|
|
+ Dim JarAddress As String = McLibGet(Json("install")("path"), CustomMcFolder:=McFolder)
|
|
|
|
|
+ If File.Exists(JarAddress) Then File.Delete(JarAddress)
|
|
|
|
|
+ WriteFile(JarAddress, Installer.GetEntry(Json("install")("filePath")).Open)
|
|
|
|
|
+ Task.Progress = 0.9
|
|
|
|
|
+ '建立 Json 文件
|
|
|
|
|
+ Json("versionInfo")("id") = TargetVersion
|
|
|
|
|
+ If Json("versionInfo")("inheritsFrom") Is Nothing Then CType(Json("versionInfo"), JObject).Add("inheritsFrom", Inherit)
|
|
|
|
|
+ WriteFile(VersionFolder & TargetVersion & ".json", Json("versionInfo").ToString)
|
|
|
|
|
+ End If
|
|
|
|
|
+ Catch ex As Exception
|
|
|
|
|
+ Throw New Exception("非新版方式安装 Forge 失败", ex)
|
|
|
|
|
+ Finally
|
|
|
|
|
+ Try
|
|
|
|
|
+ '清理文件
|
|
|
|
|
+ If Installer IsNot Nothing Then Installer.Dispose()
|
|
|
|
|
+ If File.Exists(InstallerAddress) Then File.Delete(InstallerAddress)
|
|
|
|
|
+ If Directory.Exists(InstallerAddress & "_unrar\") Then DeleteDirectory(InstallerAddress & "_unrar\")
|
|
|
|
|
+ Catch ex As Exception
|
|
|
Log(ex, "非新版方式安装 Forge 清理文件时出错")
|
|
Log(ex, "非新版方式安装 Forge 清理文件时出错")
|
|
|
End Try
|
|
End Try
|
|
|
End Try
|
|
End Try
|
|
@@ -1460,6 +1540,8 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
#Region "Forge 下载菜单"
|
|
#Region "Forge 下载菜单"
|
|
|
|
|
|
|
|
Public Sub ForgeDownloadListItemPreload(Stack As StackPanel, Entries As List(Of DlForgeVersionEntry), OnClick As MyListItem.ClickEventHandler, IsSaveOnly As Boolean)
|
|
Public Sub ForgeDownloadListItemPreload(Stack As StackPanel, Entries As List(Of DlForgeVersionEntry), OnClick As MyListItem.ClickEventHandler, IsSaveOnly As Boolean)
|
|
|
|
|
+ '如果只有一个版本,则不特别列出
|
|
|
|
|
+ If Entries.Count = 1 Then Return
|
|
|
'获取推荐版本与最新版本
|
|
'获取推荐版本与最新版本
|
|
|
Dim FreshVersion As DlForgeVersionEntry = Nothing
|
|
Dim FreshVersion As DlForgeVersionEntry = Nothing
|
|
|
If Entries.Any Then
|
|
If Entries.Any Then
|
|
@@ -1562,7 +1644,7 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
RunInNewThread(Sub()
|
|
RunInNewThread(Sub()
|
|
|
Try
|
|
Try
|
|
|
Log("[Download] 刷新 Forge 推荐版本缓存开始")
|
|
Log("[Download] 刷新 Forge 推荐版本缓存开始")
|
|
|
- Dim Result As String = NetGetCodeByDownload("https://bmclapi2.bangbang93.com/forge/promos")
|
|
|
|
|
|
|
+ Dim Result As String = NetGetCodeByLoader("https://bmclapi2.bangbang93.com/forge/promos")
|
|
|
If Result.Length < 1000 Then Throw New Exception("获取的结果过短(" & Result & ")")
|
|
If Result.Length < 1000 Then Throw New Exception("获取的结果过短(" & Result & ")")
|
|
|
Dim ResultJson As JContainer = GetJson(Result)
|
|
Dim ResultJson As JContainer = GetJson(Result)
|
|
|
'获取所有推荐版本列表
|
|
'获取所有推荐版本列表
|
|
@@ -1611,6 +1693,8 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
#Region "NeoForge 下载菜单"
|
|
#Region "NeoForge 下载菜单"
|
|
|
|
|
|
|
|
Public Sub NeoForgeDownloadListItemPreload(Stack As StackPanel, Entries As List(Of DlNeoForgeListEntry), OnClick As MyListItem.ClickEventHandler, IsSaveOnly As Boolean)
|
|
Public Sub NeoForgeDownloadListItemPreload(Stack As StackPanel, Entries As List(Of DlNeoForgeListEntry), OnClick As MyListItem.ClickEventHandler, IsSaveOnly As Boolean)
|
|
|
|
|
+ '如果只有一个版本,则不特别列出
|
|
|
|
|
+ If Entries.Count = 1 Then Return
|
|
|
'获取最新稳定版和测试版
|
|
'获取最新稳定版和测试版
|
|
|
Dim FreshStableVersion As DlNeoForgeListEntry = Nothing
|
|
Dim FreshStableVersion As DlNeoForgeListEntry = Nothing
|
|
|
Dim FreshBetaVersion As DlNeoForgeListEntry = Nothing
|
|
Dim FreshBetaVersion As DlNeoForgeListEntry = Nothing
|
|
@@ -1710,11 +1794,11 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
Dim Url As String = DownloadInfo("url").ToString
|
|
Dim Url As String = DownloadInfo("url").ToString
|
|
|
Dim FileName As String = GetFileNameFromPath(Url)
|
|
Dim FileName As String = GetFileNameFromPath(Url)
|
|
|
Dim Version As String = GetFileNameFromPath(DownloadInfo("version").ToString)
|
|
Dim Version As String = GetFileNameFromPath(DownloadInfo("version").ToString)
|
|
|
- Dim Target As String = SelectAs("选择保存位置", FileName, "Fabric 安装器 (*.jar)|*.jar")
|
|
|
|
|
|
|
+ Dim Target As String = SelectSaveFile("选择保存位置", FileName, "Fabric 安装器 (*.jar)|*.jar")
|
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
If Not Target.Contains("\") Then Exit Sub
|
|
|
|
|
|
|
|
'重复任务检查
|
|
'重复任务检查
|
|
|
- For Each OngoingLoader In LoaderTaskbar
|
|
|
|
|
|
|
+ For Each OngoingLoader In LoaderTaskbar.ToList()
|
|
|
If OngoingLoader.Name <> $"Fabric {Version} 安装器下载" Then Continue For
|
|
If OngoingLoader.Name <> $"Fabric {Version} 安装器下载" Then Continue For
|
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
Hint("该版本正在下载中!", HintType.Critical)
|
|
|
Exit Sub
|
|
Exit Sub
|
|
@@ -1728,7 +1812,7 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
Address.Add(Url)
|
|
Address.Add(Url)
|
|
|
Loaders.Add(New LoaderDownload("下载主文件", New List(Of NetFile) From {New NetFile(Address.ToArray, Target, New FileChecker(MinSize:=1024 * 64))}) With {.ProgressWeight = 15})
|
|
Loaders.Add(New LoaderDownload("下载主文件", New List(Of NetFile) From {New NetFile(Address.ToArray, Target, New FileChecker(MinSize:=1024 * 64))}) With {.ProgressWeight = 15})
|
|
|
'启动
|
|
'启动
|
|
|
- Dim Loader As New LoaderCombo(Of JObject)("Fabric " & Version & " 安装器下载", Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
|
|
|
|
|
|
|
+ Dim Loader As New LoaderCombo(Of JObject)("Fabric " & Version & " 安装器下载", Loaders) With {.OnStateChanged = AddressOf LoaderStateChangedHintOnly}
|
|
|
Loader.Start(DownloadInfo)
|
|
Loader.Start(DownloadInfo)
|
|
|
LoaderTaskbarAdd(Loader)
|
|
LoaderTaskbarAdd(Loader)
|
|
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
|
@@ -1765,8 +1849,6 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
"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))}
|
|
|
- '新建 mods 文件夹
|
|
|
|
|
- Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\")
|
|
|
|
|
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})
|
|
|
|
|
|
|
@@ -1798,7 +1880,7 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
Public Function FabricApiDownloadListItem(Entry As CompFile, OnClick As MyListItem.ClickEventHandler) As MyListItem
|
|
Public Function FabricApiDownloadListItem(Entry As CompFile, OnClick As MyListItem.ClickEventHandler) As MyListItem
|
|
|
'建立控件
|
|
'建立控件
|
|
|
Dim NewItem As New MyListItem With {
|
|
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"),
|
|
.Info = Entry.StatusDescription & ",发布于 " & Entry.ReleaseDate.ToString("yyyy'/'MM'/'dd HH':'mm"),
|
|
|
.Logo = PathImage & "Blocks/Fabric.png"
|
|
.Logo = PathImage & "Blocks/Fabric.png"
|
|
|
}
|
|
}
|
|
@@ -1898,29 +1980,26 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
End Class
|
|
End Class
|
|
|
|
|
|
|
|
''' <summary>
|
|
''' <summary>
|
|
|
- ''' 安装加载器状态改变后进行提示和重载文件夹列表的方法。
|
|
|
|
|
|
|
+ ''' 在加载器状态改变后显示一条提示。
|
|
|
|
|
+ ''' 不会进行任何其他操作。
|
|
|
''' </summary>
|
|
''' </summary>
|
|
|
- Public Sub McInstallState(Loader)
|
|
|
|
|
|
|
+ Public Sub LoaderStateChangedHintOnly(Loader)
|
|
|
Select Case Loader.State
|
|
Select Case Loader.State
|
|
|
Case LoadState.Finished
|
|
Case LoadState.Finished
|
|
|
- WriteIni(PathMcFolder & "PCL.ini", "VersionCache", "") '清空缓存(合并安装会先生成文件夹,这会在刷新时误判为可以使用缓存)
|
|
|
|
|
Hint(Loader.Name & "成功!", HintType.Finish)
|
|
Hint(Loader.Name & "成功!", HintType.Finish)
|
|
|
Case LoadState.Failed
|
|
Case LoadState.Failed
|
|
|
Hint(Loader.Name & "失败:" & GetExceptionSummary(Loader.Error), HintType.Critical)
|
|
Hint(Loader.Name & "失败:" & GetExceptionSummary(Loader.Error), HintType.Critical)
|
|
|
Case LoadState.Aborted
|
|
Case LoadState.Aborted
|
|
|
Hint(Loader.Name & "已取消!", HintType.Info)
|
|
Hint(Loader.Name & "已取消!", HintType.Info)
|
|
|
- Case LoadState.Loading
|
|
|
|
|
- Exit Sub '不重新加载版本列表
|
|
|
|
|
End Select
|
|
End Select
|
|
|
- McInstallFailedClearFolder(Loader)
|
|
|
|
|
- LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
|
|
|
|
End Sub
|
|
End Sub
|
|
|
''' <summary>
|
|
''' <summary>
|
|
|
- ''' 安装加载器状态改变后进行提示的方法。它不会在失败时删除文件夹,也不会刷新 MC 文件夹。
|
|
|
|
|
|
|
+ ''' 安装加载器状态改变后进行提示和重载文件夹列表的方法。
|
|
|
''' </summary>
|
|
''' </summary>
|
|
|
- Public Sub DownloadStateSave(Loader)
|
|
|
|
|
|
|
+ Public Sub McInstallState(Loader)
|
|
|
Select Case Loader.State
|
|
Select Case Loader.State
|
|
|
Case LoadState.Finished
|
|
Case LoadState.Finished
|
|
|
|
|
+ WriteIni(PathMcFolder & "PCL.ini", "VersionCache", "") '清空缓存(合并安装会先生成文件夹,这会在刷新时误判为可以使用缓存)
|
|
|
Hint(Loader.Name & "成功!", HintType.Finish)
|
|
Hint(Loader.Name & "成功!", HintType.Finish)
|
|
|
Case LoadState.Failed
|
|
Case LoadState.Failed
|
|
|
Hint(Loader.Name & "失败:" & GetExceptionSummary(Loader.Error), HintType.Critical)
|
|
Hint(Loader.Name & "失败:" & GetExceptionSummary(Loader.Error), HintType.Critical)
|
|
@@ -1929,6 +2008,8 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
Case LoadState.Loading
|
|
Case LoadState.Loading
|
|
|
Exit Sub '不重新加载版本列表
|
|
Exit Sub '不重新加载版本列表
|
|
|
End Select
|
|
End Select
|
|
|
|
|
+ McInstallFailedClearFolder(Loader)
|
|
|
|
|
+ LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
|
|
End Sub
|
|
End Sub
|
|
|
Public Sub McInstallFailedClearFolder(Loader)
|
|
Public Sub McInstallFailedClearFolder(Loader)
|
|
|
Try
|
|
Try
|
|
@@ -1963,6 +2044,8 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
FrmMain.BtnExtraDownload.Ribble()
|
|
FrmMain.BtnExtraDownload.Ribble()
|
|
|
Return True
|
|
Return True
|
|
|
|
|
|
|
|
|
|
+ Catch ex As CancelledException
|
|
|
|
|
+ Return False
|
|
|
Catch ex As Exception
|
|
Catch ex As Exception
|
|
|
Log(ex, "开始合并安装失败", LogLevel.Feedback)
|
|
Log(ex, "开始合并安装失败", LogLevel.Feedback)
|
|
|
Return False
|
|
Return False
|
|
@@ -1970,35 +2053,18 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
End Function
|
|
End Function
|
|
|
''' <summary>
|
|
''' <summary>
|
|
|
''' 获取合并安装加载器列表,并进行前期的缓存清理与 Java 检查工作。
|
|
''' 获取合并安装加载器列表,并进行前期的缓存清理与 Java 检查工作。
|
|
|
- ''' 如果出现已知问题且已提示用户,则返回 Nothing。出现异常则直接抛出。
|
|
|
|
|
''' </summary>
|
|
''' </summary>
|
|
|
|
|
+ ''' <exception cref="CancelledException" />
|
|
|
Public Function McInstallLoader(Request As McInstallRequest, Optional DontFixLibraries As Boolean = False) As List(Of LoaderBase)
|
|
Public Function McInstallLoader(Request As McInstallRequest, Optional DontFixLibraries As Boolean = False) As List(Of LoaderBase)
|
|
|
- '获取缓存目录
|
|
|
|
|
- Dim PathInstallTemp As String
|
|
|
|
|
- If PathTemp.Contains(" ") AndAlso (Request.OptiFineEntry IsNot Nothing OrElse Request.ForgeEntry IsNot Nothing OrElse Request.NeoForgeEntry IsNot Nothing) Then
|
|
|
|
|
- PathInstallTemp = OsDrive & "ProgramData\PCL\Install\"
|
|
|
|
|
- Else
|
|
|
|
|
- PathInstallTemp = PathTemp & "Install\"
|
|
|
|
|
- End If
|
|
|
|
|
-
|
|
|
|
|
- '清理缓存
|
|
|
|
|
- Try
|
|
|
|
|
- If Not IsInstallTempCleared Then
|
|
|
|
|
- IsInstallTempCleared = True
|
|
|
|
|
- DeleteDirectory(PathInstallTemp, True)
|
|
|
|
|
- Log("[Download] 已清理合并安装缓存")
|
|
|
|
|
- End If
|
|
|
|
|
- Catch ex As Exception
|
|
|
|
|
- Log(ex, "清理合并安装缓存失败")
|
|
|
|
|
- End Try
|
|
|
|
|
|
|
+ '获取缓存目录(安装 Mod 加载器的文件夹不能包含空格)
|
|
|
|
|
+ Dim TempMcFolder As String = RequestTaskTempFolder(Request.OptiFineEntry IsNot Nothing OrElse Request.ForgeEntry IsNot Nothing OrElse Request.NeoForgeEntry IsNot Nothing)
|
|
|
|
|
|
|
|
'获取参数
|
|
'获取参数
|
|
|
- Dim OutputFolder As String = PathMcFolder & "versions\" & Request.TargetVersionName & "\"
|
|
|
|
|
- Dim TempMcFolder As String = PathInstallTemp & Request.TargetVersionName.GetHashCode() & "\"
|
|
|
|
|
|
|
+ Dim VersionFolder As String = PathMcFolder & "versions\" & Request.TargetVersionName & "\"
|
|
|
If Directory.Exists(TempMcFolder) Then DeleteDirectory(TempMcFolder)
|
|
If Directory.Exists(TempMcFolder) Then DeleteDirectory(TempMcFolder)
|
|
|
Dim OptiFineFolder As String = Nothing
|
|
Dim OptiFineFolder As String = Nothing
|
|
|
If Request.OptiFineVersion IsNot Nothing Then
|
|
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 {
|
|
Request.OptiFineEntry = New DlOptiFineListEntry With {
|
|
|
.NameDisplay = Request.MinecraftName & " " & Request.OptiFineVersion.Replace("HD_U_", "").Replace("_", "").Replace("pre", " pre"),
|
|
.NameDisplay = Request.MinecraftName & " " & Request.OptiFineVersion.Replace("HD_U_", "").Replace("_", "").Replace("pre", " pre"),
|
|
|
.Inherit = Request.MinecraftName,
|
|
.Inherit = Request.MinecraftName,
|
|
@@ -2020,14 +2086,17 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
Dim LiteLoaderFolder As String = Nothing
|
|
Dim LiteLoaderFolder As String = Nothing
|
|
|
If Request.LiteLoaderEntry IsNot Nothing Then LiteLoaderFolder = TempMcFolder & "versions\" & Request.MinecraftName & "-LiteLoader"
|
|
If Request.LiteLoaderEntry IsNot Nothing Then LiteLoaderFolder = TempMcFolder & "versions\" & Request.MinecraftName & "-LiteLoader"
|
|
|
|
|
|
|
|
|
|
+ '决定版本隔离情况(#5970)
|
|
|
|
|
+ Dim Modable As Boolean = Request.FabricVersion IsNot Nothing OrElse Request.ForgeEntry IsNot Nothing OrElse Request.NeoForgeEntry IsNot Nothing OrElse Request.LiteLoaderEntry IsNot Nothing
|
|
|
|
|
+ Dim Version As New McVersion(VersionFolder)
|
|
|
|
|
+ Version.InitPathIndie(Modable)
|
|
|
|
|
+ Dim ModsFolder As String = If(Modable, VersionFolder, PathMcFolder) & "mods\"
|
|
|
|
|
+
|
|
|
'判断 OptiFine 是否作为 Mod 进行下载
|
|
'判断 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 OptiFineAsMod As Boolean = Request.OptiFineEntry IsNot Nothing AndAlso Modable '选择了 OptiFine 与任意 Mod 加载器
|
|
|
If OptiFineAsMod Then
|
|
If OptiFineAsMod Then
|
|
|
Log("[Download] OptiFine 将作为 Mod 进行下载")
|
|
Log("[Download] OptiFine 将作为 Mod 进行下载")
|
|
|
- OptiFineFolder = New McVersion(OutputFolder).GetPathIndie(True) & "mods\"
|
|
|
|
|
|
|
+ OptiFineFolder = ModsFolder
|
|
|
End If
|
|
End If
|
|
|
|
|
|
|
|
'记录日志
|
|
'记录日志
|
|
@@ -2039,21 +2108,21 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
Log("[Download] 对应的原版版本:" & Request.MinecraftName)
|
|
Log("[Download] 对应的原版版本:" & Request.MinecraftName)
|
|
|
|
|
|
|
|
'重复版本检查
|
|
'重复版本检查
|
|
|
- If File.Exists(OutputFolder & Request.TargetVersionName & ".json") Then
|
|
|
|
|
|
|
+ If File.Exists($"{VersionFolder}{Request.TargetVersionName}.json") Then
|
|
|
Hint("版本 " & Request.TargetVersionName & " 已经存在!", HintType.Critical)
|
|
Hint("版本 " & Request.TargetVersionName & " 已经存在!", HintType.Critical)
|
|
|
- Return Nothing
|
|
|
|
|
|
|
+ Throw New CancelledException
|
|
|
End If
|
|
End If
|
|
|
|
|
|
|
|
Dim LoaderList As New List(Of LoaderBase)
|
|
Dim LoaderList As New List(Of LoaderBase)
|
|
|
'添加忽略标识
|
|
'添加忽略标识
|
|
|
- LoaderList.Add(New LoaderTask(Of Integer, Integer)("添加忽略标识", Sub() WriteFile(OutputFolder & ".pclignore", "用于临时地在 PCL 的版本列表中屏蔽此版本。")) With {.Show = False, .Block = False})
|
|
|
|
|
|
|
+ LoaderList.Add(New LoaderTask(Of Integer, Integer)("添加忽略标识", Sub() WriteFile(VersionFolder & ".pclignore", "用于临时地在 PCL 的版本列表中屏蔽此版本。")) With {.Show = False, .Block = False})
|
|
|
'Fabric API
|
|
'Fabric API
|
|
|
If Request.FabricApi IsNot Nothing Then
|
|
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
|
|
End If
|
|
|
'OptiFabric
|
|
'OptiFabric
|
|
|
If Request.OptiFabric IsNot Nothing Then
|
|
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
|
|
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}
|
|
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}
|
|
@@ -2085,25 +2154,29 @@ Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
|
|
'合并安装
|
|
'合并安装
|
|
|
LoaderList.Add(New LoaderTask(Of String, String)("安装游戏",
|
|
LoaderList.Add(New LoaderTask(Of String, String)("安装游戏",
|
|
|
Sub(Task As LoaderTask(Of String, String))
|
|
Sub(Task As LoaderTask(Of String, String))
|
|
|
- InstallMerge(OutputFolder, OutputFolder, OptiFineFolder, OptiFineAsMod, ForgeFolder, Request.ForgeVersion, NeoForgeFolder, Request.NeoForgeVersion, FabricFolder, LiteLoaderFolder)
|
|
|
|
|
|
|
+ InstallMerge(VersionFolder, VersionFolder, OptiFineFolder, OptiFineAsMod, ForgeFolder, Request.ForgeVersion, NeoForgeFolder, Request.NeoForgeVersion, FabricFolder, LiteLoaderFolder)
|
|
|
Task.Progress = 0.3
|
|
Task.Progress = 0.3
|
|
|
If Directory.Exists(TempMcFolder & "libraries") Then CopyDirectory(TempMcFolder & "libraries", PathMcFolder & "libraries")
|
|
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})
|
|
End Sub) With {.ProgressWeight = 2, .Block = True})
|
|
|
'补全文件
|
|
'补全文件
|
|
|
If Not DontFixLibraries AndAlso
|
|
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)
|
|
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 LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
|
LoadersLib.Add(New LoaderDownload("下载游戏支持库文件(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 7, .Show = False})
|
|
LoadersLib.Add(New LoaderDownload("下载游戏支持库文件(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 7, .Show = False})
|
|
|
LoaderList.Add(New LoaderCombo(Of String)("下载游戏支持库文件", LoadersLib) With {.ProgressWeight = 8})
|
|
LoaderList.Add(New LoaderCombo(Of String)("下载游戏支持库文件", LoadersLib) With {.ProgressWeight = 8})
|
|
|
End If
|
|
End If
|
|
|
'删除忽略标识
|
|
'删除忽略标识
|
|
|
- LoaderList.Add(New LoaderTask(Of Integer, Integer)("删除忽略标识", Sub() File.Delete(OutputFolder & ".pclignore")) With {.Show = False})
|
|
|
|
|
|
|
+ LoaderList.Add(New LoaderTask(Of Integer, Integer)("删除忽略标识", Sub() File.Delete(VersionFolder & ".pclignore")) With {.Show = False})
|
|
|
'总加载器
|
|
'总加载器
|
|
|
Return LoaderList
|
|
Return LoaderList
|
|
|
End Function
|
|
End Function
|
|
|
- Private IsInstallTempCleared As Boolean = False
|
|
|
|
|
|
|
|
|
|
''' <summary>
|
|
''' <summary>
|
|
|
''' 将多个版本 Json 进行合并,如果目标已存在则直接覆盖。失败会抛出异常。
|
|
''' 将多个版本 Json 进行合并,如果目标已存在则直接覆盖。失败会抛出异常。
|