From fd7049ceedc0bfb554fe2b8285c992be3457a946 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: Wed, 26 Apr 2023 04:27:52 +0800
Subject: [PATCH] 2.5.4
---
Plain Craft Launcher 2/Application.xaml.vb | 4 -
.../Controls/MyIconButton.xaml.vb | 2 +-
.../Controls/MyScrollViewer.vb | 10 +-
Plain Craft Launcher 2/FormMain.xaml.vb | 8 +-
.../Modules/Base/ModBase.vb | 26 +++-
.../Modules/Base/MyBitmap.vb | 14 ++-
.../Modules/Minecraft/ModComp.vb | 2 +-
.../Modules/Minecraft/ModCrash.vb | 2 +-
.../Modules/Minecraft/ModLaunch.vb | 114 ++++++-----------
.../Modules/Minecraft/ModMinecraft.vb | 6 +-
.../My Project/AssemblyInfo.vb | 4 +-
.../Pages/PageDownload/ModDownloadLib.vb | 44 ++++---
.../Pages/PageLaunch/MySkin.xaml.vb | 22 ++--
.../Pages/PageLaunch/PageLaunchLeft.xaml | 10 +-
.../Pages/PageLaunch/PageLaunchLeft.xaml.vb | 102 +++------------
.../Pages/PageLaunch/PageLaunchRight.xaml.vb | 6 -
.../Pages/PageLaunch/PageLoginMojang.xaml | 26 ----
.../Pages/PageLaunch/PageLoginMojang.xaml.vb | 84 -------------
.../Pages/PageLaunch/PageLoginMojangSkin.xaml | 29 -----
.../PageLaunch/PageLoginMojangSkin.xaml.vb | 117 ------------------
.../Pages/PageLaunch/PageLoginMs.xaml | 14 ++-
.../Pages/PageLaunch/PageLoginMs.xaml.vb | 7 +-
.../Pages/PageLaunch/PageLoginMsSkin.xaml | 47 +++++--
.../Pages/PageLaunch/PageLoginMsSkin.xaml.vb | 66 +++++++---
.../Pages/PageVersion/PageVersionLeft.xaml.vb | 8 +-
.../Plain Craft Launcher 2.vbproj | 14 ---
26 files changed, 249 insertions(+), 539 deletions(-)
delete mode 100644 Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojang.xaml
delete mode 100644 Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojang.xaml.vb
delete mode 100644 Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojangSkin.xaml
delete mode 100644 Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojangSkin.xaml.vb
diff --git a/Plain Craft Launcher 2/Application.xaml.vb b/Plain Craft Launcher 2/Application.xaml.vb
index b5bb048..70d2949 100644
--- a/Plain Craft Launcher 2/Application.xaml.vb
+++ b/Plain Craft Launcher 2/Application.xaml.vb
@@ -205,10 +205,6 @@ Public Class Application
Setup.Set("Login" & Token & "Email", Join(Dict.Keys.ToArray, "¨"))
Setup.Set("Login" & Token & "Pass", Join(Dict.Values.ToArray, "¨"))
Select Case Token
- Case "Mojang"
- FrmLoginMojang.ComboName.ItemsSource = Dict.Keys
- FrmLoginMojang.ComboName.Text = If(Dict.Keys.Count > 0, Dict.Keys(0), "")
- FrmLoginMojang.TextPass.Password = If(Dict.Values.Count > 0, Dict.Values(0), "")
Case "Nide"
FrmLoginNide.ComboName.ItemsSource = Dict.Keys
FrmLoginNide.ComboName.Text = If(Dict.Keys.Count > 0, Dict.Keys(0), "")
diff --git a/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb b/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb
index db8e038..d599fb4 100644
--- a/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb
+++ b/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb
@@ -115,7 +115,7 @@
Dim AnimList As New List(Of AniData)
Select Case Theme
Case Themes.Color
- AnimList.Add(AaColor(Path, Shape.FillProperty, "ColorBrush4", AnimationColorOut))
+ AnimList.Add(AaColor(Path, Shape.FillProperty, "ColorBrush5", AnimationColorOut))
PanBack.Background = New MyColor(0, 255, 255, 255)
Case Themes.White
AnimList.Add(AaColor(Path, Shape.FillProperty, "ColorBrush8", AnimationColorOut))
diff --git a/Plain Craft Launcher 2/Controls/MyScrollViewer.vb b/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
index 83b1245..c358555 100644
--- a/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
+++ b/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
@@ -5,8 +5,14 @@
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
- Dim SourceTypeName As String = e.Source.GetType.Name
- If Content.TemplatedParent Is Nothing AndAlso (SourceTypeName.Contains("Combo") OrElse SourceTypeName = "MyTextBox") Then Exit Sub '确定可视树,防止滚动问题
+ Dim SourceType = e.Source.GetType
+ If Content.TemplatedParent Is Nothing AndAlso
+ ((GetType(ComboBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, ComboBox).IsDropDownOpen) OrElse
+ (GetType(TextBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, TextBox).AcceptsReturn) OrElse
+ GetType(ComboBoxItem).IsAssignableFrom(SourceType)) Then
+ '如果当前是在对有滚动条的下拉框或文本框执行,则不接管操作
+ Exit Sub
+ End If
PerformVerticalOffsetDelta(-e.Delta)
e.Handled = True
End Sub
diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb
index 4fe2bca..220a90d 100644
--- a/Plain Craft Launcher 2/FormMain.xaml.vb
+++ b/Plain Craft Launcher 2/FormMain.xaml.vb
@@ -95,7 +95,13 @@ Public Class FormMain
'3:BUG+ IMP* FEAT-
'2:BUG* IMP-
'1:BUG-
- If LastVersion < 287 Then 'Snapshot 2.5.3
+ 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 登录"))
+ FeatureCount += 6
+ BugCount += 14
+ End If
+ If LastVersion < 288 Then 'Snapshot 2.5.3
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "在缺少 Java 时会自动下载所需的 Java"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "添加 CurseForge / Modrinth 来源筛选"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "为下载管理和音乐播放按钮添加进度条"))
diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
index e25534b..f6f379d 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.3" '不含分支前缀的显示用版本名
- Public Const VersionStandardCode As String = "2.5.3." & VersionBranchCode '标准格式的四段式版本号
+ Public Const VersionBaseName As String = "2.5.4" '不含分支前缀的显示用版本名
+ Public Const VersionStandardCode As String = "2.5.4." & VersionBranchCode '标准格式的四段式版本号
#If BETA Then
Public Const VersionCode As Integer = 286 'Release
#Else
- Public Const VersionCode As Integer = 288 'Snapshot
+ Public Const VersionCode As Integer = 289 'Snapshot
#End If
'自动生成的版本信息
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -158,6 +158,10 @@ Public Module ModBase
'''
Public Const IconButtonUser As String = "M660.338 528.065c63.61-46.825 105.131-121.964 105.131-206.83 0-141.7-115.29-256.987-256.997-256.987-141.706 0-256.998 115.288-256.998 256.987 0 85.901 42.52 161.887 107.456 208.562-152.1 59.92-260.185 207.961-260.185 381.077 0 21.276 17.253 38.53 38.53 38.53 21.278 0 38.53-17.254 38.53-38.53 0-183.426 149.232-332.671 332.667-332.671 1.589 0 3.113-0.207 4.694-0.244 0.8 0.056 1.553 0.244 2.362 0.244 183.434 0 332.664 149.245 332.664 332.671 0 21.276 17.255 38.53 38.533 38.53 21.277 0 38.53-17.254 38.53-38.53 0-174.885-110.354-324.13-264.917-382.809z m-331.803-206.83c0-99.22 80.72-179.927 179.935-179.927s179.937 80.708 179.937 179.927c0 99.203-80.721 179.91-179.937 179.91s-179.935-80.708-179.935-179.91z"
'''
+ ''' 图标按钮,微软,0.9x
+ '''
+ Public Const IconButtonMs As String = "M0,0h5v5h-5ZM6,0h5v5h-5v-5ZM0,6h5v5h-5v-5ZM6,6h5v5h-5v-5Z"
+ '''
''' 图标,音符,1x
'''
Public Const IconMusic As String = "M348.293565 716.53287V254.797913c0-41.672348 28.004174-78.358261 68.919652-90.37913L815.994435 40.826435c62.775652-18.610087 125.907478 26.579478 125.907478 89.933913v539.158261c8.013913 42.25113-8.94887 89.177043-47.014956 127.109565a232.848696 232.848696 0 0 1-170.785392 65.758609c-61.885217-2.938435-111.081739-33.435826-129.113043-80.050087-18.031304-46.614261-2.137043-102.177391 41.672348-145.853218a232.848696 232.848696 0 0 1 170.785391-65.80313c21.014261 1.024 40.514783 5.164522 57.878261 12.065391V233.338435c0-12.109913-10.551652-20.034783-20.569044-20.034783a24.620522 24.620522 0 0 0-5.787826 0.934957L439.785739 338.18713a19.545043 19.545043 0 0 0-14.825739 19.144348v438.984348H423.846957c11.53113 43.987478-5.164522 94.208-45.412174 134.322087a232.848696 232.848696 0 0 1-170.785392 65.758609c-61.885217-2.938435-111.081739-33.435826-129.113043-80.050087-18.031304-46.614261-2.137043-102.177391 41.672348-145.853218a232.848696 232.848696 0 0 1 170.785391-65.80313c20.791652 1.024 40.069565 5.075478 57.299478 11.842783z"
@@ -784,7 +788,7 @@ Public Module ModBase
'复制文件
File.Copy(FromPath, ToPath, True)
Catch ex As Exception
- Throw New Exception("复制文件出错:" & FromPath & " -> " & ToPath, ex)
+ Throw New Exception("复制文件出错:" & FromPath & " → " & ToPath, ex)
End Try
End Sub
'''
@@ -1240,7 +1244,19 @@ Re:
Directory.CreateDirectory(DestDirectory)
If CompressFilePath.EndsWith(".zip") OrElse CompressFilePath.EndsWith(".jar") OrElse CompressFilePath.EndsWith(".mrpack") Then
'以 zip 方式解压
- ZipFile.ExtractToDirectory(CompressFilePath, DestDirectory, If(Encode, Encoding.GetEncoding("GB18030")))
+ Using stream As New FileStream(CompressFilePath, FileMode.Open)
+ Using archive As New ZipArchive(stream, ZipArchiveMode.Read, False, If(Encode, Encoding.GetEncoding("GB18030")))
+ For Each entry As ZipArchiveEntry In archive.Entries
+ Dim destinationPath As String = IO.Path.Combine(DestDirectory, entry.FullName)
+ If destinationPath.EndsWith("\") OrElse destinationPath.EndsWith("/") Then
+ Directory.CreateDirectory(destinationPath)
+ Else
+ If File.Exists(destinationPath) Then File.Delete(destinationPath)
+ entry.ExtractToFile(destinationPath, True)
+ End If
+ Next
+ End Using
+ End Using
Return True
ElseIf CompressFilePath.EndsWith(".gz") Then
'以 gz 方式解压
diff --git a/Plain Craft Launcher 2/Modules/Base/MyBitmap.vb b/Plain Craft Launcher 2/Modules/Base/MyBitmap.vb
index e9e74f3..7cbe59f 100644
--- a/Plain Craft Launcher 2/Modules/Base/MyBitmap.vb
+++ b/Plain Craft Launcher 2/Modules/Base/MyBitmap.vb
@@ -1,5 +1,7 @@
'一个万能的自动图片类型转换工具类
+Imports System.Drawing.Imaging
+
Public Class MyBitmap
'''
@@ -29,7 +31,7 @@ Public Class MyBitmap
Dim bitmapData = Bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Try
Dim size = rect.Width * rect.Height * 4
- Return BitmapSource.Create(Bitmap.Width, Bitmap.Height, DPI, DPI, PixelFormats.Bgra32, Nothing, bitmapData.Scan0, size, bitmapData.Stride)
+ Return BitmapSource.Create(Bitmap.Width, Bitmap.Height, Bitmap.HorizontalResolution, Bitmap.VerticalResolution, PixelFormats.Bgra32, Nothing, bitmapData.Scan0, size, bitmapData.Stride)
Finally
Bitmap.UnlockBits(bitmapData)
End Try
@@ -109,8 +111,10 @@ Public Class MyBitmap
Public Function Rotation(angle As Double) As System.Drawing.Bitmap
Dim img As System.Drawing.Image = Me.Pic
Dim bitSize As Single = img.Width
- Dim bmp As New System.Drawing.Bitmap(CInt(bitSize), CInt(bitSize))
+ Dim bmp As New System.Drawing.Bitmap(CInt(bitSize), CInt(bitSize), img.PixelFormat)
+ bmp.SetResolution(img.HorizontalResolution, img.VerticalResolution)
Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmp)
+ g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor
g.TranslateTransform(bitSize / 2, bitSize / 2)
g.RotateTransform(angle)
g.TranslateTransform(-bitSize / 2, -bitSize / 2)
@@ -124,9 +128,11 @@ Public Class MyBitmap
'''
Public Function Clip(rect As System.Drawing.Rectangle) As System.Drawing.Bitmap
Dim img As System.Drawing.Image = Pic
- Dim bmp As New System.Drawing.Bitmap(rect.Width, rect.Height)
+ Dim bmp As New System.Drawing.Bitmap(rect.Width, rect.Height, img.PixelFormat)
+ bmp.SetResolution(img.HorizontalResolution, img.VerticalResolution)
Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmp)
- g.DrawImageUnscaled(img, rect)
+ g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor
+ g.DrawImageUnscaled(img, rect.X, rect.Y)
End Using
Return bmp
End Function
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
index b903d13..0630f2c 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
@@ -181,7 +181,7 @@
Get
If Not LoadedDatabase Then
LoadedDatabase = True
- _DatabaseEntry = CompDatabase.FirstOrDefault(Function(c) If(FromCurseForge, c.CurseForgeSlug, c.ModrinthSlug) = Slug)
+ If Type = CompType.Mod Then _DatabaseEntry = CompDatabase.FirstOrDefault(Function(c) If(FromCurseForge, c.CurseForgeSlug, c.ModrinthSlug) = Slug)
End If
Return _DatabaseEntry
End Get
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
index 79bd552..9381391 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
@@ -505,7 +505,7 @@ Done:
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in config \[)[^./ ]+(?=.mixins.json\] FAILED during )")
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in config \[mixins.)[^./ ]+(?=.json\] FAILED during )")
If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in callback )[^./ ]+(?=.mixins.json:)")
- If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<= in callback mixins.)[^./ ]+(?=.json:)")
+ If ModId Is Nothing Then ModId = RegexSeek(LogMc, "(?<=from mod )[^\] ]+(?=\] from phase)")
AppendReason(CrashReason.ModMixin失败, TryAnalyzeModName(If(ModId, "").TrimEnd((vbCrLf & " ").ToCharArray)))
End If
If LogMc.Contains("Caught exception from ") Then AppendReason(CrashReason.确定Mod导致游戏崩溃, TryAnalyzeModName(RegexSeek(LogMc, "(?<=Caught exception from )[^\n]+?")?.TrimEnd((vbCrLf & " ").ToCharArray)))
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
index 36d3629..bc84343 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
@@ -181,20 +181,32 @@ NextInner:
CheckResult = McLoginAble(LoginInput)
End Sub)
If CheckResult <> "" Then Throw New ArgumentException(CheckResult)
- '求赞助
#If BETA Then
+ '求赞助
RunInNewThread(Sub()
Select Case Setup.Get("SystemLaunchCount")
- Case 20, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000
+ Case 20, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1700, 1900, 2100, 2300, 2500
If MyMsgBox("PCL 已经为你启动了 " & Setup.Get("SystemLaunchCount") & " 次游戏啦!" & vbCrLf &
- "如果觉得 PCL 还算好用的话,也可以考虑小小地赞助一下作者呢 qwq……" & vbCrLf &
- "毕竟一个人开发也不容易(小声)……",
+ "如果觉得 PCL 还算好用的话,也可以考虑赞助一下作者……一点心意也行……" & vbCrLf &
+ "毕竟一个人开发也不容易(悲)……",
"求赞助啦……", "这就赞助!", "但是我拒绝") = 1 Then
- OpenWebsite("https://afdian.net/a/LTCat/plan")
+ OpenWebsite("https://afdian.net/a/LTCat")
End If
End Select
End Sub, "Donate")
#End If
+ '正版购买提示
+ If Not Setup.Get("HintBuy") AndAlso Setup.Get("LoginType") <> McLoginType.Ms Then
+ Select Case Setup.Get("SystemLaunchCount")
+ Case 10, 35, 75, 125, 175, 225, 275, 325, 375, 425, 475, 550, 650, 750, 850, 950, 1050, 1150, 1250, 1350, 1450, 1600, 1800, 2000, 2200, 2400
+ If MyMsgBox("你已经启动了 " & Setup.Get("SystemLaunchCount") & " 次 Minecraft 啦!" & vbCrLf &
+ "如果觉得 Minecraft 还不错,也可以考虑购买正版支持一下,毕竟开发游戏也很不容易……" & vbCrLf &
+ "在你登录一次正版账号后,就不会再出现这个提示了。",
+ "考虑一下正版?", "购买正版游戏", "下次一定") = 1 Then
+ OpenWebsite("https://www.minecraft.net/store/checkout/minecraft-java-bedrock-edition-pc")
+ End If
+ End Select
+ End If
End Sub
#End Region
@@ -204,7 +216,6 @@ NextInner:
'登录方式
Public Enum McLoginType
Legacy = 0
- Mojang = 1
Nide = 2
Auth = 3
Ms = 5
@@ -304,15 +315,8 @@ NextInner:
Public Uuid As String
Public AccessToken As String
Public Type As String
- '''
- ''' 仅用于登录方式为 Mojang 正版时的 Refresh Login,其余时间为一个无意义的 ID(一般为玩家的 UUID)。
- '''
Public ClientToken As String
'''
- ''' 用于登录的邮箱。仅用于登录方式为 Mojang 正版时的 launcher_profile 更新。
- '''
- Public Email As String
- '''
''' 进行微软登录时返回的 profile 信息。
'''
Public ProfileJson As String
@@ -324,8 +328,6 @@ NextInner:
Public Function McLoginName() As String
'根据当前登录方式优先返回
Select Case Setup.Get("LoginType")
- Case McLoginType.Mojang
- If Setup.Get("CacheMojangName") <> "" Then Return Setup.Get("CacheMojangName")
Case McLoginType.Ms
If Setup.Get("CacheMsName") <> "" Then Return Setup.Get("CacheMsName")
Case McLoginType.Legacy
@@ -337,7 +339,6 @@ NextInner:
End Select
'查找所有可能的项
If Setup.Get("CacheMsName") <> "" Then Return Setup.Get("CacheMsName")
- If Setup.Get("CacheMojangName") <> "" Then Return Setup.Get("CacheMojangName")
If Setup.Get("CacheNideName") <> "" Then Return Setup.Get("CacheNideName")
If Setup.Get("CacheAuthName") <> "" Then Return Setup.Get("CacheAuthName")
If Setup.Get("LoginLegacyName") <> "" Then Return Setup.Get("LoginLegacyName").ToString.Split("¨")(0)
@@ -348,12 +349,6 @@ NextInner:
'''
Public Function McLoginAble() As String
Select Case Setup.Get("LoginType")
- Case McLoginType.Mojang
- If Setup.Get("CacheMojangAccess") = "" Then
- Return FrmLoginMojang.IsVaild()
- Else
- Return ""
- End If
Case McLoginType.Ms
If Setup.Get("CacheMsOAuthRefresh") = "" Then
Return FrmLoginMs.IsVaild()
@@ -383,8 +378,6 @@ NextInner:
'''
Public Function McLoginAble(LoginData As McLoginData) As String
Select Case LoginData.Type
- Case McLoginType.Mojang
- Return PageLoginMojang.IsVaild(LoginData)
Case McLoginType.Ms
Return PageLoginMs.IsVaild(LoginData)
Case McLoginType.Legacy
@@ -407,12 +400,6 @@ NextInner:
Select Case LoginType
Case McLoginType.Legacy
LoginData = PageLoginLegacy.GetLoginData()
- Case McLoginType.Mojang
- If Setup.Get("CacheMojangAccess") = "" Then
- LoginData = PageLoginMojang.GetLoginData()
- Else
- LoginData = PageLoginMojangSkin.GetLoginData()
- End If
Case McLoginType.Ms
If Setup.Get("CacheMsOAuthRefresh") = "" Then
LoginData = PageLoginMs.GetLoginData()
@@ -445,8 +432,6 @@ NextInner:
'获取对应加载器
Dim Loader As LoaderBase = Nothing
Select Case Data.Input.Type
- Case McLoginType.Mojang
- Loader = McLoginMojangLoader
Case McLoginType.Ms
Loader = McLoginMsLoader
Case McLoginType.Legacy
@@ -473,7 +458,6 @@ NextInner:
#Region "分方式登录模块"
'各个登录方式的主对象与输入构造
- Public McLoginMojangLoader As New LoaderTask(Of McLoginServer, McLoginResult)("Loader Login Mojang", AddressOf McLoginServerStart) With {.ReloadTimeout = 60000}
Public McLoginMsLoader As New LoaderTask(Of McLoginMs, McLoginResult)("Loader Login Ms", AddressOf McLoginMsStart) With {.ReloadTimeout = 300000}
Public McLoginLegacyLoader As New LoaderTask(Of McLoginLegacy, McLoginResult)("Loader Login Legacy", AddressOf McLoginLegacyStart)
Public McLoginNideLoader As New LoaderTask(Of McLoginServer, McLoginResult)("Loader Login Nide", AddressOf McLoginServerStart) With {.ReloadTimeout = 60000}
@@ -484,7 +468,7 @@ NextInner:
Private Sub McLoginMsStart(Data As LoaderTask(Of McLoginMs, McLoginResult))
Dim Input As McLoginMs = Data.Input
Dim LogUsername As String = Input.UserName
- McLaunchLog("登录方式:微软正版(" & If(LogUsername = "", "尚未登录", LogUsername) & ")")
+ McLaunchLog("登录方式:正版(" & If(LogUsername = "", "尚未登录", LogUsername) & ")")
Data.Progress = 0.05
'检查是否已经登录完成
If Input.AccessToken <> "" AndAlso Not Data.IsForceRestarting Then
@@ -531,6 +515,7 @@ Relogin:
'解锁主题
SkipLogin:
McLaunchLog("微软登录完成")
+ Setup.Set("HintBuy", True) '关闭正版购买提示
Data.Progress = 0.95
If ThemeUnlock(10, False) Then MyMsgBox("感谢你对正版游戏的支持!" & vbCrLf & "隐藏主题 跳票红 已解锁!", "提示")
End Sub
@@ -617,11 +602,7 @@ LoginFinish:
.Type = "Legacy"
End With
'将结果扩展到所有项目中
- 'Data.Output.AccessToken = Setup.Get("CacheMojangAccess") '不能优先使用缓存的 AccessToken,这会导致离线用户名设置失效
- 'If Data.Output.AccessToken.Length < 300 Then
Data.Output.AccessToken = Data.Output.Uuid
- 'Data.Output.ClientToken = Setup.Get("CacheMojangClient")
- 'If Data.Output.AccessToken.Length <> 32 Then
Data.Output.ClientToken = Data.Output.Uuid
'保存启动记录
Dim Names As New List(Of String)
@@ -649,7 +630,6 @@ LoginFinish:
Data.Output.Name = LoginJson("selectedProfile")("name").ToString
Data.Output.Uuid = LoginJson("selectedProfile")("id").ToString
Data.Output.Type = "Auth"
- Data.Output.Email = Data.Input.UserName
McLaunchLog("登录成功(Login, HiPer)")
'保存启动记录
Dim Names As New List(Of String)
@@ -691,7 +671,6 @@ LoginFinish:
Data.Output.Uuid = Uuid
Data.Output.Name = Name
Data.Output.Type = Data.Input.Token
- Data.Output.Email = Data.Input.UserName
'不更改缓存,直接结束
McLaunchLog("验证登录成功(Validate, " & Data.Input.Token & ")")
End Sub
@@ -716,7 +695,6 @@ LoginFinish:
Data.Output.Uuid = LoginJson("selectedProfile")("id").ToString
Data.Output.Name = LoginJson("selectedProfile")("name").ToString
Data.Output.Type = Data.Input.Token
- Data.Output.Email = Data.Input.UserName
'保存缓存
Setup.Set("Cache" & Data.Input.Token & "Access", Data.Output.AccessToken)
Setup.Set("Cache" & Data.Input.Token & "Client", Data.Output.ClientToken)
@@ -737,12 +715,8 @@ LoginFinish:
ContentType:="application/json; charset=utf-8"))
'检查登录结果
If LoginJson("availableProfiles").Count = 0 Then
- If Data.Input.Type = McLoginType.Auth Then
- If Data.Input.ForceReselectProfile Then Hint("你还没有创建角色,无法更换!", HintType.Critical)
- Throw New Exception("$你还没有创建角色,请在创建角色后再试!")
- Else
- Throw New Exception("$你还没有购买 Minecraft 正版,请在购买后再试!")
- End If
+ If Data.Input.ForceReselectProfile Then Hint("你还没有创建角色,无法更换!", HintType.Critical)
+ Throw New Exception("$你还没有创建角色,请在创建角色后再试!")
ElseIf Data.Input.ForceReselectProfile AndAlso LoginJson("availableProfiles").Count = 1 Then
Hint("你的账户中只有一个角色,无法更换!", HintType.Critical)
End If
@@ -785,7 +759,6 @@ LoginFinish:
Data.Output.Name = SelectedName
Data.Output.Uuid = SelectedId
Data.Output.Type = Data.Input.Token
- Data.Output.Email = Data.Input.UserName
'保存缓存
Setup.Set("Cache" & Data.Input.Token & "Access", Data.Output.AccessToken)
Setup.Set("Cache" & Data.Input.Token & "Client", Data.Output.ClientToken)
@@ -798,27 +771,13 @@ LoginFinish:
Catch ex As Exception
Dim AllMessage As String = GetExceptionSummary(ex)
Log(ex, "登录失败原始错误信息", LogLevel.Normal)
- If AllMessage.Contains("410") AndAlso AllMessage.Contains("Migrated") Then
- Throw New Exception("$登录失败:该 Mojang 账号已迁移至微软账号,请在上方的登录方式中选择 微软 并再次尝试登录!")
- ElseIf AllMessage.Contains("403") Then
+ If AllMessage.Contains("403") Then
Select Case Data.Input.Type
Case McLoginType.Auth
Throw New Exception("$登录失败,以下为可能的原因:" & vbCrLf &
" - 输入的账号或密码错误。" & vbCrLf &
" - 登录尝试过于频繁,导致被暂时屏蔽。请不要操作,等待 10 分钟后再试。" & vbCrLf &
" - 只注册了账号,但没有在皮肤站新建角色。")
- Case McLoginType.Legacy
- Throw
- Case McLoginType.Mojang
- If AllMessage.Contains("Invalid username or password") Then
- Throw New Exception("$登录失败:输入的账号或密码有误。")
- Else
- Throw New Exception("$登录尝试过于频繁,导致被 Mojang 暂时屏蔽。请不要操作,等待 10 分钟后再试。")
- End If
- Case McLoginType.Ms
- Throw New Exception("$登录失败,以下为可能的原因:" & vbCrLf &
- " - 登录尝试过于频繁,导致被暂时屏蔽。请不要操作,等待 10 分钟后再试。" & vbCrLf &
- " - 账号类别错误。如果你在使用 Mojang 账号,请将登录方式切换为 Mojang。")
Case McLoginType.Nide
Throw New Exception("$登录失败,以下为可能的原因:" & vbCrLf &
" - 输入的账号或密码错误。" & vbCrLf &
@@ -1037,8 +996,8 @@ SystemBrowser:
ElseIf Message.Contains("(404)") Then
Log(ex, "微软登录第 6 步汇报 404")
RunInNewThread(Sub()
- Select Case MyMsgBox("你可能没有在 Minecraft 官网创建档案,或者没有购买 Minecraft。" & vbCrLf &
- "如果你已经购买了游戏,请在官网上创建档案后再试。", "登录失败", "创建档案", "购买 Minecraft", "取消")
+ Select Case MyMsgBox("你可能没有在 Minecraft 官网创建档案,XBox Game Pass 已到期,或者还没有购买 Minecraft。" & vbCrLf &
+ "如果你确认拥有 Minecraft,请在官网上创建档案后再试。", "登录失败", "创建档案", "购买 Minecraft", "取消")
Case 1
OpenWebsite("https://www.minecraft.net/zh-hans/msaprofile/mygames/editprofile")
Case 2
@@ -1180,6 +1139,9 @@ SystemBrowser:
ElseIf McVersionCurrent.Version.McCodeMain >= 18 AndAlso McVersionCurrent.Version.McCodeMain < 99 AndAlso McVersionCurrent.Version.HasOptiFine Then '#305
'1.18+:若安装了 OptiFine,最高 Java 18
MaxVer = New Version(1, 18, 999, 999)
+ ElseIf McVersionCurrent.Version.McCodeMain >= 19 AndAlso McVersionCurrent.Version.McCodeMain < 99 Then
+ '1.19+:最高 Java 19
+ MaxVer = New Version(1, 19, 999, 999)
End If
End If
@@ -1708,7 +1670,7 @@ NextVersion:
'更新 launcher_profiles.json
Try
'确保可用
- If Not (McLoginLoader.Output.Type = "Mojang" OrElse McLoginLoader.Output.Type = "Microsoft") Then Exit Try
+ If Not McLoginLoader.Output.Type = "Microsoft" Then Exit Try
McFolderLauncherProfilesJsonCreate(PathMcFolder)
'构建需要替换的 Json 对象
Dim ReplaceJsonString As String = "
@@ -1716,7 +1678,7 @@ NextVersion:
""authenticationDatabase"": {
""00000111112222233333444445555566"": {
""accessToken"": """ & McLoginLoader.Output.AccessToken & """,
- ""username"": """ & If(McLoginLoader.Output.Email, McLoginLoader.Output.Name).Replace("""", "-") & """,
+ ""username"": """ & McLoginLoader.Output.Name.Replace("""", "-") & """,
""profiles"": {
""66666555554444433333222221111100"": {
""displayName"": """ & McLoginLoader.Output.Name & """
@@ -1747,7 +1709,7 @@ NextVersion:
""authenticationDatabase"": {
""00000111112222233333444445555566"": {
""accessToken"": """ & McLoginLoader.Output.AccessToken & """,
- ""username"": """ & If(McLoginLoader.Output.Email, McLoginLoader.Output.Name).Replace("""", "-") & """,
+ ""username"": """ & McLoginLoader.Output.Name.Replace("""", "-") & """,
""profiles"": {
""66666555554444433333222221111100"": {
""displayName"": """ & McLoginLoader.Output.Name & """
@@ -1851,7 +1813,7 @@ NextVersion:
End If
Case 19
If McVersionCurrent.Version.McCodeSub <= 3 Then
- PackFormat = 10
+ PackFormat = 9
Else
PackFormat = 12
End If
@@ -1989,7 +1951,7 @@ IgnoreCustomSkin:
Try
CustomProcess.StartInfo.FileName = "cmd.exe"
CustomProcess.StartInfo.Arguments = "/c """ & CustomCommandGlobal & """"
- CustomProcess.StartInfo.WorkingDirectory = Path
+ CustomProcess.StartInfo.WorkingDirectory = PathMcFolder
CustomProcess.StartInfo.UseShellExecute = False
CustomProcess.StartInfo.CreateNoWindow = True
CustomProcess.Start()
@@ -2013,7 +1975,7 @@ IgnoreCustomSkin:
Try
CustomProcess.StartInfo.FileName = "cmd.exe"
CustomProcess.StartInfo.Arguments = "/c """ & CustomCommandVersion & """"
- CustomProcess.StartInfo.WorkingDirectory = Path
+ CustomProcess.StartInfo.WorkingDirectory = PathMcFolder
CustomProcess.StartInfo.UseShellExecute = False
CustomProcess.StartInfo.CreateNoWindow = True
CustomProcess.Start()
@@ -2061,12 +2023,16 @@ IgnoreCustomSkin:
'开始进程
GameProcess.Start()
McLaunchLog("已启动游戏进程:" & McLaunchJavaSelected.PathJavaw)
+ If Loader.IsAborted Then
+ McLaunchLog("由于取消启动,已强制结束游戏进程") '#1631
+ GameProcess.Kill()
+ Exit Sub
+ End If
Loader.Output = GameProcess
McLaunchProcess = GameProcess
'进程优先级处理
Try
- If GameProcess.HasExited Then Exit Try '可能在启动游戏进程的同时刚好取消了启动
GameProcess.PriorityBoostEnabled = True
Select Case Setup.Get("LaunchArgumentPriority")
Case 0 '高
@@ -2177,10 +2143,8 @@ IgnoreCustomSkin:
Else
Raw = Raw.Replace("{login}", "离线")
End If
- Case McLoginType.Mojang
- Raw = Raw.Replace("{login}", "Mojang 正版")
Case McLoginType.Ms
- Raw = Raw.Replace("{login}", "微软正版")
+ Raw = Raw.Replace("{login}", "正版")
Case McLoginType.Nide
Raw = Raw.Replace("{login}", "统一通行证")
Case McLoginType.Auth
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
index 4930468..d97c827 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
@@ -147,7 +147,7 @@ Public Module ModMinecraft
#Region "版本处理"
- Public Const McVersionCacheVersion As Integer = 25
+ Public Const McVersionCacheVersion As Integer = 26
Private _McVersionCurrent As McVersion
Private _McVersionLast = 0 '为 0 以保证与 Nothing 不相同,使得 UI 显示可以正常初始化
@@ -742,8 +742,10 @@ ExitDataLoad:
If CustomInfo = "" Then
Select Case State
Case McVersionState.Snapshot
- If Version.McName.ToLower.Contains("pre") OrElse Version.McName.ToLower.Contains("rc") Then
+ If Version.McName.ToLower.Contains("pre") Then
Info = "预发布版 " & Version.McName
+ ElseIf Version.McName.ToLower.Contains("rc") Then
+ Info = "发布候选 " & Version.McName
ElseIf Version.McName.Contains("experimental") OrElse Version.McName = "pending" Then
Info = "实验性快照"
Else
diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
index fece523..8e8c70a 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/ModDownloadLib.vb b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
index 70028e7..31f6bf0 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
@@ -3,10 +3,14 @@
Public Module ModDownloadLib
'''
- ''' 如果 OptiFine 与 Forge 同时开始安装,就会导致 Forge 安装失败,所以在这里添加一个锁。
+ ''' 如果 OptiFine 与 Forge 同时开始安装,就会导致 Forge 安装失败。
'''
Private InstallSyncLock As New Object
'''
+ ''' 如果 OptiFine 与 Forge 同时复制原版 Jar,就会导致复制文件时冲突。
+ '''
+ Private VanillaSyncLock As New Object
+ '''
''' 最高的 Minecraft 大版本号,-1 代表尚未获取。
'''
Public McVersionHighest As Integer = -1
@@ -548,16 +552,18 @@ Public Module ModDownloadLib
If Task.IsAborted Then Exit Sub
'拷贝原版文件
If Not IsCustomFolder Then Exit Sub
- Dim ClientName As String = New DirectoryInfo(ClientDownloadLoader.Input).Name
- Directory.CreateDirectory(McFolder & "versions\" & DownloadInfo.Inherit)
- If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".json") Then
- CopyFile(ClientDownloadLoader.Input & ClientName & ".json",
+ SyncLock VanillaSyncLock
+ Dim ClientName As String = New DirectoryInfo(ClientDownloadLoader.Input).Name
+ Directory.CreateDirectory(McFolder & "versions\" & DownloadInfo.Inherit)
+ If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".json") Then
+ CopyFile(ClientDownloadLoader.Input & ClientName & ".json",
McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".json")
- End If
- If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".jar") Then
- CopyFile(ClientDownloadLoader.Input & ClientName & ".jar",
- McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".jar")
- End If
+ End If
+ If Not File.Exists(McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".jar") Then
+ CopyFile(ClientDownloadLoader.Input & ClientName & ".jar",
+ McFolder & "versions\" & DownloadInfo.Inherit & "\" & DownloadInfo.Inherit & ".jar")
+ End If
+ End SyncLock
End Sub) With {.ProgressWeight = 0.1, .Show = False})
'安装(新旧方式均需要原版 Jar 和 Json)
@@ -1379,14 +1385,16 @@ Public Module ModDownloadLib
If Task.IsAborted Then Exit Sub
'拷贝原版文件
If Not IsCustomFolder Then Exit Sub
- Dim ClientName As String = New DirectoryInfo(ClientDownloadLoader.Input).Name
- Directory.CreateDirectory(McFolder & "versions\" & Inherit)
- If Not File.Exists(McFolder & "versions\" & Inherit & "\" & Inherit & ".json") Then
- CopyFile(ClientDownloadLoader.Input & ClientName & ".json", McFolder & "versions\" & Inherit & "\" & Inherit & ".json")
- End If
- If Not File.Exists(McFolder & "versions\" & Inherit & "\" & Inherit & ".jar") Then
- CopyFile(ClientDownloadLoader.Input & ClientName & ".jar", McFolder & "versions\" & Inherit & "\" & Inherit & ".jar")
- End If
+ SyncLock VanillaSyncLock
+ Dim ClientName As String = New DirectoryInfo(ClientDownloadLoader.Input).Name
+ Directory.CreateDirectory(McFolder & "versions\" & Inherit)
+ If Not File.Exists(McFolder & "versions\" & Inherit & "\" & Inherit & ".json") Then
+ CopyFile(ClientDownloadLoader.Input & ClientName & ".json", McFolder & "versions\" & Inherit & "\" & Inherit & ".json")
+ End If
+ If Not File.Exists(McFolder & "versions\" & Inherit & "\" & Inherit & ".jar") Then
+ CopyFile(ClientDownloadLoader.Input & ClientName & ".jar", McFolder & "versions\" & Inherit & "\" & Inherit & ".jar")
+ End If
+ End SyncLock
#End Region
End Sub) With {.ProgressWeight = 0.1, .Show = False})
Loaders.Add(New LoaderTask(Of Boolean, Boolean)("安装 Mod 加载器(方式 A)",
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb
index 4b6b4c4..6cbaffa 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb
@@ -41,7 +41,7 @@
End Sub
'保存皮肤
- Private Sub BtnSkinSave_Click(sender As Object, e As RoutedEventArgs) Handles BtnSkinSave.Click
+ Public Sub BtnSkinSave_Click() Handles BtnSkinSave.Click
Save(Loader)
End Sub
Public Shared Sub Save(Loader As LoaderTask(Of EqualableList(Of String), String))
@@ -121,7 +121,7 @@
End Sub
'刷新缓存
- Private Sub RefreshClick(sender As MyMenuItem, e As EventArgs) Handles BtnSkinRefresh.Click
+ Public Sub RefreshClick() Handles BtnSkinRefresh.Click
RefreshCache(Loader)
End Sub
'''
@@ -140,21 +140,20 @@
Else
RunInThread(Sub()
Try
- Hint("正在刷新皮肤……")
+ Hint("正在刷新头像……")
'清空缓存
Log("[Skin] 正在清空皮肤缓存")
If Directory.Exists(PathTemp & "Cache\Skin") Then DeleteDirectory(PathTemp & "Cache\Skin")
If Directory.Exists(PathTemp & "Cache\Uuid") Then DeleteDirectory(PathTemp & "Cache\Uuid")
- IniClearCache(PathTemp & "Cache\Skin\IndexMojang.ini")
IniClearCache(PathTemp & "Cache\Skin\IndexMs.ini")
IniClearCache(PathTemp & "Cache\Skin\IndexNide.ini")
IniClearCache(PathTemp & "Cache\Skin\IndexAuth.ini")
IniClearCache(PathTemp & "Cache\Uuid\Mojang.ini")
'刷新控件
- For Each SkinLoader In If(sender IsNot Nothing, {sender}, {PageLaunchLeft.SkinMojang, PageLaunchLeft.SkinLegacy, PageLaunchLeft.SkinMs})
+ For Each SkinLoader In If(sender IsNot Nothing, {sender}, {PageLaunchLeft.SkinLegacy, PageLaunchLeft.SkinMs})
SkinLoader.WaitForExit(IsForceRestart:=True)
Next
- Hint("已刷新皮肤!", HintType.Finish)
+ Hint("已刷新头像!", HintType.Finish)
Catch ex As Exception
Log(ex, "刷新皮肤缓存失败", LogLevel.Msgbox)
End Try
@@ -165,15 +164,14 @@
''' 在更换正版皮肤后,刷新正版皮肤。
'''
''' 新的正版皮肤完整地址。
- Public Shared Sub ReloadCache(SkinAddress As String, IsMsLogin As Boolean)
+ Public Shared Sub ReloadCache(SkinAddress As String)
RunInThread(Sub()
Try
'更新缓存
- Dim LoginType As String = If(IsMsLogin, "Ms", "Mojang")
- WriteIni(PathTemp & "Cache\Skin\Index" & LoginType & ".ini", Setup.Get("Cache" & LoginType & "Uuid"), SkinAddress)
- Log(String.Format("[Skin] 已写入皮肤地址缓存 {0} -> {1}", Setup.Get("Cache" & LoginType & "Uuid"), SkinAddress))
+ WriteIni(PathTemp & "Cache\Skin\IndexMs.ini", Setup.Get("CacheMsUuid"), SkinAddress)
+ Log(String.Format("[Skin] 已写入皮肤地址缓存 {0} -> {1}", Setup.Get("CacheMsUuid"), SkinAddress))
'刷新控件
- For Each SkinLoader In If(IsMsLogin, {PageLaunchLeft.SkinMs, PageLaunchLeft.SkinLegacy}, {PageLaunchLeft.SkinMojang, PageLaunchLeft.SkinLegacy})
+ For Each SkinLoader In {PageLaunchLeft.SkinMs, PageLaunchLeft.SkinLegacy}
SkinLoader.WaitForExit(IsForceRestart:=True)
Next
'完成提示
@@ -198,7 +196,7 @@
End Set
End Property
Private IsChanging As Boolean = False
- Private Sub BtnSkinCape_Click(sender As Object, e As RoutedEventArgs) Handles BtnSkinCape.Click
+ Public Sub BtnSkinCape_Click() Handles BtnSkinCape.Click
'检查条件,获取新披风
If IsChanging Then
Hint("正在更改披风中,请稍候!")
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml
index 4a36097..488a381 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml
@@ -33,7 +33,7 @@
-
+
@@ -48,12 +48,10 @@
-
-
+
+ LogoScale="0.85" Logo="M533.293176 788.841412a60.235294 60.235294 0 1 1 85.202824 85.202823l-42.616471 42.586353c-129.355294 129.385412-339.124706 129.385412-468.510117 0-129.385412-129.385412-129.385412-339.124706 0-468.510117l42.586353-42.616471a60.235294 60.235294 0 1 1 85.202823 85.202824l-42.61647 42.586352a210.823529 210.823529 0 1 0 298.164706 298.164706l42.586352-42.61647z m255.548236-255.548236l42.61647-42.586352a210.823529 210.823529 0 1 0-298.164706-298.164706l-42.586352 42.61647a60.235294 60.235294 0 1 1-85.202824-85.202823l42.616471-42.586353c129.355294-129.385412 339.124706-129.385412 468.510117 0 129.385412 129.385412 129.385412 339.124706 0 468.510117l-42.586353 42.616471a60.235294 60.235294 0 1 1-85.202823-85.202824zM192.542118 192.542118a60.235294 60.235294 0 0 1 85.202823 0l553.712941 553.712941a60.235294 60.235294 0 0 1-85.202823 85.202823L192.542118 277.744941a60.235294 60.235294 0 0 1 0-85.202823z" />
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
index 705c102..f692003 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
@@ -67,7 +67,7 @@
'改变页面
Dim LoginType As McLoginType = Setup.Get("LoginType")
- If LoginType = McLoginType.Legacy OrElse LoginType = McLoginType.Mojang OrElse LoginType = McLoginType.Ms Then CType(FindName("RadioLoginType" & LoginType), MyRadioButton).Checked = True
+ If LoginType = McLoginType.Legacy OrElse LoginType = McLoginType.Ms Then CType(FindName("RadioLoginType" & LoginType), MyRadioButton).Checked = True
RefreshPage(False, False)
AniControlEnabled -= 1
@@ -117,8 +117,6 @@
Private Enum PageType
None
- Mojang
- MojangSkin
Legacy
Nide
NideSkin
@@ -134,12 +132,6 @@
Private Function PageGet(Type As PageType)
Select Case Type
- Case PageType.Mojang
- If IsNothing(FrmLoginMojang) Then FrmLoginMojang = New PageLoginMojang
- Return FrmLoginMojang
- Case PageType.MojangSkin
- If IsNothing(FrmLoginMojangSkin) Then FrmLoginMojangSkin = New PageLoginMojangSkin
- Return FrmLoginMojangSkin
Case PageType.Legacy
If IsNothing(FrmLoginLegacy) Then FrmLoginLegacy = New PageLoginLegacy
Return FrmLoginLegacy
@@ -171,7 +163,7 @@
''' 新页面的种类。
''' 是否显示动画。
Private Function PageChange(Type As PageType, Anim As Boolean)
- Dim PageNew As Object = FrmLoginMojang '初始化一个东西,避免在执行时出现异常导致雪崩
+ Dim PageNew As Object = FrmLoginMs '初始化一个东西,避免在执行时出现异常导致雪崩
Try
#Region "确定更改的页面实例并实例化"
@@ -232,14 +224,7 @@
Select Case LoginPageType
Case 0 '正版或离线
UnknownType:
- If RadioLoginType1.Checked Then
- If Setup.Get("CacheMojangAccess") = "" Then
- Type = PageType.Mojang
- Else
- Type = PageType.MojangSkin
- End If
- Setup.Set("LoginType", McLoginType.Mojang)
- ElseIf RadioLoginType5.Checked Then
+ If RadioLoginType5.Checked Then
If Setup.Get("CacheMsAccess") = "" Then
Type = PageType.Ms
Else
@@ -252,28 +237,19 @@ UnknownType:
End If
PanType.Visibility = Visibility.Visible
PanTypeOne.Visibility = Visibility.Collapsed
- RadioLoginType1.Visibility = Visibility.Visible
RadioLoginType5.Visibility = Visibility.Visible
RadioLoginType0.Visibility = Visibility.Visible
Case 1 '仅正版
- If RadioLoginType1.Checked Then
- If Setup.Get("CacheMojangAccess") = "" Then
- Type = PageType.Mojang
- Else
- Type = PageType.MojangSkin
- End If
- Setup.Set("LoginType", McLoginType.Mojang)
+ If Setup.Get("CacheMsAccess") = "" Then
+ Type = PageType.Ms
Else
- If Setup.Get("CacheMsAccess") = "" Then
- Type = PageType.Ms
- Else
- Type = PageType.MsSkin
- End If
- Setup.Set("LoginType", McLoginType.Ms)
+ Type = PageType.MsSkin
End If
- PanType.Visibility = Visibility.Visible
- PanTypeOne.Visibility = Visibility.Collapsed
- RadioLoginType1.Visibility = Visibility.Visible
+ Setup.Set("LoginType", McLoginType.Ms)
+ PanType.Visibility = Visibility.Collapsed
+ PanTypeOne.Visibility = Visibility.Visible
+ PathTypeOne.Data = (New GeometryConverter).ConvertFromString(Logo.IconButtonMs)
+ LabTypeOne.Text = "正版登录"
RadioLoginType5.Visibility = Visibility.Visible
RadioLoginType0.Visibility = Visibility.Collapsed
Case 2 '仅离线
@@ -316,7 +292,7 @@ UnknownType:
Dim Control As MyRadioButton = FindName("RadioLoginType" & Setup.Get("LoginType"))
If Control IsNot Nothing Then Control.Checked = True
End Sub
- Private Sub RadioLoginType_Change(sender As Object, raiseByMouse As Boolean) Handles RadioLoginType0.Check, RadioLoginType1.Check, RadioLoginType5.Check
+ Private Sub RadioLoginType_Change(sender As Object, raiseByMouse As Boolean) Handles RadioLoginType0.Check, RadioLoginType5.Check
If raiseByMouse Then RefreshPage(True, True)
End Sub
@@ -324,54 +300,6 @@ UnknownType:
#Region "皮肤"
- 'Mojang 正版皮肤
- Public Shared SkinMojang As New LoaderTask(Of EqualableList(Of String), String)("Loader Skin Mojang", AddressOf SkinMojangLoad, AddressOf SkinMojangInput, ThreadPriority.AboveNormal)
- Private Shared Function SkinMojangInput() As EqualableList(Of String)
- '获取名称
- Return New EqualableList(Of String) From {Setup.Get("CacheMojangName"), Setup.Get("CacheMojangUuid")}
- End Function
- Private Shared Sub SkinMojangLoad(Data As LoaderTask(Of EqualableList(Of String), String))
- '清空已有皮肤
- '如果在输入时清空皮肤,若输入内容一样则不会执行 Load 方法,导致皮肤不被加载
- RunInUi(Sub() If FrmLoginMojangSkin IsNot Nothing AndAlso FrmLoginMojangSkin.Skin IsNot Nothing Then FrmLoginMojangSkin.Skin.Clear())
- '获取 Url
- Dim UserName As String = Data.Input(0)
- Dim Uuid As String = Data.Input(1)
- If UserName = "" Then
- Data.Output = PathImage & "Skins/" & McSkinSex(McLoginLegacyUuid(UserName)) & ".png"
- Log("[Minecraft] 获取正版皮肤失败,ID 为空")
- GoTo Finish
- End If
- Try
- Dim Result As String = McSkinGetAddress(Uuid, "Mojang")
- If Data.IsAborted Then Throw New ThreadInterruptedException("当前任务已取消:" & UserName)
- Result = McSkinDownload(Result)
- If Data.IsAborted Then Throw New ThreadInterruptedException("当前任务已取消:" & UserName)
- Data.Output = Result
- Catch ex As Exception
- If ex.GetType.Name = "ThreadInterruptedException" Then
- Data.Output = ""
- Exit Sub
- ElseIf GetExceptionSummary(ex).Contains("429") Then
- Data.Output = PathImage & "Skins/" & McSkinSex(McLoginLegacyUuid(UserName)) & ".png"
- Log("[Minecraft] 获取正版皮肤失败(" & UserName & "):获取皮肤太过频繁,请 5 分钟后再试!", LogLevel.Hint)
- ElseIf GetExceptionSummary(ex).Contains("未设置自定义皮肤") Then
- Data.Output = PathImage & "Skins/" & McSkinSex(McLoginLegacyUuid(UserName)) & ".png"
- Log("[Minecraft] 用户未设置自定义皮肤,跳过皮肤加载")
- Else
- Data.Output = PathImage & "Skins/" & McSkinSex(McLoginLegacyUuid(UserName)) & ".png"
- Log(ex, "获取正版皮肤失败(" & UserName & ")", LogLevel.Hint)
- End If
- End Try
-Finish:
- '刷新显示
- If FrmLoginMojangSkin IsNot Nothing Then
- RunInUi(AddressOf FrmLoginMojangSkin.Skin.Load)
- ElseIf Not Data.IsAborted Then '如果已经中断,Input 也被清空,就不会再次刷新
- Data.Input = Nothing '清空输入,因为皮肤实际上没有被渲染,如果不清空切换到页面的 Start 会由于输入相同而不渲染
- End If
- End Sub
-
'微软正版皮肤
Public Shared SkinMs As New LoaderTask(Of EqualableList(Of String), String)("Loader Skin Ms", AddressOf SkinMsLoad, AddressOf SkinMsInput, ThreadPriority.AboveNormal)
Private Shared Function SkinMsInput() As EqualableList(Of String)
@@ -592,7 +520,7 @@ Finish:
'全部皮肤加载器
'需要放在其中元素的后面,否则会因为它提前被加载而莫名其妙变成 Nothing
- Public Shared SkinLoaders As New List(Of LoaderTask(Of EqualableList(Of String), String)) From {SkinMojang, SkinMs, SkinLegacy, SkinNide, SkinAuth}
+ Public Shared SkinLoaders As New List(Of LoaderTask(Of EqualableList(Of String), String)) From {SkinMs, SkinLegacy, SkinNide, SkinAuth}
#End Region
@@ -713,10 +641,8 @@ ExitRefresh:
Else
LabLaunchingMethod.Text = "离线登录"
End If
- Case McLoginType.Mojang
- LabLaunchingMethod.Text = "Mojang 正版登录"
Case McLoginType.Ms
- LabLaunchingMethod.Text = "微软正版登录"
+ LabLaunchingMethod.Text = "正版登录"
Case McLoginType.Nide
LabLaunchingMethod.Text = "统一通行证"
Case McLoginType.Auth
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
index 11b9ba3..10c0ad2 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
@@ -99,10 +99,4 @@
Init()
End Sub
- Public Shared Sub StartMigration()
- MyMsgBox("在迁移过程中,你可能需要设置你的档案信息,此时请注意让年龄大于 18 岁,否则可能导致无法登录!" & vbCrLf &
- "在迁移完成后,请在上方选择 微软 登录方式而非 Mojang。", "迁移提示", "继续", ForceWait:=True)
- OpenWebsite("https://www.minecraft.net/zh-hans/account-security")
- End Sub
-
End Class
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojang.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojang.xaml
deleted file mode 100644
index 6e9dc04..0000000
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojang.xaml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojang.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojang.xaml.vb
deleted file mode 100644
index 7ee4d1f..0000000
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojang.xaml.vb
+++ /dev/null
@@ -1,84 +0,0 @@
-Public Class PageLoginMojang
-
- Private IsFirstLoad As Boolean = True
- '''
- ''' 刷新页面显示的所有信息。
- '''
- Public Sub Reload(KeepInput As Boolean)
- '记住密码
- CheckRemember.Checked = Setup.Get("LoginRemember")
- If KeepInput AndAlso Not IsFirstLoad Then '避免第一次就以 KeepInput 的方式加载,导致文本框里没东西
- '保留输入,只刷新下拉框列表
- Dim Input As String = ComboName.Text
- ComboName.ItemsSource = If(Setup.Get("LoginMojangEmail") = "", Nothing, Setup.Get("LoginMojangEmail").ToString.Split("¨"))
- ComboName.Text = Input
- Else
- '不保留输入,刷新列表后自动选择第一项
- If Setup.Get("LoginMojangEmail") = "" Then
- ComboName.ItemsSource = Nothing
- Else
- ComboName.ItemsSource = Setup.Get("LoginMojangEmail").ToString.Split("¨")
- ComboName.Text = Setup.Get("LoginMojangEmail").ToString.Split("¨")(0)
- If Setup.Get("LoginRemember") Then TextPass.Password = Setup.Get("LoginMojangPass").ToString.Split("¨")(0).Trim
- End If
- End If
- IsFirstLoad = False
- End Sub
- '''
- ''' 获取当前页面的登录信息。
- '''
- Public Shared Function GetLoginData() As McLoginServer
- If FrmLoginMojang Is Nothing Then
- Return New McLoginServer(McLoginType.Mojang) With {.BaseUrl = "https://authserver.mojang.com", .Token = "Mojang", .UserName = "", .Password = "", .Type = McLoginType.Mojang, .Description = "Mojang 正版"}
- Else
- Return New McLoginServer(McLoginType.Mojang) With {.BaseUrl = "https://authserver.mojang.com", .Token = "Mojang", .UserName = If(FrmLoginMojang.ComboName.Text, "").Replace("¨", "").Trim(), .Password = If(FrmLoginMojang.TextPass.Password, "").Replace("¨", "").Trim(), .Type = McLoginType.Mojang, .Description = "Mojang 正版"}
- End If
- End Function
- '''
- ''' 当前页面的登录信息是否有效。
- '''
- Public Shared Function IsVaild(LoginData As McLoginServer) As String
- If LoginData.UserName = "" Then Return "邮箱不能为空!"
- If Not LoginData.UserName.Contains("@") Then Return "邮箱格式错误!"
- If LoginData.Password = "" Then Return "密码不能为空!"
- Return ""
- End Function
- Public Function IsVaild() As String
- Return IsVaild(GetLoginData())
- End Function
-
- '保存输入信息
- Private Sub ComboMojangName_TextChanged(sender As Object, e As TextChangedEventArgs) Handles ComboName.TextChanged
- If sender.Text = "" Then TextPass.Password = ""
- If AniControlEnabled = 0 Then Setup.Set("CacheMojangAccess", "") '迫使其不进行 Validate
- End Sub
- Private Sub TextMojangPass_PasswordChanged(sender As Object, e As RoutedEventArgs) Handles TextPass.PasswordChanged
- If AniControlEnabled = 0 Then Setup.Set("CacheMojangAccess", "")
- End Sub
- Private Sub ComboMojangName_SelectionChanged(sender As MyComboBox, e As SelectionChangedEventArgs) Handles ComboName.SelectionChanged
- If sender.SelectedIndex = -1 OrElse Not Setup.Get("LoginRemember") Then
- TextPass.Password = ""
- Else
- TextPass.Password = Setup.Get("LoginMojangPass").ToString.Split("¨")(sender.SelectedIndex).Trim
- End If
- End Sub
- Private Sub CheckRememberChange(sender As MyCheckBox, e As Object) Handles CheckRemember.Change
- If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
- End Sub
-
- '链接处理
- Private Sub InputChanged() Handles ComboName.TextChanged, TextPass.PasswordChanged
- BtnLink.Content = If(ComboName.Text = "" AndAlso TextPass.Password = "", "购买正版", "找回密码")
- End Sub
- Private Sub BtnMojang_Click(sender As Object, e As EventArgs) Handles BtnLink.Click
- If BtnLink.Content = "购买正版" Then
- OpenWebsite("https://www.minecraft.net/zh-hans/store/checkout/minecraft-java-bedrock-edition-pc")
- Else
- OpenWebsite("https://www.minecraft.net/zh-hans/password/forgot")
- End If
- End Sub
- Private Sub HintMigration_Click() Handles HintMigration.MouseLeftButtonUp
- PageLaunchRight.StartMigration()
- End Sub
-
-End Class
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojangSkin.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojangSkin.xaml
deleted file mode 100644
index 2eb038f..0000000
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojangSkin.xaml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojangSkin.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojangSkin.xaml.vb
deleted file mode 100644
index b1539c0..0000000
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMojangSkin.xaml.vb
+++ /dev/null
@@ -1,117 +0,0 @@
-Public Class PageLoginMojangSkin
-
- Public Sub New()
- InitializeComponent()
- Skin.Loader = PageLaunchLeft.SkinMojang
- End Sub
- Private Sub PageLoginLegacy_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
- Skin.Loader.Start()
- End Sub
-
- '''
- ''' 刷新页面显示的所有信息。
- '''
- Public Sub Reload(KeepInput As Boolean)
- TextName.Text = Setup.Get("CacheMojangName")
- TextEmail.Text = Setup.Get("CacheMojangUsername")
- TextEmail.Visibility = If(Setup.Get("UiLauncherEmail"), Visibility.Collapsed, Visibility.Visible)
- '皮肤在 Loaded 加载
- End Sub
- '''
- ''' 获取当前页面的登录信息。
- '''
- Public Shared Function GetLoginData() As McLoginServer
- Return New McLoginServer(McLoginType.Mojang) With {.BaseUrl = "https://authserver.mojang.com", .Token = "Mojang", .UserName = Setup.Get("CacheMojangUsername"), .Password = Setup.Get("CacheMojangPass"), .Description = "Mojang 正版", .Type = McLoginType.Mojang}
- End Function
-
- Private Sub PageLoginMojangSkin_MouseEnter(sender As Object, e As MouseEventArgs) Handles PanData.MouseEnter
- AniStart({
- AaOpacity(BtnEdit, 1 - BtnEdit.Opacity, 80),
- AaHeight(BtnEdit, 25.5 - BtnEdit.Height, 140,, New AniEaseOutFluent),
- AaHeight(BtnEdit, -1.5, 50, 140, New AniEaseInFluent),
- AaOpacity(BtnExit, 1 - BtnExit.Opacity, 80),
- AaHeight(BtnExit, 25.5 - BtnExit.Height, 140,, New AniEaseOutFluent),
- AaHeight(BtnExit, -1.5, 50, 140, New AniEaseInFluent)
- }, "PageLoginMojangSkin Button")
- End Sub
- Private Sub PageLoginMojangSkin_MouseLeave(sender As Object, e As MouseEventArgs) Handles PanData.MouseLeave
- AniStart({
- AaOpacity(BtnEdit, -BtnEdit.Opacity, 120,, New AniEaseOutFluent),
- AaHeight(BtnEdit, 14 - BtnEdit.Height, 120,, New AniEaseInFluent),
- AaOpacity(BtnExit, -BtnExit.Opacity, 120,, New AniEaseOutFluent),
- AaHeight(BtnExit, 14 - BtnExit.Height, 120,, New AniEaseInFluent)
- }, "PageLoginMojangSkin Button")
- End Sub
-
- Private Sub BtnEdit_Click(sender As Object, e As EventArgs) Handles BtnEdit.Click
- Select Case MyMsgBox("你希望通过哪种途径更改密码?" & vbCrLf & "首次通过个人档案修改密码可能需要验证你的密保问题。", "更改密码", "个人档案", "密保邮箱", "取消")
- Case 1
- '个人档案
- OpenWebsite("https://www.minecraft.net/zh-hans/msaprofile")
- Case 2
- '密保邮箱
- OpenWebsite("https://account.mojang.com/password")
- Case 3
- '取消
- End Select
- End Sub
- Private Sub BtnExit_Click() Handles BtnExit.Click
- Setup.Set("CacheMojangAccess", "")
- FrmLaunchLeft.RefreshPage(False, True)
- End Sub
-
- Private Sub Skin_Click(sender As Object, e As MouseButtonEventArgs) Handles Skin.Click
- If McLoginLoader.State = LoadState.Failed Then
- Hint("登录失败,无法更改皮肤!", HintType.Critical)
- Exit Sub
- End If
- Dim SkinInfo As McSkinInfo = McSkinSelect()
- If Not SkinInfo.IsVaild Then Exit Sub
- Hint("正在更改皮肤……")
- RunInNewThread(Async Sub()
- Try
-
- If McLoginLoader.State = LoadState.Loading Then McLoginLoader.WaitForExit() '等待登录结束
- Dim AccessToken As String = Setup.Get("CacheMojangAccess")
- Dim Uuid As String = Setup.Get("CacheMojangUuid")
-
- Dim Client As New Net.Http.HttpClient With {.Timeout = New TimeSpan(0, 0, 10)}
- Client.DefaultRequestHeaders.Authorization = New Net.Http.Headers.AuthenticationHeaderValue("Bearer", AccessToken)
- Client.DefaultRequestHeaders.Accept.Add(New Net.Http.Headers.MediaTypeWithQualityHeaderValue("*/*"))
- Client.DefaultRequestHeaders.UserAgent.Add(New Net.Http.Headers.ProductInfoHeaderValue("MojangSharp", "0.1"))
- Dim Contents As New Net.Http.MultipartFormDataContent From {
- {New Net.Http.StringContent(If(SkinInfo.IsSlim, "slim", "")), "model"},
- {New Net.Http.ByteArrayContent(File.ReadAllBytes(SkinInfo.LocalFile)), "file", GetFileNameFromPath(SkinInfo.LocalFile)}
- }
- Dim Result As String = Await (Await Client.PutAsync(New Uri("https://api.mojang.com/user/profile/" & Uuid & "/skin"), Contents)).Content.ReadAsStringAsync
- If RegexCheck(Result, "^[0-9a-f]{59,64}$") Then
- MySkin.ReloadCache("http://textures.minecraft.net/texture/" & Result, False)
- ElseIf Result.ToLower.Contains("ip not secured") Then
- If MyMsgBox("首次操作需要在官网验证密保问题。" & vbCrLf & "验证完成后,你即可使用 PCL 更改皮肤,且无需再次验证。", "验证密保问题", "开始验证", "取消") = 1 Then
- OpenWebsite("https://www.minecraft.net/zh-hans/profile/skin")
- End If
- ElseIf Result.Contains("request requires user authentication") Then
- Hint("正在重新登录,请稍后再次尝试更改皮肤!")
- RunInUi(Sub()
- BtnExit_Click()
- If String.IsNullOrEmpty(McLoginAble()) Then McLoginLoader.Start()
- End Sub)
- ElseIf Result.Contains("""errorMessage""") Then
- Hint("更改皮肤失败:" & GetJson(Result)("errorMessage"), HintType.Critical)
- Else
- Throw New Exception("未知错误(" & Result & ")")
- End If
- Catch ex As Exception
- If ex.GetType.Equals(GetType(Tasks.TaskCanceledException)) Then
- Hint("更改皮肤失败:与 Mojang 皮肤服务器的连接超时,请检查你的网络是否通畅!", HintType.Critical)
- Else
- Log(ex, "更改皮肤失败", LogLevel.Hint)
- End If
- End Try
- End Sub, "Mojang Skin Upload")
- End Sub
- Private Sub HintMigration_Click() Handles HintMigration.MouseLeftButtonUp
- PageLaunchRight.StartMigration()
- End Sub
-
-End Class
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml
index 86b4386..00c01a2 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml
@@ -6,11 +6,15 @@
xmlns:local="clr-namespace:PCL"
mc:Ignorable="d" d:DesignWidth="302.4" Margin="0,0,0,-2">
-
-
-
+
+
+
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
index e3d0b79..fb52af4 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
@@ -16,7 +16,7 @@
'''
Public Shared Function IsVaild(LoginData As McLoginMs) As String
If LoginData.OAuthRefreshToken = "" Then
- Return "请在登录账号后再继续!"
+ Return "请在登录账号后再启动游戏!"
Else
Return ""
End If
@@ -61,5 +61,10 @@
End Try
End Sub, "Ms Login")
End Sub
+ '账号迁移入口
+ Private Sub BtnMigration_Click(sender As Object, e As EventArgs) Handles BtnMigration.Click
+ MyMsgBox("在迁移过程中,你可能需要设置你的档案信息,此时请注意让年龄大于 18 岁,否则可能导致无法登录!", "迁移提示", "继续", ForceWait:=True)
+ OpenWebsite("https://www.minecraft.net/zh-hans/account-security")
+ End Sub
End Class
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml
index 35a0521..7c24511 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml
@@ -4,21 +4,44 @@
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="297.6" Margin="0,19,0,5">
-
-
-
-
-
-
+ mc:Ignorable="d" d:DesignWidth="297.6" Margin="0,60,0,5">
+
-
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml.vb
index bac4073..a70bbf3 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml.vb
@@ -26,28 +26,29 @@
End If
End Function
- Private Sub PageLoginMsSkin_MouseEnter(sender As Object, e As MouseEventArgs) Handles PanData.MouseEnter
- AniStart({
- AaOpacity(BtnEdit, 1 - BtnEdit.Opacity, 80),
- AaHeight(BtnEdit, 25.5 - BtnEdit.Height, 140,, New AniEaseOutFluent),
- AaHeight(BtnEdit, -1.5, 50, 140, New AniEaseInFluent),
- AaOpacity(BtnExit, 1 - BtnExit.Opacity, 80),
- AaHeight(BtnExit, 25.5 - BtnExit.Height, 140,, New AniEaseOutFluent),
- AaHeight(BtnExit, -1.5, 50, 140, New AniEaseInFluent)
- }, "PageLoginMsSkin Button")
+#Region "下边栏其他内容"
+
+ '显示/隐藏控制
+ Private Sub ShowPanel(sender As Object, e As MouseEventArgs) Handles PanData.MouseEnter
+ AniStart(AaOpacity(PanButtons, 1 - PanButtons.Opacity, 120), "PageLoginMsSkin Button")
End Sub
- Private Sub PageLoginMsSkin_MouseLeave(sender As Object, e As MouseEventArgs) Handles PanData.MouseLeave
- AniStart({
- AaOpacity(BtnEdit, -BtnEdit.Opacity, 120,, New AniEaseOutFluent),
- AaHeight(BtnEdit, 14 - BtnEdit.Height, 120,, New AniEaseInFluent),
- AaOpacity(BtnExit, -BtnExit.Opacity, 120,, New AniEaseOutFluent),
- AaHeight(BtnExit, 14 - BtnExit.Height, 120,, New AniEaseInFluent)
- }, "PageLoginMsSkin Button")
+ Public Sub HidePanel() Handles PanData.MouseLeave
+ If BtnEdit.ContextMenu.IsOpen OrElse BtnSkin.ContextMenu.IsOpen OrElse PanData.IsMouseOver Then Exit Sub
+ AniStart(AaOpacity(PanButtons, -PanButtons.Opacity, 120), "PageLoginMsSkin Button")
End Sub
+ '修改账号信息
Private Sub BtnEdit_Click(sender As Object, e As EventArgs) Handles BtnEdit.Click
- OpenWebsite("https://account.microsoft.com/security")
+ BtnEdit.ContextMenu.IsOpen = True
End Sub
+ Public Sub BtnEditPassword_Click(sender As Object, e As RoutedEventArgs)
+ OpenWebsite("https://account.live.com/password/Change")
+ End Sub
+ Public Sub BtnEditName_Click(sender As Object, e As RoutedEventArgs)
+ OpenWebsite("https://www.minecraft.net/en-us/msaprofile/mygames/editprofile")
+ End Sub
+
+ '退出登录
Private Sub BtnExit_Click() Handles BtnExit.Click
Setup.Set("CacheMsOAuthRefresh", "")
Setup.Set("CacheMsAccess", "")
@@ -58,8 +59,18 @@
FrmLaunchLeft.RefreshPage(False, True)
End Sub
+#End Region
+
+#Region "皮肤/披风"
+
+ '展开
+ Private Sub BtnSkin_Click(sender As Object, e As RoutedEventArgs) Handles BtnSkin.Click
+ BtnSkin.ContextMenu.IsOpen = True
+ End Sub
+
+ '修改皮肤
Private IsChanging As Boolean = False
- Private Sub Skin_Click(sender As Object, e As MouseButtonEventArgs) Handles Skin.Click
+ Public Sub BtnSkinEdit_Click(sender As Object, e As RoutedEventArgs)
'检查条件,获取新皮肤
If IsChanging Then
Hint("正在更改皮肤中,请稍候!")
@@ -103,7 +114,7 @@ Retry:
Dim ResultJson As JObject = GetJson(Result)
For Each Skin As JObject In ResultJson("skins")
If Skin("state").ToString = "ACTIVE" Then
- MySkin.ReloadCache(Skin("url"), True)
+ MySkin.ReloadCache(Skin("url"))
Exit Sub
End If
Next
@@ -120,4 +131,21 @@ Retry:
End Sub, "Ms Skin Upload")
End Sub
+ '保存皮肤
+ Public Sub BtnSkinSave_Click(sender As Object, e As RoutedEventArgs)
+ Skin.BtnSkinSave_Click()
+ End Sub
+
+ '刷新头像
+ Public Sub BtnSkinRefresh_Click(sender As Object, e As RoutedEventArgs)
+ Skin.RefreshClick()
+ End Sub
+
+ '修改披风
+ Public Sub BtnSkinCape_Click(sender As Object, e As RoutedEventArgs)
+ Skin.BtnSkinCape_Click()
+ End Sub
+
+#End Region
+
End Class
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionLeft.xaml.vb
index d360428..4059675 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionLeft.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionLeft.xaml.vb
@@ -7,11 +7,11 @@
Public Sub RefreshModDisabled() Handles Me.Loaded
If Version IsNot Nothing AndAlso Version.Modable Then
- ItemMod.Height = 36
- ItemModDisabled.Height = 0
+ ItemMod.Visibility = Visibility.Visible
+ ItemModDisabled.Visibility = Visibility.Collapsed
Else
- ItemMod.Height = 0
- ItemModDisabled.Height = 36
+ ItemMod.Visibility = Visibility.Collapsed
+ ItemModDisabled.Visibility = Visibility.Visible
End If
End Sub
diff --git a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
index 9e2f1bb..ac4d2e2 100644
--- a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
+++ b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
@@ -313,12 +313,6 @@
PageLoginLegacy.xaml
-
- PageLoginMojang.xaml
-
-
- PageLoginMojangSkin.xaml
-
PageSelectRight.xaml
@@ -570,14 +564,6 @@
Designer
MSBuild:Compile
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
MSBuild:Compile
Designer