Ctrl+C Ctrl+V MySkin.xaml.vb

This commit is contained in:
单莉斯
2025-03-19 20:32:52 +08:00
committed by GitHub
parent a4284dbc50
commit 34697c0d27
@@ -1,39 +1,39 @@
公共 Class MySkin Public Class MySkin
'事件 '事件
公共 Event Click(sender As Object, e As MouseButtonEventArgs) Public Event Click(sender As Object, e As MouseButtonEventArgs)
'皮肤储存 '皮肤储存
私有 _Address As String Private _Address As String
公共 Property Address As String Public Property Address As String
Get Get
Return _Address Return _Address
End Get End Get
Set(value As String) Set(value As String)
_Address = value _Address = value
ToolTip = If(_Address = "", "加载中", "点击更换皮肤(右键查看更多选项)") ToolTip = If(_Address = "", "加载中", "点击更换皮肤(右键查看更多选项)")
End Set End Set
End Property End Property
公共 Loader As LoaderTask(Of EqualableList(Of String), String) Public Loader As LoaderTask(Of EqualableList(Of String), String)
'控件动画 '控件动画
私有 Sub PanSkin_MouseEnter(sender As Object, e As MouseEventArgs) Handles Me.MouseEnter Private Sub PanSkin_MouseEnter(sender As Object, e As MouseEventArgs) Handles Me.MouseEnter
AniStart(AaOpacity(ShadowSkin, 0.8 - ShadowSkin.Opacity, 200, 100), "Skin Shadow") AniStart(AaOpacity(ShadowSkin, 0.8 - ShadowSkin.Opacity, 200, 100), "Skin Shadow")
End Sub End Sub
私有 Sub PanSkin_MouseLeave(sender As Object, e As MouseEventArgs) Handles Me.MouseLeave Private Sub PanSkin_MouseLeave(sender As Object, e As MouseEventArgs) Handles Me.MouseLeave
AniStart(AaOpacity(ShadowSkin, 0.2 - ShadowSkin.Opacity, 200), "Skin Shadow") AniStart(AaOpacity(ShadowSkin, 0.2 - ShadowSkin.Opacity, 200), "Skin Shadow")
IsSkinMouseDown = False IsSkinMouseDown = False
AniStart(AaScaleTransform(Me, 1 - CType(Me.RenderTransform, ScaleTransform).ScaleX, 60,, New AniEaseOutFluent), "Skin Scale") AniStart(AaScaleTransform(Me, 1 - CType(Me.RenderTransform, ScaleTransform).ScaleX, 60,, New AniEaseOutFluent), "Skin Scale")
End Sub End Sub
'点击 '点击
私有 IsSkinMouseDown As Boolean = False Private IsSkinMouseDown As Boolean = False
私有 Sub PanSkin_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseLeftButtonDown Private Sub PanSkin_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseLeftButtonDown
IsSkinMouseDown = True IsSkinMouseDown = True
AniStart(AaScaleTransform(Me, 0.9 - CType(Me.RenderTransform, ScaleTransform).ScaleX, 60,, New AniEaseOutFluent), "Skin Scale") AniStart(AaScaleTransform(Me, 0.9 - CType(Me.RenderTransform, ScaleTransform).ScaleX, 60,, New AniEaseOutFluent), "Skin Scale")
End Sub End Sub
私有 Sub PanSkin_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseLeftButtonUp Private Sub PanSkin_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseLeftButtonUp
AniStart(AaScaleTransform(Me, 1 - CType(Me.RenderTransform, ScaleTransform).ScaleX, 60,, New AniEaseOutFluent), "Skin Scale") AniStart(AaScaleTransform(Me, 1 - CType(Me.RenderTransform, ScaleTransform).ScaleX, 60,, New AniEaseOutFluent), "Skin Scale")
If IsSkinMouseDown Then If IsSkinMouseDown Then
IsSkinMouseDown = False IsSkinMouseDown = False
RaiseEvent Click(sender, e) RaiseEvent Click(sender, e)
@@ -41,10 +41,10 @@
End Sub End Sub
'保存皮肤 '保存皮肤
公共 Sub BtnSkinSave_Click() Handles BtnSkinSave.Click Public Sub BtnSkinSave_Click() Handles BtnSkinSave.Click
Save(Loader) Save(Loader)
End Sub End Sub
公共 Shared Sub Save(Loader As LoaderTask(Of EqualableList(Of String), String)) Public Shared Sub Save(Loader As LoaderTask(Of EqualableList(Of String), String))
Dim Address = Loader.Output Dim Address = Loader.Output
If Not Loader.State = LoadState.Finished Then If Not Loader.State = LoadState.Finished Then
Hint("皮肤正在获取中,请稍候!", HintType.Critical) Hint("皮肤正在获取中,请稍候!", HintType.Critical)
@@ -67,14 +67,14 @@
Log(ex, "保存皮肤失败", LogLevel.Hint) Log(ex, "保存皮肤失败", LogLevel.Hint)
End Try End Try
End Sub End Sub
私有 Sub BtnSkinSave_Checked(sender As MyMenuItem, e As RoutedEventArgs) Handles BtnSkinSave.Checked Private Sub BtnSkinSave_Checked(sender As MyMenuItem, e As RoutedEventArgs) Handles BtnSkinSave.Checked
sender.IsEnabled = Address = "" sender.IsEnabled = Address = ""
End Sub End Sub
''' <summary> ''' <summary>
''' 载入皮肤。 ''' 载入皮肤。
''' </summary> ''' </summary>
公共 Sub Load() Public Sub Load()
Try Try
'检查文件存在 '检查文件存在
Address = Loader.Output Address = Loader.Output
@@ -98,10 +98,10 @@
End If End If
'头发层(附加层) '头发层(附加层)
If Image.Pic.Width >= 64 AndAlso Image.Pic.Height >= 32 Then If Image.Pic.Width >= 64 AndAlso Image.Pic.Height >= 32 Then
If (Image.Pic.GetPixel(1, 1).A = 0 OrElse '如果图片中有任何透明像素(避免纯色白底) If (Image.Pic.GetPixel(1, 1).A = 0 OrElse '如果图片中有任何透明像素(避免纯色白底)
Image.Pic.GetPixel(Image.Pic.Width - 1, Image.Pic.Height - 1).A = 0 OrElse Image.Pic.GetPixel(Image.Pic.Width - 1, Image.Pic.Height - 1).A = 0 OrElse
Image.Pic.GetPixel(Image.Pic.Width - 2, Image.Pic.Height / 2 - 2).A = 0) OrElse Image.Pic.GetPixel(Image.Pic.Width - 2, Image.Pic.Height / 2 - 2).A = 0) OrElse
(Image.Pic.GetPixel(1, 1) <> Image.Pic.GetPixel(Scale * 41, Scale * 9) AndAlso '或是头部颜色和透明区均不一样 (Image.Pic.GetPixel(1, 1) <> Image.Pic.GetPixel(Scale * 41, Scale * 9) AndAlso '或是头部颜色和透明区均不一样
Image.Pic.GetPixel(Image.Pic.Width - 1, Image.Pic.Height - 1) <> Image.Pic.GetPixel(Scale * 41, Scale * 9) AndAlso Image.Pic.GetPixel(Image.Pic.Width - 1, Image.Pic.Height - 1) <> Image.Pic.GetPixel(Scale * 41, Scale * 9) AndAlso
Image.Pic.GetPixel(Image.Pic.Width - 2, Image.Pic.Height / 2 - 2) <> Image.Pic.GetPixel(Scale * 41, Scale * 9)) Then Image.Pic.GetPixel(Image.Pic.Width - 2, Image.Pic.Height / 2 - 2) <> Image.Pic.GetPixel(Scale * 41, Scale * 9)) Then
ImgFore.Source = Image.Clip(Scale * 40, Scale * 8, Scale * 8, Scale * 8) ImgFore.Source = Image.Clip(Scale * 40, Scale * 8, Scale * 8, Scale * 8)
@@ -121,26 +121,26 @@
''' <summary> ''' <summary>
''' 清空皮肤。 ''' 清空皮肤。
''' </summary> ''' </summary>
公共 Sub Clear() Public Sub Clear()
Address = "" Address = ""
ImgFore.Source = Nothing ImgFore.Source = Nothing
ImgBack.Source = Nothing ImgBack.Source = Nothing
End Sub End Sub
'刷新缓存 '刷新缓存
公共 Sub RefreshClick() Handles BtnSkinRefresh.Click Public Sub RefreshClick() Handles BtnSkinRefresh.Click
RefreshCache(Loader) RefreshCache(Loader)
End Sub End Sub
''' <summary> ''' <summary>
''' 刷新皮肤缓存。 ''' 刷新皮肤缓存。
''' </summary> ''' </summary>
公共 Shared Sub RefreshCache(Optional sender As LoaderTask(Of EqualableList(Of String), String) = Nothing) Public Shared Sub RefreshCache(Optional sender As LoaderTask(Of EqualableList(Of String), String) = Nothing)
Dim HasLoaderRunning As Boolean = False Dim HasLoaderRunning As Boolean = False
For Each SkinLoader In PageLaunchLeft.SkinLoaders For Each SkinLoader In PageLaunchLeft.SkinLoaders
If SkinLoader.State = LoadState.Loading Then If SkinLoader.State = LoadState.Loading Then
HasLoaderRunning = True : Exit For HasLoaderRunning = True : Exit For
End If End If
下一页 Next
If FrmLaunchLeft IsNot Nothing AndAlso HasLoaderRunning Then If FrmLaunchLeft IsNot Nothing AndAlso HasLoaderRunning Then
'由于 Abort 不是实时的,暂时不会释放文件,会导致删除报错,故只能取消执行 '由于 Abort 不是实时的,暂时不会释放文件,会导致删除报错,故只能取消执行
Hint("有正在获取中的皮肤,请稍后再试!", HintType.Info) Hint("有正在获取中的皮肤,请稍后再试!", HintType.Info)
@@ -160,7 +160,7 @@
'刷新控件 '刷新控件
For Each SkinLoader In If(sender IsNot Nothing, {sender}, {PageLaunchLeft.SkinLegacy, PageLaunchLeft.SkinMs}) For Each SkinLoader In If(sender IsNot Nothing, {sender}, {PageLaunchLeft.SkinLegacy, PageLaunchLeft.SkinMs})
SkinLoader.WaitForExit(IsForceRestart:=True) SkinLoader.WaitForExit(IsForceRestart:=True)
下一页 Next
Hint("已刷新头像!", HintType.Finish) Hint("已刷新头像!", HintType.Finish)
Catch ex As Exception Catch ex As Exception
Log(ex, "刷新皮肤缓存失败", LogLevel.Msgbox) Log(ex, "刷新皮肤缓存失败", LogLevel.Msgbox)
@@ -172,7 +172,7 @@
''' 在更换正版皮肤后,刷新正版皮肤。 ''' 在更换正版皮肤后,刷新正版皮肤。
''' </summary> ''' </summary>
''' <param name="SkinAddress">新的正版皮肤完整地址。</param> ''' <param name="SkinAddress">新的正版皮肤完整地址。</param>
公共 Shared Sub ReloadCache(SkinAddress As String) Public Shared Sub ReloadCache(SkinAddress As String)
RunInThread( RunInThread(
Sub() Sub()
Try Try
@@ -182,7 +182,7 @@
'刷新控件 '刷新控件
For Each SkinLoader In {PageLaunchLeft.SkinMs, PageLaunchLeft.SkinLegacy} For Each SkinLoader In {PageLaunchLeft.SkinMs, PageLaunchLeft.SkinLegacy}
SkinLoader.WaitForExit(IsForceRestart:=True) SkinLoader.WaitForExit(IsForceRestart:=True)
下一页 Next
'完成提示 '完成提示
Hint("更改皮肤成功!", HintType.Finish) Hint("更改皮肤成功!", HintType.Finish)
Catch ex As Exception Catch ex As Exception
@@ -192,7 +192,7 @@
End Sub End Sub
'披风 '披风
公共 Property HasCape As Boolean Public Property HasCape As Boolean
Get Get
Return BtnSkinCape.Visibility = Visibility.Collapsed Return BtnSkinCape.Visibility = Visibility.Collapsed
End Get End Get
@@ -204,8 +204,8 @@
End If End If
End Set End Set
End Property End Property
私有 IsChanging As Boolean = False Private IsChanging As Boolean = False
公共 Sub BtnSkinCape_Click() Handles BtnSkinCape.Click Public Sub BtnSkinCape_Click() Handles BtnSkinCape.Click
'检查条件,获取新披风 '检查条件,获取新披风
If IsChanging Then If IsChanging Then
Hint("正在更改披风中,请稍候!") Hint("正在更改披风中,请稍候!")
@@ -236,32 +236,32 @@ Retry:
RunInUiWait( RunInUiWait(
Sub() Sub()
Try Try
Dim CapeNames As New Dictionary(Of String, String) From { Dim CapeNames As New Dictionary(Of String, String) From {
{"Migrator", "迁移者披风"}, {"MapMaker", "Realms 地图制作者披风"}, {"Moderator", "Mojira 管理员披风"}, {"Migrator", "迁移者披风"}, {"MapMaker", "Realms 地图制作者披风"}, {"Moderator", "Mojira 管理员披风"},
{"Translator-Chinese", "Crowdin 中文翻译者披风"}, {"Translator", "Crowdin 翻译者披风"}, {"Cobalt", "Cobalt 披风"}, {"Translator-Chinese", "Crowdin 中文翻译者披风"}, {"Translator", "Crowdin 翻译者披风"}, {"Cobalt", "Cobalt 披风"},
{"Vanilla", "原版披风"}, {"Minecon2011", "Minecon 2011 参与者披风"}, {"Minecon2012", "Minecon 2012 参与者披风"}, {"Vanilla", "原版披风"}, {"Minecon2011", "Minecon 2011 参与者披风"}, {"Minecon2012", "Minecon 2012 参与者披风"},
{"Minecon2013", "Minecon 2013 参与者披风"}, {"Minecon2015", "Minecon 2015 参与者披风"}, {"Minecon2016", "Minecon 2016 参与者披风"}, {"Minecon2013", "Minecon 2013 参与者披风"}, {"Minecon2015", "Minecon 2015 参与者披风"}, {"Minecon2016", "Minecon 2016 参与者披风"},
{"Cherry Blossom", "樱花披风"}, {"15th Anniversary", "15 周年纪念披风"}, {"Purple Heart", "紫色心形披风"}, {"Cherry Blossom", "樱花披风"}, {"15th Anniversary", "15 周年纪念披风"}, {"Purple Heart", "紫色心形披风"},
{"Follower's", "追随者披风"}, {"MCC 15th Year", "MCC 15 周年披风"}, {"Minecraft Experience", "村民救援披风"}, {"Follower's", "追随者披风"}, {"MCC 15th Year", "MCC 15 周年披风"}, {"Minecraft Experience", "村民救援披风"},
{"Mojang Office","Mojang 办公室披风"},{"Home","家园披风"},{"Menace","威胁披风"} {"Mojang Office", "Mojang 办公室披风"},{"Home","家园披风"},{"Menace","威胁披风"}
} }
Dim SelectionControl As New List(Of IMyRadio) From {New MyRadioBox With {.Text = "无披风"}} Dim SelectionControl As New List(Of IMyRadio) From {New MyRadioBox With {.Text = "无披风"}}
For Each Cape In SkinData("capes") For Each Cape In SkinData("capes")
Dim CapeName As String = Cape("alias").ToString Dim CapeName As String = Cape("alias").ToString
If CapeNames.ContainsKey(CapeName) Then CapeName = CapeNames(CapeName) If CapeNames.ContainsKey(CapeName) Then CapeName = CapeNames(CapeName)
SelectionControl.Add(New MyRadioBox With {.Text = CapeName}) SelectionControl.Add(New MyRadioBox With {.Text = CapeName})
下一页 Next
SelId = MyMsgBoxSelect(SelectionControl, "选择披风", "确定", "取消") SelId = MyMsgBoxSelect(SelectionControl, "选择披风", "确定", "取消")
Catch ex As Exception Catch ex As Exception
Log(ex, "获取玩家皮肤列表失败", LogLevel.Feedback) Log(ex, "获取玩家皮肤列表失败", LogLevel.Feedback)
End Try End Try
End Sub) End Sub)
If SelId Is Nothing Then Exit Sub If SelId Is Nothing Then Exit Sub
'发送请求 '发送请求
Dim Result As String = NetRequestRetry("https://api.minecraftservices.com/minecraft/profile/capes/active", Dim Result As String = NetRequestRetry("https://api.minecraftservices.com/minecraft/profile/capes/active",
If(SelId = 0, "DELETE", "PUT"), If(SelId = 0, "DELETE", "PUT"),
If(SelId = 0, "", New JObject(New JProperty("capeId", SkinData("capes")(SelId - 1)("id"))).ToString(0)), If(SelId = 0, "", New JObject(New JProperty("capeId", SkinData("capes")(SelId - 1)("id"))).ToString(0)),
"application/json", Headers:=New Dictionary(Of String, String) From {{"Authorization", "Bearer " & AccessToken}}) "application/json", Headers:=New Dictionary(Of String, String) From {{"Authorization", "Bearer " & AccessToken}})
If Result.Contains("""errorMessage""") Then If Result.Contains("""errorMessage""") Then
Hint("更改披风失败:" & GetJson(Result)("errorMessage"), HintType.Critical) Hint("更改披风失败:" & GetJson(Result)("errorMessage"), HintType.Critical)
Exit Sub Exit Sub
@@ -273,7 +273,7 @@ Retry:
Finally Finally
IsChanging = False IsChanging = False
End Try End Try
End Sub, "Cape Change") End Sub, "Cape Change")
End Sub End Sub
End Class End Class