Skip to content

Commit ac5c8ba

Browse files
committed
refactor(PageLoginMsSkin): 使用重置皮肤 API
1 parent 300b429 commit ac5c8ba

File tree

2 files changed

+53
-14
lines changed

2 files changed

+53
-14
lines changed

Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<local:MyIconButton.ContextMenu>
2424
<ContextMenu Closed="HidePanel" HorizontalOffset="10" VerticalOffset="18">
2525
<local:MyMenuItem Click="BtnSkinEdit_Click" Header="修改皮肤"/>
26-
<local:MyMenuItem Click="BtnSkinReset_Click" Header="恢复默认皮肤"/>
26+
<local:MyMenuItem Click="BtnSkinReset_Click" Header="重置皮肤"/>
2727
<local:MyMenuItem Click="BtnSkinSave_Click" Header="保存皮肤"/>
2828
<local:MyMenuItem Click="BtnSkinRefresh_Click" Header="刷新头像"/>
2929
<Separator />

Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMsSkin.xaml.vb

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070

7171
'修改皮肤
7272
Private IsChanging As Boolean = False
73-
Private ResetSkin As Boolean = False
7473
Public Sub BtnSkinEdit_Click(sender As Object, e As RoutedEventArgs)
7574
'检查条件,获取新皮肤
7675
If IsChanging Then
@@ -81,15 +80,7 @@
8180
Hint("登录失败,无法更改皮肤!", HintType.Critical)
8281
Return
8382
End If
84-
Dim SkinInfo As McSkinInfo
85-
If ResetSkin
86-
Dim ImageSavePath As String = RequestTaskTempFolder() & "Steve.png"
87-
Dim Image = New MyBitmap(PathImage & "Skins\Steve.png")
88-
Image.Save(ImageSavePath)
89-
SkinInfo = New McSkinInfo() With {.IsSlim = False, .LocalFile = ImageSavePath, .IsVaild = True}
90-
Else
91-
SkinInfo = McSkinSelect()
92-
End If
83+
Dim SkinInfo As McSkinInfo = McSkinSelect()
9384
If Not SkinInfo.IsVaild Then Return
9485
Hint("正在更改皮肤……")
9586
IsChanging = True
@@ -144,9 +135,57 @@ Retry:
144135

145136
'恢复默认皮肤
146137
Public Sub BtnSkinReset_Click(sender As Object, e As RoutedEventArgs)
147-
ResetSkin = True
148-
BtnSkinEdit_Click(sender, e)
149-
ResetSkin = False
138+
If IsChanging Then
139+
Hint("正在更改皮肤中,请稍候!")
140+
Return
141+
End If
142+
If McLoginLoader.State = LoadState.Failed Then
143+
Hint("登录失败,无法更改皮肤!", HintType.Critical)
144+
Return
145+
End If
146+
IsChanging = True
147+
RunInNewThread(
148+
Async Sub()
149+
Try
150+
Retry:
151+
If McLoginMsLoader.State = LoadState.Loading Then McLoginMsLoader.WaitForExit() '等待登录结束
152+
Dim AccessToken As String = Setup.Get("CacheMsV2Access")
153+
Dim Uuid As String = Setup.Get("CacheMsV2Uuid")
154+
155+
Dim Client As New Net.Http.HttpClient With {.Timeout = New TimeSpan(0, 0, 30)}
156+
Client.DefaultRequestHeaders.Authorization = New Net.Http.Headers.AuthenticationHeaderValue("Bearer", AccessToken)
157+
Client.DefaultRequestHeaders.Accept.Add(New Net.Http.Headers.MediaTypeWithQualityHeaderValue("*/*"))
158+
Client.DefaultRequestHeaders.UserAgent.Add(New Net.Http.Headers.ProductInfoHeaderValue("MojangSharp", "0.1"))
159+
Dim Result As String = Await (Await Client.DeleteAsync(New Uri("https://api.minecraftservices.com/minecraft/profile/skins/active"))).Content.ReadAsStringAsync
160+
If Result.Contains("request requires user authentication") Then
161+
Hint("正在登录,将在登录完成后继续更改皮肤……")
162+
McLoginMsLoader.Start(GetLoginData(), IsForceRestart:=True)
163+
GoTo Retry
164+
ElseIf Result.Contains("""error""") Then
165+
Hint("更改皮肤失败:" & GetJson(Result)("error"), HintType.Critical)
166+
Return
167+
End If
168+
'获取新皮肤地址
169+
Log("[Skin] 皮肤更改返回值:" & vbCrLf & Result)
170+
Dim ResultJson As JObject = GetJson(Result)
171+
If ResultJson.ContainsKey("errorMessage") Then Throw New Exception(ResultJson("errorMessage").ToString) '#5309
172+
For Each Skin As JObject In ResultJson("skins")
173+
If Skin("state").ToString = "ACTIVE" Then
174+
MySkin.ReloadCache(Skin("url"))
175+
Return
176+
End If
177+
Next
178+
Throw New Exception("未知错误(" & Result & ")")
179+
Catch ex As Exception
180+
If ex.GetType.Equals(GetType(Tasks.TaskCanceledException)) Then
181+
Hint("更改皮肤失败:与 Mojang 皮肤服务器的连接超时,请检查你的网络是否通畅!", HintType.Critical)
182+
Else
183+
Log(ex, "更改皮肤失败", LogLevel.Hint)
184+
End If
185+
Finally
186+
IsChanging = False
187+
End Try
188+
End Sub, "Ms Skin Reset")
150189
End Sub
151190

152191
'保存皮肤

0 commit comments

Comments
 (0)