From cf74de57893800980961708ab7216547efe81403 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: Thu, 11 May 2023 02:03:06 +0800
Subject: [PATCH] 2.6.0
---
Plain Craft Launcher 2/Application.xaml | 9 ++-
Plain Craft Launcher 2/Application.xaml.vb | 77 +++++++++---------
Plain Craft Launcher 2/Controls/MyComboBox.vb | 6 ++
.../Controls/MyPageRight.vb | 52 +++++++++---
.../Controls/MyScrollViewer.vb | 7 ++
Plain Craft Launcher 2/FormMain.xaml.vb | 17 ++++
.../Modules/Base/ModBase.vb | 14 ++--
.../Modules/Minecraft/ModCrash.vb | 10 +--
.../Modules/Minecraft/ModLaunch.vb | 16 ++--
Plain Craft Launcher 2/Modules/ModMusic.vb | 2 +-
.../SystemDropShadowChrome.vb | 0
.../My Project/AssemblyInfo.vb | 4 +-
.../PageDownloadCompDetail.xaml.vb | 79 ++++++++++---------
.../Pages/PageDownload/PageDownloadMod.xaml | 5 +-
.../Pages/PageDownload/PageDownloadPack.xaml | 5 +-
.../Pages/PageLaunch/PageLoginMs.xaml | 40 +++++++---
.../Pages/PageLaunch/PageLoginMs.xaml.vb | 50 ++++++++++--
.../Pages/PageLaunch/PageLoginMsSkin.xaml | 59 +++++++-------
.../Pages/PageSelectRight.xaml | 2 +-
.../Pages/PageSetup/PageSetupLaunch.xaml | 5 +-
.../Pages/PageVersion/PageVersionSetup.xaml | 5 +-
.../PageVersion/PageVersionSetup.xaml.vb | 3 +-
.../Plain Craft Launcher 2.vbproj | 2 +-
23 files changed, 297 insertions(+), 172 deletions(-)
rename Plain Craft Launcher 2/Modules/Reference/{PresentationFramework.Aero => }/SystemDropShadowChrome.vb (100%)
diff --git a/Plain Craft Launcher 2/Application.xaml b/Plain Craft Launcher 2/Application.xaml
index abb600d..4bfefde 100644
--- a/Plain Craft Launcher 2/Application.xaml
+++ b/Plain Craft Launcher 2/Application.xaml
@@ -292,7 +292,7 @@
Margin="5,0,0,0" Cursor="IBeam" />
-
+
@@ -345,7 +345,7 @@
-
+
@@ -367,7 +367,10 @@
-
+
diff --git a/Plain Craft Launcher 2/Application.xaml.vb b/Plain Craft Launcher 2/Application.xaml.vb
index 70d2949..cfd1875 100644
--- a/Plain Craft Launcher 2/Application.xaml.vb
+++ b/Plain Craft Launcher 2/Application.xaml.vb
@@ -179,45 +179,48 @@ Public Class Application
'切换窗口
-
'控件模板事件
Private Sub MyIconButton_Click(sender As Object, e As EventArgs)
- If Setup.Get("LoginType") = McLoginType.Legacy Then
- '离线
- Dim Names As New List(Of String)
- Names.AddRange(Setup.Get("LoginLegacyName").ToString.Split("¨"))
- Names.Remove(sender.Tag)
- Setup.Set("LoginLegacyName", Join(Names, "¨"))
- FrmLoginLegacy.ComboName.ItemsSource = Names
- FrmLoginLegacy.ComboName.Text = If(Names.Count > 0, Names(0), "")
- Else
- '非离线
- Dim Token As String = GetStringFromEnum(Setup.Get("LoginType"))
- Dim Dict As New Dictionary(Of String, String)
- Dim Names As New List(Of String)
- Dim Passs As New List(Of String)
- If Not Setup.Get("Login" & Token & "Email") = "" Then Names.AddRange(Setup.Get("Login" & Token & "Email").ToString.Split("¨"))
- If Not Setup.Get("Login" & Token & "Pass") = "" Then Passs.AddRange(Setup.Get("Login" & Token & "Pass").ToString.Split("¨"))
- For i = 0 To Names.Count - 1
- Dict.Add(Names(i), Passs(i))
- Next
- Dict.Remove(sender.Tag)
- Setup.Set("Login" & Token & "Email", Join(Dict.Keys.ToArray, "¨"))
- Setup.Set("Login" & Token & "Pass", Join(Dict.Values.ToArray, "¨"))
- Select Case Token
- Case "Nide"
- FrmLoginNide.ComboName.ItemsSource = Dict.Keys
- FrmLoginNide.ComboName.Text = If(Dict.Keys.Count > 0, Dict.Keys(0), "")
- FrmLoginNide.TextPass.Password = If(Dict.Values.Count > 0, Dict.Values(0), "")
- Case "Auth"
- FrmLoginAuth.ComboName.ItemsSource = Dict.Keys
- FrmLoginAuth.ComboName.Text = If(Dict.Keys.Count > 0, Dict.Keys(0), "")
- FrmLoginAuth.TextPass.Password = If(Dict.Values.Count > 0, Dict.Values(0), "")
- Case Else
- DebugAssert(True)
- Exit Sub
- End Select
- End If
+ Select Case Setup.Get("LoginType")
+ Case McLoginType.Ms
+ '微软
+ Dim MsJson As JObject = GetJson(Setup.Get("LoginMsJson"))
+ MsJson.Remove(sender.Tag)
+ Setup.Set("LoginMsJson", MsJson.ToString(Newtonsoft.Json.Formatting.None))
+ FrmLoginMs.ComboAccounts.Items.Remove(sender.Parent)
+ Case McLoginType.Legacy
+ '离线
+ Dim Names As New List(Of String)
+ Names.AddRange(Setup.Get("LoginLegacyName").ToString.Split("¨"))
+ Names.Remove(sender.Tag)
+ Setup.Set("LoginLegacyName", Join(Names, "¨"))
+ FrmLoginLegacy.ComboName.ItemsSource = Names
+ FrmLoginLegacy.ComboName.Text = If(Names.Count > 0, Names(0), "")
+ Case Else
+ '第三方
+ Dim Token As String = GetStringFromEnum(Setup.Get("LoginType"))
+ Dim Dict As New Dictionary(Of String, String)
+ Dim Names As New List(Of String)
+ Dim Passs As New List(Of String)
+ If Not Setup.Get("Login" & Token & "Email") = "" Then Names.AddRange(Setup.Get("Login" & Token & "Email").ToString.Split("¨"))
+ If Not Setup.Get("Login" & Token & "Pass") = "" Then Passs.AddRange(Setup.Get("Login" & Token & "Pass").ToString.Split("¨"))
+ For i = 0 To Names.Count - 1
+ Dict.Add(Names(i), Passs(i))
+ Next
+ Dict.Remove(sender.Tag)
+ Setup.Set("Login" & Token & "Email", Join(Dict.Keys, "¨"))
+ Setup.Set("Login" & Token & "Pass", Join(Dict.Values, "¨"))
+ Select Case Token
+ Case "Nide"
+ FrmLoginNide.ComboName.ItemsSource = Dict.Keys
+ FrmLoginNide.ComboName.Text = If(Dict.Keys.Count > 0, Dict.Keys(0), "")
+ FrmLoginNide.TextPass.Password = If(Dict.Values.Count > 0, Dict.Values(0), "")
+ Case "Auth"
+ FrmLoginAuth.ComboName.ItemsSource = Dict.Keys
+ FrmLoginAuth.ComboName.Text = If(Dict.Keys.Count > 0, Dict.Keys(0), "")
+ FrmLoginAuth.TextPass.Password = If(Dict.Values.Count > 0, Dict.Values(0), "")
+ End Select
+ End Select
End Sub
End Class
diff --git a/Plain Craft Launcher 2/Controls/MyComboBox.vb b/Plain Craft Launcher 2/Controls/MyComboBox.vb
index b47993b..dbad5d1 100644
--- a/Plain Craft Launcher 2/Controls/MyComboBox.vb
+++ b/Plain Craft Launcher 2/Controls/MyComboBox.vb
@@ -128,4 +128,10 @@
End If
End Sub
+ Public ReadOnly Property ContentPresenter As ContentPresenter
+ Get
+ Return Template.FindName("PART_Content", Me)
+ End Get
+ End Property
+
End Class
diff --git a/Plain Craft Launcher 2/Controls/MyPageRight.vb b/Plain Craft Launcher 2/Controls/MyPageRight.vb
index 32a7ba3..b67c64f 100644
--- a/Plain Craft Launcher 2/Controls/MyPageRight.vb
+++ b/Plain Craft Launcher 2/Controls/MyPageRight.vb
@@ -68,7 +68,7 @@
Loop
RunInUiWait(Sub() FinishedInvoke(RealLoader))
Thread.Sleep(20) '由于大量初始化控件会导致掉帧,延迟触发 State 改变事件
- End Sub
+ End Sub
End If
AddHandler RealLoader.OnStateChangedUi, Sub(Loader As LoaderBase, NewState As LoadState, OldState As LoadState) RunInUi(Sub() PageLoaderState(Loader, NewState, OldState))
'隐藏 UI
@@ -325,17 +325,13 @@
'逐个进入动画
Public Sub TriggerEnterAnimation(ParamArray Elements As FrameworkElement())
- '去除 Nothing 项
- Dim RealElements As New List(Of FrameworkElement)
- For Each Element In Elements
- If Element IsNot Nothing Then RealElements.Add(Element)
- Next
-
+ Dim RealElements = Elements.Where(Function(e) e IsNot Nothing)
For Each Element In RealElements
Element.Visibility = Visibility.Visible '页面均处于默认的隐藏状态
Next
Dim AniList As New List(Of AniData)
Dim Delay As Integer = 0
+ '基础动画
For Each Element In RealElements
For Each Control As FrameworkElement In GetAllAnimControls(Element, True)
'还原被隐藏的卡片的消失动画
@@ -351,18 +347,20 @@
Delay += 40
Next
Next
+ '滚动条动画
+ Dim Scroll As MyScrollBar = GetFirstScrollViewer(RealElements)
+ If Scroll IsNot Nothing Then
+ If TypeOf Scroll.RenderTransform IsNot TranslateTransform Then Scroll.RenderTransform = New TranslateTransform(10, 0)
+ AniList.Add(AaTranslateX(Scroll, -CType(Scroll.RenderTransform, TranslateTransform).X, 350, 0, New AniEaseOutFluent))
+ End If
+ '结束
AniList.Add(AaCode(Sub() PageOnEnterAnimationFinished(),, True))
AniStart(AniList, "PageRight PageChange " & PageUuid)
End Sub
'逐个退出动画
Public Sub TriggerExitAnimation(ParamArray Elements As FrameworkElement())
- '去除 Nothing 项
- Dim RealElements As New List(Of FrameworkElement)
- For Each Element In Elements
- If Element IsNot Nothing Then RealElements.Add(Element)
- Next
-
+ Dim RealElements = Elements.Where(Function(e) e IsNot Nothing)
Dim AniList As New List(Of AniData)
Dim Delay As Integer = 0
For Each Element In RealElements
@@ -373,6 +371,13 @@
Delay += 20
Next
Next
+ '滚动条动画
+ Dim Scroll As MyScrollBar = GetFirstScrollViewer(RealElements)
+ If Scroll IsNot Nothing Then
+ If TypeOf Scroll.RenderTransform IsNot TranslateTransform Then Scroll.RenderTransform = New TranslateTransform
+ AniList.Add(AaTranslateX(Scroll, 10 - CType(Scroll.RenderTransform, TranslateTransform).X, 90, 0, New AniEaseInFluent))
+ End If
+ '结束
AniList.Add(AaCode(Sub()
For Each Element In RealElements
Element.Visibility = Visibility.Collapsed
@@ -402,6 +407,27 @@
End If
End Sub
+ '查找列表中的第一个滚动条
+ Private Function GetFirstScrollViewer(Elements As IEnumerable(Of FrameworkElement)) As MyScrollBar
+ Dim Viewer As MyScrollViewer = Nothing
+ For Each Element In Elements
+ If TypeOf Element Is MyScrollViewer Then
+ Viewer = Element
+ GoTo FindViewer
+ End If
+ For Each Control In LogicalTreeHelper.GetChildren(Element)
+ If TypeOf Control Is MyScrollViewer Then
+ Viewer = Control
+ GoTo FindViewer
+ End If
+ Next
+ Next
+ Return Nothing
+FindViewer:
+ If Viewer.ComputedVerticalScrollBarVisibility <> Visibility.Visible Then Return Nothing
+ Return Viewer.ScrollBar
+ End Function
+
#End Region
End Class
diff --git a/Plain Craft Launcher 2/Controls/MyScrollViewer.vb b/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
index c358555..666d9fa 100644
--- a/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
+++ b/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
@@ -2,6 +2,8 @@
Inherits ScrollViewer
Public Property DeltaMuity As Double = 1
+
+
Private RealOffset As Double
Private Sub MyScrollViewer_PreviewMouseWheel(sender As Object, e As MouseWheelEventArgs) Handles Me.PreviewMouseWheel
If e.Delta = 0 OrElse ActualHeight = 0 OrElse ScrollableHeight = 0 Then Exit Sub
@@ -30,4 +32,9 @@
FrmMain.BtnExtraBack.ShowRefresh()
End Sub
+ Public ScrollBar As MyScrollBar
+ Private Sub Load() Handles Me.Loaded
+ ScrollBar = GetTemplateChild("PART_VerticalScrollBar")
+ End Sub
+
End Class
diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb
index 220a90d..678ed88 100644
--- a/Plain Craft Launcher 2/FormMain.xaml.vb
+++ b/Plain Craft Launcher 2/FormMain.xaml.vb
@@ -10,6 +10,17 @@ Public Class FormMain
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
'统计更新日志条目
#If BETA Then
+ If LastVersion < 291 Then 'Release 2.6.0
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "支持在多个正版账号间切换"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "在缺少 Java 时会自动下载所需的 Java"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "重新制作正版登录页面"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "彻底移除 Mojang 登录"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "添加 CurseForge / Modrinth 来源筛选"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "Mod / 整合包下载会单独列出筛选的版本"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "为下载管理和音乐播放按钮添加进度条"))
+ FeatureCount += 24
+ BugCount += 24
+ End If
If LastVersion < 286 Then 'Release 2.5.2
FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "支持搜索、安装 Modrinth 的 Mod 与整合包"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "资源搜索页面支持翻页"))
@@ -95,6 +106,12 @@ Public Class FormMain
'3:BUG+ IMP* FEAT-
'2:BUG* IMP-
'1:BUG-
+ If LastVersion < 290 Then 'Snapshot 2.6.0
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "支持在多个正版账号间切换"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "Mod / 整合包下载会单独列出筛选的版本"))
+ FeatureCount += 10
+ BugCount += 2
+ End If
If LastVersion < 289 Then 'Snapshot 2.5.4
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "重新制作正版登录页面"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "彻底移除 Mojang 登录"))
diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
index f6f379d..9136bd8 100644
--- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb
+++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
@@ -11,12 +11,12 @@ Public Module ModBase
#Region "声明"
'下列版本信息由更新器自动修改
- Public Const VersionBaseName As String = "2.5.4" '不含分支前缀的显示用版本名
- Public Const VersionStandardCode As String = "2.5.4." & VersionBranchCode '标准格式的四段式版本号
+ Public Const VersionBaseName As String = "2.6.0" '不含分支前缀的显示用版本名
+ Public Const VersionStandardCode As String = "2.6.0." & VersionBranchCode '标准格式的四段式版本号
#If BETA Then
- Public Const VersionCode As Integer = 286 'Release
+ Public Const VersionCode As Integer = 291 'Release
#Else
- Public Const VersionCode As Integer = 289 'Snapshot
+ Public Const VersionCode As Integer = 290 'Snapshot
#End If
'自动生成的版本信息
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -2606,11 +2606,11 @@ Retry:
'''
''' 将数组随机打乱。
'''
- Public Function RandomChaos(Of T)(array As IList(Of T)) As IList(Of T)
- RandomChaos = New List(Of T)
+ Public Function Shuffle(Of T)(array As IList(Of T)) As IList(Of T)
+ Shuffle = New List(Of T)
Do While array.Count > 0
Dim i As Integer = RandomInteger(0, array.Count - 1)
- RandomChaos.Add(array(i))
+ Shuffle.Add(array(i))
array.RemoveAt(i)
Loop
End Function
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
index c7f31c3..421b066 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
@@ -361,7 +361,7 @@
低版本Forge与高版本Java不兼容
版本Json中存在多个Forge
Mod过多导致超出ID限制
- NightConfig库问题
+ NightConfig的Bug
ShadersMod与Optifine同时安装
Forge安装不完整
End Enum
@@ -489,7 +489,7 @@ Done:
If LogMc.Contains("Maybe try a lower resolution resourcepack?") Then AppendReason(CrashReason.材质过大或显卡配置不足)
If LogMc.Contains("java.lang.NoSuchMethodError: net.minecraft.world.server.ChunkManager$ProxyTicketManager.shouldForceTicks(J)Z") AndAlso LogMc.Contains("OptiFine") Then AppendReason(CrashReason.OptiFine导致无法加载世界)
If LogMc.Contains("Unsupported class file major version") Then AppendReason(CrashReason.Java版本不兼容)
- If LogMc.Contains("com.electronwill.nightconfig.core.io.ParsingException: Not enough data available") Then AppendReason(CrashReason.NightConfig库问题)
+ If LogMc.Contains("com.electronwill.nightconfig.core.io.ParsingException: Not enough data available") Then AppendReason(CrashReason.NightConfig的Bug)
If LogMc.Contains("Cannot find launch target fmlclient, unable to launch") Then AppendReason(CrashReason.Forge安装不完整)
If LogMc.Contains("Invalid module name: '' is not a Java identifier") Then AppendReason(CrashReason.Mod名称包含特殊字符)
If LogMc.Contains("java.lang.UnsupportedClassVersionError: net/fabricmc/loader/impl/launch/knot/KnotClient : Unsupported major.minor version") Then AppendReason(CrashReason.Java版本不兼容)
@@ -874,7 +874,7 @@ NextStack:
Case CrashReason.OptiFine与Forge不兼容
Results.Add("由于 OptiFine 与当前版本的 Forge 不兼容,导致了游戏崩溃。\n\n请前往 OptiFine 官网(https://optifine.net/downloads)查看 OptiFine 所兼容的 Forge 版本,并严格按照对应版本重新安装游戏。")
Case CrashReason.ShadersMod与Optifine同时安装
- Results.Add("当前游戏因为同时安装了 Optifine 和 Shaders Mod,无法继续运行。\n\n因为 Optifine 已集成 Shaders Mod 的功能,只需删除 Shaders Mod 即可。")
+ Results.Add("无需同时安装 Optifine 和 Shaders Mod,Optifine 已经集成了 Shaders Mod 的功能。\n在删除 Shaders Mod 后,游戏即可正常运行。")
Case CrashReason.低版本Forge与高版本Java不兼容
Results.Add("由于低版本 Forge 与当前 Java 不兼容,导致了游戏崩溃。\n\n请尝试以下解决方案:\n - 更新 Forge 到 36.2.26 或更高版本\n - 换用版本低于 8.0.320 的 Java")
Case CrashReason.版本Json中存在多个Forge
@@ -894,7 +894,7 @@ NextStack:
Case CrashReason.材质过大或显卡配置不足
Results.Add("你所使用的材质分辨率过高,或显卡配置不足,导致游戏无法继续运行。\n\n如果你正在使用高清材质,请将它移除。\n如果你没有使用材质,那么你可能需要更新显卡驱动,或者换个更好的显卡……\h")
Case CrashReason.材质过大或显卡配置不足
- Results.Add("当前游戏因为 Night Config 库的一些问题,无法继续运行。\n\n你可以尝试安装 Night Config Fixes 模组,这或许能帮助你解决这个问题。\n可访问该模组的 GitHub 仓库了解更多。\h")
+ Results.Add("由于 Night Config 存在问题,导致了游戏崩溃。\n你可以尝试安装 Night Config Fixes 模组,这或许能解决此问题。\h")
Case CrashReason.光影或资源包导致OpenGL1282错误
Results.Add("你所使用的光影或材质导致游戏出现了一些问题……\n\n请尝试删除你所添加的这些额外资源。\h")
Case CrashReason.Mod过多导致超出ID限制
@@ -902,7 +902,7 @@ NextStack:
Case CrashReason.文件或内容校验失败
Results.Add("部分文件或内容校验失败,导致游戏出现了问题。\n\n请尝试删除游戏(包括 Mod)并重新下载,或尝试在重新下载时使用 VPN。\h")
Case CrashReason.Forge安装不完整
- Results.Add("当前游戏因为 Forge 安装不完整,无法继续运行。\n\n请尝试重新全新安装 Forge\h")
+ Results.Add("由于 Forge 安装不完整,导致游戏无法正常运行。\n请尝试重新安装 Forge。\h")
Case CrashReason.Fabric报错
If Additional.Count = 1 Then
Results.Add("Fabric 提供了以下错误信息:\n" & Additional.First & "\n\n请根据上述信息进行对应处理,如果看不懂英文可以使用翻译软件。")
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
index bc84343..1011fe4 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
@@ -203,7 +203,7 @@ NextInner:
"如果觉得 Minecraft 还不错,也可以考虑购买正版支持一下,毕竟开发游戏也很不容易……" & vbCrLf &
"在你登录一次正版账号后,就不会再出现这个提示了。",
"考虑一下正版?", "购买正版游戏", "下次一定") = 1 Then
- OpenWebsite("https://www.minecraft.net/store/checkout/minecraft-java-bedrock-edition-pc")
+ OpenWebsite("https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj")
End If
End Select
End If
@@ -478,7 +478,7 @@ NextInner:
End If
'尝试登录
Dim OAuthTokens As String()
- If Setup.Get("CacheMsOAuthRefresh") = "" Then
+ If Input.OAuthRefreshToken = "" Then
'无 RefreshToken
Relogin:
Dim OAuthCode As String = MsLoginStep1(Data)
@@ -487,7 +487,7 @@ Relogin:
OAuthTokens = MsLoginStep2(OAuthCode, False)
Else
'有 RefreshToken
- OAuthTokens = MsLoginStep2(Setup.Get("CacheMsOAuthRefresh"), True)
+ OAuthTokens = MsLoginStep2(Input.OAuthRefreshToken, True)
End If
'要求重新打开登录网页认证
If OAuthTokens(0) = "Relogin" Then GoTo Relogin
@@ -511,6 +511,10 @@ Relogin:
Setup.Set("CacheMsUuid", Result(0))
Setup.Set("CacheMsName", Result(1))
Setup.Set("CacheMsProfileJson", Result(2))
+ Dim MsJson As JObject = GetJson(Setup.Get("LoginMsJson"))
+ MsJson.Remove(Input.UserName) '如果更改了玩家名……
+ MsJson(Result(1)) = OAuthRefreshToken
+ Setup.Set("LoginMsJson", MsJson.ToString(Newtonsoft.Json.Formatting.None))
Data.Output = New McLoginResult With {.AccessToken = AccessToken, .Name = Result(1), .Uuid = Result(0), .Type = "Microsoft", .ClientToken = Result(0), .ProfileJson = Result(2)}
'解锁主题
SkipLogin:
@@ -1001,7 +1005,7 @@ SystemBrowser:
Case 1
OpenWebsite("https://www.minecraft.net/zh-hans/msaprofile/mygames/editprofile")
Case 2
- OpenWebsite("https://www.minecraft.net/store/checkout/minecraft-java-bedrock-edition-pc")
+ OpenWebsite("https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj")
End Select
End Sub, "Login Failed: Create Profile")
Throw New Exception("$$")
@@ -1818,9 +1822,9 @@ NextVersion:
PackFormat = 12
End If
Case 20, 99 '99 是快照版
- PackFormat = 13
+ PackFormat = 15
Case Else
- PackFormat = 14
+ PackFormat = 16
'https://minecraft.fandom.com/zh/wiki/数据包#数据包版本
End Select
McLaunchLog("正在构建自定义皮肤资源包,格式为:" & PackFormat)
diff --git a/Plain Craft Launcher 2/Modules/ModMusic.vb b/Plain Craft Launcher 2/Modules/ModMusic.vb
index de3d4bd..1a054a7 100644
--- a/Plain Craft Launcher 2/Modules/ModMusic.vb
+++ b/Plain Craft Launcher 2/Modules/ModMusic.vb
@@ -31,7 +31,7 @@
Next
End If
'打乱顺序播放
- MusicToplayList = RandomChaos(New List(Of String)(MusicAllList))
+ MusicToplayList = If(Setup.Get("UiMusicRandom"), Shuffle(New List(Of String)(MusicAllList)), New List(Of String)(MusicAllList))
If Not IgnoreFirst = "" AndAlso Not MusicToplayList.Count = 0 AndAlso MusicToplayList(0) = IgnoreFirst Then
'若需要避免成为第一项的为第一项,则将它放在最后
MusicToplayList.RemoveAt(0)
diff --git a/Plain Craft Launcher 2/Modules/Reference/PresentationFramework.Aero/SystemDropShadowChrome.vb b/Plain Craft Launcher 2/Modules/Reference/SystemDropShadowChrome.vb
similarity index 100%
rename from Plain Craft Launcher 2/Modules/Reference/PresentationFramework.Aero/SystemDropShadowChrome.vb
rename to Plain Craft Launcher 2/Modules/Reference/SystemDropShadowChrome.vb
diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
index 8e8c70a..4a4a3ea 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.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
index de7fc70..cfd9a5d 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
@@ -39,51 +39,54 @@
End Sub
End Class
Private Sub Load_OnFinish()
-
- '初始化字典,并将当前版本排在最上面
- Dim TopVersion As String
+ '获取目标版本与 Mod 加载器
+ Dim TargetVersion As String = ""
Select Case Project.Type
Case CompType.Mod
- TopVersion = If(PageDownloadMod.Loader.Input.GameVersion, "")
+ TargetVersion = If(PageDownloadMod.Loader.Input.GameVersion, "")
Case CompType.ModPack
- TopVersion = If(PageDownloadPack.Loader.Input.GameVersion, "")
+ TargetVersion = If(PageDownloadPack.Loader.Input.GameVersion, "")
Case Else 'CompType.ResourcePack
'FUTURE: Res
- TopVersion = Nothing 'If(PageDownloadResource.Loader.Input.GameVersion, "")
+ TargetVersion = "" 'If(PageDownloadResource.Loader.Input.GameVersion, "")
End Select
- Dim Dict As New SortedDictionary(Of String, List(Of CompFile))(New VersionSorterWithSelect(TopVersion))
- '#8826 汇报了奇怪的这个 Try 块里出现 NPE 的问题,但实在找不到,就瞎加点检测
- Try
- Dict.Add("未知版本", New List(Of CompFile))
- If CompFileLoader.Output Is Nothing Then
- Log("[Comp] 列表加载输出为 Nothing,请反馈此问题", LogLevel.Feedback)
- Exit Try
- End If
- For Each Version As CompFile In CompFileLoader.Output
- If Version Is Nothing Then
- Log("[Comp] 列表中的一个版本为 Nothing,请反馈此问题", LogLevel.Feedback)
- Continue For
+ Dim TargetLoader = CompModLoaderType.Any
+ If Project.Type = CompType.Mod AndAlso PageDownloadMod.Loader.Input.ModLoader <> CompModLoaderType.Any Then
+ TargetLoader = PageDownloadMod.Loader.Input.ModLoader
+ End If
+ Dim TargetCardName As String = If(TargetVersion <> "" OrElse TargetLoader <> CompModLoaderType.Any,
+ $"目标PCL2版本:{TargetVersion} {If(TargetLoader <> CompModLoaderType.Any, TargetLoader, "")}", "")
+ '初始化字典
+ Dim Dict As New SortedDictionary(Of String, List(Of CompFile))(New VersionSorterWithSelect(TargetCardName))
+ Dict.Add("未知版本", New List(Of CompFile))
+ For Each Version As CompFile In CompFileLoader.Output
+ For Each GameVersion In Version.GameVersions
+ '决定添加到哪个版本
+ Dim TargetCard As String
+ If GameVersion Is Nothing Then
+ TargetCard = "未知版本"
+ ElseIf GameVersion.Contains("w") OrElse GameVersion.Contains("pre") OrElse GameVersion.Contains("rc") Then
+ TargetCard = "快照版本"
+ ElseIf GameVersion.Split(".").Count >= 2 Then
+ TargetCard = GameVersion
+ Else
+ TargetCard = "未知版本"
End If
- For Each GameVersion In Version.GameVersions
- '决定添加到哪个版本
- Dim TargetVersion As String
- If GameVersion Is Nothing Then
- TargetVersion = "未知版本"
- ElseIf GameVersion.Contains("w") Then
- TargetVersion = "快照版本"
- ElseIf GameVersion.Split(".").Count >= 2 Then
- TargetVersion = GameVersion
- Else
- TargetVersion = "未知版本"
- End If
- '实际进行添加
- If Not Dict.ContainsKey(TargetVersion) Then Dict.Add(TargetVersion, New List(Of CompFile))
- If Not Dict(TargetVersion).Contains(Version) Then Dict(TargetVersion).Add(Version)
- Next
+ '实际进行添加
+ If Not Dict.ContainsKey(TargetCard) Then Dict.Add(TargetCard, New List(Of CompFile))
+ If Not Dict(TargetCard).Contains(Version) Then Dict(TargetCard).Add(Version)
Next
- Catch ex As Exception
- Log(ex, "准备工程下载列表出错", LogLevel.Feedback)
- End Try
+ Next
+ '添加筛选的版本的卡片
+ If TargetCardName <> "" Then
+ Dict.Add(TargetCardName, New List(Of CompFile))
+ For Each Version As CompFile In CompFileLoader.Output
+ If Version.GameVersions.Contains(TargetVersion) AndAlso
+ (TargetLoader = CompModLoaderType.Any OrElse Version.ModLoaders.Contains(TargetLoader)) Then
+ If Not Dict(TargetCardName).Contains(Version) Then Dict(TargetCardName).Add(Version)
+ End If
+ Next
+ End If
#Region "转化为 UI"
Try
@@ -99,7 +102,7 @@
NewCard.SwapControl = NewStack
PanMain.Children.Add(NewCard)
'确定卡片是否展开
- If Pair.Key = TopVersion Then
+ If Pair.Key = TargetCardName Then
MyCard.StackInstall(NewStack, If(Project.Type = CompType.ModPack, 9, 8), Pair.Key) 'FUTURE: Res
Else
NewCard.IsSwaped = True
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
index 13c320b..3546c5d 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
@@ -33,11 +33,8 @@
+
-
-
-
-
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
index 6adf39a..01c5e6e 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
@@ -32,11 +32,8 @@
+
-
-
-
-
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml
index 00c01a2..7e94086 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml
@@ -4,17 +4,33 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:PCL"
- mc:Ignorable="d" d:DesignWidth="302.4" Margin="0,0,0,-2">
-
+ mc:Ignorable="d" d:DesignWidth="302.4">
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+ Fill="{DynamicResource ColorBrush2}" Opacity="0.7" Width="40" Stretch="Uniform" Grid.ColumnSpan="2" />
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
index fb52af4..e54eb06 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
@@ -4,12 +4,50 @@
''' 刷新页面显示的所有信息。
'''
Public Sub Reload(KeepInput As Boolean)
+ Dim IndexBefore = ComboAccounts.SelectedIndex
+ '刷新下拉框列表
+ ComboAccounts.Items.Clear()
+ ComboAccounts.Items.Add(New MyComboBoxItem With {.Content = "添加新账号"})
+ Try
+ Dim MsJson As JObject = GetJson(Setup.Get("LoginMsJson"))
+ For Each Account In MsJson
+ Dim Item As MyListItem = CType(FindResource("ComboBoxItemTemplateWithDelete"), DataTemplate).LoadContent()
+ Item.Tag = Account.Value.ToString
+ Item.Title = Account.Key
+ CType(Item.Buttons(0), MyIconButton).Tag = Account.Key
+ ComboAccounts.Items.Add(Item)
+ Next
+ Catch ex As Exception
+ Log(ex, $"微软登录信息出错,登录信息已被重置({Setup.Get("LoginMsJson")})", LogLevel.Hint)
+ Setup.Set("LoginMsJson", "{}")
+ End Try
+ '如果不保留输入,刷新列表后自动选择第一项
+ ComboAccounts.SelectedIndex = If(KeepInput, Math.Max(0, IndexBefore), 0)
End Sub
+ Private Sub ComboAccounts_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboAccounts.SelectionChanged
+ If AniControlEnabled <> 0 OrElse ComboAccounts.SelectedItem Is Nothing Then Exit Sub
+ If TypeOf ComboAccounts.SelectedItem Is MyListItem Then
+ ComboAccounts.ContentPresenter.Content = CType(ComboAccounts.SelectedItem, MyListItem).Title
+ ElseIf TypeOf ComboAccounts.SelectedItem Is MyComboBoxItem Then
+ ComboAccounts.ContentPresenter.Content = CType(ComboAccounts.SelectedItem, MyComboBoxItem).Content
+ End If
+ End Sub
+
'''
''' 获取当前页面的登录信息。
'''
Public Shared Function GetLoginData() As McLoginMs
- Return New McLoginMs With {.OAuthRefreshToken = Setup.Get("CacheMsOAuthRefresh"), .UserName = Setup.Get("CacheMsName")}
+ If FrmLoginMs Is Nothing Then Return New McLoginMs With {.OAuthRefreshToken = Setup.Get("CacheMsOAuthRefresh"), .UserName = Setup.Get("CacheMsName")}
+ Dim Result As McLoginMs = Nothing
+ RunInUiWait(Sub()
+ If FrmLoginMs.ComboAccounts.SelectedIndex = 0 Then
+ Result = New McLoginMs
+ Else
+ Dim Item As MyListItem = FrmLoginMs.ComboAccounts.SelectedItem
+ Result = New McLoginMs With {.OAuthRefreshToken = Item.Tag, .UserName = Item.Title}
+ End If
+ End Sub)
+ Return Result
End Function
'''
''' 当前页面的登录信息是否有效。
@@ -26,13 +64,14 @@
End Function
Private Sub BtnLogin_Click(sender As Object, e As EventArgs) Handles BtnLogin.Click
+ ComboAccounts.IsEnabled = False
BtnLogin.IsEnabled = False
- BtnLogin.Text = "登录中 0%"
+ BtnLogin.Text = "0%"
RunInNewThread(Sub()
Try
McLoginMsLoader.Start(GetLoginData(), IsForceRestart:=True)
Do While McLoginMsLoader.State = LoadState.Loading
- RunInUi(Sub() BtnLogin.Text = "登录中 " & Math.Round(McLoginMsLoader.Progress * 100) & "%")
+ RunInUi(Sub() BtnLogin.Text = Math.Round(McLoginMsLoader.Progress * 100) & "%")
Thread.Sleep(50)
Loop
If McLoginMsLoader.State = LoadState.Finished Then
@@ -45,7 +84,7 @@
Throw New Exception(McLoginMsLoader.Error.Message, McLoginMsLoader.Error)
End If
Catch ex As ThreadInterruptedException
- Hint("登录已取消!")
+ Hint("已取消登录!")
Catch ex As Exception
If ex.Message = "$$" Then
ElseIf ex.Message.StartsWith("$") Then
@@ -55,8 +94,9 @@
End If
Finally
RunInUi(Sub()
+ ComboAccounts.IsEnabled = True
BtnLogin.IsEnabled = True
- BtnLogin.Text = "添加账号"
+ BtnLogin.Text = "登录"
End Sub)
End Try
End Sub, "Ms Login")
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml
index 7c24511..3841983 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml
@@ -9,39 +9,42 @@
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageSelectRight.xaml b/Plain Craft Launcher 2/Pages/PageSelectRight.xaml
index e53ba5d..b9b4693 100644
--- a/Plain Craft Launcher 2/Pages/PageSelectRight.xaml
+++ b/Plain Craft Launcher 2/Pages/PageSelectRight.xaml
@@ -7,7 +7,7 @@
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
index 4c7d840..7c45180 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
@@ -219,7 +219,7 @@
-
+
@@ -228,7 +228,8 @@
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
index a84102d..407fad8 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
@@ -182,7 +182,7 @@
-
+
@@ -192,7 +192,8 @@
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
index 7336fff..d729bdc 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
@@ -396,7 +396,8 @@ PreFin:
'LittleSkin
Private Sub BtnServerAuthLittle_Click(sender As Object, e As EventArgs) Handles BtnServerAuthLittle.Click
- If MyMsgBox("即将把第三方登录设置覆盖为自动使用 LittleSkin 登录,是否继续?", "覆盖确认", "确定", "取消") = 2 Then Exit Sub
+ If TextServerAuthServer.Text <> "" AndAlso TextServerAuthServer.Text <> "https://littleskin.cn/api/yggdrasil" AndAlso
+ MyMsgBox("即将把第三方登录设置覆盖为自动使用 LittleSkin 登录,是否继续?", "覆盖确认", "确定", "取消") = 2 Then Exit Sub
TextServerAuthServer.Text = "https://littleskin.cn/api/yggdrasil"
TextServerAuthRegister.Text = "https://littleskin.cn/auth/register"
TextServerAuthName.Text = "LittleSkin 登录"
diff --git a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
index ac4d2e2..3aa5c37 100644
--- a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
+++ b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
@@ -285,7 +285,7 @@
PageVersionSetup.xaml
-
+