From 7cf61bc7cd7a4595d1498948f7d49d16c4863447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E7=8C=AB=E8=B7=83?= <1043137532@qq.com> Date: Fri, 24 Mar 2023 00:41:28 +0800 Subject: [PATCH] 2.5.2 --- Plain Craft Launcher 2/Controls/MyTextBox.vb | 30 +- Plain Craft Launcher 2/FormMain.xaml | 8 +- Plain Craft Launcher 2/FormMain.xaml.vb | 17 +- .../Modules/Base/ModBase.vb | 137 ++++--- .../Modules/Minecraft/ModComp.vb | 163 ++++++-- .../Modules/Minecraft/ModCrash.vb | 10 +- .../Modules/Minecraft/ModDownload.vb | 5 +- .../Modules/Minecraft/ModLaunch.vb | 6 +- .../Modules/Minecraft/ModMinecraft.vb | 105 +++-- .../Modules/Minecraft/MyCompItem.xaml | 85 ++-- Plain Craft Launcher 2/Modules/ModEvent.vb | 6 + .../My Project/AssemblyInfo.vb | 4 +- .../PageDownload/PageDownloadCompDetail.xaml | 2 +- .../PageDownloadCompDetail.xaml.vb | 2 +- .../PageDownload/PageDownloadInstall.xaml | 8 +- .../PageDownload/PageDownloadInstall.xaml.vb | 2 +- .../PageDownload/PageDownloadLeft.xaml.vb | 2 + .../Pages/PageDownload/PageDownloadMod.xaml | 5 +- .../PageDownload/PageDownloadMod.xaml.vb | 2 +- .../Pages/PageDownload/PageDownloadPack.xaml | 3 - .../PageDownload/PageDownloadPack.xaml.vb | 2 +- .../Pages/PageLaunch/PageLaunchLeft.xaml.vb | 6 +- .../Pages/PageLink/PageLinkHiper.xaml.vb | 2 +- .../Pages/PageSetup/PageSetupLaunch.xaml | 3 +- .../Pages/PageSetup/PageSetupLaunch.xaml.vb | 2 +- .../Pages/PageSetup/PageSetupSystem.xaml | 10 +- .../Pages/PageSetup/PageSetupSystem.xaml.vb | 12 +- .../Pages/PageVersion/PageVersionSetup.xaml | 3 +- .../PageVersion/PageVersionSetup.xaml.vb | 2 +- Plain Craft Launcher 2/Resources/Custom.xaml | 362 +++++++++++------- Plain Craft Launcher 2/Resources/Help.zip | Bin 69754 -> 70684 bytes 31 files changed, 657 insertions(+), 349 deletions(-) diff --git a/Plain Craft Launcher 2/Controls/MyTextBox.vb b/Plain Craft Launcher 2/Controls/MyTextBox.vb index d0c6f44..4f78ee4 100644 --- a/Plain Craft Launcher 2/Controls/MyTextBox.vb +++ b/Plain Craft Launcher 2/Controls/MyTextBox.vb @@ -86,15 +86,15 @@ ValidateResult = ValidateRule.Validate(Text) If IsNothing(ValidateResult) OrElse Not ValidateResult = "" Then Exit For Next - Dim NewResult As Boolean = ValidateResult = "" + Dim IsSuccessful As Boolean = ValidateResult = "" '根据结果改变样式 - If ShownValidateResult <> If(NewResult, 0, 1) Then + If ShownValidateResult <> If(IsSuccessful, ValidateState.Success, ValidateState.FailedAndShowDetail) Then If IsLoaded AndAlso labWrong IsNot Nothing Then - ChangeValidateResult(NewResult, True) + ChangeValidateResult(IsSuccessful, True) Else RunInNewThread(Sub() Thread.Sleep(30) - RunInUi(Sub() ChangeValidateResult(NewResult, False)) + RunInUi(Sub() ChangeValidateResult(IsSuccessful, False)) End Sub, "DelayedValidate Change") End If End If @@ -126,12 +126,12 @@ IsTextChanged = False ChangeValidateResult(ValidateResult = "", True) End Sub - Private ShownValidateResult As Integer = -1 - Private Sub ChangeValidateResult(NewResult As Boolean, IsLoaded As Boolean) + Private ShownValidateResult As ValidateState = ValidateState.NotInited + Private Sub ChangeValidateResult(IsSuccessful As Boolean, IsLoaded As Boolean) If IsLoaded AndAlso AniControlEnabled = 0 AndAlso labWrong IsNot Nothing Then - If NewResult OrElse Not IsTextChanged Then + If IsSuccessful OrElse Not IsTextChanged Then '变为正确 - ShownValidateResult = 0 + ShownValidateResult = If(IsSuccessful, ValidateState.Success, ValidateState.FailedButTextNotChanged) AniStart({ AaOpacity(labWrong, -labWrong.Opacity, 150), AaHeight(labWrong, -labWrong.Height, 150,, New AniEaseOutFluent), @@ -139,7 +139,7 @@ }, "MyTextBox Validate " & Uuid) ElseIf ShowValidateResult Then '变为错误 - ShownValidateResult = 1 + ShownValidateResult = ValidateState.FailedAndShowDetail labWrong.Visibility = Visibility.Visible AniStart({ AaOpacity(labWrong, 1 - labWrong.Opacity, 170), @@ -147,14 +147,22 @@ }, "MyTextBox Validate " & Uuid) Else '变为错误,但不显示文本 - ShownValidateResult = 2 + ShownValidateResult = ValidateState.FailedAndHideDetail End If Else - ShownValidateResult = 3 + ShownValidateResult = ValidateState.NotLoaded End If RefreshColor() RaiseEvent ValidateChanged(Me, New EventArgs) End Sub + Private Enum ValidateState + NotInited + Success + FailedButTextNotChanged + FailedAndShowDetail + FailedAndHideDetail + NotLoaded + End Enum '提示文本 diff --git a/Plain Craft Launcher 2/FormMain.xaml b/Plain Craft Launcher 2/FormMain.xaml index 68a6a78..ea433ba 100644 --- a/Plain Craft Launcher 2/FormMain.xaml +++ b/Plain Craft Launcher 2/FormMain.xaml @@ -4,7 +4,7 @@ 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:Name="WindMain" x:Class="FormMain" Style="{StaticResource MyWindow}" - AllowDrop="True" Topmost="True" Title="Plain Craft Launcher 2 " AllowsTransparency="True" MinHeight="470" MinWidth="780" ScrollViewer.VerticalScrollBarVisibility="Disabled" Icon="/Plain Craft Launcher 2;component/Images/icon.ico" WindowStyle="None" ResizeMode="CanMinimize" Background="{x:Null}" d:DesignWidth="870" d:DesignHeight="520" Width="850" Height="500" RenderTransformOrigin="0.5,0.5"> + AllowDrop="True" Topmost="True" Title="Plain Craft Launcher 2 " AllowsTransparency="True" MinHeight="470" MinWidth="810" ScrollViewer.VerticalScrollBarVisibility="Disabled" Icon="/Plain Craft Launcher 2;component/Images/icon.ico" WindowStyle="None" ResizeMode="CanMinimize" Background="{x:Null}" d:DesignWidth="870" d:DesignHeight="520" Width="850" Height="500" RenderTransformOrigin="0.5,0.5"> @@ -119,13 +119,13 @@ + LogoScale="0.9" Logo="M955 610h-59c-15 0-29 13-29 29v196c0 15-13 29-29 29h-649c-15 0-29-13-29-29v-196c0-15-13-29-29-29h-59c-15 0-29 13-29 29V905c0 43 35 78 78 78h787c43 0 78-35 78-78V640c0-15-13-29-29-29zM492 740c11 11 29 11 41 0l265-265c11-11 11-29 0-41l-41-41c-11-11-29-11-41 0l-110 110c-11 11-33 3-33-13V68C571 53 555 39 541 39h-59c-15 0-29 13-29 29v417c0 17-21 25-33 13l-110-110c-11-11-29-11-41 0L226 433c-11 11-11 29 0 41L492 740z" /> + LogoScale="0.93" Logo="M364 0h-273C40 0 0 40 0 91v273C0 414 40 455 91 455h273C414 455 455 414 455 364V91C455 40 414 0 364 0zM341 341H113V113h227v227zM933 0h-273C609 0 568 40 568 91v273c0 50 40 91 91 91h273C983 455 1024 414 1024 364V91c0-50-40-91-90-91zM910 341h-227V113h227v227zM364 568h-273C40 568 0 609 0 659v273c0 50 40 91 91 91h273C414 1024 455 983 455 932v-273C455 609 414 568 364 568zM341 910H113v-227h227v227zM933 568h-273c-50 0-91 40-91 91v273c0 50 40 91 91 91h273c50 0 90-40 90-91v-273c0-50-40-90-90-90zM910 910h-227v-227h227v227z"/> @@ -168,7 +168,7 @@ + Logo="M955 610h-59c-15 0-29 13-29 29v196c0 15-13 29-29 29h-649c-15 0-29-13-29-29v-196c0-15-13-29-29-29h-59c-15 0-29 13-29 29V905c0 43 35 78 78 78h787c43 0 78-35 78-78V640c0-15-13-29-29-29zM492 740c11 11 29 11 41 0l265-265c11-11 11-29 0-41l-41-41c-11-11-29-11-41 0l-110 110c-11 11-33 3-33-13V68C571 53 555 39 541 39h-59c-15 0-29 13-29 29v417c0 17-21 25-33 13l-110-110c-11-11-29-11-41 0L226 433c-11 11-11 29 0 41L492 740z" /> = 275 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "在全局启动设置中添加了 启动前执行命令 选项")) FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "在选择下载 Fabric 时会自动选择 Fabric API")) diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb index 213a276..353a2c1 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb @@ -1,5 +1,6 @@ Imports System.IO.Compression Imports System.Management +Imports System.Runtime.CompilerServices Imports System.Security.Cryptography Imports System.Security.Principal Imports System.Windows.Markup @@ -10,12 +11,12 @@ Public Module ModBase #Region "声明" '下列版本信息由更新器自动修改 - Public Const VersionBaseName As String = "2.5.1" '不含分支前缀的显示用版本名 - Public Const VersionStandardCode As String = "2.5.1." & VersionBranchCode '标准格式的四段式版本号 + Public Const VersionBaseName As String = "2.5.2" '不含分支前缀的显示用版本名 + Public Const VersionStandardCode As String = "2.5.2." & VersionBranchCode '标准格式的四段式版本号 #If BETA Then - Public Const VersionCode As Integer = 281 'Release + Public Const VersionCode As Integer = 286 'Release #Else - Public Const VersionCode As Integer = 284 'Snapshot + Public Const VersionCode As Integer = 285 'Snapshot #End If '自动生成的版本信息 Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName @@ -1487,15 +1488,29 @@ Re: ''' ''' 连接字符串。 ''' - Public Function Join(List As ICollection, Split As String) As String + Public Function Join(List As IEnumerable, Split As String) As String Dim Builder As New StringBuilder - Dim LastCount As Integer = List.Count - 1 - For i = 0 To LastCount - If List(i) IsNot Nothing Then Builder.Append(List(i)) - If i <> LastCount Then Builder.Append(Split) + Dim IsFirst As Boolean = True + For Each Element In List + If IsFirst Then + IsFirst = False + Else + Builder.Append(Split) + End If + If Element IsNot Nothing Then Builder.Append(Element) Next Return Builder.ToString End Function + ''' + ''' 分割字符串。 + ''' + 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 9c757813c98ac0bc764ef30584a12de80624965e..8ed3d224ca0f19525f6dac190de5f198dc80b11d 100644 GIT binary patch delta 49025 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

Eq{CFB3bt$uA=xhesYlpI6d)R-2N|-lAQD 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