Public Function Split(FullStr As String, SplitStr As String) As String()
+ If SplitStr.Length = 1 Then
+ Return FullStr.Split(SplitStr(0))
+ Else
+ Return FullStr.Split({SplitStr}, StringSplitOptions.None)
+ End If
+ End Function
'''
''' 获取字符串哈希值。
@@ -1785,46 +1800,71 @@ NextElement:
'''
''' 将时间间隔转换为类似“5 分 10 秒前”的易于阅读的形式。
'''
- Public Function GetTimeSpanString(Span As TimeSpan) As String
+ Public Function GetTimeSpanString(Span As TimeSpan, IsShortForm As Boolean) As String
Dim EndFix = If(Span.TotalMilliseconds > 0, "后", "前")
If Span.TotalMilliseconds < 0 Then Span = -Span
Dim TotalMonthes = Math.Floor(Span.Days / 30)
- If TotalMonthes >= 61 Then
- '5+ 年,“5 年”
- GetTimeSpanString = Math.Floor(TotalMonthes / 12) & " 年"
- ElseIf TotalMonthes >= 12 Then
- '12~60 月,“1 年 2 个月”
- GetTimeSpanString = Math.Floor(TotalMonthes / 12) & " 年" & If((TotalMonthes Mod 12) > 0, " " & (TotalMonthes Mod 12) & " 个月", "")
- ElseIf TotalMonthes >= 4 Then
- '4~11 月,“5 月”
- GetTimeSpanString = TotalMonthes & " 月"
- ElseIf TotalMonthes >= 1 Then
- '1~4 月,“2 月 13 天”
- GetTimeSpanString = TotalMonthes & " 月" & If((Span.Days Mod 30) > 0, " " & (Span.Days Mod 30) & " 天", "")
- ElseIf Span.TotalDays >= 4 Then
- '4~30 天,“23 天”
- GetTimeSpanString = Span.Days & " 天"
- ElseIf Span.TotalDays >= 1 Then
- '1~3 天,“2 天 20 小时”
- GetTimeSpanString = Span.Days & " 天" & If(Span.Hours > 0, " " & Span.Hours & " 小时", "")
- ElseIf Span.TotalHours >= 10 Then
- '10 小时 ~ 1 天,“15 小时”
- GetTimeSpanString = Span.Hours & " 小时"
- ElseIf Span.TotalHours >= 1 Then
- '1~10 小时,“1 小时 20 分钟”
- GetTimeSpanString = Span.Hours & " 小时" & If(Span.Minutes > 0, " " & Span.Minutes & " 分钟", "")
- ElseIf Span.TotalMinutes >= 10 Then
- '10 分钟 ~ 1 小时,“49 分钟”
- GetTimeSpanString = Span.Minutes & " 分钟"
- ElseIf Span.TotalMinutes >= 1 Then
- '1~10 分钟,“9 分 23 秒”
- GetTimeSpanString = Span.Minutes & " 分" & If(Span.Seconds > 0, " " & Span.Seconds & " 秒", "")
- ElseIf Span.TotalSeconds >= 1 Then
- '1 秒 ~ 1 分钟,“23 秒”
- GetTimeSpanString = Span.Seconds & " 秒"
+ If IsShortForm Then
+ If TotalMonthes >= 12 Then
+ '1+ 年,“3 年”
+ GetTimeSpanString = Math.Floor(TotalMonthes / 12) & " 年"
+ ElseIf TotalMonthes >= 2 Then
+ '2~11 月,“5 个月”
+ GetTimeSpanString = TotalMonthes & " 个月"
+ ElseIf Span.TotalDays >= 2 Then
+ '2 天 ~ 2 月,“23 天”
+ GetTimeSpanString = Span.Days & " 天"
+ ElseIf Span.TotalHours >= 1 Then
+ '1 小时 ~ 2 天,“15 小时”
+ GetTimeSpanString = Span.Hours & " 小时"
+ ElseIf Span.TotalMinutes >= 1 Then
+ '1 分钟 ~ 1 小时,“49 分钟”
+ GetTimeSpanString = Span.Minutes & " 分钟"
+ ElseIf Span.TotalSeconds >= 1 Then
+ '1 秒 ~ 1 分钟,“23 秒”
+ GetTimeSpanString = Span.Seconds & " 秒"
+ Else
+ '不到 1 秒
+ GetTimeSpanString = "1 秒"
+ End If
Else
- '不到 1 秒
- GetTimeSpanString = "1 秒"
+ If TotalMonthes >= 61 Then
+ '5+ 年,“5 年”
+ GetTimeSpanString = Math.Floor(TotalMonthes / 12) & " 年"
+ ElseIf TotalMonthes >= 12 Then
+ '12~60 月,“1 年 2 个月”
+ GetTimeSpanString = Math.Floor(TotalMonthes / 12) & " 年" & If((TotalMonthes Mod 12) > 0, " " & (TotalMonthes Mod 12) & " 个月", "")
+ ElseIf TotalMonthes >= 4 Then
+ '4~11 月,“5 月”
+ GetTimeSpanString = TotalMonthes & " 月"
+ ElseIf TotalMonthes >= 1 Then
+ '1~4 月,“2 月 13 天”
+ GetTimeSpanString = TotalMonthes & " 月" & If((Span.Days Mod 30) > 0, " " & (Span.Days Mod 30) & " 天", "")
+ ElseIf Span.TotalDays >= 4 Then
+ '4~30 天,“23 天”
+ GetTimeSpanString = Span.Days & " 天"
+ ElseIf Span.TotalDays >= 1 Then
+ '1~3 天,“2 天 20 小时”
+ GetTimeSpanString = Span.Days & " 天" & If(Span.Hours > 0, " " & Span.Hours & " 小时", "")
+ ElseIf Span.TotalHours >= 10 Then
+ '10 小时 ~ 1 天,“15 小时”
+ GetTimeSpanString = Span.Hours & " 小时"
+ ElseIf Span.TotalHours >= 1 Then
+ '1~10 小时,“1 小时 20 分钟”
+ GetTimeSpanString = Span.Hours & " 小时" & If(Span.Minutes > 0, " " & Span.Minutes & " 分钟", "")
+ ElseIf Span.TotalMinutes >= 10 Then
+ '10 分钟 ~ 1 小时,“49 分钟”
+ GetTimeSpanString = Span.Minutes & " 分钟"
+ ElseIf Span.TotalMinutes >= 1 Then
+ '1~10 分钟,“9 分 23 秒”
+ GetTimeSpanString = Span.Minutes & " 分" & If(Span.Seconds > 0, " " & Span.Seconds & " 秒", "")
+ ElseIf Span.TotalSeconds >= 1 Then
+ '1 秒 ~ 1 分钟,“23 秒”
+ GetTimeSpanString = Span.Seconds & " 秒"
+ Else
+ '不到 1 秒
+ GetTimeSpanString = "1 秒"
+ End If
End If
GetTimeSpanString += EndFix
End Function
@@ -1998,6 +2038,13 @@ NextElement:
End Function
Public Delegate Function CompareThreadStart(Of T)(Left As T, Right As T) As Boolean
+ '''
+ ''' 返回列表的浅表副本。
+ '''
+ Public Function Clone(Of T)(list As IList(Of T)) As IList(Of T)
+ Return New List(Of T)(list)
+ End Function
+
'''
''' 获取程序启动参数。
'''
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
index e88b429..9edc80b 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
@@ -257,14 +257,14 @@
Case 406 : Tags.Add("世界元素")
Case 407 : Tags.Add("生物群系")
Case 410 : Tags.Add("维度")
- Case 408 : Tags.Add("矿物和资源")
+ Case 408 : Tags.Add("矿物/资源")
Case 409 : Tags.Add("天然结构")
Case 412 : Tags.Add("科技")
- Case 415 : Tags.Add("管道与物流")
+ Case 415 : Tags.Add("管道/物流")
Case 4843 : Tags.Add("自动化")
Case 417 : Tags.Add("能源")
Case 4558 : Tags.Add("红石")
- Case 436 : Tags.Add("食物与烹饪")
+ Case 436 : Tags.Add("食物/烹饪")
Case 416 : Tags.Add("农业")
Case 414 : Tags.Add("运输")
Case 420 : Tags.Add("仓储")
@@ -274,7 +274,7 @@
Case 411 : Tags.Add("生物")
Case 434 : Tags.Add("装备")
Case 423 : Tags.Add("信息显示")
- Case 435 : Tags.Add("多人")
+ Case 435 : Tags.Add("服务器")
Case 5191 : Tags.Add("改良")
Case 421 : Tags.Add("支持库")
'整合包
@@ -292,8 +292,8 @@
Case 5128 : Tags.Add("原版改良")
Case 4487 : Tags.Add("FTB")
Case 4480 : Tags.Add("基于地图")
- Case 4481 : Tags.Add("轻量整合")
- Case 4482 : Tags.Add("大型整合")
+ Case 4481 : Tags.Add("轻量")
+ Case 4482 : Tags.Add("大型")
'FUTURE: Res
End Select
Next
@@ -321,7 +321,7 @@
Website = $"https://modrinth.com/{Data("project_type")}/{Slug}"
'GameVersions
GameVersions = If(CType(Data("versions"), JArray), New JArray).
- Select(Function(v) v.ToString).Where(Function(v) v.Contains("1.")).
+ Select(Function(v) v.ToString).Where(Function(v) v.StartsWith("1.")).
Select(Of Integer)(Function(v) Val(v.Split(".")(1).Split("-").First)).Where(Function(v) v > 0).
Distinct.OrderByDescending(Function(v) v).ToList
'Type
@@ -342,7 +342,7 @@
'Mod
Case "worldgen" : Tags.Add("世界元素")
Case "technology" : Tags.Add("科技")
- Case "food" : Tags.Add("食物与烹饪")
+ Case "food" : Tags.Add("食物/烹饪")
Case "game-mechanics" : Tags.Add("游戏机制")
Case "transportation" : Tags.Add("运输")
Case "storage" : Tags.Add("仓储")
@@ -352,7 +352,7 @@
Case "mobs" : Tags.Add("生物")
Case "equipment" : Tags.Add("装备")
Case "optimization" : Tags.Add("性能优化")
- Case "social" : Tags.Add("多人")
+ Case "social" : Tags.Add("服务器")
Case "utility" : Tags.Add("改良")
Case "library" : Tags.Add("支持库")
'整合包
@@ -365,7 +365,7 @@
Case "magic" : Tags.Add("魔法")
Case "adventure" : Tags.Add("冒险")
Case "kitchen-sink" : Tags.Add("烹饪")
- Case "lightweight" : Tags.Add("轻量整合")
+ Case "lightweight" : Tags.Add("轻量")
'FUTURE: Res
End Select
Next
@@ -409,17 +409,93 @@
SpaVersions.Add("1." & StartVersion & "~1." & EndVersion)
End If
Next
- GameVersionDescription = "[" & Join(SpaVersions, ", ") & "] "
+ GameVersionDescription = SpaVersions.Join(", ")
End If
'实例化 UI
Dim NewItem As New MyCompItem With {.Tag = Me}
- NewItem.LabTitle.Text = TranslatedName
+ '标题
+ Dim FinalName As String = TranslatedName.Split(" | ").First.Split(" - ").First.Split(" (").First.Split(" [").First
+ NewItem.LabTitle.Text = FinalName
+ Dim ExNameList As New List(Of String)
+ If TranslatedName.Contains(" (") Then ExNameList.Add(TranslatedName.Split(" (").Last.Split(")").First)
+ If TranslatedName.Contains(" [") Then ExNameList.Add(TranslatedName.Split(" [").Last.Split("]").First)
+ If TranslatedName.Contains(" - ") Then ExNameList.Add(TranslatedName.Split(" - ").Last.Split(" | ").First.Split(" (").First.Split(" [").First)
+ If TranslatedName.Contains(" | ") Then ExNameList.Add(TranslatedName.Split(" | ").Last.Split(" - ").First.Split(" (").First.Split(" [").First)
+ If ExNameList.Count = 0 Then
+NoExName:
+ CType(NewItem.LabTitleRaw.Parent, StackPanel).Children.Remove(NewItem.LabTitleRaw)
+ Else
+ Dim ExName As String = ""
+ For Each Ex In ExNameList
+ '去除 “Forge/Fabric” 一类的无意义提示
+ If Ex.Length < 19 AndAlso Ex.ToLower.Contains("fabric") AndAlso Ex.ToLower.Contains("forge") Then Continue For
+ '将 “Forge” 等提示改为 “Forge 版”
+ If (Ex.ToLower.Contains("forge") OrElse Ex.ToLower.Contains("fabric") OrElse Ex.ToLower.Contains("quilt")) AndAlso
+ Not Ex.Contains("版") AndAlso Ex.Length < 19 Then Ex = Ex.Replace("Edition", "").Trim & " 版"
+ ExName &= " | " & Ex.Trim
+ Next
+ If ExName = "" Then GoTo NoExName
+ NewItem.LabTitleRaw.Text = ExName
+ End If
+ 'Tag
+ For Each TagText In Tags
+ Dim NewTag = GetObjectFromXML(
+ "
+
+ ")
+ NewItem.PanTags.Children.Add(NewTag)
+ Next
+ '下边栏
+ If Not ShowMcVersionDesc AndAlso Not ShowLoaderDesc Then
+ '全部隐藏
+ CType(NewItem.PathVersion.Parent, Grid).Children.Remove(NewItem.PathVersion)
+ CType(NewItem.LabVersion.Parent, Grid).Children.Remove(NewItem.LabVersion)
+ NewItem.ColumnVersionMargin.Width = New GridLength(0)
+ ElseIf ShowMcVersionDesc AndAlso ShowMcVersionDesc Then
+ '全部显示
+ Dim ModLoaderDesc As String = If(ModLoaders.Count > 0 AndAlso ModLoaders.Count < 3 AndAlso
+ Not (Type = CompType.Mod AndAlso Setup.Get("ToolDownloadIgnoreQuilt") AndAlso ModLoaders.Contains(CompModLoaderType.Forge) AndAlso ModLoaders.Contains(CompModLoaderType.Fabric)),
+ ModLoaders.Join(" / ") & " ", "")
+ Dim VersionDesc As String = If(GameVersionDescription = "1.7+", "全版本", GameVersionDescription)
+ NewItem.LabVersion.Text = ModLoaderDesc & VersionDesc
+ ElseIf ShowMcVersionDesc Then
+ '仅显示版本
+ NewItem.LabVersion.Text = If(GameVersionDescription = "1.7+", "全版本", GameVersionDescription)
+ Else
+ '仅显示 Mod 加载器
+ Select Case ModLoaders.Count
+ Case 0
+ NewItem.LabVersion.Text = "未知"
+ Case 1
+ NewItem.LabVersion.Text = If(Type = CompType.Mod, "仅 ", "") & ModLoaders(0).ToString
+ Case 2
+ If Type = CompType.Mod Then
+ NewItem.LabVersion.Text =
+ If(Not (Setup.Get("ToolDownloadIgnoreQuilt") AndAlso
+ ModLoaders.Contains(CompModLoaderType.Forge) AndAlso ModLoaders.Contains(CompModLoaderType.Fabric)),
+ ModLoaders.Join(" / "), "任意")
+ Else
+ NewItem.LabVersion.Text = ModLoaders.Join(" / ")
+ End If
+ Case 3
+ If Type = CompType.Mod Then
+ NewItem.LabVersion.Text = "任意"
+ Else
+ NewItem.LabVersion.Text = ModLoaders.Join(" / ")
+ End If
+ End Select
+ End If
NewItem.LabInfo.Text = Description.Replace(vbCr, "").Replace(vbLf, "")
- NewItem.LabLeft.Text = (If(ModLoaders.Count > 0 AndAlso ShowLoaderDesc, "[" & Join(ModLoaders.Select(Function(m) GetStringFromEnum(m)).ToList, "/") & "] ", "") &
- If(ShowMcVersionDesc, GameVersionDescription, "")).Replace("] [", " ") &
- If(FromCurseForge, "[CurseForge] ", "[Modrinth] ") &
- Join(Tags, ",") &
- If(LastUpdate IsNot Nothing, " (" & GetTimeSpanString(LastUpdate - Date.Now) & "更新)", "")
+ NewItem.LabSource.Text = If(FromCurseForge, "CurseForge", "Modrinth")
+ If LastUpdate IsNot Nothing Then
+ NewItem.LabTime.Text = GetTimeSpanString(LastUpdate - Date.Now, True)
+ End If
+ NewItem.LabDownload.Text =
+ If(DownloadCount > 100000000, Math.Round(DownloadCount / 100000000, 2) & " 亿",
+ If(DownloadCount > 100000, Math.Floor(DownloadCount / 10000) & " 万", DownloadCount))
+ '其他
If LogoUrl Is Nothing Then
NewItem.Logo = "pack://application:,,,/images/Icons/NoIcon.png"
Else
@@ -551,7 +627,7 @@
If Tag.StartsWith("/") Then Storage.CurseForgeTotal = 0
If Storage.CurseForgeTotal > -1 AndAlso Storage.CurseForgeTotal <= Storage.CurseForgeOffset Then Return Nothing
'应用筛选参数
- Dim Address As String = $"https://api.curseforge.com/v1/mods/search?gameId=432&sortField=Featured&sortOrder=desc&pageSize={CompPageSize}"
+ Dim Address As String = $"https://api.curseforge.com/v1/mods/search?gameId=432&sortField=2&sortOrder=desc&pageSize={CompPageSize}"
Select Case Type
Case CompType.Mod
Address += "&classId=6"
@@ -633,13 +709,18 @@
''' 根据搜索请求获取一系列的工程列表。需要基于加载器运行。
'''
Public Sub CompProjectsGet(Task As LoaderTask(Of CompProjectRequest, Integer))
+ Dim Storage = Task.Input.Storage '避免多线程问题
If Task.Input.Storage.Results.Count >= Task.Input.TargetResultCount Then
Log($"[Comp] 已有 {Task.Input.Storage.Results.Count} 个结果,多于所需的 {Task.Input.TargetResultCount} 个结果,结束处理")
Exit Sub
ElseIf Not Task.Input.CanContinue Then
- Log($"[Comp] 已有 {Task.Input.Storage.Results.Count} 个结果,少于所需的 {Task.Input.TargetResultCount} 个结果,但无法继续获取,结束处理")
- Exit Sub
+ If Task.Input.Storage.Results.Count = 0 Then
+ Throw New Exception("没有符合条件的结果")
+ Else
+ Log($"[Comp] 已有 {Task.Input.Storage.Results.Count} 个结果,少于所需的 {Task.Input.TargetResultCount} 个结果,但无法继续获取,结束处理")
+ Exit Sub
+ End If
End If
#Region "拒绝 1.13- Quilt(这个版本根本没有 Quilt)"
@@ -658,9 +739,8 @@
Log("[Comp] 工程列表搜索原始文本:" & RawFilter)
'中文请求关键字处理
- Dim IsChineseSearch As Boolean = RegexCheck(RawFilter, "[\u4e00-\u9fbb]")
- If IsChineseSearch AndAlso Not String.IsNullOrEmpty(RawFilter) Then
- If Task.Input.Type <> CompType.Mod Then Throw New Exception($"{If(Task.Input.Type = CompType.ModPack, "整合包", "资源包")}搜索仅支持英文")
+ Dim IsChineseSearch As Boolean = RegexCheck(RawFilter, "[\u4e00-\u9fbb]") AndAlso Not String.IsNullOrEmpty(RawFilter)
+ If IsChineseSearch AndAlso Task.Input.Type = CompType.Mod Then
'构造搜索请求
Dim SearchEntries As New List(Of SearchEntry(Of CompDatabaseEntry))
For Each Entry In CompDatabase
@@ -680,7 +760,7 @@
If Not SearchResults(i).AbsoluteRight AndAlso i >= Math.Min(2, SearchResults.Count - 1) Then Exit For '把 3 个结果拼合以提高准确度
If SearchResults(i).Item.CurseForgeSlug IsNot Nothing Then SearchResult += SearchResults(i).Item.CurseForgeSlug.Replace("-", " ") & " "
If SearchResults(i).Item.ModrinthSlug IsNot Nothing Then SearchResult += SearchResults(i).Item.ModrinthSlug.Replace("-", " ") & " "
- SearchResult += SearchResults(i).Item.ChineseName.Replace(" (", "|").Split("|").Last.TrimEnd(") ").Replace(" - ", "§").Split("§").First.
+ SearchResult += SearchResults(i).Item.ChineseName.Split(" (").Last.TrimEnd(") ").Split(" - ").First.
Replace(":", "").Replace("(", "").Replace(")", "").ToLower & " "
Next
Log("[Comp] 中文搜索原始关键词:" & SearchResult, LogLevel.Developer)
@@ -728,13 +808,13 @@
Dim RealResults As New List(Of CompProject)
Retry:
Dim RawResults As New List(Of CompProject)
+ Dim [Error] As Exception = Nothing
#Region "从 CurseForge 和 Modrinth 获取结果列表,存储于 RawResults"
Dim CurseForgeThread As Thread = Nothing
Dim ModrinthThread As Thread = Nothing
Dim ResultsLock As New Object
- Dim [Error] As Exception = Nothing
Try
@@ -756,11 +836,12 @@ Retry:
SyncLock ResultsLock
RawResults.AddRange(ProjectList)
End SyncLock
- Task.Input.Storage.CurseForgeOffset += ProjectList.Count
- Task.Input.Storage.CurseForgeTotal = RequestResult("pagination")("totalCount").ToObject(Of Integer)
- Log($"[Comp] 从 CurseForge 获取到了 {ProjectList.Count} 个工程(已获取 {Task.Input.Storage.CurseForgeOffset} 个,共 {Task.Input.Storage.CurseForgeTotal} 个)")
+ Storage.CurseForgeOffset += ProjectList.Count
+ Storage.CurseForgeTotal = RequestResult("pagination")("totalCount").ToObject(Of Integer)
+ Log($"[Comp] 从 CurseForge 获取到了 {ProjectList.Count} 个工程(已获取 {Storage.CurseForgeOffset} 个,共 {Storage.CurseForgeTotal} 个)")
Catch ex As Exception
Log(ex, "从 CurseForge 获取工程列表失败")
+ Storage.CurseForgeTotal = Storage.CurseForgeOffset
[Error] = ex
End Try
End Sub, "CurseForge Project Request")
@@ -783,11 +864,12 @@ Retry:
SyncLock ResultsLock
RawResults.AddRange(ProjectList)
End SyncLock
- Task.Input.Storage.ModrinthOffset += ProjectList.Count
- Task.Input.Storage.ModrinthTotal = RequestResult("total_hits").ToObject(Of Integer)
- Log($"[Comp] 从 Modrinth 获取到了 {ProjectList.Count} 个工程(已获取 {Task.Input.Storage.ModrinthOffset} 个,共 {Task.Input.Storage.ModrinthTotal} 个)")
+ Storage.ModrinthOffset += ProjectList.Count
+ Storage.ModrinthTotal = RequestResult("total_hits").ToObject(Of Integer)
+ Log($"[Comp] 从 Modrinth 获取到了 {ProjectList.Count} 个工程(已获取 {Storage.ModrinthOffset} 个,共 {Storage.ModrinthTotal} 个)")
Catch ex As Exception
Log(ex, "从 Modrinth 获取工程列表失败")
+ Storage.ModrinthTotal = Storage.ModrinthOffset
[Error] = ex
End Try
End Sub, "Modrinth Project Request")
@@ -797,13 +879,18 @@ Retry:
If CurseForgeThread IsNot Nothing Then CurseForgeThread.Join()
If Task.IsAborted Then Exit Sub '会自动触发 Finally
If ModrinthThread IsNot Nothing Then ModrinthThread.Join()
+ If Task.IsAborted Then Exit Sub
'确认存在结果
If RawResults.Count = 0 Then
If [Error] IsNot Nothing Then
Throw [Error]
Else
- Throw New Exception("没有符合条件的结果")
+ If IsChineseSearch AndAlso Task.Input.Type <> CompType.Mod Then
+ Throw New Exception($"{If(Task.Input.Type = CompType.ModPack, "整合包", "资源包")}搜索仅支持英文")
+ Else
+ Throw New Exception("没有符合条件的结果")
+ End If
End If
End If
@@ -823,7 +910,7 @@ Retry:
RawResults = Distinct(RawResults, Function(a, b) a.IsLike(b))
'已有内容去重
RawResults = RawResults.Where(Function(r) Not RealResults.Any(Function(b) r.IsLike(b)) AndAlso
- Not Task.Input.Storage.Results.Any(Function(b) r.IsLike(b))).ToList
+ Not Storage.Results.Any(Function(b) r.IsLike(b))).ToList
'加入列表
RealResults.AddRange(RawResults)
Log($"[Comp] 去重后累计新增结果 {RealResults.Count} 个")
@@ -832,8 +919,8 @@ Retry:
#Region "检查结果数量,如果不足且可继续,会继续加载下一页"
- If RealResults.Count + Task.Input.Storage.Results.Count < Task.Input.TargetResultCount Then
- Log($"[Comp] 总结果数需求最少 {Task.Input.TargetResultCount} 个,仅获得了 {RealResults.Count + Task.Input.Storage.Results.Count} 个")
+ If RealResults.Count + Storage.Results.Count < Task.Input.TargetResultCount Then
+ Log($"[Comp] 总结果数需求最少 {Task.Input.TargetResultCount} 个,仅获得了 {RealResults.Count + Storage.Results.Count} 个")
If Task.Input.CanContinue Then
Log("[Comp] 将继续尝试加载下一页")
GoTo Retry
@@ -869,7 +956,7 @@ Retry:
Next
End If
'根据排序分得出结果并添加
- Task.Input.Storage.Results.AddRange(
+ Storage.Results.AddRange(
Sort(Scores.ToList, Function(a, b) a.Value > b.Value).Select(Function(r) r.Key).ToList)
#End Region
@@ -1094,7 +1181,7 @@ Retry:
If DownloadCount > 0 Then 'CurseForge 的下载次数经常错误地返回 0
Info += If(DownloadCount > 100000, Math.Round(DownloadCount / 10000) & " 万次下载,", DownloadCount & " 次下载,")
End If
- Info += GetTimeSpanString(ReleaseDate - Date.Now) & "更新"
+ Info += GetTimeSpanString(ReleaseDate - Date.Now, False) & "更新"
Info += If(Status = CompFileStatus.Release, "", "," & StatusDescription)
'建立控件
@@ -1224,7 +1311,7 @@ Retry:
Stack.Children.Add(New TextBlock With {.Text = "前置 Mod", .FontSize = 14, .HorizontalAlignment = HorizontalAlignment.Left, .Margin = New Thickness(6, 2, 0, 5)})
'添加前置 Mod 列表
For Each Dep In Deps
- Dim Item = CompProjectCache(Dep).ToCompItem(False, True, AddressOf FrmDownloadMod.ProjectClick)
+ Dim Item = CompProjectCache(Dep).ToCompItem(True, True, AddressOf FrmDownloadMod.ProjectClick)
Stack.Children.Add(Item)
Next
'添加结尾间隔
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
index 75429ec..bdf6640 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
@@ -86,9 +86,9 @@
For Each FilePath In RightLogs
Try
If FilePath.Contains("crash-") Then
- AnalyzeRawFiles.Add(New KeyValuePair(Of String, String())(FilePath, ReadFile(FilePath).Replace(vbCrLf, vbCr).Replace(vbLf, vbCr).Split(vbCr)))
+ AnalyzeRawFiles.Add(New KeyValuePair(Of String, String())(FilePath, ReadFile(FilePath).Split(vbCrLf.ToCharArray)))
Else
- AnalyzeRawFiles.Add(New KeyValuePair(Of String, String())(FilePath, ReadFile(FilePath, Encoding.UTF8).Replace(vbCrLf, vbCr).Replace(vbLf, vbCr).Split(vbCr)))
+ AnalyzeRawFiles.Add(New KeyValuePair(Of String, String())(FilePath, ReadFile(FilePath, Encoding.UTF8).Split(vbCrLf.ToCharArray)))
End If
Catch ex As Exception
Log(ex, "读取可能的崩溃日志文件失败(" & FilePath & ")")
@@ -133,9 +133,9 @@
Dim Ext As String = TargetFile.Extension.ToLower
If Ext = ".log" OrElse Ext = ".txt" Then
If TargetFile.Name.StartsWith("crash-") Then
- AnalyzeRawFiles.Add(New KeyValuePair(Of String, String())(TargetFile.FullName, ReadFile(TargetFile.FullName).Replace(vbCrLf, vbCr).Replace(vbLf, vbCr).Split(vbCr)))
+ AnalyzeRawFiles.Add(New KeyValuePair(Of String, String())(TargetFile.FullName, ReadFile(TargetFile.FullName).Split(vbCrLf.ToCharArray)))
Else
- AnalyzeRawFiles.Add(New KeyValuePair(Of String, String())(TargetFile.FullName, ReadFile(TargetFile.FullName, Encoding.UTF8).Replace(vbCrLf, vbCr).Replace(vbLf, vbCr).Split(vbCr)))
+ AnalyzeRawFiles.Add(New KeyValuePair(Of String, String())(TargetFile.FullName, ReadFile(TargetFile.FullName, Encoding.UTF8).Split(vbCrLf.ToCharArray)))
End If
End If
Catch ex As Exception
@@ -377,7 +377,7 @@
'来源崩溃日志的分析
If LogCrash IsNot Nothing Then
Log("[Crash] 开始进行崩溃日志堆栈分析")
- Dim StackLogs As String = LogCrash.Replace("System Details", "¨").Split("¨").First
+ Dim StackLogs As String = LogCrash.Split("System Details").First
Dim Keywords = AnalyzeStackKeyword(StackLogs)
If Keywords.Count > 0 Then
Dim Names = AnalyzeModName(Keywords)
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
index 1367161..daf8d9e 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
@@ -622,7 +622,7 @@
Dim Versions As New List(Of DlForgeVersionEntry)
Try
'分割版本信息
- Dim VersionCodes = Mid(Result, 1, Result.LastIndexOf("")).Replace("| ")).Split(" | [\s]*)[^<]+")
- Branch = RegexSeek(If(Branch, ""), "[^\s]+")
+ Dim Branch As String = RegexSeek(VersionCode, $"(?<=-{Name}-)[^-""]+(?=-[a-z]+.[a-z]{{3}})")
If String.IsNullOrWhiteSpace(Branch) Then Branch = Nothing
If Name = "11.15.1.2318" OrElse Name = "11.15.1.1902" OrElse Name = "11.15.1.1890" Then Branch = "1.8.9"
If Branch Is Nothing AndAlso Inherit = "1.7.10" AndAlso Name.Split(".")(3) >= 1300 Then Branch = "1.7.10"
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
index c056fc4..f90c349 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
@@ -1830,14 +1830,16 @@ NextVersion:
Else
PackFormat = 9
End If
- Case 19, 99 '99 是快照版
+ Case 19
If McVersionCurrent.Version.McCodeSub <= 3 Then
PackFormat = 10
Else
PackFormat = 12
End If
- Case Else
+ Case 20, 99 '99 是快照版
PackFormat = 13
+ Case Else
+ PackFormat = 14
'https://minecraft.fandom.com/zh/wiki/数据包#数据包版本
End Select
McLaunchLog("正在构建自定义皮肤资源包,格式为:" & PackFormat)
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
index 9e8e894..2738dde 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
@@ -441,10 +441,51 @@ Wait:
TargetJavaList.Add(New JavaEntry(Entry.Key, Entry.Value))
Next
+#Region "添加用户指定的 Java,储存到 UserJava 中"
+
+ Dim UserJava As JavaEntry = Nothing
+
+ '获取版本独立设置中指定的 Java
+ If RelatedVersion IsNot Nothing AndAlso Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion).ToString.StartsWith("{") Then
+ Try
+ UserJava = JavaEntry.FromJson(GetJson(Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion)))
+ '确保版本独立设置中指定的 Java 在 Java 列表中(#978)
+ If Not JavaList.Any(Function(j) j.PathFolder = UserJava.PathFolder) Then
+ UserJava = Nothing
+ Setup.Reset("VersionArgumentJavaSelect", Version:=RelatedVersion)
+ Log("版本独立设置中指定的 Java 不在主 Java 列表中,此设置已重置", LogLevel.Debug)
+ Exit Try
+ End If
+ Catch ex As Exception
+ UserJava = Nothing
+ Setup.Reset("VersionArgumentJavaSelect", Version:=RelatedVersion)
+ Log(ex, "版本独立设置中指定的 Java 已无法使用,此设置已重置", LogLevel.Hint)
+ End Try
+ End If
+
+ '获取全局设置中指定的 Java
+ If UserJava Is Nothing AndAlso Setup.Get("LaunchArgumentJavaSelect") <> "" Then
+ Try
+ UserJava = JavaEntry.FromJson(GetJson(Setup.Get("LaunchArgumentJavaSelect")))
+ Catch ex As Exception
+ UserJava = Nothing
+ Setup.Reset("LaunchArgumentJavaSelect")
+ Log(ex, "设置中指定的 Java 已无法使用,此设置已重置", LogLevel.Hint)
+ End Try
+ End If
+
+ '添加到特定 Java 列表
+ If UserJava IsNot Nothing Then
+ Log($"[Java] 用户指定的 Java:{UserJava}")
+ TargetJavaList.Add(UserJava)
+ End If
+
+#End Region
+
'检查特定的 Java
If TargetJavaList.Count > 0 Then
TargetJavaList = JavaCheckList(TargetJavaList)
- Log("[Java] 检查后找到 " & TargetJavaList.Count & " 个特定目录下的 Java")
+ Log("[Java] 检查后找到 " & TargetJavaList.Count & " 个特定的 Java")
End If
RetryGet:
@@ -477,38 +518,7 @@ RetryGet:
GoTo RetryGet
End If
-#Region "检查用户指定的 Java"
-
- Dim UserJava As JavaEntry = Nothing
-
- '获取版本独立设置中指定的 Java
- If RelatedVersion IsNot Nothing AndAlso Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion).ToString.StartsWith("{") Then
- Try
- UserJava = JavaEntry.FromJson(GetJson(Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion)))
- '确保版本独立设置中指定的 Java 在 Java 列表中(#978)
- If Not JavaList.Any(Function(j) j.PathFolder = UserJava.PathFolder) Then
- UserJava = Nothing
- Setup.Reset("VersionArgumentJavaSelect", Version:=RelatedVersion)
- Log("版本独立设置中指定的 Java 不在主 Java 列表中,此设置已重置", LogLevel.Debug)
- Exit Try
- End If
- Catch ex As Exception
- UserJava = Nothing
- Setup.Reset("VersionArgumentJavaSelect", Version:=RelatedVersion)
- Log(ex, "版本独立设置中指定的 Java 已无法使用,此设置已重置", LogLevel.Hint)
- End Try
- End If
-
- '获取全局设置中指定的 Java
- If UserJava Is Nothing AndAlso Setup.Get("LaunchArgumentJavaSelect") <> "" Then
- Try
- UserJava = JavaEntry.FromJson(GetJson(Setup.Get("LaunchArgumentJavaSelect")))
- Catch ex As Exception
- UserJava = Nothing
- Setup.Reset("LaunchArgumentJavaSelect")
- Log(ex, "设置中指定的 Java 已无法使用,此设置已重置", LogLevel.Hint)
- End Try
- End If
+#Region "检查用户指定的 Java 是否可用"
'确保指定的 Java 可用
If UserJava Is Nothing Then GoTo ExitUserJavaCheck
@@ -569,7 +579,7 @@ ExitUserJavaCheck:
If TargetJavaList.Contains(Java) Then
'直接使用指定的 Java
AllowedJavaList = New List(Of JavaEntry) From {Java}
- Log("[Java] 优先使用特定目录下的 Java:" & Java.ToString)
+ Log("[Java] 优先使用特定的 Java:" & Java.ToString)
GoTo UserPass
End If
Next
@@ -2569,9 +2579,26 @@ NextVersion:
'统一通行证文件
If Setup.Get("VersionServerLogin", Version:=Version) = 3 Then
Dim TargetFile = PathAppdata & "nide8auth.jar"
- Dim Checker As New FileChecker(MinSize:=173000)
- If (IsSetupSkip AndAlso File.Exists(TargetFile)) OrElse Checker.Check(TargetFile) IsNot Nothing Then
- Result.Add(New NetFile({"https://login.mc-user.com:233/index/jar"}, TargetFile, Checker))
+ If Not (IsSetupSkip AndAlso File.Exists(TargetFile)) Then
+ Dim DownloadInfo As JObject = Nothing
+ '获取下载信息
+ Try
+ Log("[Minecraft] 开始获取统一通行证下载信息")
+ '测试链接:https://auth.mc-user.com:233/00000000000000000000000000000000/
+ DownloadInfo = GetJson(NetGetCodeByDownload({
+ "https://auth.mc-user.com:233/" & Setup.Get("VersionServerNide", Version:=Version)}, IsJson:=True))
+ Catch ex As Exception
+ Log(ex, "获取统一通行证下载信息失败")
+ End Try
+ '校验文件
+ If DownloadInfo IsNot Nothing Then
+ Dim Checker As New FileChecker(Hash:=DownloadInfo("jarHash").ToString)
+ If (IsSetupSkip AndAlso File.Exists(TargetFile)) OrElse Checker.Check(TargetFile) IsNot Nothing Then
+ '开始下载
+ Log("[Minecraft] 统一通行证需要更新:Hash - " & Checker.Hash, LogLevel.Developer)
+ Result.Add(New NetFile({"https://login.mc-user.com:233/index/jar"}, TargetFile, Checker))
+ End If
+ End If
End If
End If
'Authlib-Injector 文件
@@ -2593,7 +2620,7 @@ NextVersion:
If (IsSetupSkip AndAlso File.Exists(TargetFile)) OrElse Checker.Check(TargetFile) IsNot Nothing Then
'开始下载
Dim DownloadAddress As String = DownloadInfo("download_url")
- Log("[Minecraft] Authlib-Injector 需要更新:" & DownloadAddress)
+ Log("[Minecraft] Authlib-Injector 需要更新:" & DownloadAddress, LogLevel.Developer)
Result.Add(New NetFile({
DownloadAddress.Replace("bmclapi2.bangbang93.com", "download.mcbbs.net"), DownloadAddress
}, TargetFile, New FileChecker(Hash:=DownloadInfo("checksums")("sha256").ToString)))
@@ -3756,7 +3783,7 @@ VersionFindFail:
If Version Is Nothing Then Exit Sub
Dim Time As Date = Version("releaseTime")
Dim MsgBoxText As String = $"新版本:{VersionName}{vbCrLf}" &
- If((Date.Now - Time).TotalDays > 1, "更新时间:" & Time.ToString, "更新于:" & GetTimeSpanString(Time - Date.Now))
+ If((Date.Now - Time).TotalDays > 1, "更新时间:" & Time.ToString, "更新于:" & GetTimeSpanString(Time - Date.Now, False))
Dim MsgResult = MyMsgBox(MsgBoxText, "Minecraft 更新提示", "确定", "下载", If((Date.Now - Time).TotalHours > 3, "更新日志", ""),
Button3Action:=Sub() McUpdateLogShow(Version))
'弹窗结果
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml b/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml
index 8254a36..d1b7266 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml
+++ b/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml
@@ -1,45 +1,82 @@
+
+
-
-
-
-
+
-
-
-
+
+
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Plain Craft Launcher 2/Modules/ModEvent.vb b/Plain Craft Launcher 2/Modules/ModEvent.vb
index 9c19995..f42ab7e 100644
--- a/Plain Craft Launcher 2/Modules/ModEvent.vb
+++ b/Plain Craft Launcher 2/Modules/ModEvent.vb
@@ -58,6 +58,12 @@
Case "刷新帮助"
PageOtherLeft.RefreshHelp()
+ Case "今日人品"
+ PageOtherTest.Jrrp()
+
+ Case "清理垃圾"
+ PageOtherTest.RubbishClear()
+
Case "弹出窗口"
MyMsgBox(Data(1).Replace("\n", vbCrLf), Data(0).Replace("\n", vbCrLf))
diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
index aa4a463..522082e 100644
--- a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
+++ b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
' 方法是按如下所示使用“*”
-
-
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml
index cc34e4a..f554eec 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml
@@ -12,7 +12,7 @@
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
index 0bd8602..de7fc70 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
@@ -273,7 +273,7 @@
End If
'获取基本信息
Dim ChineseName As String = If(Project.TranslatedName = Project.RawName, "",
- Project.TranslatedName.Replace(" (", "Å").Split("Å").First.Replace("\", "\").Replace("/", "/").Replace("|", "|").Replace(":", ":").Replace("<", "<").Replace(">", ">").Replace("*", "*").Replace("?", "?").Replace("""", "").Replace(": ", ":"))
+ Project.TranslatedName.Split(" (").First.Replace("\", "\").Replace("/", "/").Replace("|", "|").Replace(":", ":").Replace("<", "<").Replace(">", ">").Replace("*", "*").Replace("?", "?").Replace("""", "").Replace(": ", ":"))
Dim FileName As String
Select Case Setup.Get("ToolDownloadTranslate")
Case 0
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml
index dacfd09..4b35f82 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml
@@ -7,11 +7,11 @@
-
-
+
+
-
-
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb
index 7e07325..4d0bfd9 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb
@@ -1079,7 +1079,7 @@
#Region "安装"
- Private Sub TextSelectName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSelectName.KeyUp
+ Private Sub TextSelectName_KeyDown(sender As Object, e As KeyEventArgs) Handles TextSelectName.KeyDown
If e.Key = Key.Enter AndAlso BtnSelectStart.IsEnabled Then BtnSelectStart_Click()
End Sub
Private Sub BtnSelectStart_Click() Handles BtnSelectStart.Click
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.vb
index b2113bf..f8ff085 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.vb
@@ -98,10 +98,12 @@
ItemInstall.Checked = True
Case FormMain.PageSubType.DownloadMod
PageDownloadMod.Storage = New CompProjectStorage
+ PageDownloadMod.Page = 0
If FrmDownloadMod IsNot Nothing Then FrmDownloadMod.PageLoaderRestart()
ItemMod.Checked = True
Case FormMain.PageSubType.DownloadPack
PageDownloadPack.Storage = New CompProjectStorage
+ PageDownloadPack.Page = 0
If FrmDownloadPack IsNot Nothing Then FrmDownloadPack.PageLoaderRestart()
ItemPack.Checked = True
Case FormMain.PageSubType.DownloadClient
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
index 6c5fd60..95e2037 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
@@ -49,7 +49,7 @@
-
+
@@ -73,9 +73,6 @@
-
-
-
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
index 8d44a73..f2bf830 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
@@ -104,7 +104,7 @@
If Loader.ShouldStart(LoaderInput()) Then Storage = New CompProjectStorage '避免连续搜索两次使得 CompProjectStorage 引用丢失(#1311)
Loader.Start()
End Sub
- Private Sub TextSearchName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyUp, TextSearchVersion.KeyUp
+ Private Sub EnterTrigger(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyDown, TextSearchVersion.KeyDown
If e.Key = Key.Enter Then StartNewSearch()
End Sub
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
index 391042b..bba6733 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
@@ -65,9 +65,6 @@
-
-
-
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
index 669f046..2d8dc8d 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
@@ -106,7 +106,7 @@
If Loader.ShouldStart(LoaderInput()) Then Storage = New CompProjectStorage '避免连续搜索两次使得 CompProjectStorage 引用丢失(#1311)
Loader.Start()
End Sub
- Private Sub TextSearchName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyUp, TextSearchVersion.KeyUp
+ Private Sub EnterTrigger(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyDown, TextSearchVersion.KeyDown
If e.Key = Key.Enter Then StartNewSearch()
End Sub
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
index 43a8eef..705c102 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
@@ -746,11 +746,7 @@ ExitRefresh:
'获取 “你知道吗” 提示
Dim Hint As String = PageOtherTest.GetRandomHint()
Try
- Dim RawHints = Array.FindAll(
- ReadFile(Path & "PCL\hints.txt").Replace(vbLf, "").Split(vbCr),
- Function(Input As String) As Boolean
- Return Not String.IsNullOrWhiteSpace(Input)
- End Function)
+ Dim RawHints = ReadFile(Path & "PCL\hints.txt").Split(vbCrLf.ToCharArray).Where(Function(s) Not String.IsNullOrWhiteSpace(s)).ToList
If RawHints.Count > 0 Then Hint = RandomOne(RawHints)
Catch ex As Exception
Log(ex, "获取自定义 你知道吗 提示失败", LogLevel.Hint)
diff --git a/Plain Craft Launcher 2/Pages/PageLink/PageLinkHiper.xaml.vb b/Plain Craft Launcher 2/Pages/PageLink/PageLinkHiper.xaml.vb
index e49a642..ed51f71 100644
--- a/Plain Craft Launcher 2/Pages/PageLink/PageLinkHiper.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLink/PageLinkHiper.xaml.vb
@@ -688,7 +688,7 @@ FinishMcbFileCheck:
Private Sub TextCert_ValidateChanged(sender As Object, e As EventArgs) Handles TextCert.ValidateChanged
BtnCertDone.IsEnabled = TextCert.ValidateResult = ""
End Sub
- Private Sub TextCert_KeyUp(sender As Object, e As KeyEventArgs) Handles TextCert.KeyUp
+ Private Sub TextCert_KeyDown(sender As Object, e As KeyEventArgs) Handles TextCert.KeyDown
If e.Key = Key.Enter AndAlso BtnCertDone.IsEnabled Then BtnCertDone_Click() '允许回车确认
End Sub
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
index 930a112..4c7d840 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
@@ -145,7 +145,8 @@
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
index de98da2..e47587e 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
@@ -431,7 +431,7 @@ PreFin:
Dim SelectedItem As MyComboBoxItem = Nothing
Dim SelectedBySetup As String = Setup.Get("LaunchArgumentJavaSelect")
Try
- For Each Java In JavaList
+ For Each Java In Sort(JavaList.Clone(), Function(l, r) l.VersionCode < r.VersionCode)
Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
ToolTipService.SetPlacement(ListItem, Primitives.PlacementMode.Right)
ToolTipService.SetHorizontalOffset(ListItem, 5)
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml
index 27b337a..239305c 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml
@@ -25,6 +25,7 @@
+
@@ -50,6 +51,9 @@
+
@@ -111,8 +115,12 @@
+
+
-
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb
index 3ac1db5..e610c79 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb
@@ -57,6 +57,7 @@
ComboDownloadVersion.SelectedIndex = Setup.Get("ToolDownloadVersion")
ComboDownloadTranslate.SelectedIndex = Setup.Get("ToolDownloadTranslate")
CheckDownloadKeepModpack.Checked = Setup.Get("ToolDownloadKeepModpack")
+ CheckDownloadIgnoreQuilt.Checked = Setup.Get("ToolDownloadIgnoreQuilt")
'Minecraft 更新提示
CheckUpdateRelease.Checked = Setup.Get("ToolUpdateRelease")
@@ -86,6 +87,7 @@
Setup.Reset("ToolDownloadVersion")
Setup.Reset("ToolDownloadTranslate")
Setup.Reset("ToolDownloadKeepModpack")
+ Setup.Reset("ToolDownloadIgnoreQuilt")
Setup.Reset("ToolUpdateRelease")
Setup.Reset("ToolUpdateSnapshot")
Setup.Reset("ToolHelpChinese")
@@ -107,7 +109,7 @@
End Sub
'将控件改变路由到设置改变
- Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckDebugMode.Change, CheckDebugDelay.Change, CheckDebugSkipCopy.Change, CheckUpdateRelease.Change, CheckUpdateSnapshot.Change, CheckHelpChinese.Change, CheckDownloadKeepModpack.Change
+ Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckDebugMode.Change, CheckDebugDelay.Change, CheckDebugSkipCopy.Change, CheckUpdateRelease.Change, CheckUpdateSnapshot.Change, CheckHelpChinese.Change, CheckDownloadKeepModpack.Change, CheckDownloadIgnoreQuilt.Change
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
End Sub
Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderDebugAnim.Change, SliderDownloadThread.Change, SliderDownloadSpeed.Change
@@ -149,6 +151,14 @@
End If
End Sub
+ '识别码/解锁码替代入口
+ Private Sub BtnSystemIdentify_Click(sender As Object, e As MouseButtonEventArgs) Handles BtnSystemIdentify.Click
+ PageOtherAbout.CopyUniqueAddress()
+ End Sub
+ Private Sub BtnSystemUnlock_Click(sender As Object, e As MouseButtonEventArgs) Handles BtnSystemUnlock.Click
+ PageOtherAbout.DonateCodeInput()
+ End Sub
+
'调试模式
Private Sub CheckDebugMode_Change() Handles CheckDebugMode.Change
If AniControlEnabled = 0 Then Hint("部分调试信息将在刷新或启动器重启后切换显示!",, False)
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
index f802b44..a84102d 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
@@ -47,7 +47,8 @@
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
index a2793fa..a3c8341 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
@@ -417,7 +417,7 @@ PreFin:
Dim SelectedItem As MyComboBoxItem = Nothing
Dim SelectedBySetup As String = Setup.Get("VersionArgumentJavaSelect", Version:=PageVersionLeft.Version)
Try
- For Each Java In JavaList
+ For Each Java In Sort(JavaList.Clone(), Function(l, r) l.VersionCode < r.VersionCode)
Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
ToolTipService.SetPlacement(ListItem, Primitives.PlacementMode.Right)
ToolTipService.SetHorizontalOffset(ListItem, 5)
diff --git a/Plain Craft Launcher 2/Resources/Custom.xaml b/Plain Craft Launcher 2/Resources/Custom.xaml
index 368b824..81c13c8 100644
--- a/Plain Craft Launcher 2/Resources/Custom.xaml
+++ b/Plain Craft Launcher 2/Resources/Custom.xaml
@@ -1,199 +1,251 @@
-
-
-
-
+ 下列内容均基于 WPF 框架。你可以在继续之前先尝试自学 XAML 与 WPF 的基础,这能让你更轻松地理解下列内容。
+ 你也可以使用 Ctrl + F 快速查找。例如,若需要改变文本颜色,则搜索 “颜色” 即可。 -->
+
+
-
-
-
+
+
+
-
-
+
+
-
+ Text="将提示条的 IsWarn 属性改为 False 即可改为提示样式。
使用左边的那堆字符可以在任意地方手动换行,如果需要使用等号、引号等特殊字符,可以自行百度 XAML 转义字符。" />
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
+
+
+ Text="点击打开知乎" EventType="打开网页" EventData="https://www.zhihu.com/" />
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+ Text="打开 B 站" EventType="打开网页" EventData="https://www.bilibili.com/" />
+ Text="进入 Hypixel" EventType="启动游戏" EventData="1.16.3|mc.hypixel.net" ToolTip="使用 Minecraft 1.16.3 进入 Hypixel" />
+ Text="打开画图" EventType="打开文件" EventData="mspaint.exe" />
+ Text="复制召唤命令" EventType="复制文本" EventData="/execute as @a at @s run summon Creeper ~ ~2 ~" ToolTip="这条 Minecraft 命令会在每个玩家头顶召唤一只苦力怕!" />
+ Text="今日人品" EventType="今日人品" />
+ Text="下载作者的头像" EventType="下载文件" EventData="https://www.mcbbs.net/uc_server/data/avatar/000/14/51/06_avatar_small.jpg?ts=1471402592" />
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
-
+
+ Logo="pack://application:,,,/images/Blocks/CommandBlock.png"
+ Title="清理垃圾" Info="使用内置的命令方块图片作为 Logo" EventType="清理垃圾" Type="Clickable" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -202,36 +254,52 @@
全部通用的属性:
- Width、Height:设置宽度与高度
- ToolTip:设置鼠标指向时的提示文本
- - Foreground:调整前景颜色(十六进制字符串,例如 #FF010203 代表 ARGB 中的 255,1,2,3。前两位代表不透明度,FF 为全不透明,00 为全透明)
- - Background:调整背景颜色(使用类似 Background="{DynamicResource ColorBrush5}" 的格式以调用 PCL 当前的主题颜色,修改末尾的数字编号以改变颜色浓度)
+ - Background:调整背景颜色(十六进制字符串,例如 #FF010203 代表 ARGB 中的 255,1,2,3。前两位代表不透明度,FF 为全不透明,00 为全透明)
- Margin:调整外边距(格式为 左,上,右,下。例如 Margin="0,0,0,2" 即为 2 单位的下边距)
- - HorizontalAlignment:设置对齐方式(Left、Center、Right)
TextBlock(纯文本):
- Text:设置显示的文本(如果要使用引号等特殊字符,自行百度 XAML 转义)
- TextWrapping:开启自动换行
- FontSize:设置字号
-
+ - FontWeight:设置为 Bold 时,文字加粗
+ - Foreground:调整前景颜色(十六进制字符串,例如 #FF010203 代表 ARGB 中的 255,1,2,3。前两位代表不透明度,FF 为全不透明,00 为全透明)
+ - HorizontalAlignment:设置对齐方式(Left、Center、Right)
+
Image(图片):
- Source:要显示的图片的网址
+ - Foreground:调整前景颜色(十六进制字符串,例如 #FF010203 代表 ARGB 中的 255,1,2,3。前两位代表不透明度,FF 为全不透明,00 为全透明)
+ - HorizontalAlignment:设置对齐方式(Left、Center、Right)
+
+local:MyCard(卡片):
+ - Title:设置显示的标题文本
+ - CanSwap:这张卡片是否可以折叠,True 为是,False 为否
+ - IsSwaped:这张卡片是否默认折叠,要求 CanSwap 必须为 True
+ - Foreground:调整前景颜色(十六进制字符串,例如 #FF010203 代表 ARGB 中的 255,1,2,3。前两位代表不透明度,FF 为全不透明,00 为全透明)
+ - HorizontalAlignment:设置对齐方式(Left、Center、Right)(使用时,CanSwap 属性需为 False)
local:MyHint(提示条):
- - Text:设置显示的文本(
代表换行)
+ - Text:设置显示的文本(
代表换行)
- IsWarn:设置为 True 代表警告样式,False 代表提示样式
-
+ - Foreground:调整前景颜色(十六进制字符串,例如 #FF010203 代表 ARGB 中的 255,1,2,3。前两位代表不透明度,FF 为全不透明,00 为全透明)
+ - HorizontalAlignment:设置对齐方式(Left、Center、Right)
+
local:MyButton(按钮):
- Text:设置显示的文本
- Padding:设置内边距,格式与 Margin 一致
- ColorType:设置颜色主题(Highlight 为当前启动器的主题颜色,Red 为红色,默认为黑色)
- EventType、EventData:触发特定事件
-
+ - HorizontalAlignment:设置对齐方式(Left、Center、Right)
+
local:MyTextButton(文本按钮):
- Text:设置显示的文本
- EventType、EventData:触发特定事件
-
-local:MyCard(卡片):
- - Title:设置显示的标题文本
- - CanSwap:这张卡片是否可以折叠,True 为是,False 为否
- - IsSwaped:这张卡片是否默认折叠,要求 CanSwap 必须为 True
+ - Foreground:调整前景颜色(十六进制字符串,例如 #FF010203 代表 ARGB 中的 255,1,2,3。前两位代表不透明度,FF 为全不透明,00 为全透明)
+ - HorizontalAlignment:设置对齐方式(Left、Center、Right)
--->
+local:MyListItem(列表项):
+ - Logo:列表项的图标(所指定的可以是链接也可以是文件路径)
+ - Title:列表项的大标题
+ - Info:列表项的详细信息,它将会以灰色显示在大标题下方
+ - Type:若留空仅单纯展示信息,设置为 Clickable 触发相应活动
+
+-->
\ No newline at end of file
diff --git a/Plain Craft Launcher 2/Resources/Help.zip b/Plain Craft Launcher 2/Resources/Help.zip
index 9c75781..8ed3d22 100644
Binary files a/Plain Craft Launcher 2/Resources/Help.zip and b/Plain Craft Launcher 2/Resources/Help.zip differ
|