Merge branch 'neoforge' into neoforge
This commit is contained in:
@@ -1019,6 +1019,7 @@ Install:
|
|||||||
DownloadClient = 4
|
DownloadClient = 4
|
||||||
DownloadOptiFine = 5
|
DownloadOptiFine = 5
|
||||||
DownloadForge = 6
|
DownloadForge = 6
|
||||||
|
DownloadNeoForge = 13
|
||||||
DownloadFabric = 7
|
DownloadFabric = 7
|
||||||
DownloadLiteLoader = 8
|
DownloadLiteLoader = 8
|
||||||
DownloadMod = 10
|
DownloadMod = 10
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -725,7 +725,7 @@
|
|||||||
|
|
||||||
Public Class DlNeoForgeVersionEntry
|
Public Class DlNeoForgeVersionEntry
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 完整的版本名,如 “14.22.1.2478”。
|
''' 完整的版本名,如 “neoforge-20.4.30-beta”。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Public Version As String
|
Public Version As String
|
||||||
''' <summary>
|
''' <summary>
|
||||||
@@ -753,7 +753,7 @@
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
Public IsBeta As Boolean = False
|
Public IsBeta As Boolean = False
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 标准的版本号
|
''' 标准的版本号,如 “20.4.30”。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Public StdVersion As String
|
Public StdVersion As String
|
||||||
Public Structure DlNeoForgeListResult
|
Public Structure DlNeoForgeListResult
|
||||||
@@ -804,7 +804,7 @@
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
Public ReadOnly Property FileName As String
|
Public ReadOnly Property FileName As String
|
||||||
Get
|
Get
|
||||||
Return "neoforge-" & "-" & StdVersion & "-" & "installer" & "." & "jar"
|
Return "neoforge-" & StdVersion & If(IsBeta, "-beta", "") & "-" & "installer" & "." & "jar"
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
''' <summary>
|
''' <summary>
|
||||||
@@ -815,15 +815,15 @@
|
|||||||
If Category = "installer" Then
|
If Category = "installer" Then
|
||||||
Return "jar"
|
Return "jar"
|
||||||
Else
|
Else
|
||||||
Return "zip"
|
Return "jar"
|
||||||
End If
|
End If
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' NeoForge 版本列表,主加载器。
|
''' NeoForge 版本列表,主加载器。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
|
Public DlNeoForgeListLoader As New LoaderTask(Of String, List(Of DlNeoForgeVersionEntry))("DlNeoForgeList Main", AddressOf DlNeoForgeVersionMain)
|
||||||
Public Sub DlNeoForgeVersionMain(Loader As LoaderTask(Of String, List(Of DlNeoForgeVersionEntry)))
|
Public Sub DlNeoForgeVersionMain(Loader As LoaderTask(Of String, List(Of DlNeoForgeVersionEntry)))
|
||||||
Dim DlNeoForgeVersionOfficialLoader As New LoaderTask(Of String, List(Of DlNeoForgeVersionEntry))("DlNeoForgeVersion Official", AddressOf DlNeoForgeVersionOfficialMain)
|
Dim DlNeoForgeVersionOfficialLoader As New LoaderTask(Of String, List(Of DlNeoForgeVersionEntry))("DlNeoForgeVersion Official", AddressOf DlNeoForgeVersionOfficialMain)
|
||||||
Dim DlNeoForgeVersionBmclapiLoader As New LoaderTask(Of String, List(Of DlNeoForgeVersionEntry))("DlNeoForgeVersion Bmclapi", AddressOf DlNeoForgeVersionBmclapiMain)
|
Dim DlNeoForgeVersionBmclapiLoader As New LoaderTask(Of String, List(Of DlNeoForgeVersionEntry))("DlNeoForgeVersion Bmclapi", AddressOf DlNeoForgeVersionBmclapiMain)
|
||||||
@@ -880,19 +880,21 @@
|
|||||||
Dim Name As String '存储 rawVersion,貌似变化更加频繁
|
Dim Name As String '存储 rawVersion,貌似变化更加频繁
|
||||||
Dim StdVersion As String '存储 version,相对规则
|
Dim StdVersion As String '存储 version,相对规则
|
||||||
Dim IsBeta As Boolean
|
Dim IsBeta As Boolean
|
||||||
If Token("rawVersion").Contains("-beta") Then
|
Dim rawVersion As String = Token("rawVersion")
|
||||||
StdVersion = Token("version").ToString() - "-beta"
|
If rawVersion.Contains("-beta") Then
|
||||||
|
StdVersion = Token("version").ToString().Replace("neoforge-", "").Replace("-beta", "")
|
||||||
IsBeta = True
|
IsBeta = True
|
||||||
Else
|
Else
|
||||||
StdVersion = Token("version").ToString()
|
StdVersion = Token("version").ToString().Replace("neoforge-", "")
|
||||||
IsBeta = False
|
IsBeta = False
|
||||||
End If
|
End If
|
||||||
Name = Token("rawVersion")
|
Name = rawVersion
|
||||||
Dim Inherit As String = Token("mcversion")
|
Dim Inherit As String = Token("mcversion")
|
||||||
Dim Entry = New DlNeoForgeVersionEntry With {.Version = Name, .Inherit = Inherit, .IsBeta = IsBeta, .StdVersion = StdVersion}
|
Dim Entry = New DlNeoForgeVersionEntry With {.Version = Name, .Inherit = Inherit, .IsBeta = IsBeta, .StdVersion = StdVersion}
|
||||||
Versions.Add(Entry)
|
Versions.Add(Entry)
|
||||||
Next
|
Next
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
|
MyMsgBox(ex.ToString(), "错误")
|
||||||
Throw New Exception("版本列表解析失败(" & Json.ToString & ")", ex)
|
Throw New Exception("版本列表解析失败(" & Json.ToString & ")", ex)
|
||||||
End Try
|
End Try
|
||||||
If Not Versions.Any() Then Throw New Exception("没有可用版本")
|
If Not Versions.Any() Then Throw New Exception("没有可用版本")
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
Imports System.IO.Compression
|
Imports System.IO.Compression
|
||||||
|
Imports MS.Internal
|
||||||
|
|
||||||
Public Module ModMinecraft
|
Public Module ModMinecraft
|
||||||
|
|
||||||
@@ -345,7 +346,7 @@ Public Module ModMinecraft
|
|||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
'从 Forge Arguments 中获取版本号
|
'从 Forge / NeoForge Arguments 中获取版本号
|
||||||
If JsonObject("arguments") IsNot Nothing AndAlso JsonObject("arguments")("game") IsNot Nothing Then
|
If JsonObject("arguments") IsNot Nothing AndAlso JsonObject("arguments")("game") IsNot Nothing Then
|
||||||
Dim Mark As Boolean = False
|
Dim Mark As Boolean = False
|
||||||
For Each Argument In JsonObject("arguments")("game")
|
For Each Argument In JsonObject("arguments")("game")
|
||||||
@@ -729,12 +730,20 @@ Recheck:
|
|||||||
State = McVersionState.Fabric
|
State = McVersionState.Fabric
|
||||||
Version.FabricVersion = If(RegexSeek(RealJson, "(?<=(net.fabricmc:fabric-loader:)|(org.quiltmc:quilt-loader:))[0-9\.]+(\+build.[0-9]+)?"), "未知版本").Replace("+build", "")
|
Version.FabricVersion = If(RegexSeek(RealJson, "(?<=(net.fabricmc:fabric-loader:)|(org.quiltmc:quilt-loader:))[0-9\.]+(\+build.[0-9]+)?"), "未知版本").Replace("+build", "")
|
||||||
Version.HasFabric = True
|
Version.HasFabric = True
|
||||||
ElseIf RealJson.Contains("minecraftforge") Then
|
ElseIf RealJson.Contains("minecraftforge") AndAlso Not RealJson.Contains("neoforge") Then
|
||||||
State = McVersionState.Forge
|
State = McVersionState.Forge
|
||||||
Version.ForgeVersion = RegexSeek(RealJson, "(?<=forge:[0-9\.]+(_pre[0-9]*)?\-)[0-9\.]+")
|
Version.ForgeVersion = RegexSeek(RealJson, "(?<=forge:[0-9\.]+(_pre[0-9]*)?\-)[0-9\.]+")
|
||||||
If Version.ForgeVersion Is Nothing Then Version.ForgeVersion = RegexSeek(RealJson, "(?<=net\.minecraftforge:minecraftforge:)[0-9\.]+")
|
If Version.ForgeVersion Is Nothing Then Version.ForgeVersion = RegexSeek(RealJson, "(?<=net\.minecraftforge:minecraftforge:)[0-9\.]+")
|
||||||
If Version.ForgeVersion Is Nothing Then Version.ForgeVersion = If(RegexSeek(RealJson, "(?<=net\.minecraftforge:fmlloader:[0-9\.]+-)[0-9\.]+"), "未知版本")
|
If Version.ForgeVersion Is Nothing Then Version.ForgeVersion = If(RegexSeek(RealJson, "(?<=net\.minecraftforge:fmlloader:[0-9\.]+-)[0-9\.]+"), "未知版本")
|
||||||
Version.HasForge = True
|
Version.HasForge = True
|
||||||
|
ElseIf RealJson.Contains("neoforge") Then
|
||||||
|
State = McVersionState.NeoForge
|
||||||
|
Dim JsonStr1() As String = RealJson.Replace(" ", "").Split("""--fml.neoForgeVersion""," & vbCrLf & """") '这里的实现比较抽象,正则我写不会
|
||||||
|
Dim JsonStr2() As String = JsonStr1(1).Split("""")
|
||||||
|
Version.NeoForgeVersion = JsonStr2(0)
|
||||||
|
If Version.NeoForgeVersion Is Nothing Then Version.NeoForgeVersion = RegexSeek(RealJson, "(?<=""--fml.neoForgeVersion"",)[0-9\.]+")
|
||||||
|
If Version.NeoForgeVersion Is Nothing Then Version.NeoForgeVersion = If(RegexSeek(RealJson, "(?<=net\.minecraftforge:fmlloader:[0-9\.]+-)[0-9\.]+"), "未知版本")
|
||||||
|
Version.HasNeoForge = True
|
||||||
End If
|
End If
|
||||||
Version.IsApiLoaded = True
|
Version.IsApiLoaded = True
|
||||||
End Select
|
End Select
|
||||||
@@ -752,6 +761,8 @@ ExitDataLoad:
|
|||||||
Logo = PathImage & "Blocks/CobbleStone.png"
|
Logo = PathImage & "Blocks/CobbleStone.png"
|
||||||
Case McVersionState.Forge
|
Case McVersionState.Forge
|
||||||
Logo = PathImage & "Blocks/Anvil.png"
|
Logo = PathImage & "Blocks/Anvil.png"
|
||||||
|
Case McVersionState.NeoForge
|
||||||
|
Logo = PathImage & "Icons/NeoForged.png"
|
||||||
Case McVersionState.Fabric
|
Case McVersionState.Fabric
|
||||||
Logo = PathImage & "Blocks/Fabric.png"
|
Logo = PathImage & "Blocks/Fabric.png"
|
||||||
Case McVersionState.OptiFine
|
Case McVersionState.OptiFine
|
||||||
@@ -780,7 +791,7 @@ ExitDataLoad:
|
|||||||
End If
|
End If
|
||||||
Case McVersionState.Old
|
Case McVersionState.Old
|
||||||
Info = "远古版本"
|
Info = "远古版本"
|
||||||
Case McVersionState.Original, McVersionState.Forge, McVersionState.Fabric, McVersionState.OptiFine, McVersionState.LiteLoader
|
Case McVersionState.Original, McVersionState.Forge, McVersionState.NeoForge, McVersionState.Fabric, McVersionState.OptiFine, McVersionState.LiteLoader
|
||||||
Info = Version.ToString
|
Info = Version.ToString
|
||||||
Case McVersionState.Fool
|
Case McVersionState.Fool
|
||||||
Info = GetMcFoolName(Version.McName)
|
Info = GetMcFoolName(Version.McName)
|
||||||
@@ -813,6 +824,7 @@ ExitDataLoad:
|
|||||||
WriteIni(Path & "PCL\Setup.ini", "VersionOptiFine", Version.OptiFineVersion)
|
WriteIni(Path & "PCL\Setup.ini", "VersionOptiFine", Version.OptiFineVersion)
|
||||||
WriteIni(Path & "PCL\Setup.ini", "VersionLiteLoader", Version.HasLiteLoader)
|
WriteIni(Path & "PCL\Setup.ini", "VersionLiteLoader", Version.HasLiteLoader)
|
||||||
WriteIni(Path & "PCL\Setup.ini", "VersionForge", Version.ForgeVersion)
|
WriteIni(Path & "PCL\Setup.ini", "VersionForge", Version.ForgeVersion)
|
||||||
|
WriteIni(Path & "PCL\Setup.ini", "VersionNeoForge", Version.NeoForgeVersion)
|
||||||
WriteIni(Path & "PCL\Setup.ini", "VersionApiCode", Version.SortCode)
|
WriteIni(Path & "PCL\Setup.ini", "VersionApiCode", Version.SortCode)
|
||||||
WriteIni(Path & "PCL\Setup.ini", "VersionOriginal", Version.McName)
|
WriteIni(Path & "PCL\Setup.ini", "VersionOriginal", Version.McName)
|
||||||
WriteIni(Path & "PCL\Setup.ini", "VersionOriginalMain", Version.McCodeMain)
|
WriteIni(Path & "PCL\Setup.ini", "VersionOriginalMain", Version.McCodeMain)
|
||||||
@@ -852,6 +864,7 @@ ExitDataLoad:
|
|||||||
OptiFine
|
OptiFine
|
||||||
Old
|
Old
|
||||||
Forge
|
Forge
|
||||||
|
NeoForge
|
||||||
LiteLoader
|
LiteLoader
|
||||||
Fabric
|
Fabric
|
||||||
End Enum
|
End Enum
|
||||||
@@ -903,6 +916,17 @@ ExitDataLoad:
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
Public ForgeVersion As String = ""
|
Public ForgeVersion As String = ""
|
||||||
|
|
||||||
|
'NeoForge
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' 该版本是否安装了 NeoForge。
|
||||||
|
''' </summary>
|
||||||
|
Public HasNeoForge As Boolean = False
|
||||||
|
''' <summary>
|
||||||
|
''' NeoForge 版本号,如 31.1.2、14.23.5.2847。
|
||||||
|
''' </summary>
|
||||||
|
Public NeoForgeVersion As String = ""
|
||||||
|
|
||||||
'Fabric
|
'Fabric
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
@@ -929,6 +953,7 @@ ExitDataLoad:
|
|||||||
Public Overrides Function ToString() As String
|
Public Overrides Function ToString() As String
|
||||||
ToString = ""
|
ToString = ""
|
||||||
If HasForge Then ToString += ", Forge" & If(ForgeVersion = "未知版本", "", " " & ForgeVersion)
|
If HasForge Then ToString += ", Forge" & If(ForgeVersion = "未知版本", "", " " & ForgeVersion)
|
||||||
|
If HasNeoForge Then ToString += ", NeoForge" & If(NeoForgeVersion = "未知版本", "", " " & NeoForgeVersion)
|
||||||
If HasFabric Then ToString += ", Fabric" & If(FabricVersion = "未知版本", "", " " & FabricVersion)
|
If HasFabric Then ToString += ", Fabric" & If(FabricVersion = "未知版本", "", " " & FabricVersion)
|
||||||
If HasOptiFine Then ToString += ", OptiFine" & If(OptiFineVersion = "未知版本", "", " " & OptiFineVersion)
|
If HasOptiFine Then ToString += ", OptiFine" & If(OptiFineVersion = "未知版本", "", " " & OptiFineVersion)
|
||||||
If HasLiteLoader Then ToString += ", LiteLoader"
|
If HasLiteLoader Then ToString += ", LiteLoader"
|
||||||
@@ -965,6 +990,16 @@ ExitDataLoad:
|
|||||||
Else
|
Else
|
||||||
Throw New Exception("无效的 Forge 版本:" & ForgeVersion)
|
Throw New Exception("无效的 Forge 版本:" & ForgeVersion)
|
||||||
End If
|
End If
|
||||||
|
ElseIf HasNeoForge Then
|
||||||
|
If NeoForgeVersion = "未知版本" Then Return 0
|
||||||
|
Dim SubVersions = NeoForgeVersion.Split(".")
|
||||||
|
If SubVersions.Length = 4 Then
|
||||||
|
_SortCode = Val(SubVersions(0)) * 1000000 + Val(SubVersions(1)) * 10000 + Val(SubVersions(3))
|
||||||
|
ElseIf SubVersions.Length = 3 Then
|
||||||
|
_SortCode = Val(SubVersions(0)) * 1000000 + Val(SubVersions(1)) * 10000 + Val(SubVersions(2))
|
||||||
|
Else
|
||||||
|
Throw New Exception("无效的 NeoForge 版本:" & NeoForgeVersion)
|
||||||
|
End If
|
||||||
ElseIf HasOptiFine Then
|
ElseIf HasOptiFine Then
|
||||||
If OptiFineVersion = "未知版本" Then Return 0
|
If OptiFineVersion = "未知版本" Then Return 0
|
||||||
'由对应原版次级版本号(2 位)、字母(2 位)、末尾数字(2 位)、测试标记(2 位,正式版为 99,Pre[x] 为 50+x,Beta[x] 为 x)组成
|
'由对应原版次级版本号(2 位)、字母(2 位)、末尾数字(2 位)、测试标记(2 位,正式版为 99,Pre[x] 为 50+x,Beta[x] 为 x)组成
|
||||||
@@ -1175,6 +1210,7 @@ OnLoaded:
|
|||||||
Dim VersionInfo As New McVersionInfo With {
|
Dim VersionInfo As New McVersionInfo With {
|
||||||
.FabricVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionFabric", ""),
|
.FabricVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionFabric", ""),
|
||||||
.ForgeVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionForge", ""),
|
.ForgeVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionForge", ""),
|
||||||
|
.NeoForgeVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionNeoForge", ""),
|
||||||
.OptiFineVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionOptiFine", ""),
|
.OptiFineVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionOptiFine", ""),
|
||||||
.HasLiteLoader = ReadIni(Version.Path & "PCL\Setup.ini", "VersionLiteLoader", False),
|
.HasLiteLoader = ReadIni(Version.Path & "PCL\Setup.ini", "VersionLiteLoader", False),
|
||||||
.SortCode = ReadIni(Version.Path & "PCL\Setup.ini", "VersionApiCode", -1),
|
.SortCode = ReadIni(Version.Path & "PCL\Setup.ini", "VersionApiCode", -1),
|
||||||
@@ -1185,6 +1221,7 @@ OnLoaded:
|
|||||||
}
|
}
|
||||||
VersionInfo.HasFabric = VersionInfo.FabricVersion.Count > 1
|
VersionInfo.HasFabric = VersionInfo.FabricVersion.Count > 1
|
||||||
VersionInfo.HasForge = VersionInfo.ForgeVersion.Count > 1
|
VersionInfo.HasForge = VersionInfo.ForgeVersion.Count > 1
|
||||||
|
VersionInfo.HasNeoForge = VersionInfo.NeoForgeVersion.Count > 1
|
||||||
VersionInfo.HasOptiFine = VersionInfo.OptiFineVersion.Count > 1
|
VersionInfo.HasOptiFine = VersionInfo.OptiFineVersion.Count > 1
|
||||||
Version.Version = VersionInfo
|
Version.Version = VersionInfo
|
||||||
End If
|
End If
|
||||||
@@ -1273,7 +1310,7 @@ OnLoaded:
|
|||||||
McVersionFilter(VersionList, VersionListOriginal, {McVersionState.Fool}, McVersionCardType.Fool)
|
McVersionFilter(VersionList, VersionListOriginal, {McVersionState.Fool}, McVersionCardType.Fool)
|
||||||
|
|
||||||
'筛选 API 版本
|
'筛选 API 版本
|
||||||
McVersionFilter(VersionList, VersionListOriginal, {McVersionState.Forge, McVersionState.LiteLoader, McVersionState.Fabric}, McVersionCardType.API)
|
McVersionFilter(VersionList, VersionListOriginal, {McVersionState.Forge, McVersionState.NeoForge, McVersionState.LiteLoader, McVersionState.Fabric}, McVersionCardType.API)
|
||||||
|
|
||||||
'将老版本预先分类入不常用,只剩余原版、快照、OptiFine
|
'将老版本预先分类入不常用,只剩余原版、快照、OptiFine
|
||||||
Dim VersionUseful As New List(Of McVersion)
|
Dim VersionUseful As New List(Of McVersion)
|
||||||
@@ -1407,7 +1444,7 @@ OnLoaded:
|
|||||||
End Function)
|
End Function)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
'API 版本:优先按版本排序,此后【先放 Fabric,再放 Forge(按版本号从高到低排序),最后放 LiteLoader(按名称排序)】
|
'API 版本:优先按版本排序,此后【先放 Fabric,再放 Forge,再放 NeoForge(按版本号从高到低排序),最后放 LiteLoader(按名称排序)】
|
||||||
If ResultVersionList.ContainsKey(McVersionCardType.API) Then
|
If ResultVersionList.ContainsKey(McVersionCardType.API) Then
|
||||||
ResultVersionList(McVersionCardType.API) = Sort(ResultVersionList(McVersionCardType.API),
|
ResultVersionList(McVersionCardType.API) = Sort(ResultVersionList(McVersionCardType.API),
|
||||||
Function(Left As McVersion, Right As McVersion)
|
Function(Left As McVersion, Right As McVersion)
|
||||||
@@ -1419,6 +1456,8 @@ OnLoaded:
|
|||||||
Return Left.Version.HasFabric
|
Return Left.Version.HasFabric
|
||||||
ElseIf Left.Version.HasForge Xor Right.Version.HasForge Then
|
ElseIf Left.Version.HasForge Xor Right.Version.HasForge Then
|
||||||
Return Left.Version.HasForge
|
Return Left.Version.HasForge
|
||||||
|
ElseIf Left.Version.HasNeoForge Xor Right.Version.HasNeoForge Then
|
||||||
|
Return Left.Version.HasNeoForge
|
||||||
ElseIf Not Left.Version.SortCode <> Right.Version.SortCode Then
|
ElseIf Not Left.Version.SortCode <> Right.Version.SortCode Then
|
||||||
Return Left.Version.SortCode > Right.Version.SortCode
|
Return Left.Version.SortCode > Right.Version.SortCode
|
||||||
Else
|
Else
|
||||||
|
|||||||
@@ -394,6 +394,7 @@ EndHint:
|
|||||||
Public FrmDownloadOptiFine As PageDownloadOptiFine
|
Public FrmDownloadOptiFine As PageDownloadOptiFine
|
||||||
Public FrmDownloadLiteLoader As PageDownloadLiteLoader
|
Public FrmDownloadLiteLoader As PageDownloadLiteLoader
|
||||||
Public FrmDownloadForge As PageDownloadForge
|
Public FrmDownloadForge As PageDownloadForge
|
||||||
|
Public FrmDownloadNeoForge As PageDownloadNeoForge
|
||||||
Public FrmDownloadFabric As PageDownloadFabric
|
Public FrmDownloadFabric As PageDownloadFabric
|
||||||
Public FrmDownloadMod As PageDownloadMod
|
Public FrmDownloadMod As PageDownloadMod
|
||||||
Public FrmDownloadPack As PageDownloadPack
|
Public FrmDownloadPack As PageDownloadPack
|
||||||
|
|||||||
@@ -1779,8 +1779,8 @@ Retry:
|
|||||||
'构造步骤加载器
|
'构造步骤加载器
|
||||||
Dim Loaders As New List(Of LoaderBase)
|
Dim Loaders As New List(Of LoaderBase)
|
||||||
'获取下载地址
|
'获取下载地址
|
||||||
Loaders.Add(New LoaderTask(Of DlForgeVersionEntry, List(Of NetFile))("获取下载地址",
|
Loaders.Add(New LoaderTask(Of DlNeoForgeVersionEntry, List(Of NetFile))("获取下载地址",
|
||||||
Sub(Task As LoaderTask(Of DlForgeVersionEntry, List(Of NetFile)))
|
Sub(Task As LoaderTask(Of DlNeoForgeVersionEntry, List(Of NetFile)))
|
||||||
Dim Files As New List(Of NetFile)
|
Dim Files As New List(Of NetFile)
|
||||||
Files.Add(New NetFile({
|
Files.Add(New NetFile({
|
||||||
"https://bmclapi2.bangbang93.com/maven/net/neoforged/neoforge/" & DownloadInfo.StdVersion & "/" & DownloadInfo.FileName,
|
"https://bmclapi2.bangbang93.com/maven/net/neoforged/neoforge/" & DownloadInfo.StdVersion & "/" & DownloadInfo.FileName,
|
||||||
@@ -1792,7 +1792,7 @@ Retry:
|
|||||||
Loaders.Add(New LoaderDownload("下载主文件", New List(Of NetFile)) With {.ProgressWeight = 6})
|
Loaders.Add(New LoaderDownload("下载主文件", New List(Of NetFile)) With {.ProgressWeight = 6})
|
||||||
|
|
||||||
'启动
|
'启动
|
||||||
Dim Loader As New LoaderCombo(Of DlForgeVersionEntry)(DisplayName & " 下载", Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
|
Dim Loader As New LoaderCombo(Of DlNeoForgeVersionEntry)(DisplayName & " 下载", Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
|
||||||
Loader.Start(DownloadInfo)
|
Loader.Start(DownloadInfo)
|
||||||
LoaderTaskbarAdd(Loader)
|
LoaderTaskbarAdd(Loader)
|
||||||
FrmMain.BtnExtraDownload.ShowRefresh()
|
FrmMain.BtnExtraDownload.ShowRefresh()
|
||||||
@@ -1829,9 +1829,9 @@ Retry:
|
|||||||
'添加 Java Wrapper 作为主 Jar
|
'添加 Java Wrapper 作为主 Jar
|
||||||
Dim Arguments As String
|
Dim Arguments As String
|
||||||
If UseJavaWrapper Then
|
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=""{GetJavaWrapperDir()}"" -cp ""{PathTemp}Cache\neoforge_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\neoforge_installer.jar;{Target}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
||||||
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
|
||||||
'开始启动
|
'开始启动
|
||||||
@@ -1880,15 +1880,15 @@ Retry:
|
|||||||
Else
|
Else
|
||||||
LastResults.Enqueue(e.Data)
|
LastResults.Enqueue(e.Data)
|
||||||
If LastResults.Count > 100 Then LastResults.Dequeue()
|
If LastResults.Count > 100 Then LastResults.Dequeue()
|
||||||
ForgeInjectorLine(e.Data, Task)
|
NeoForgeInjectorLine(e.Data, Task)
|
||||||
End If
|
End If
|
||||||
Catch ex As ObjectDisposedException
|
Catch ex As ObjectDisposedException
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Log(ex, "读取 Forge 安装器错误信息失败")
|
Log(ex, "读取 NeoForge 安装器错误信息失败")
|
||||||
End Try
|
End Try
|
||||||
Try
|
Try
|
||||||
If Task.State = LoadState.Aborted AndAlso Not process.HasExited Then
|
If Task.State = LoadState.Aborted AndAlso Not process.HasExited Then
|
||||||
Log("[Installer] 由于任务取消,已中止 Forge 安装")
|
Log("[Installer] 由于任务取消,已中止 NeoForge 安装")
|
||||||
process.Kill()
|
process.Kill()
|
||||||
End If
|
End If
|
||||||
Catch
|
Catch
|
||||||
@@ -1913,7 +1913,7 @@ Retry:
|
|||||||
For i As Integer = Math.Max(0, LastResults.Count - 5) To LastResults.Count - 1 '最后 5 行
|
For i As Integer = Math.Max(0, LastResults.Count - 5) To LastResults.Count - 1 '最后 5 行
|
||||||
LastLines &= vbCrLf & LastResults(i)
|
LastLines &= vbCrLf & LastResults(i)
|
||||||
Next
|
Next
|
||||||
Throw New Exception("Forge 安装器出错,日志结束部分为:" & LastLines)
|
Throw New Exception("NeoForge 安装器出错,日志结束部分为:" & LastLines)
|
||||||
End Using
|
End Using
|
||||||
End Using
|
End Using
|
||||||
End SyncLock
|
End SyncLock
|
||||||
@@ -1970,16 +1970,12 @@ Retry:
|
|||||||
|
|
||||||
'参数初始化
|
'参数初始化
|
||||||
McFolder = If(McFolder, PathMcFolder)
|
McFolder = If(McFolder, PathMcFolder)
|
||||||
If Version.StartsWithF("1.") AndAlso Version.Contains("-") Then
|
Version = DownloadInfo.StdVersion
|
||||||
'类似 1.19.3-41.2.8 格式,优先使用 Version 中要求的版本而非 Inherit(例如 1.19.3 却使用了 1.19 的 Forge)
|
|
||||||
Inherit = Version.Before("-")
|
|
||||||
Version = Version.After("-")
|
|
||||||
End If
|
|
||||||
Dim IsCustomFolder As Boolean = McFolder <> PathMcFolder
|
Dim IsCustomFolder As Boolean = McFolder <> PathMcFolder
|
||||||
Dim Id As String = Inherit & "-forge-" & Version
|
Dim Id As String = DownloadInfo.Version
|
||||||
Dim InstallerAddress As String = PathTemp & "Cache\Code\NeoForgeInstall-" & Version & "_" & RandomInteger(0, 100000)
|
Dim InstallerAddress As String = PathTemp & "Cache\Code\NeoForgeInstall-" & Version & "_" & RandomInteger(0, 100000)
|
||||||
Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
|
Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
|
||||||
Dim DisplayName As String = "Forge " & Inherit & " - " & Version
|
Dim DisplayName As String = "NeoForge " & Inherit & " - " & Version
|
||||||
Dim Loaders As New List(Of LoaderBase)
|
Dim Loaders As New List(Of LoaderBase)
|
||||||
Dim LibVersionFolder As String = PathMcFolder & "versions\" & Id & "\" '作为 Lib 文件目标的版本文件夹
|
Dim LibVersionFolder As String = PathMcFolder & "versions\" & Id & "\" '作为 Lib 文件目标的版本文件夹
|
||||||
|
|
||||||
@@ -1987,7 +1983,7 @@ Retry:
|
|||||||
If DownloadInfo Is Nothing Then
|
If DownloadInfo Is Nothing Then
|
||||||
Loaders.Add(New LoaderTask(Of String, String)("获取 Mod 加载器详细信息",
|
Loaders.Add(New LoaderTask(Of String, String)("获取 Mod 加载器详细信息",
|
||||||
Sub(Task As LoaderTask(Of String, String))
|
Sub(Task As LoaderTask(Of String, String))
|
||||||
'获取 Forge 版本列表
|
'获取 NeoForge 版本列表
|
||||||
Dim NeoForgeLoader = New LoaderTask(Of String, List(Of DlNeoForgeVersionEntry))("McDownloadNeoForgeLoader " & Inherit, AddressOf DlNeoForgeVersionMain)
|
Dim NeoForgeLoader = New LoaderTask(Of String, List(Of DlNeoForgeVersionEntry))("McDownloadNeoForgeLoader " & Inherit, AddressOf DlNeoForgeVersionMain)
|
||||||
NeoForgeLoader.WaitForExit(Inherit)
|
NeoForgeLoader.WaitForExit(Inherit)
|
||||||
Task.Progress = 0.8
|
Task.Progress = 0.8
|
||||||
@@ -2001,7 +1997,7 @@ Retry:
|
|||||||
Throw New Exception("未能找到 NeoForge " & Inherit & "-" & Version & " 的详细信息!")
|
Throw New Exception("未能找到 NeoForge " & Inherit & "-" & Version & " 的详细信息!")
|
||||||
End Sub) With {.ProgressWeight = 3})
|
End Sub) With {.ProgressWeight = 3})
|
||||||
End If
|
End If
|
||||||
'下载 Forge 主文件
|
'下载 NeoForge 主文件
|
||||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("准备 Mod 加载器下载",
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("准备 Mod 加载器下载",
|
||||||
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
||||||
'启动依赖版本的下载
|
'启动依赖版本的下载
|
||||||
@@ -2011,18 +2007,17 @@ Retry:
|
|||||||
End If
|
End If
|
||||||
'添加主文件
|
'添加主文件
|
||||||
Dim Files As New List(Of NetFile) From {New NetFile({
|
Dim Files As New List(Of NetFile) From {New NetFile({
|
||||||
"https://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/" & Inherit & "-" & DownloadInfo.FileVersion & "/" & DownloadInfo.FileName,
|
"https://bmclapi2.bangbang93.com/maven/net/neoforged/neoforge/" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName,
|
||||||
"https://files.minecraftforge.net/maven/net/minecraftforge/forge/" & Inherit & "-" & DownloadInfo.FileVersion & "/" & DownloadInfo.FileName
|
"https://maven.neoforged.net/releases/net/neoforged/neoforge/" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName
|
||||||
}, InstallerAddress, New FileChecker(MinSize:=64 * 1024, Hash:=DownloadInfo.Hash))}
|
}, InstallerAddress, New FileChecker(MinSize:=64 * 1024, Hash:=DownloadInfo.Hash))}
|
||||||
Task.Output = Files
|
Task.Output = Files
|
||||||
End Sub) With {.ProgressWeight = 0.5, .Show = False})
|
End Sub) With {.ProgressWeight = 0.5, .Show = False})
|
||||||
Loaders.Add(New LoaderDownload("下载 Mod 加载器主文件", New List(Of NetFile)) With {.ProgressWeight = 9})
|
Loaders.Add(New LoaderDownload("下载 Mod 加载器主文件", New List(Of NetFile)) With {.ProgressWeight = 9})
|
||||||
|
|
||||||
'安装(仅在新版安装时需要原版 Jar)
|
'安装(仅在新版安装时需要原版 Jar)
|
||||||
If Version.Before(".") >= 20 Then
|
Log("[Download] 检测为新版 NeoForge:" & Version)
|
||||||
Log("[Download] 检测为新版 NeoForge:" & Version)
|
Dim Libs As List(Of McLibToken) = Nothing
|
||||||
Dim Libs As List(Of McLibToken) = Nothing
|
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析 Mod 加载器支持库文件",
|
||||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析 Mod 加载器支持库文件",
|
|
||||||
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
Sub(Task As LoaderTask(Of String, List(Of NetFile)))
|
||||||
Task.Output = New List(Of NetFile)
|
Task.Output = New List(Of NetFile)
|
||||||
Dim Installer As ZipArchive = Nothing
|
Dim Installer As ZipArchive = Nothing
|
||||||
@@ -2048,27 +2043,27 @@ Retry:
|
|||||||
Log("[Download] 需要下载 Mappings:" & Address)
|
Log("[Download] 需要下载 Mappings:" & Address)
|
||||||
End If
|
End If
|
||||||
Task.Progress = 0.8
|
Task.Progress = 0.8
|
||||||
'去除其中的原始 Forge 项
|
'去除其中的原始 NeoForge 项
|
||||||
For i = 0 To Libs.Count - 1
|
For i = 0 To Libs.Count - 1
|
||||||
If Libs(i).LocalPath.EndsWithF("forge-" & Inherit & "-" & Version & ".jar") OrElse
|
If Libs(i).LocalPath.EndsWithF("neoforge-" & Inherit & "-" & Version & ".jar") OrElse
|
||||||
Libs(i).LocalPath.EndsWithF("forge-" & Inherit & "-" & Version & "-client.jar") Then
|
Libs(i).LocalPath.EndsWithF("forge-" & Inherit & "-" & Version & "-client.jar") Then
|
||||||
Log("[Download] 已从待下载 Forge 支持库中移除:" & Libs(i).LocalPath, LogLevel.Debug)
|
Log("[Download] 已从待下载 NeoForge 支持库中移除:" & Libs(i).LocalPath, LogLevel.Debug)
|
||||||
Libs.RemoveAt(i)
|
Libs.RemoveAt(i)
|
||||||
Exit For
|
Exit For
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
Task.Output = McLibFixFromLibToken(Libs, PathMcFolder)
|
Task.Output = McLibFixFromLibToken(Libs, PathMcFolder)
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Throw New Exception("获取新版 Forge 支持库列表失败", ex)
|
Throw New Exception("获取新版 NeoForge 支持库列表失败", ex)
|
||||||
Finally
|
Finally
|
||||||
'释放文件
|
'释放文件
|
||||||
If Installer IsNot Nothing Then Installer.Dispose()
|
If Installer IsNot Nothing Then Installer.Dispose()
|
||||||
End Try
|
End Try
|
||||||
End Sub) With {.ProgressWeight = 2})
|
End Sub) With {.ProgressWeight = 2})
|
||||||
Loaders.Add(New LoaderDownload("下载 Mod 加载器支持库文件", New List(Of NetFile)) With {.ProgressWeight = 12})
|
Loaders.Add(New LoaderDownload("下载 Mod 加载器支持库文件", New List(Of NetFile)) With {.ProgressWeight = 12})
|
||||||
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("获取 Mod 下载器支持库文件",
|
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("获取 Mod 下载器支持库文件",
|
||||||
Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
||||||
#Region "Forge 文件"
|
#Region "NeoForge 文件"
|
||||||
If IsCustomFolder Then
|
If IsCustomFolder Then
|
||||||
For Each LibFile As McLibToken In Libs
|
For Each LibFile As McLibToken In Libs
|
||||||
Dim RealPath As String = LibFile.LocalPath.Replace(PathMcFolder, McFolder)
|
Dim RealPath As String = LibFile.LocalPath.Replace(PathMcFolder, McFolder)
|
||||||
@@ -2076,7 +2071,7 @@ Retry:
|
|||||||
Directory.CreateDirectory(IO.Path.GetDirectoryName(RealPath))
|
Directory.CreateDirectory(IO.Path.GetDirectoryName(RealPath))
|
||||||
CopyFile(LibFile.LocalPath, RealPath)
|
CopyFile(LibFile.LocalPath, RealPath)
|
||||||
End If
|
End If
|
||||||
If ModeDebug Then Log("[Download] 复制的 Forge 支持库文件:" & LibFile.LocalPath)
|
If ModeDebug Then Log("[Download] 复制的 NeoForge 支持库文件:" & LibFile.LocalPath)
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
#End Region
|
#End Region
|
||||||
@@ -2086,7 +2081,7 @@ Retry:
|
|||||||
Dim TargetLoaders As List(Of LoaderBase) =
|
Dim TargetLoaders As List(Of LoaderBase) =
|
||||||
ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
||||||
Where(Function(l) l.State <> LoadState.Finished).ToList
|
Where(Function(l) l.State <> LoadState.Finished).ToList
|
||||||
If TargetLoaders.Any Then Log("[Download] Forge 安装正在等待原版文件下载完成")
|
If TargetLoaders.Any Then Log("[Download] NeoForge 安装正在等待原版文件下载完成")
|
||||||
Do While TargetLoaders.Any AndAlso Not Task.IsAborted
|
Do While TargetLoaders.Any AndAlso Not Task.IsAborted
|
||||||
TargetLoaders = TargetLoaders.Where(Function(l) l.State <> LoadState.Finished).ToList
|
TargetLoaders = TargetLoaders.Where(Function(l) l.State <> LoadState.Finished).ToList
|
||||||
Thread.Sleep(50)
|
Thread.Sleep(50)
|
||||||
@@ -2106,11 +2101,11 @@ Retry:
|
|||||||
End SyncLock
|
End SyncLock
|
||||||
#End Region
|
#End Region
|
||||||
End Sub) With {.ProgressWeight = 0.1, .Show = False})
|
End Sub) With {.ProgressWeight = 0.1, .Show = False})
|
||||||
Loaders.Add(New LoaderTask(Of Boolean, Boolean)("安装 Mod 加载器(方式 A)",
|
Loaders.Add(New LoaderTask(Of Boolean, Boolean)("安装 Mod 加载器(方式 A)",
|
||||||
Sub(Task As LoaderTask(Of Boolean, Boolean))
|
Sub(Task As LoaderTask(Of Boolean, Boolean))
|
||||||
Dim Installer As ZipArchive = Nothing
|
Dim Installer As ZipArchive = Nothing
|
||||||
Try
|
Try
|
||||||
Log("[Download] 开始进行新版方式 Forge 安装:" & InstallerAddress)
|
Log("[Download] 开始进行新版方式 NeoForge 安装:" & InstallerAddress)
|
||||||
'记录当前文件夹列表(在新建目标文件夹之前)
|
'记录当前文件夹列表(在新建目标文件夹之前)
|
||||||
Dim OldList = New DirectoryInfo(McFolder & "versions\").EnumerateDirectories.
|
Dim OldList = New DirectoryInfo(McFolder & "versions\").EnumerateDirectories.
|
||||||
Select(Function(i) i.FullName).ToList()
|
Select(Function(i) i.FullName).ToList()
|
||||||
@@ -2123,23 +2118,23 @@ Retry:
|
|||||||
'释放 launcher_installer.json
|
'释放 launcher_installer.json
|
||||||
McFolderLauncherProfilesJsonCreate(McFolder)
|
McFolderLauncherProfilesJsonCreate(McFolder)
|
||||||
Task.Progress = 0.05
|
Task.Progress = 0.05
|
||||||
'运行 Forge 安装器
|
'运行 NeoForge 安装器
|
||||||
Dim UseJavaWrapper As Boolean = True
|
Dim UseJavaWrapper As Boolean = True
|
||||||
Retry:
|
Retry:
|
||||||
Try
|
Try
|
||||||
'释放 Forge 注入器
|
'释放 NeoForge 注入器
|
||||||
WriteFile(PathTemp & "Cache\forge_installer.jar", GetResources("ForgeInstaller"))
|
WriteFile(PathTemp & "Cache\neoforge_installer.jar", GetResources("ForgeInstaller"))
|
||||||
Task.Progress = 0.06
|
Task.Progress = 0.06
|
||||||
'运行注入器
|
'运行注入器
|
||||||
ForgeInjector(InstallerAddress, Task, McFolder, UseJavaWrapper)
|
NeoForgeInjector(InstallerAddress, Task, McFolder, UseJavaWrapper)
|
||||||
Task.Progress = 0.97
|
Task.Progress = 0.97
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
If UseJavaWrapper Then
|
If UseJavaWrapper Then
|
||||||
Log(ex, "使用 JavaWrapper 安装 Forge 失败,将不使用 JavaWrapper 并重试")
|
Log(ex, "使用 JavaWrapper 安装 NeoForge 失败,将不使用 JavaWrapper 并重试")
|
||||||
UseJavaWrapper = False
|
UseJavaWrapper = False
|
||||||
GoTo Retry
|
GoTo Retry
|
||||||
Else
|
Else
|
||||||
Throw New Exception("运行 Forge 安装器失败", ex)
|
Throw New Exception("运行 NeoForge 安装器失败", ex)
|
||||||
End If
|
End If
|
||||||
End Try
|
End Try
|
||||||
'拷贝新增的版本 Json
|
'拷贝新增的版本 Json
|
||||||
@@ -2147,8 +2142,8 @@ Retry:
|
|||||||
SkipWhile(Function(i) OldList.Contains(i.FullName)).ToList()
|
SkipWhile(Function(i) OldList.Contains(i.FullName)).ToList()
|
||||||
If DeltaList.Count > 1 Then
|
If DeltaList.Count > 1 Then
|
||||||
'它可能和 OptiFine 安装同时运行,导致增加的文件不止一个(这导致了 #151)
|
'它可能和 OptiFine 安装同时运行,导致增加的文件不止一个(这导致了 #151)
|
||||||
'也可能是因为 Forge 安装器的 Bug,生成了一个名字错误的文件夹,所以需要检查文件夹是否为空
|
'也可能是因为 NeoForge 安装器的 Bug,生成了一个名字错误的文件夹,所以需要检查文件夹是否为空
|
||||||
DeltaList = DeltaList.Where(Function(l) l.Name.Contains("forge") AndAlso l.EnumerateFiles.Any).ToList
|
DeltaList = DeltaList.Where(Function(l) l.Name.Contains("neoforge") AndAlso l.EnumerateFiles.Any).ToList
|
||||||
End If
|
End If
|
||||||
If DeltaList.Count = 1 Then '如果没有新增文件夹,那么预测的文件夹名就是正确的
|
If DeltaList.Count = 1 Then '如果没有新增文件夹,那么预测的文件夹名就是正确的
|
||||||
Dim JsonFile As FileInfo = DeltaList(0).EnumerateFiles.First()
|
Dim JsonFile As FileInfo = DeltaList(0).EnumerateFiles.First()
|
||||||
@@ -2157,78 +2152,17 @@ Retry:
|
|||||||
'新建 mods 文件夹
|
'新建 mods 文件夹
|
||||||
Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\")
|
Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\")
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Throw New Exception("安装新 Forge 版本失败", ex)
|
Throw New Exception("安装新 NeoForge 版本失败", ex)
|
||||||
Finally
|
Finally
|
||||||
'清理文件
|
'清理文件
|
||||||
Try
|
Try
|
||||||
If Installer IsNot Nothing Then Installer.Dispose()
|
If Installer IsNot Nothing Then Installer.Dispose()
|
||||||
If File.Exists(InstallerAddress) Then File.Delete(InstallerAddress)
|
If File.Exists(InstallerAddress) Then File.Delete(InstallerAddress)
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Log(ex, "安装 Forge 清理文件时出错")
|
Log(ex, "安装 NeoForge 清理文件时出错")
|
||||||
End Try
|
End Try
|
||||||
End Try
|
End Try
|
||||||
End Sub) With {.ProgressWeight = 10})
|
End Sub) With {.ProgressWeight = 10})
|
||||||
Else
|
|
||||||
Log("[Download] 检测为非新版 Forge:" & Version)
|
|
||||||
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("安装 Mod 加载器(方式 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
|
|
||||||
'中版格式
|
|
||||||
Log("[Download] 进行中版方式安装:" & InstallerAddress)
|
|
||||||
'建立 Json 文件
|
|
||||||
Dim JsonVersion As JObject = GetJson(ReadFile(Installer.GetEntry(Json("json").ToString.TrimStart("/")).Open))
|
|
||||||
JsonVersion("id") = Id
|
|
||||||
WriteFile(VersionFolder & Id & ".json", JsonVersion.ToString)
|
|
||||||
Task.Progress = 0.6
|
|
||||||
'解压支持库文件
|
|
||||||
Installer.Dispose()
|
|
||||||
ExtractFile(InstallerAddress, InstallerAddress & "_unrar\")
|
|
||||||
CopyDirectory(InstallerAddress & "_unrar\maven\", McFolder & "libraries\")
|
|
||||||
DeleteDirectory(InstallerAddress & "_unrar\")
|
|
||||||
Else
|
|
||||||
'旧版格式
|
|
||||||
Log("[Download] 进行旧版方式安装:" & 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") = Id
|
|
||||||
If Json("versionInfo")("inheritsFrom") Is Nothing Then CType(Json("versionInfo"), JObject).Add("inheritsFrom", Inherit)
|
|
||||||
WriteFile(VersionFolder & Id & ".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
|
|
||||||
Log(ex, "非新版方式安装 Forge 清理文件时出错")
|
|
||||||
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))("分析 Mod 加载器支持库文件", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
|
||||||
Loaders.Add(New LoaderDownload("下载 Mod 加载器支持库文件", New List(Of NetFile)) With {.ProgressWeight = 11})
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
Return Loaders
|
Return Loaders
|
||||||
End Function
|
End Function
|
||||||
@@ -2257,10 +2191,10 @@ Retry:
|
|||||||
Public Function NeoForgeDownloadListItem(Entry As DlNeoForgeVersionEntry, OnClick As MyListItem.ClickEventHandler, IsSaveOnly As Boolean) As MyListItem
|
Public Function NeoForgeDownloadListItem(Entry As DlNeoForgeVersionEntry, OnClick As MyListItem.ClickEventHandler, IsSaveOnly As Boolean) As MyListItem
|
||||||
'建立控件
|
'建立控件
|
||||||
Dim NewItem As New MyListItem With {
|
Dim NewItem As New MyListItem With {
|
||||||
.Title = If(Entry.IsBeta, Entry.Version & "-beta", Entry.Version), .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry,
|
.Title = If(Entry.IsBeta, Entry.StdVersion & "-beta", Entry.StdVersion), .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry,
|
||||||
.Info = If(Entry.IsBeta, "测试版", "稳定版") &
|
.Info = If(Entry.IsBeta, "测试版", "稳定版") &
|
||||||
If(Entry.ReleaseTime = "",
|
If(Entry.ReleaseTime = "",
|
||||||
If(ModeDebug, "种类:" & Entry.Category & If(Entry.Branch Is Nothing, "", ",开发分支:" & Entry.Branch), ""),
|
If(ModeDebug, If(Entry.Category IsNot Nothing, "种类:" & Entry.Category, "") & If(Entry.Branch Is Nothing, "", ",开发分支:" & Entry.Branch), ""),
|
||||||
"发布于 " & Entry.ReleaseTime & If(ModeDebug, ",种类:" & Entry.Category & If(Entry.Branch Is Nothing, "", ",开发分支:" & Entry.Branch), "")),
|
"发布于 " & Entry.ReleaseTime & If(ModeDebug, ",种类:" & Entry.Category & If(Entry.Branch Is Nothing, "", ",开发分支:" & Entry.Branch), "")),
|
||||||
.Logo = PathImage & "Blocks/NeoForge.png"
|
.Logo = PathImage & "Blocks/NeoForge.png"
|
||||||
}
|
}
|
||||||
@@ -2296,7 +2230,7 @@ Retry:
|
|||||||
sender.Buttons = {BtnInfo}
|
sender.Buttons = {BtnInfo}
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub NeoForgeLog_Click(sender As Object, e As RoutedEventArgs)
|
Private Sub NeoForgeLog_Click(sender As Object, e As RoutedEventArgs)
|
||||||
Dim Version As DlForgeVersionEntry
|
Dim Version As DlNeoForgeVersionEntry
|
||||||
If sender.Tag IsNot Nothing Then
|
If sender.Tag IsNot Nothing Then
|
||||||
Version = sender.Tag
|
Version = sender.Tag
|
||||||
ElseIf sender.Parent.Tag IsNot Nothing Then
|
ElseIf sender.Parent.Tag IsNot Nothing Then
|
||||||
@@ -2304,10 +2238,10 @@ Retry:
|
|||||||
Else
|
Else
|
||||||
Version = sender.Parent.Parent.Tag
|
Version = sender.Parent.Parent.Tag
|
||||||
End If
|
End If
|
||||||
OpenWebsite("https://files.minecraftforge.net/maven/net/minecraftforge/forge/" & Version.Inherit & "-" & Version.Version & "/forge-" & Version.Inherit & "-" & Version.Version & "-changelog.txt")
|
OpenWebsite("https://maven.neoforged.net/releases/net/neoforged/neoforge/" & Version.StdVersion & "/" & Version.Version & "-changelog.txt")
|
||||||
End Sub
|
End Sub
|
||||||
Public Sub NeoForgeSave_Click(sender As Object, e As RoutedEventArgs)
|
Public Sub NeoForgeSave_Click(sender As Object, e As RoutedEventArgs)
|
||||||
Dim Version As DlForgeVersionEntry
|
Dim Version As DlNeoForgeVersionEntry
|
||||||
If sender.Tag IsNot Nothing Then
|
If sender.Tag IsNot Nothing Then
|
||||||
Version = sender.Tag
|
Version = sender.Tag
|
||||||
ElseIf sender.Parent.Tag IsNot Nothing Then
|
ElseIf sender.Parent.Tag IsNot Nothing Then
|
||||||
@@ -2315,7 +2249,7 @@ Retry:
|
|||||||
Else
|
Else
|
||||||
Version = sender.Parent.Parent.Tag
|
Version = sender.Parent.Parent.Tag
|
||||||
End If
|
End If
|
||||||
McDownloadForgeSave(Version)
|
McDownloadNeoForgeSave(Version)
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
#End Region
|
#End Region
|
||||||
@@ -2485,6 +2419,16 @@ Retry:
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
Public ForgeEntry As DlForgeVersionEntry = Nothing
|
Public ForgeEntry As DlForgeVersionEntry = Nothing
|
||||||
|
|
||||||
|
'若要下载 NeoForge,则需要在下面两项中完成至少一项
|
||||||
|
''' <summary>
|
||||||
|
''' 欲下载的 NeoForge 版本名。接受例如 36.1.4 / 14.23.5.2859 / 1.19-41.1.0 的输入。
|
||||||
|
''' </summary>
|
||||||
|
Public NeoForgeVersion As String = Nothing
|
||||||
|
''' <summary>
|
||||||
|
''' 欲下载的 NeoForge。
|
||||||
|
''' </summary>
|
||||||
|
Public NeoForgeEntry As DlNeoForgeVersionEntry = Nothing
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 欲下载的 Fabric Loader 版本名。
|
''' 欲下载的 Fabric Loader 版本名。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
@@ -2585,7 +2529,7 @@ Retry:
|
|||||||
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
|
Dim PathInstallTemp As String
|
||||||
If PathTemp.Contains(" ") AndAlso Request.ForgeEntry IsNot Nothing Then
|
If PathTemp.Contains(" ") AndAlso (Request.ForgeEntry IsNot Nothing Or Request.NeoForgeEntry IsNot Nothing) Then
|
||||||
PathInstallTemp = OsDrive & "ProgramData\PCL\Install\"
|
PathInstallTemp = OsDrive & "ProgramData\PCL\Install\"
|
||||||
Else
|
Else
|
||||||
PathInstallTemp = PathTemp & "Install\"
|
PathInstallTemp = PathTemp & "Install\"
|
||||||
@@ -2622,6 +2566,9 @@ Retry:
|
|||||||
Dim ForgeFolder As String = Nothing
|
Dim ForgeFolder As String = Nothing
|
||||||
If Request.ForgeEntry IsNot Nothing Then Request.ForgeVersion = If(Request.ForgeVersion, Request.ForgeEntry.Version)
|
If Request.ForgeEntry IsNot Nothing Then Request.ForgeVersion = If(Request.ForgeVersion, Request.ForgeEntry.Version)
|
||||||
If Request.ForgeVersion IsNot Nothing Then ForgeFolder = TempMcFolder & "versions\" & Request.MinecraftName & "-forge-" & Request.ForgeVersion
|
If Request.ForgeVersion IsNot Nothing Then ForgeFolder = TempMcFolder & "versions\" & Request.MinecraftName & "-forge-" & Request.ForgeVersion
|
||||||
|
Dim NeoForgeFolder As String = Nothing
|
||||||
|
If Request.NeoForgeEntry IsNot Nothing Then Request.NeoForgeVersion = If(Request.NeoForgeVersion, Request.NeoForgeEntry.Version)
|
||||||
|
If Request.NeoForgeVersion IsNot Nothing Then NeoForgeFolder = TempMcFolder & "versions\" & Request.NeoForgeVersion
|
||||||
Dim FabricFolder As String = Nothing
|
Dim FabricFolder As String = Nothing
|
||||||
If Request.FabricVersion IsNot Nothing Then FabricFolder = TempMcFolder & "versions\fabric-loader-" & Request.FabricVersion & "-" & Request.MinecraftName
|
If Request.FabricVersion IsNot Nothing Then FabricFolder = TempMcFolder & "versions\fabric-loader-" & Request.FabricVersion & "-" & Request.MinecraftName
|
||||||
Dim LiteLoaderFolder As String = Nothing
|
Dim LiteLoaderFolder As String = Nothing
|
||||||
@@ -2638,6 +2585,7 @@ Retry:
|
|||||||
'记录日志
|
'记录日志
|
||||||
If OptiFineFolder IsNot Nothing Then Log("[Download] OptiFine 缓存:" & OptiFineFolder)
|
If OptiFineFolder IsNot Nothing Then Log("[Download] OptiFine 缓存:" & OptiFineFolder)
|
||||||
If ForgeFolder IsNot Nothing Then Log("[Download] Forge 缓存:" & ForgeFolder)
|
If ForgeFolder IsNot Nothing Then Log("[Download] Forge 缓存:" & ForgeFolder)
|
||||||
|
If NeoForgeFolder IsNot Nothing Then Log("[Download] NeoForge 缓存:" & NeoForgeFolder)
|
||||||
If FabricFolder IsNot Nothing Then Log("[Download] Fabric 缓存:" & FabricFolder)
|
If FabricFolder IsNot Nothing Then Log("[Download] Fabric 缓存:" & FabricFolder)
|
||||||
If LiteLoaderFolder IsNot Nothing Then Log("[Download] LiteLoader 缓存:" & LiteLoaderFolder)
|
If LiteLoaderFolder IsNot Nothing Then Log("[Download] LiteLoader 缓存:" & LiteLoaderFolder)
|
||||||
Log("[Download] 对应的原版版本:" & Request.MinecraftName)
|
Log("[Download] 对应的原版版本:" & Request.MinecraftName)
|
||||||
@@ -2672,7 +2620,11 @@ Retry:
|
|||||||
End If
|
End If
|
||||||
'Forge
|
'Forge
|
||||||
If Request.ForgeVersion IsNot Nothing Then
|
If Request.ForgeVersion IsNot Nothing Then
|
||||||
LoaderList.Add(New LoaderCombo(Of String)("下载 Forge " & Request.ForgeVersion, McDownloadForgeLoader(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})
|
LoaderList.Add(New LoaderCombo(Of String)("下载 Forge " & Request.ForgeVersion, McDownloadForgeLoader(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})
|
||||||
|
End If
|
||||||
|
'NeoForge
|
||||||
|
If Request.NeoForgeVersion IsNot Nothing Then
|
||||||
|
LoaderList.Add(New LoaderCombo(Of String)("下载 NeoForge " & Request.NeoForgeVersion, McDownloadNeoForgeLoader(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})
|
||||||
End If
|
End If
|
||||||
'LiteLoader
|
'LiteLoader
|
||||||
If Request.LiteLoaderEntry IsNot Nothing Then
|
If Request.LiteLoaderEntry IsNot Nothing Then
|
||||||
@@ -2685,14 +2637,14 @@ Retry:
|
|||||||
'合并安装
|
'合并安装
|
||||||
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, FabricFolder, LiteLoaderFolder)
|
InstallMerge(OutputFolder, OutputFolder, 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", PathMcFolder & "mods")
|
||||||
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.FabricVersion IsNot Nothing OrElse Request.LiteLoaderEntry IsNot Nothing) Then
|
(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
|
||||||
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(OutputFolder))) 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})
|
||||||
@@ -2708,17 +2660,18 @@ Retry:
|
|||||||
''' <summary>
|
''' <summary>
|
||||||
''' 将多个版本 Json 进行合并,如果目标已存在则直接覆盖。失败会抛出异常。
|
''' 将多个版本 Json 进行合并,如果目标已存在则直接覆盖。失败会抛出异常。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Private Sub InstallMerge(OutputFolder As String, MinecraftFolder As String, Optional OptiFineFolder As String = Nothing, Optional OptiFineAsMod As Boolean = False, Optional ForgeFolder As String = Nothing, Optional ForgeVersion As String = Nothing, Optional FabricFolder As String = Nothing, Optional LiteLoaderFolder As String = Nothing)
|
Private Sub InstallMerge(OutputFolder As String, MinecraftFolder As String, Optional OptiFineFolder As String = Nothing, Optional OptiFineAsMod As Boolean = False, Optional ForgeFolder As String = Nothing, Optional ForgeVersion As String = Nothing, Optional NeoForgeFolder As String = Nothing, Optional NeoForgeVersion As String = Nothing, Optional FabricFolder As String = Nothing, Optional LiteLoaderFolder As String = Nothing)
|
||||||
Log("[Download] 开始进行版本合并,输出:" & OutputFolder & ",Minecraft:" & MinecraftFolder &
|
Log("[Download] 开始进行版本合并,输出:" & OutputFolder & ",Minecraft:" & MinecraftFolder &
|
||||||
If(OptiFineFolder IsNot Nothing, ",OptiFine:" & OptiFineFolder, "") &
|
If(OptiFineFolder IsNot Nothing, ",OptiFine:" & OptiFineFolder, "") &
|
||||||
If(ForgeFolder IsNot Nothing, ",Forge:" & ForgeFolder, "") &
|
If(ForgeFolder IsNot Nothing, ",Forge:" & ForgeFolder, "") &
|
||||||
|
If(NeoForgeFolder IsNot Nothing, ",NeoForge:" & NeoForgeFolder, "") &
|
||||||
If(LiteLoaderFolder IsNot Nothing, ",LiteLoader:" & LiteLoaderFolder, "") &
|
If(LiteLoaderFolder IsNot Nothing, ",LiteLoader:" & LiteLoaderFolder, "") &
|
||||||
If(FabricFolder IsNot Nothing, ",Fabric:" & FabricFolder, ""))
|
If(FabricFolder IsNot Nothing, ",Fabric:" & FabricFolder, ""))
|
||||||
Directory.CreateDirectory(OutputFolder)
|
Directory.CreateDirectory(OutputFolder)
|
||||||
|
|
||||||
Dim HasOptiFine As Boolean = OptiFineFolder IsNot Nothing AndAlso Not OptiFineAsMod, HasForge As Boolean = ForgeFolder IsNot Nothing, HasLiteLoader As Boolean = LiteLoaderFolder IsNot Nothing, HasFabric As Boolean = FabricFolder IsNot Nothing
|
Dim HasOptiFine As Boolean = OptiFineFolder IsNot Nothing AndAlso Not OptiFineAsMod, HasForge As Boolean = ForgeFolder IsNot Nothing, HasNeoForge As Boolean = NeoForgeFolder IsNot Nothing, HasLiteLoader As Boolean = LiteLoaderFolder IsNot Nothing, HasFabric As Boolean = FabricFolder IsNot Nothing
|
||||||
Dim OutputName As String, MinecraftName As String, OptiFineName As String, ForgeName As String, LiteLoaderName As String, FabricName As String
|
Dim OutputName As String, MinecraftName As String, OptiFineName As String, ForgeName As String, NeoForgeName As String, LiteLoaderName As String, FabricName As String
|
||||||
Dim OutputJsonPath As String, MinecraftJsonPath As String, OptiFineJsonPath As String = Nothing, ForgeJsonPath As String = Nothing, LiteLoaderJsonPath As String = Nothing, FabricJsonPath As String = Nothing
|
Dim OutputJsonPath As String, MinecraftJsonPath As String, OptiFineJsonPath As String = Nothing, ForgeJsonPath As String = Nothing, NeoForgeJsonPath As String = Nothing, LiteLoaderJsonPath As String = Nothing, FabricJsonPath As String = Nothing
|
||||||
Dim OutputJar As String, MinecraftJar As String
|
Dim OutputJar As String, MinecraftJar As String
|
||||||
#Region "初始化路径信息"
|
#Region "初始化路径信息"
|
||||||
If Not OutputFolder.EndsWithF("\") Then OutputFolder += "\"
|
If Not OutputFolder.EndsWithF("\") Then OutputFolder += "\"
|
||||||
@@ -2743,6 +2696,12 @@ Retry:
|
|||||||
ForgeJsonPath = ForgeFolder & ForgeName & ".json"
|
ForgeJsonPath = ForgeFolder & ForgeName & ".json"
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If HasNeoForge Then
|
||||||
|
If Not NeoForgeFolder.EndsWithF("\") Then NeoForgeFolder += "\"
|
||||||
|
NeoForgeName = GetFolderNameFromPath(NeoForgeFolder)
|
||||||
|
NeoForgeJsonPath = NeoForgeFolder & NeoForgeName & ".json"
|
||||||
|
End If
|
||||||
|
|
||||||
If HasLiteLoader Then
|
If HasLiteLoader Then
|
||||||
If Not LiteLoaderFolder.EndsWithF("\") Then LiteLoaderFolder += "\"
|
If Not LiteLoaderFolder.EndsWithF("\") Then LiteLoaderFolder += "\"
|
||||||
LiteLoaderName = GetFolderNameFromPath(LiteLoaderFolder)
|
LiteLoaderName = GetFolderNameFromPath(LiteLoaderFolder)
|
||||||
@@ -2756,7 +2715,7 @@ Retry:
|
|||||||
End If
|
End If
|
||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
Dim OutputJson As JObject, MinecraftJson As JObject, OptiFineJson As JObject = Nothing, ForgeJson As JObject = Nothing, LiteLoaderJson As JObject = Nothing, FabricJson As JObject = Nothing
|
Dim OutputJson As JObject, MinecraftJson As JObject, OptiFineJson As JObject = Nothing, ForgeJson As JObject = Nothing, NeoForgeJson As JObject = Nothing, LiteLoaderJson As JObject = Nothing, FabricJson As JObject = Nothing
|
||||||
#Region "读取文件并检查文件是否合规"
|
#Region "读取文件并检查文件是否合规"
|
||||||
Dim MinecraftJsonText As String = ReadFile(MinecraftJsonPath)
|
Dim MinecraftJsonText As String = ReadFile(MinecraftJsonPath)
|
||||||
If Not MinecraftJsonText.StartsWithF("{") Then Throw New Exception("Minecraft json 有误,地址:" & MinecraftJsonPath & ",前段内容:" & MinecraftJsonText.Substring(0, Math.Min(MinecraftJsonText.Length, 1000)))
|
If Not MinecraftJsonText.StartsWithF("{") Then Throw New Exception("Minecraft json 有误,地址:" & MinecraftJsonPath & ",前段内容:" & MinecraftJsonText.Substring(0, Math.Min(MinecraftJsonText.Length, 1000)))
|
||||||
@@ -2774,6 +2733,12 @@ Retry:
|
|||||||
ForgeJson = GetJson(ForgeJsonText)
|
ForgeJson = GetJson(ForgeJsonText)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If HasNeoForge Then
|
||||||
|
Dim NeoForgeJsonText As String = ReadFile(NeoForgeJsonPath)
|
||||||
|
If Not NeoForgeJsonText.StartsWithF("{") Then Throw New Exception("NeoForge json 有误,地址:" & NeoForgeJsonPath & ",前段内容:" & NeoForgeJsonText.Substring(0, Math.Min(NeoForgeJsonText.Length, 1000)))
|
||||||
|
NeoForgeJson = GetJson(NeoForgeJsonText)
|
||||||
|
End If
|
||||||
|
|
||||||
If HasLiteLoader Then
|
If HasLiteLoader Then
|
||||||
Dim LiteLoaderJsonText As String = ReadFile(LiteLoaderJsonPath)
|
Dim LiteLoaderJsonText As String = ReadFile(LiteLoaderJsonPath)
|
||||||
If Not LiteLoaderJsonText.StartsWithF("{") Then Throw New Exception("LiteLoader json 有误,地址:" & LiteLoaderJsonPath & ",前段内容:" & LiteLoaderJsonText.Substring(0, Math.Min(LiteLoaderJsonText.Length, 1000)))
|
If Not LiteLoaderJsonText.StartsWithF("{") Then Throw New Exception("LiteLoader json 有误,地址:" & LiteLoaderJsonPath & ",前段内容:" & LiteLoaderJsonText.Substring(0, Math.Min(LiteLoaderJsonText.Length, 1000)))
|
||||||
@@ -2793,6 +2758,7 @@ Retry:
|
|||||||
If(MinecraftJson("minecraftArguments"), " ").ToString & " " &
|
If(MinecraftJson("minecraftArguments"), " ").ToString & " " &
|
||||||
If(OptiFineJson IsNot Nothing, If(OptiFineJson("minecraftArguments"), " ").ToString, " ") & " " &
|
If(OptiFineJson IsNot Nothing, If(OptiFineJson("minecraftArguments"), " ").ToString, " ") & " " &
|
||||||
If(ForgeJson IsNot Nothing, If(ForgeJson("minecraftArguments"), " ").ToString, " ") & " " &
|
If(ForgeJson IsNot Nothing, If(ForgeJson("minecraftArguments"), " ").ToString, " ") & " " &
|
||||||
|
If(NeoForgeJson IsNot Nothing, If(NeoForgeJson("minecraftArguments"), " ").ToString, " ") & " " &
|
||||||
If(LiteLoaderJson IsNot Nothing, If(LiteLoaderJson("minecraftArguments"), " ").ToString, " ")
|
If(LiteLoaderJson IsNot Nothing, If(LiteLoaderJson("minecraftArguments"), " ").ToString, " ")
|
||||||
'分割参数字符串
|
'分割参数字符串
|
||||||
Dim RawArguments As List(Of String) = AllArguments.Split(" ").Where(Function(l) l <> "").Select(Function(l) l.Trim).ToList
|
Dim RawArguments As List(Of String) = AllArguments.Split(" ").Where(Function(l) l <> "").Select(Function(l) l.Trim).ToList
|
||||||
@@ -2822,6 +2788,12 @@ Retry:
|
|||||||
ForgeJson.Remove("time")
|
ForgeJson.Remove("time")
|
||||||
OutputJson.Merge(ForgeJson)
|
OutputJson.Merge(ForgeJson)
|
||||||
End If
|
End If
|
||||||
|
If HasNeoForge Then
|
||||||
|
'合并 NeoForge
|
||||||
|
NeoForgeJson.Remove("releaseTime")
|
||||||
|
NeoForgeJson.Remove("time")
|
||||||
|
OutputJson.Merge(NeoForgeJson)
|
||||||
|
End If
|
||||||
If HasLiteLoader Then
|
If HasLiteLoader Then
|
||||||
'合并 LiteLoader
|
'合并 LiteLoader
|
||||||
LiteLoaderJson.Remove("releaseTime")
|
LiteLoaderJson.Remove("releaseTime")
|
||||||
|
|||||||
@@ -521,7 +521,7 @@
|
|||||||
Info += ", Forge " & SelectedForge.Version
|
Info += ", Forge " & SelectedForge.Version
|
||||||
End If
|
End If
|
||||||
If SelectedNeoForge IsNot Nothing Then
|
If SelectedNeoForge IsNot Nothing Then
|
||||||
Info += ", NeoForge " & SelectedNeoForge.ohao & If(SelectedNeoForge.IsBeta, "-beta", "")
|
Info += ", NeoForge " & SelectedNeoForge.StdVersion & If(SelectedNeoForge.IsBeta, "-beta", "")
|
||||||
End If
|
End If
|
||||||
If SelectedLiteLoader IsNot Nothing Then
|
If SelectedLiteLoader IsNot Nothing Then
|
||||||
Info += ", LiteLoader"
|
Info += ", LiteLoader"
|
||||||
@@ -1279,7 +1279,7 @@
|
|||||||
End Sub
|
End Sub
|
||||||
Private Sub BtnSelectStart_Click() Handles BtnSelectStart.Click
|
Private Sub BtnSelectStart_Click() Handles BtnSelectStart.Click
|
||||||
'确认版本隔离
|
'确认版本隔离
|
||||||
If (SelectedForge IsNot Nothing OrElse SelectedFabric IsNot Nothing) AndAlso
|
If (SelectedForge IsNot Nothing OrElse SelectedFabric IsNot Nothing OrElse SelectedNeoForge IsNot Nothing) AndAlso
|
||||||
(Setup.Get("LaunchArgumentIndie") = 0 OrElse Setup.Get("LaunchArgumentIndie") = 2) Then
|
(Setup.Get("LaunchArgumentIndie") = 0 OrElse Setup.Get("LaunchArgumentIndie") = 2) Then
|
||||||
If MyMsgBox("你尚未开启版本隔离,这会导致多个 MC 共用同一个 Mod 文件夹。" & vbCrLf &
|
If MyMsgBox("你尚未开启版本隔离,这会导致多个 MC 共用同一个 Mod 文件夹。" & vbCrLf &
|
||||||
"因此在切换 MC 版本时,MC 会因为读取到与当前版本不符的 Mod 而崩溃。" & vbCrLf &
|
"因此在切换 MC 版本时,MC 会因为读取到与当前版本不符的 Mod 而崩溃。" & vbCrLf &
|
||||||
@@ -1295,6 +1295,7 @@
|
|||||||
.MinecraftName = SelectedMinecraftId,
|
.MinecraftName = SelectedMinecraftId,
|
||||||
.OptiFineEntry = SelectedOptiFine,
|
.OptiFineEntry = SelectedOptiFine,
|
||||||
.ForgeEntry = SelectedForge,
|
.ForgeEntry = SelectedForge,
|
||||||
|
.NeoForgeEntry = SelectedNeoForge,
|
||||||
.FabricVersion = SelectedFabric,
|
.FabricVersion = SelectedFabric,
|
||||||
.FabricApi = SelectedFabricApi,
|
.FabricApi = SelectedFabricApi,
|
||||||
.OptiFabric = SelectedOptiFabric,
|
.OptiFabric = SelectedOptiFabric,
|
||||||
|
|||||||
@@ -43,6 +43,15 @@
|
|||||||
</x:Array>
|
</x:Array>
|
||||||
</local:MyListItem.Buttons>
|
</local:MyListItem.Buttons>
|
||||||
</local:MyListItem>
|
</local:MyListItem>
|
||||||
|
<local:MyListItem x:Name="ItemNeoForge" Visibility="Collapsed" Type="RadioBox" IsScaleAnimationEnabled="False" Tag="13" MinPaddingRight="35" Height="36" VerticalAlignment="Top" Title="NeoForge"
|
||||||
|
LogoScale="1.00" Logo="M402.807089 481.189274c-12.040221-6.991228-27.412326-2.797719-34.397415 9.242502l-8.387018 14.512529c-6.987135 12.035104-2.793626 27.40721 9.246595 34.392298 12.040221 6.985088 27.408233 2.797719 34.393321-9.242502l8.387018-14.511505C418.930301 503.437997 414.842193 488.063845 402.807089 481.189274L402.807089 481.189274zM495.028467 919.955342 59.056024 919.955342c-18.485003 0-33.532721 15.046694-33.532721 33.536814 0 18.485003 15.046694 33.532721 33.532721 33.532721l435.972443 0c18.49012 0 33.537837-15.046694 33.537837-33.532721C528.566304 935.002037 513.518586 919.955342 495.028467 919.955342L495.028467 919.955342zM997.431901 660.155295 590.482469 446.039729l90.935082-157.474544c18.485003-32.031531 7.520277-73.090669-24.51023-91.581812L395.496589 46.070268c-32.031531-18.485003-73.094762-7.520277-91.579765 24.51023L18.74697 564.277644c-18.485003 32.031531-7.521301 73.089645 24.51023 91.579765l261.408685 150.907988c32.031531 18.491143 73.095785 7.526417 91.581812-24.505114l91.364871-158.330028 392.332527 239.48128c16.016789 9.247618 36.544311 3.76372 45.792952-12.249999l83.838454-145.219429C1019.033895 689.930435 1013.444597 669.39882 997.431901 660.155295L997.431901 660.155295zM355.078041 719.704552c-9.242502 16.012695-29.774117 21.497617-45.787836 12.251022L105.923448 614.57826c-16.016789-9.242502-21.497617-29.774117-12.255115-45.787836l251.522524-435.653171c9.246595-16.012695 29.774117-21.497617 45.792952-12.249999l203.25624 117.376291c16.018835 9.242502 21.497617 29.774117 12.255115 45.786813L355.078041 719.704552 355.078041 719.704552zM884.568391 788.601712 522.115382 564.492538l33.537837-58.048067L934.875147 701.539844 884.568391 788.601712 884.568391 788.601712zM520.184403 277.8174c-12.040221-6.987135-27.41335-2.792603-34.399461 9.246595l-75.456552 130.702807c-6.985088 12.040221-2.791579 27.412326 9.242502 34.397415 12.040221 6.987135 27.412326 2.791579 34.397415-9.242502l75.458599-130.706901C536.307615 300.174594 532.219507 284.807604 520.184403 277.8174L520.184403 277.8174zM520.184403 277.8174">
|
||||||
|
<!--Logo="M789.504 912.896h-195.072a35.328 35.328 0 0 1-34.816-35.328v-77.312a39.936 39.936 0 0 0-40.448-39.936H481.28a40.448 40.448 0 0 0-40.448 39.936v77.312a34.816 34.816 0 0 1-34.816 35.328H204.8a41.984 41.984 0 0 1-40.448-42.496v-200.192a35.328 35.328 0 0 1 35.328-35.328h72.704a39.936 39.936 0 0 0 39.936-39.936v-37.888a39.936 39.936 0 0 0-39.936-40.448H199.68a35.328 35.328 0 0 1-35.328-35.328V287.744A41.984 41.984 0 0 1 204.8 245.76h176.64v-32.768a102.4 102.4 0 0 1 102.4-102.4h33.792a102.4 102.4 0 0 1 102.4 102.4v32.768h170.496a41.984 41.984 0 0 1 41.984 41.984V460.8h28.672a102.4 102.4 0 0 1 102.4 102.4v33.792a102.4 102.4 0 0 1-102.4 102.4h-28.672V870.4a41.984 41.984 0 0 1-43.008 42.496z m-159.744-70.144h131.584V665.6a34.304 34.304 0 0 1 34.816-34.816h64a31.744 31.744 0 0 0 31.744-31.744V563.2a31.744 31.744 0 0 0-31.744-31.744h-64a34.816 34.816 0 0 1-34.816-35.328V316.416h-177.152a35.328 35.328 0 0 1-35.328-35.328V212.992a31.744 31.744 0 0 0-31.744-31.744h-33.792a31.744 31.744 0 0 0-31.744 31.744v68.096a35.328 35.328 0 0 1-34.816 35.328H234.496v130.048h37.888a110.592 110.592 0 0 1 110.08 110.592v37.888a110.592 110.592 0 0 1-110.08 110.592h-37.888v137.216h136.192v-42.496a110.592 110.592 0 0 1 110.592-110.08h37.888a110.592 110.592 0 0 1 110.592 110.08z">-->
|
||||||
|
<local:MyListItem.Buttons>
|
||||||
|
<x:Array Type="{x:Type local:MyIconButton}">
|
||||||
|
<local:MyIconButton Tag="13" ToolTip="刷新" ToolTipService.Placement="Right" ToolTipService.InitialShowDelay="200" ToolTipService.VerticalOffset="-1" LogoScale="0.85" Click="Refresh" Logo="M875.52 148.48C783.36 56.32 655.36 0 512 0 291.84 0 107.52 138.24 30.72 332.8l122.88 46.08C204.8 230.4 348.16 128 512 128c107.52 0 199.68 40.96 271.36 112.64L640 384h384V0L875.52 148.48zM512 896c-107.52 0-199.68-40.96-271.36-112.64L384 640H0v384l148.48-148.48C240.64 967.68 368.64 1024 512 1024c220.16 0 404.48-138.24 481.28-332.8L870.4 645.12C819.2 793.6 675.84 896 512 896z" />
|
||||||
|
</x:Array>
|
||||||
|
</local:MyListItem.Buttons>
|
||||||
|
</local:MyListItem>
|
||||||
<local:MyListItem x:Name="ItemFabric" Visibility="Collapsed" Type="RadioBox" IsScaleAnimationEnabled="False" Tag="7" MinPaddingRight="35" Height="36" VerticalAlignment="Top" Title="Fabric"
|
<local:MyListItem x:Name="ItemFabric" Visibility="Collapsed" Type="RadioBox" IsScaleAnimationEnabled="False" Tag="7" MinPaddingRight="35" Height="36" VerticalAlignment="Top" Title="Fabric"
|
||||||
LogoScale="1.02" Logo="M826.453333 170.666667c-100.266667-93.866667-248.96-76.373333-256-75.52a31.786667 31.786667 0 0 0-26.666666 22.613333c-1.066667 3.2-101.546667 330.666667-426.666667 445.013333a29.013333 29.013333 0 0 0-7.893333 4.48l-1.493334 1.066667a29.44 29.44 0 0 0-5.973333 6.613333 31.786667 31.786667 0 0 0-3.626667 7.68 5.333333 5.333333 0 0 1 0 1.493334 30.506667 30.506667 0 0 0 0 8.96c7.466667 116.266667 45.013333 204.586667 112 262.826666a303.36 303.36 0 0 0 194.773334 71.466667h11.52a32.426667 32.426667 0 0 0 27.093333-19.626667 694.186667 694.186667 0 0 1 159.36-234.666666l-7.68 55.466666A31.786667 31.786667 0 0 0 621.44 768h4.48a32.213333 32.213333 0 0 0 31.786667-27.733333l15.573333-112.426667 112.426667 8.32a32 32 0 1 0 4.693333-64l-56.96-4.266667c36.48-25.813333 74.026667-50.56 112-75.52l51.626667-34.133333a31.573333 31.573333 0 0 0 14.08-24.746667c6.186667-115.2-21.76-203.306667-84.693334-262.826666zM620.8 573.013333l-1.706667 1.493334a219.093333 219.093333 0 0 0-87.466666-116.693334 222.933333 222.933333 0 0 0-95.146667-33.28c18.986667-21.333333 36.266667-42.666667 51.626667-64a198.613333 198.613333 0 0 1 202.453333 158.08c-20.053333 14.506667-39.893333 29.44-59.52 45.226667a29.866667 29.866667 0 0 0-10.24 9.173333z m-228.693333 292.266667a238.72 238.72 0 0 1-141.44-55.893333 213.333333 213.333333 0 0 1-34.986667-39.466667 123.946667 123.946667 0 0 0 44.373333 8.106667 168.533333 168.533333 0 0 0 69.12-16.213334 29.44 29.44 0 0 0 7.04-4.266666l106.666667-85.333334a32 32 0 1 0-39.893333-49.92L298.666667 704a78.293333 78.293333 0 0 1-69.546667 1.706667c-32.426667-17.066667-52.693333-61.653333-62.506667-93.44a709.333333 709.333333 0 0 0 202.453334-123.733334 187.52 187.52 0 0 1 128 21.333334 171.946667 171.946667 0 0 1 68.906666 109.653333 756.48 756.48 0 0 0-173.866666 245.76zM810.666667 438.4l-64 42.666667A256 256 0 0 0 529.706667 298.666667a810.666667 810.666667 0 0 0 69.12-140.8c37.973333-1.066667 123.946667 4.053333 183.68 59.946666 45.866667 42.666667 67.84 108.8 65.493333 195.84z">
|
LogoScale="1.02" Logo="M826.453333 170.666667c-100.266667-93.866667-248.96-76.373333-256-75.52a31.786667 31.786667 0 0 0-26.666666 22.613333c-1.066667 3.2-101.546667 330.666667-426.666667 445.013333a29.013333 29.013333 0 0 0-7.893333 4.48l-1.493334 1.066667a29.44 29.44 0 0 0-5.973333 6.613333 31.786667 31.786667 0 0 0-3.626667 7.68 5.333333 5.333333 0 0 1 0 1.493334 30.506667 30.506667 0 0 0 0 8.96c7.466667 116.266667 45.013333 204.586667 112 262.826666a303.36 303.36 0 0 0 194.773334 71.466667h11.52a32.426667 32.426667 0 0 0 27.093333-19.626667 694.186667 694.186667 0 0 1 159.36-234.666666l-7.68 55.466666A31.786667 31.786667 0 0 0 621.44 768h4.48a32.213333 32.213333 0 0 0 31.786667-27.733333l15.573333-112.426667 112.426667 8.32a32 32 0 1 0 4.693333-64l-56.96-4.266667c36.48-25.813333 74.026667-50.56 112-75.52l51.626667-34.133333a31.573333 31.573333 0 0 0 14.08-24.746667c6.186667-115.2-21.76-203.306667-84.693334-262.826666zM620.8 573.013333l-1.706667 1.493334a219.093333 219.093333 0 0 0-87.466666-116.693334 222.933333 222.933333 0 0 0-95.146667-33.28c18.986667-21.333333 36.266667-42.666667 51.626667-64a198.613333 198.613333 0 0 1 202.453333 158.08c-20.053333 14.506667-39.893333 29.44-59.52 45.226667a29.866667 29.866667 0 0 0-10.24 9.173333z m-228.693333 292.266667a238.72 238.72 0 0 1-141.44-55.893333 213.333333 213.333333 0 0 1-34.986667-39.466667 123.946667 123.946667 0 0 0 44.373333 8.106667 168.533333 168.533333 0 0 0 69.12-16.213334 29.44 29.44 0 0 0 7.04-4.266666l106.666667-85.333334a32 32 0 1 0-39.893333-49.92L298.666667 704a78.293333 78.293333 0 0 1-69.546667 1.706667c-32.426667-17.066667-52.693333-61.653333-62.506667-93.44a709.333333 709.333333 0 0 0 202.453334-123.733334 187.52 187.52 0 0 1 128 21.333334 171.946667 171.946667 0 0 1 68.906666 109.653333 756.48 756.48 0 0 0-173.866666 245.76zM810.666667 438.4l-64 42.666667A256 256 0 0 0 529.706667 298.666667a810.666667 810.666667 0 0 0 69.12-140.8c37.973333-1.066667 123.946667 4.053333 183.68 59.946666 45.866667 42.666667 67.84 108.8 65.493333 195.84z">
|
||||||
<local:MyListItem.Buttons>
|
<local:MyListItem.Buttons>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
''' <summary>
|
''' <summary>
|
||||||
''' 勾选事件改变页面。
|
''' 勾选事件改变页面。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Private Sub PageCheck(sender As MyListItem, e As RouteEventArgs) Handles ItemInstall.Check, ItemClient.Check, ItemOptiFine.Check, ItemForge.Check, ItemLiteLoader.Check, ItemMod.Check, ItemFabric.Check, ItemPack.Check
|
Private Sub PageCheck(sender As MyListItem, e As RouteEventArgs) Handles ItemInstall.Check, ItemClient.Check, ItemOptiFine.Check, ItemForge.Check, ItemNeoForge.Check, ItemLiteLoader.Check, ItemMod.Check, ItemFabric.Check, ItemPack.Check
|
||||||
'尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
|
'尚未初始化控件属性时,sender.Tag 为 Nothing,会导致切换到页面 0
|
||||||
'若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
|
'若使用 IsLoaded,则会导致模拟点击不被执行(模拟点击切换页面时,控件的 IsLoaded 为 False)
|
||||||
If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
|
If sender.Tag IsNot Nothing Then PageChange(Val(sender.Tag))
|
||||||
@@ -31,6 +31,9 @@
|
|||||||
Case FormMain.PageSubType.DownloadForge
|
Case FormMain.PageSubType.DownloadForge
|
||||||
If FrmDownloadForge Is Nothing Then FrmDownloadForge = New PageDownloadForge
|
If FrmDownloadForge Is Nothing Then FrmDownloadForge = New PageDownloadForge
|
||||||
Return FrmDownloadForge
|
Return FrmDownloadForge
|
||||||
|
Case FormMain.PageSubType.DownloadNeoForge
|
||||||
|
If FrmDownloadNeoForge Is Nothing Then FrmDownloadNeoForge = New PageDownloadNeoForge
|
||||||
|
Return FrmDownloadNeoForge
|
||||||
Case FormMain.PageSubType.DownloadLiteLoader
|
Case FormMain.PageSubType.DownloadLiteLoader
|
||||||
If FrmDownloadLiteLoader Is Nothing Then FrmDownloadLiteLoader = New PageDownloadLiteLoader
|
If FrmDownloadLiteLoader Is Nothing Then FrmDownloadLiteLoader = New PageDownloadLiteLoader
|
||||||
Return FrmDownloadLiteLoader
|
Return FrmDownloadLiteLoader
|
||||||
@@ -91,6 +94,7 @@
|
|||||||
DlClientListLoader.Start(IsForceRestart:=True)
|
DlClientListLoader.Start(IsForceRestart:=True)
|
||||||
DlOptiFineListLoader.Start(IsForceRestart:=True)
|
DlOptiFineListLoader.Start(IsForceRestart:=True)
|
||||||
DlForgeListLoader.Start(IsForceRestart:=True)
|
DlForgeListLoader.Start(IsForceRestart:=True)
|
||||||
|
DlNeoForgeListLoader.Start(IsForceRestart:=True)
|
||||||
DlLiteLoaderListLoader.Start(IsForceRestart:=True)
|
DlLiteLoaderListLoader.Start(IsForceRestart:=True)
|
||||||
DlFabricListLoader.Start(IsForceRestart:=True)
|
DlFabricListLoader.Start(IsForceRestart:=True)
|
||||||
DlFabricApiLoader.Start(IsForceRestart:=True)
|
DlFabricApiLoader.Start(IsForceRestart:=True)
|
||||||
@@ -117,6 +121,9 @@
|
|||||||
Case FormMain.PageSubType.DownloadForge
|
Case FormMain.PageSubType.DownloadForge
|
||||||
DlForgeListLoader.Start(IsForceRestart:=True)
|
DlForgeListLoader.Start(IsForceRestart:=True)
|
||||||
ItemForge.Checked = True
|
ItemForge.Checked = True
|
||||||
|
Case FormMain.PageSubType.DownloadNeoForge
|
||||||
|
DlNeoForgeListLoader.Start(IsForceRestart:=True)
|
||||||
|
ItemNeoForge.Checked = True
|
||||||
Case FormMain.PageSubType.DownloadLiteLoader
|
Case FormMain.PageSubType.DownloadLiteLoader
|
||||||
DlLiteLoaderListLoader.Start(IsForceRestart:=True)
|
DlLiteLoaderListLoader.Start(IsForceRestart:=True)
|
||||||
ItemLiteLoader.Checked = True
|
ItemLiteLoader.Checked = True
|
||||||
@@ -154,6 +161,7 @@
|
|||||||
ItemOptiFine.Visibility = Visibility.Visible
|
ItemOptiFine.Visibility = Visibility.Visible
|
||||||
ItemFabric.Visibility = Visibility.Visible
|
ItemFabric.Visibility = Visibility.Visible
|
||||||
ItemForge.Visibility = Visibility.Visible
|
ItemForge.Visibility = Visibility.Visible
|
||||||
|
ItemNeoForge.Visibility = Visibility.Visible
|
||||||
ItemLiteLoader.Visibility = Visibility.Visible
|
ItemLiteLoader.Visibility = Visibility.Visible
|
||||||
RunInThread(Sub()
|
RunInThread(Sub()
|
||||||
Thread.Sleep(20)
|
Thread.Sleep(20)
|
||||||
@@ -172,6 +180,7 @@
|
|||||||
ItemOptiFine.Visibility = Visibility.Collapsed
|
ItemOptiFine.Visibility = Visibility.Collapsed
|
||||||
ItemFabric.Visibility = Visibility.Collapsed
|
ItemFabric.Visibility = Visibility.Collapsed
|
||||||
ItemForge.Visibility = Visibility.Collapsed
|
ItemForge.Visibility = Visibility.Collapsed
|
||||||
|
ItemNeoForge.Visibility = Visibility.Collapsed
|
||||||
ItemLiteLoader.Visibility = Visibility.Collapsed
|
ItemLiteLoader.Visibility = Visibility.Collapsed
|
||||||
RunInThread(Sub()
|
RunInThread(Sub()
|
||||||
Thread.Sleep(20)
|
Thread.Sleep(20)
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<local:MyPageRight
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:local="clr-namespace:PCL" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
mc:Ignorable="d" x:Class="PageDownloadNeoForge"
|
||||||
|
PanScroll="{Binding ElementName=PanBack}">
|
||||||
|
<local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
|
||||||
|
<StackPanel Orientation="Vertical" Margin="5">
|
||||||
|
<local:MyCard Margin="20,20,20,0" Grid.IsSharedSizeScope="True" Title="NeoForge 简介" x:Name="CardTip">
|
||||||
|
<StackPanel Margin="25,40,15,20">
|
||||||
|
<TextBlock Margin="0,0,0,11" Text="NeoForge 是新版 Minecraft 下的 Mod 加载器,你需要先安装它才能安装各种 NeoForge 模组。
本页面提供 NeoForge 安装器下载,在下载后你需要手动打开安装器进行安装。" TextWrapping="Wrap" />
|
||||||
|
<Grid Height="35">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<local:MyButton x:Name="BtnWeb" Grid.Column="0" MinWidth="140" Text="打开官网" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" ColorType="Highlight" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
</local:MyCard>
|
||||||
|
<local:MyCard x:Name="CardVersions" Margin="20,15,20,20" Title="版本列表">
|
||||||
|
<StackPanel x:Name="PanVersions" Margin="20,40,18,20" />
|
||||||
|
</local:MyCard>
|
||||||
|
<local:MyCard HorizontalAlignment="Center" SnapsToDevicePixels="True" x:Name="PanLoad" UseAnimation="False" Margin="40,50">
|
||||||
|
<local:MyLoading Text="正在获取 NeoForge 列表" Margin="20,20,20,17" x:Name="Load" HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||||||
|
</local:MyCard>
|
||||||
|
</StackPanel>
|
||||||
|
</local:MyScrollViewer>
|
||||||
|
</local:MyPageRight>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
Public Class PageDownloadNeoForge
|
||||||
|
|
||||||
|
Private Sub LoaderInit() Handles Me.Initialized
|
||||||
|
PageLoaderInit(Load, PanLoad, CardVersions, CardTip, DlNeoForgeListLoader, AddressOf Load_OnFinish)
|
||||||
|
End Sub
|
||||||
|
Private Sub Init() Handles Me.Loaded
|
||||||
|
PanBack.ScrollToHome()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub Load_OnFinish()
|
||||||
|
'结果数据化
|
||||||
|
Try
|
||||||
|
Dim Versions As List(Of DlNeoForgeVersionEntry) = DlNeoForgeListLoader.Output
|
||||||
|
PanVersions.Children.Clear()
|
||||||
|
For Each Version In Versions
|
||||||
|
PanVersions.Children.Add(NeoForgeDownloadListItem(Version, AddressOf NeoForge_Selected, True))
|
||||||
|
Next
|
||||||
|
CardVersions.Title = "版本列表 (" & Versions.Count & ")"
|
||||||
|
Catch ex As Exception
|
||||||
|
Log(ex, "可视化 NeoForge 版本列表出错", LogLevel.Feedback)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub NeoForge_Selected(sender As MyListItem, e As EventArgs)
|
||||||
|
McDownloadNeoForgeSave(sender.Tag)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Sub BtnWeb_Click(sender As Object, e As EventArgs) Handles BtnWeb.Click
|
||||||
|
OpenWebsite("https://neoforged.net/")
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
End Class
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
<local:MyComboBoxItem Content="红石灯(关)" Tag="pack://application:,,,/images/Blocks/RedstoneLampOff.png" />
|
<local:MyComboBoxItem Content="红石灯(关)" Tag="pack://application:,,,/images/Blocks/RedstoneLampOff.png" />
|
||||||
<local:MyComboBoxItem Content="鸡蛋" Tag="pack://application:,,,/images/Blocks/Egg.png" />
|
<local:MyComboBoxItem Content="鸡蛋" Tag="pack://application:,,,/images/Blocks/Egg.png" />
|
||||||
<local:MyComboBoxItem Content="布料(Fabric)" Tag="pack://application:,,,/images/Blocks/Fabric.png" />
|
<local:MyComboBoxItem Content="布料(Fabric)" Tag="pack://application:,,,/images/Blocks/Fabric.png" />
|
||||||
|
<local:MyComboBoxItem Content="狐狸(NeoForge)" Tag="pack://application:,,,/images/Icons/NeoForged.png" />
|
||||||
</local:MyComboBox>
|
</local:MyComboBox>
|
||||||
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="分类" Margin="0,0,25,0" />
|
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="分类" Margin="0,0,25,0" />
|
||||||
<local:MyComboBox Grid.Column="1" Grid.Row="2" x:Name="ComboDisplayType">
|
<local:MyComboBox Grid.Column="1" Grid.Row="2" x:Name="ComboDisplayType">
|
||||||
|
|||||||
@@ -229,6 +229,9 @@
|
|||||||
<Compile Include="Modules\Minecraft\MyCompItem.xaml.vb">
|
<Compile Include="Modules\Minecraft\MyCompItem.xaml.vb">
|
||||||
<DependentUpon>MyCompItem.xaml</DependentUpon>
|
<DependentUpon>MyCompItem.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Pages\PageDownload\PageDownloadNeoForge.xaml.vb">
|
||||||
|
<DependentUpon>PageDownloadNeoForge.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Pages\PageDownload\PageDownloadMod.xaml.vb">
|
<Compile Include="Pages\PageDownload\PageDownloadMod.xaml.vb">
|
||||||
<DependentUpon>PageDownloadMod.xaml</DependentUpon>
|
<DependentUpon>PageDownloadMod.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -474,6 +477,10 @@
|
|||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Include="Pages\PageDownload\PageDownloadNeoForge.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
<Page Include="Pages\PageDownload\PageDownloadMod.xaml">
|
<Page Include="Pages\PageDownload\PageDownloadMod.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
|||||||
@@ -202,6 +202,8 @@
|
|||||||
<!-- 鸡蛋 -->
|
<!-- 鸡蛋 -->
|
||||||
<Image Width="30" Margin="5,0,0,0" Source="pack://application:,,,/images/Blocks/Fabric.png"/>
|
<Image Width="30" Margin="5,0,0,0" Source="pack://application:,,,/images/Blocks/Fabric.png"/>
|
||||||
<!-- 布料(Fabric 图标) -->
|
<!-- 布料(Fabric 图标) -->
|
||||||
|
<Image Width="30" Margin="5,0,0,0" Source="pack://application:,,,/images/Icons/NeoForged.png"/>
|
||||||
|
<!-- 狐狸(NeoForge 图标) -->
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBlock TextWrapping="Wrap" Margin="0,0,0,4"
|
<TextBlock TextWrapping="Wrap" Margin="0,0,0,4"
|
||||||
Text="使用时,将上方对应行的 Source 复制到 MyListItem 的 Logo 属性处即可。"/>
|
Text="使用时,将上方对应行的 Source 复制到 MyListItem 的 Logo 属性处即可。"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user