2.12.6.1
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
Public Module ModComp
|
||||
Imports System.IO.Compression
|
||||
|
||||
Public Module ModComp
|
||||
|
||||
<Flags> Public Enum CompType
|
||||
''' <summary>
|
||||
@@ -58,37 +60,39 @@
|
||||
'初始化数据库
|
||||
_CompDatabase = New List(Of CompDatabaseEntry)
|
||||
Dim i As Integer = 0
|
||||
For Each Line In DecodeBytes(GetResources("ModData")).Replace(vbCrLf, vbLf).Replace(vbCr, "").Split(vbLf)
|
||||
i += 1
|
||||
If Line = "" Then Continue For
|
||||
For Each EntryData As String In Line.Split("¨")
|
||||
Dim Entry = New CompDatabaseEntry
|
||||
Dim Splited = EntryData.Split("|")
|
||||
Entry.Popularity = Val(Splited(0))
|
||||
If Splited(1).StartsWithF("@") Then
|
||||
Entry.CurseForgeSlug = Nothing
|
||||
Entry.ModrinthSlug = Splited(1).Replace("@", "")
|
||||
ElseIf Splited(1).EndsWithF("@") Then
|
||||
Entry.CurseForgeSlug = Splited(1).TrimEnd("@")
|
||||
Entry.ModrinthSlug = Entry.CurseForgeSlug
|
||||
ElseIf Splited(1).Contains("@") Then
|
||||
Entry.CurseForgeSlug = Splited(1).Split("@")(0)
|
||||
Entry.ModrinthSlug = Splited(1).Split("@")(1)
|
||||
Else
|
||||
Entry.CurseForgeSlug = Splited(1)
|
||||
Entry.ModrinthSlug = Nothing
|
||||
End If
|
||||
Entry.WikiId = i
|
||||
If Splited.Count >= 3 Then
|
||||
Entry.ChineseName = Splited.Last
|
||||
If Entry.ChineseName.Contains("*") Then '处理 *
|
||||
Entry.ChineseName = Entry.ChineseName.Replace("*",
|
||||
$" ({If(Entry.CurseForgeSlug, Entry.ModrinthSlug).Replace("-", " ").Capitalize})")
|
||||
Using Archive As New ZipArchive(New MemoryStream(GetResources("ModData")), ZipArchiveMode.Read)
|
||||
For Each Line In ReadFile(Archive.GetEntry("moddata.txt").Open(), Encoding.UTF8).Replace(vbCrLf, vbLf).Replace(vbCr, "").Split(vbLf)
|
||||
i += 1
|
||||
If Line = "" Then Continue For
|
||||
For Each EntryData As String In Line.Split("¨")
|
||||
Dim Entry = New CompDatabaseEntry
|
||||
Dim Splited = EntryData.Split("|")
|
||||
Entry.Popularity = Val(Splited(0))
|
||||
If Splited(1).StartsWithF("@") Then
|
||||
Entry.CurseForgeSlug = Nothing
|
||||
Entry.ModrinthSlug = Splited(1).Replace("@", "")
|
||||
ElseIf Splited(1).EndsWithF("@") Then
|
||||
Entry.CurseForgeSlug = Splited(1).TrimEnd("@")
|
||||
Entry.ModrinthSlug = Entry.CurseForgeSlug
|
||||
ElseIf Splited(1).Contains("@") Then
|
||||
Entry.CurseForgeSlug = Splited(1).Split("@")(0)
|
||||
Entry.ModrinthSlug = Splited(1).Split("@")(1)
|
||||
Else
|
||||
Entry.CurseForgeSlug = Splited(1)
|
||||
Entry.ModrinthSlug = Nothing
|
||||
End If
|
||||
End If
|
||||
_CompDatabase.Add(Entry)
|
||||
Entry.WikiId = i
|
||||
If Splited.Count >= 3 Then
|
||||
Entry.ChineseName = Splited.Last
|
||||
If Entry.ChineseName.Contains("*") Then '处理 *
|
||||
Entry.ChineseName = Entry.ChineseName.Replace("*",
|
||||
$" ({If(Entry.CurseForgeSlug, Entry.ModrinthSlug).Replace("-", " ").Capitalize})")
|
||||
End If
|
||||
End If
|
||||
_CompDatabase.Add(Entry)
|
||||
Next
|
||||
Next
|
||||
Next
|
||||
End Using
|
||||
Return _CompDatabase
|
||||
End Get
|
||||
End Property
|
||||
@@ -322,7 +326,7 @@
|
||||
Next
|
||||
CurseForgeFileIds = Files.Select(Function(f) f.Key).Distinct.ToList
|
||||
Drops = Files.SelectMany(Function(f) f.Value).
|
||||
Select(Function(v) McVersion.VersionToDrop(v)).Where(Function(v) v > 0).Distinct.OrderByDescending(Function(v) v).ToList
|
||||
Select(Function(v) McVersion.VersionToDrop(v)).Where(Function(v) v <> 209).Distinct.OrderByDescending(Function(v) v).ToList
|
||||
ModLoaders = ModLoaders.Distinct.OrderBy(Of Integer)(Function(t) t).ToList
|
||||
'Tags
|
||||
Tags = New List(Of String)
|
||||
@@ -418,7 +422,7 @@
|
||||
'GameVersions
|
||||
'搜索结果的键为 versions,获取特定工程的键为 game_versions
|
||||
UnsafeGameVersions = If(CType(If(Data("game_versions"), Data("versions")), JArray), New JArray).Select(Function(v) v.ToString).Distinct.ToList
|
||||
Drops = UnsafeGameVersions.Select(Function(v) McVersion.VersionToDrop(v)).Where(Function(v) v > 0).Distinct.OrderByDescending(Function(v) v).ToList
|
||||
Drops = UnsafeGameVersions.Select(Function(v) McVersion.VersionToDrop(v)).Where(Function(v) v <> 209).Distinct.OrderByDescending(Function(v) v).ToList
|
||||
'Type
|
||||
Select Case Data("project_type").ToString
|
||||
Case "modpack" : Types = CompType.ModPack
|
||||
@@ -1100,7 +1104,7 @@ NextPage:
|
||||
|
||||
'在 1.14-,部分老 Mod 没有设置支持的加载器,因此添加 Forge 筛选就会出现遗漏
|
||||
'所以,在发起请求时不筛选加载器,然后在返回的结果中自行筛除不是 Forge 的 Mod
|
||||
Dim IgnoreModLoaderFilter = Request.ModLoader = CompModLoaderType.Forge AndAlso McVersion.VersionToDrop(Request.GameVersion, True) < 140
|
||||
Dim IgnoreModLoaderFilter = Request.ModLoader = CompModLoaderType.Forge AndAlso McVersion.VersionToDrop(Request.GameVersion) < 140
|
||||
Try
|
||||
|
||||
'CurseForge 搜索
|
||||
|
||||
@@ -213,6 +213,7 @@
|
||||
For Each Version As JObject In Loader.Output.Value("versions")
|
||||
Drops.Add(McVersion.VersionToDrop(Version("id")))
|
||||
Next
|
||||
Drops.Remove(209)
|
||||
AllDrops = Drops.Distinct.OrderByDescending(Function(d) d).ToList()
|
||||
End Sub
|
||||
|
||||
|
||||
@@ -1422,14 +1422,14 @@ NextInstance:
|
||||
End If
|
||||
Args.Add("-Doolloo.jlw.tmpdir=${pure_directory}") '这里需要不以 \ 结尾
|
||||
End If
|
||||
McLaunchLog("使用 JLW:" & UseJLW)
|
||||
|
||||
'LUA
|
||||
Dim UseLUA As Boolean =
|
||||
Not Settings.Get("LaunchAdvanceDisableLUA") AndAlso Not Settings.Get("VersionAdvanceDisableLUA", McInstanceSelected) AndAlso
|
||||
McLaunchJavaSelected.MajorVersion >= 25
|
||||
If UseLUA Then
|
||||
Args.Add($"-javaagent:""{ExtractPatch("LUA")}""")
|
||||
End If
|
||||
McLaunchJavaSelected.MajorVersion >= 25 AndAlso McInstanceSelected.Version.Drop >= 261
|
||||
If UseLUA Then Args.Add($"-javaagent:""{ExtractPatch("LUA")}""")
|
||||
McLaunchLog("使用 LUA:" & UseLUA)
|
||||
|
||||
#Region "内存管理"
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ Public Module ModMinecraft
|
||||
|
||||
#Region "版本处理"
|
||||
|
||||
Public Const McInstanceCacheVersion As Integer = 33
|
||||
Public Const McInstanceCacheVersion As Integer = 34
|
||||
|
||||
Private _McInstanceSelected As McInstance
|
||||
''' <summary>
|
||||
@@ -444,21 +444,7 @@ Public Module ModMinecraft
|
||||
VersionSearchFinish:
|
||||
'获取版本号
|
||||
_Version.VanillaName = _Version.VanillaName.Replace("_unobfuscated", "").Replace(" Unobfuscated", "")
|
||||
If _Version.VanillaName.StartsWithF("1.") Then
|
||||
Dim Segments = _Version.VanillaName.Split(" _-.".ToCharArray)
|
||||
_Version.Vanilla = New Version(
|
||||
Val(If(Segments.Count >= 2, Segments(1), "0")),
|
||||
0,
|
||||
Val(If(Segments.Count >= 3, Segments(2), "0")))
|
||||
ElseIf RegexCheck(_Version.VanillaName, "^[2-9][0-9]\.") Then
|
||||
Dim Segments = _Version.VanillaName.Split(" _-.".ToCharArray)
|
||||
_Version.Vanilla = New Version(
|
||||
Val(Segments(0)),
|
||||
Val(If(Segments.Count >= 2, Segments(1), "0")),
|
||||
Val(If(Segments.Count >= 3, Segments(2), "0")))
|
||||
Else
|
||||
_Version.Vanilla = New Version(9999, 0, 0)
|
||||
End If
|
||||
_Version.Vanilla = McVersion.NameToVersion(_Version.VanillaName)
|
||||
Return _Version
|
||||
End Get
|
||||
Set(value As McVersion)
|
||||
@@ -761,7 +747,8 @@ Recheck:
|
||||
Case Else '根据 API 进行筛选
|
||||
Dim RealJson As String = If(JsonObject, JsonText).ToString
|
||||
'愚人节与快照版本
|
||||
If If(JsonObject("type"), "").ToString = "fool" OrElse GetMcFoolName(Version.VanillaName) <> "" Then
|
||||
If If(JsonObject("type"), "").ToString = "fool" OrElse
|
||||
(ReleaseTime.ToUniversalTime.Month = 4 AndAlso ReleaseTime.ToUniversalTime.Day = 1) OrElse GetMcFoolName(Version.VanillaName) <> "" Then
|
||||
State = McInstanceState.Fool
|
||||
ElseIf IsSnapshot() Then
|
||||
State = McInstanceState.Snapshot
|
||||
@@ -1126,23 +1113,14 @@ ExitDataLoad:
|
||||
Return False
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 尝试将版本字符串转换为 Drop 序数。
|
||||
''' 若无法转换则返回 0。
|
||||
''' 将版本名转换为 Drop 序数。
|
||||
''' 若无法转换则返回 209。
|
||||
''' </summary>
|
||||
Public Shared Function VersionToDrop(Version As String, Optional AllowSnapshot As Boolean = False) As Integer
|
||||
If Not AllowSnapshot AndAlso Version.Contains("-") Then Return 0
|
||||
If Version Is Nothing Then Return 0
|
||||
Dim Segments = Version.BeforeFirst("-").Split(".")
|
||||
If Segments.Length < 2 Then Return 0
|
||||
Dim Major As Integer = Val(Segments(0))
|
||||
Dim Minor As Integer = Val(Segments(1))
|
||||
If Major = 1 Then
|
||||
Return Minor * 10
|
||||
ElseIf Major < 25 Then
|
||||
Return 0
|
||||
Else
|
||||
Return Major * 10 + Minor
|
||||
End If
|
||||
Public Shared Function VersionToDrop(VanillaName As String) As Integer
|
||||
If VanillaName Is Nothing Then Return 209
|
||||
Dim Version = NameToVersion(VanillaName)
|
||||
If Version.Major >= 1000 Then Return 209
|
||||
Return Version.Major * 10 + Version.Minor
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 将 Drop 序数转换为版本字符串。
|
||||
@@ -1150,10 +1128,36 @@ ExitDataLoad:
|
||||
Public Shared Function DropToVersion(Drop As Integer) As String
|
||||
If Drop >= 250 Then
|
||||
Return $"{Drop \ 10}.{Drop Mod 10}"
|
||||
ElseIf Drop = 209 Then
|
||||
Log("[Minecraft] 尝试将旧快照版 Drop 序数转换为版本字符串,这不应该发生!" & vbCrLf & GetStackTrace(), LogLevel.Debug)
|
||||
Return "1.20"
|
||||
Else
|
||||
Return $"1.{Drop \ 10}"
|
||||
End If
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 将版本名转换为可比较的三段式原版版本号。
|
||||
''' 对老版本格式,例如 1.20.3,会被转换为 20.0.3。
|
||||
''' 若没有版本号,例如旧快照,则为 9999.0.0。
|
||||
''' </summary>
|
||||
Public Shared Function NameToVersion(VanillaName As String) As Version
|
||||
VanillaName = VanillaName.Replace("_unobfuscated", "").Replace(" Unobfuscated", "")
|
||||
If VanillaName.StartsWithF("1.") Then
|
||||
Dim Segments = VanillaName.Split(" _-.".ToCharArray)
|
||||
Return New Version(
|
||||
Val(If(Segments.Count >= 2, Segments(1), "0")),
|
||||
0,
|
||||
Val(If(Segments.Count >= 3, Segments(2), "0")))
|
||||
ElseIf RegexCheck(VanillaName, "^[2-9][0-9]\.") Then
|
||||
Dim Segments = VanillaName.Split(" _-.".ToCharArray)
|
||||
Return New Version(
|
||||
Val(Segments(0)),
|
||||
Val(If(Segments.Count >= 2, Segments(1), "0")),
|
||||
Val(If(Segments.Count >= 3, Segments(2), "0")))
|
||||
Else
|
||||
Return New Version(9999, 0, 0)
|
||||
End If
|
||||
End Function
|
||||
|
||||
End Class
|
||||
|
||||
@@ -1180,6 +1184,8 @@ ExitDataLoad:
|
||||
Return "2024 | 毒马铃薯一直都被大家忽视和低估,于是我们超级加强了它!"
|
||||
ElseIf Name = "25w14craftmine" Then
|
||||
Return "2025 | 你可以合成任何东西——包括合成你的世界!"
|
||||
ElseIf Name = "26w14a" Then
|
||||
Return "2026 | 为什么需要物品栏?让方块们跟着你走吧!"
|
||||
Else
|
||||
Return ""
|
||||
End If
|
||||
|
||||
Reference in New Issue
Block a user