Ctrl+C Ctrl+V MySkin.xaml.vb
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user