Merge branch 'main' into main

This commit is contained in:
龙腾猫跃
2024-09-24 13:11:20 +08:00
committed by GitHub
19 changed files with 217 additions and 127 deletions
@@ -96,6 +96,12 @@ Public Class Application
End If End If
'动态 DLL 调用 '动态 DLL 调用
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolve AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolve
SetDllDirectory(Path & "PCL\")
If Is32BitSystem Then
File.WriteAllBytes(Path & "PCL\libwebp.dll", GetResources("libwebp32"))
Else
File.WriteAllBytes(Path & "PCL\libwebp.dll", GetResources("libwebp64"))
End If
'日志初始化 '日志初始化
LogStart() LogStart()
'添加日志 '添加日志
@@ -171,9 +177,11 @@ Public Class Application
Private Shared AssemblyNAudio As Assembly Private Shared AssemblyNAudio As Assembly
Private Shared AssemblyJson As Assembly Private Shared AssemblyJson As Assembly
Private Shared AssemblyDialog As Assembly Private Shared AssemblyDialog As Assembly
Private Shared AssemblyWebp As Assembly
Private Shared ReadOnly AssemblyNAudioLock As New Object Private Shared ReadOnly AssemblyNAudioLock As New Object
Private Shared ReadOnly AssemblyJsonLock As New Object Private Shared ReadOnly AssemblyJsonLock As New Object
Private Shared ReadOnly AssemblyDialogLock As New Object Private Shared ReadOnly AssemblyDialogLock As New Object
Private Shared ReadOnly AssemblyWebpLock As New Object
Public Shared Function AssemblyResolve(sender As Object, args As ResolveEventArgs) As Assembly Public Shared Function AssemblyResolve(sender As Object, args As ResolveEventArgs) As Assembly
If args.Name.StartsWithF("NAudio") Then If args.Name.StartsWithF("NAudio") Then
SyncLock AssemblyNAudioLock SyncLock AssemblyNAudioLock
@@ -199,6 +207,14 @@ Public Class Application
End If End If
Return AssemblyDialog Return AssemblyDialog
End SyncLock End SyncLock
ElseIf args.Name.StartsWithF("Imazen.WebP") Then
SyncLock AssemblyWebpLock
If AssemblyWebp Is Nothing Then
Log("[Start] 加载 DLL:Imazen.WebP")
AssemblyWebp = Assembly.Load(GetResources("WebP"))
End If
Return AssemblyWebp
End SyncLock
Else Else
Return Nothing Return Nothing
End If End If
+13
View File
@@ -10,6 +10,16 @@ Public Class FormMain
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String)) Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
'统计更新日志条目 '统计更新日志条目
#If BETA Then #If BETA Then
If LastVersion < 336 Then 'Release 2.8.6
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "下载 Mod 时会使用 MCIM 国内镜像源"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "Mod 管理页面允许筛选可更新/启用/禁用的 Mod"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "打开 PCL 时会自动安装同目录下的 modpack.zip"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "爱发电域名迁移至 afdian.com"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复 1.20.1+ 离线登录使用正版皮肤时无法保存游戏的 Bug"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复安装的 1.14~1.15 Forge+OptiFine 无法进入世界的 Bug"))
FeatureCount += 19
BugCount += 24
End If
If LastVersion < 332 Then 'Release 2.8.3 If LastVersion < 332 Then 'Release 2.8.3
If LastVersion = 330 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复部分玩家无法启动 MC 的 Bug")) If LastVersion = 330 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复部分玩家无法启动 MC 的 Bug"))
End If End If
@@ -124,6 +134,9 @@ Public Class FormMain
'3:BUG+ IMP* FEAT- '3:BUG+ IMP* FEAT-
'2:BUG* IMP- '2:BUG* IMP-
'1:BUG- '1:BUG-
If LastVersion < 335 Then 'Snapshot 2.8.6
BugCount += 2
End If
If LastVersion < 334 Then 'Snapshot 2.8.5 If LastVersion < 334 Then 'Snapshot 2.8.5
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "Mod 管理页面允许筛选可更新/启用/禁用的 Mod")) FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "Mod 管理页面允许筛选可更新/启用/禁用的 Mod"))
If LastVersion = 333 Then If LastVersion = 333 Then
@@ -11,13 +11,13 @@ Public Module ModBase
#Region "声明" #Region "声明"
'下列版本信息由更新器自动修改 '下列版本信息由更新器自动修改
Public Const VersionBaseName As String = "2.8.5" '不含分支前缀的显示用版本名 Public Const VersionBaseName As String = "2.8.6" '不含分支前缀的显示用版本名
Public Const VersionStandardCode As String = "2.8.5." & VersionBranchCode '标准格式的四段式版本号 Public Const VersionStandardCode As String = "2.8.6." & VersionBranchCode '标准格式的四段式版本号
Public Const CommitHash As String = "" 'Commit Hash Public Const CommitHash As String = "" 'Commit Hash
#If BETA Then #If BETA Then
Public Const VersionCode As Integer = 332 'Release Public Const VersionCode As Integer = 336 'Release
#Else #Else
Public Const VersionCode As Integer = 334 'Snapshot Public Const VersionCode As Integer = 335 'Snapshot
#End If #End If
'自动生成的版本信息 '自动生成的版本信息
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -506,6 +506,7 @@ NextInner:
End If End If
'尝试登录 '尝试登录
Dim OAuthTokens As String() Dim OAuthTokens As String()
Dim ClientId As String = ""
If Input.OAuthRefreshToken = "" Then If Input.OAuthRefreshToken = "" Then
'无 RefreshToken '无 RefreshToken
Relogin: Relogin:
@@ -513,10 +514,10 @@ Relogin:
If OAuthCode = "Cancel" Then Exit Sub If OAuthCode = "Cancel" Then Exit Sub
If Data.IsAborted Then Throw New ThreadInterruptedException If Data.IsAborted Then Throw New ThreadInterruptedException
Data.Progress = 0.2 Data.Progress = 0.2
OAuthTokens = MsLoginStep2(OAuthCode, False) OAuthTokens = MsLoginStep2(OAuthCode, False, ClientId)
Else Else
'有 RefreshToken '有 RefreshToken
OAuthTokens = MsLoginStep2(Input.OAuthRefreshToken, True) OAuthTokens = MsLoginStep2(Input.OAuthRefreshToken, True, ClientId)
End If End If
'要求重新打开登录网页认证 '要求重新打开登录网页认证
If OAuthTokens(0) = "Cancel" Then Exit Sub If OAuthTokens(0) = "Cancel" Then Exit Sub
@@ -837,39 +838,59 @@ LoginFinish:
Return RegexSeek(Result, "(?<=code\=)[^&]+") Return RegexSeek(Result, "(?<=code\=)[^&]+")
End If End If
End Function End Function
'微软登录步骤 2:从 OAuth Code 或 OAuth RefreshToken 获取 {OAuth AccessToken, OAuth RefreshToken} '微软登录步骤 2:从 OAuth Code 或 OAuth RefreshToken 获取 {OAuth AccessToken, OAuth RefreshToken}
Private Function MsLoginStep2(Code As String, IsRefresh As Boolean) As String() Private Function MsLoginStep2(Code As String, IsRefresh As Boolean, ClientId As String, Optional ExpiresIn As String = "900") As String()
McLaunchLog("开始微软登录步骤 2(" & If(IsRefresh, "", "非") & "刷新登录)") McLaunchLog("开始微软登录步骤 2(" & If(IsRefresh, "", "非") & "刷新登录)")
Dim Request As String Dim Request As String
If IsRefresh Then If IsRefresh Then
Request = "client_id=00000000402b5328" & "&" & Request = "grant_type=refresh_token" & "&" &
"client_id=" & ClientId & "&" &
"device_code=" & Code & "&" &
"refresh_token=" & Uri.EscapeDataString(Code) & "&" & "refresh_token=" & Uri.EscapeDataString(Code) & "&" &
"grant_type=refresh_token" & "&" & "scope=XboxLive.signin%20offline_access"
"redirect_uri=" & Uri.EscapeDataString("https://login.live.com/oauth20_desktop.srf") & "&" &
"scope=" & Uri.EscapeDataString("service::user.auth.xboxlive.com::MBI_SSL")
Else Else
Request = "client_id=00000000402b5328" & "&" & Request = "grant_type=urn:ietf:params:oauth:grant-type:device_code" & "&" &
"code=" & Uri.EscapeDataString(Code) & "&" & "client_id=" & ClientId & "&" &
"grant_type=authorization_code" & "&" & "device_code=" & Code & "&" &
"redirect_uri=" & Uri.EscapeDataString("https://login.live.com/oauth20_desktop.srf") & "&" & "scope=XboxLive.signin%20offline_access"
"scope=" & Uri.EscapeDataString("service::user.auth.xboxlive.com::MBI_SSL")
End If End If
Dim Result As String Dim Result As String
Try Dim stopwatch As Stopwatch = Stopwatch.StartNew()
Result = NetRequestMulty("https://login.live.com/oauth20_token.srf", "POST", Request, "application/x-www-form-urlencoded", 2)
Catch ex As Exception While stopwatch.Elapsed < TimeSpan.FromSeconds(ExpiresIn)
If ex.Message.Contains("must sign in again") OrElse ex.Message.Contains("invalid_grant") Then '#269 Try
Return {"Relogin", ""} Result = NetRequestMulty("https://login.microsoftonline.com/consumers/oauth2/v2.0/token", "POST", Request, "application/x-www-form-urlencoded", 2)
Else Catch ex As Exception
Throw If ex.Message.Contains("must sign in again") OrElse ex.Message.Contains("invalid_grant") Then '#269
Return {"Relogin", ""}
ElseIf ex.Message.Contains("authorization_declined") Then
Hint("你拒绝了 PCL2 的访问权限申请,验证过程被中断!")
Return {"Cancel", ""}
ElseIf ex.Message.Contains("expired_token") Then
Hint("Token 已过期,请尝试重新验证!")
Exit While
ElseIf ex.Message.Contains("AADSTS70016") Then
Continue While
Else
Throw
End If
End Try
If Result IsNot Nothing Then
Dim ResultJson As JObject = GetJson(Result)
Dim AccessToken As String = ResultJson("access_token").ToString
Dim RefreshToken As String = ResultJson("refresh_token").ToString
Return {AccessToken, RefreshToken}
End If End If
End Try
Thread.Sleep(1000)
End While
Hint("验证超时,请尝试重新验证!")
Return {"Cancel", ""}
Dim ResultJson As JObject = GetJson(Result)
Dim AccessToken As String = ResultJson("access_token").ToString
Dim RefreshToken As String = ResultJson("refresh_token").ToString
Return {AccessToken, RefreshToken}
End Function End Function
''微软登录步骤 1:获取 DeviceCode 并显示验证提示 ''微软登录步骤 1:获取 DeviceCode 并显示验证提示
@@ -260,7 +260,7 @@ Retry:
'获取 Mod 下载信息 '获取 Mod 下载信息
ModDownloadLoaders.Add(New LoaderTask(Of Integer, JArray)("获取 Mod 下载信息", ModDownloadLoaders.Add(New LoaderTask(Of Integer, JArray)("获取 Mod 下载信息",
Sub(Task As LoaderTask(Of Integer, JArray)) Sub(Task As LoaderTask(Of Integer, JArray))
Task.Output = GetJson(NetRequestRetry("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList, ",") & "]}", "application/json"))("data") Task.Output = GetJson(DlModRequest("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList, ",") & "]}", "application/json"))("data")
'如果文件已被删除,则 API 会跳过那一项 '如果文件已被删除,则 API 会跳过那一项
If ModList.Count > Task.Output.Count Then Throw New Exception("整合包所需要的部分 Mod 版本已被 Mod 作者删除,因此无法完成整合包安装,请联系整合包作者更新整合包中的 Mod 版本") If ModList.Count > Task.Output.Count Then Throw New Exception("整合包所需要的部分 Mod 版本已被 Mod 作者删除,因此无法完成整合包安装,请联系整合包作者更新整合包中的 Mod 版本")
End Sub) With {.ProgressWeight = ModList.Count / 10}) '每 10 Mod 需要 1s End Sub) With {.ProgressWeight = ModList.Count / 10}) '每 10 Mod 需要 1s
@@ -18,9 +18,6 @@
'网络图片 '网络图片
If File.Exists(FileAddress) Then If File.Exists(FileAddress) Then
PathLogo.Source = New MyBitmap(FileAddress) PathLogo.Source = New MyBitmap(FileAddress)
ElseIf _Logo.EndsWithF(".webp", True) Then 'Modrinth 林业 Mod 使用了不支持的 WebP 格式 Logo
Log($"[Comp] 发现不支持的 WebP 格式图标,已更改为默认图标:{_Logo}")
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
Else Else
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png") PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal) RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal)
@@ -58,6 +55,12 @@ RetryStart:
End If End If
'下载图片 '下载图片
NetDownload(Url, LocalFileAddress & DownloadEnd, True) NetDownload(Url, LocalFileAddress & DownloadEnd, True)
If Url.EndsWithF("webp") Then
Log($"[Comp] Webp 格式转换:{LocalFileAddress}")
Dim dec = New Imazen.WebP.SimpleDecoder()
Dim picFile = File.ReadAllBytes(LocalFileAddress & DownloadEnd)
dec.DecodeFromBytes(picFile, picFile.Length).Save(LocalFileAddress & DownloadEnd)
End If
Dim LoadError As Exception = Nothing Dim LoadError As Exception = Nothing
RunInUiWait( RunInUiWait(
Sub() Sub()
@@ -20,9 +20,6 @@ Public Class MyLocalModItem
'网络图片 '网络图片
If File.Exists(FileAddress) Then If File.Exists(FileAddress) Then
PathLogo.Source = New MyBitmap(FileAddress) PathLogo.Source = New MyBitmap(FileAddress)
ElseIf _Logo.EndsWithF(".webp", True) Then 'Modrinth 林业 Mod 使用了不支持的 WebP 格式 Logo
Log($"[LocalModItem] 发现不支持的 WebP 格式图标,已更改为默认图标:{_Logo}")
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
Else Else
PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png") PathLogo.Source = New MyBitmap(PathImage & "Icons/NoIcon.png")
RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal) RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal)
@@ -60,6 +57,12 @@ RetryStart:
End If End If
'下载图片 '下载图片
NetDownload(Url, LocalFileAddress & DownloadEnd, True) NetDownload(Url, LocalFileAddress & DownloadEnd, True)
If Url.EndsWithF("webp") Then
Log($"[Comp] Webp 格式转换:{LocalFileAddress}")
Dim dec = New Imazen.WebP.SimpleDecoder()
Dim picFile = File.ReadAllBytes(LocalFileAddress & DownloadEnd)
dec.DecodeFromBytes(picFile, picFile.Length).Save(LocalFileAddress & DownloadEnd)
End If
Dim LoadError As Exception = Nothing Dim LoadError As Exception = Nothing
RunInUiWait( RunInUiWait(
Sub() Sub()
@@ -798,6 +798,8 @@ NextFile:
Public Declare Function SetForegroundWindow Lib "user32" (hWnd As IntPtr) As Integer Public Declare Function SetForegroundWindow Lib "user32" (hWnd As IntPtr) As Integer
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (hWnd As IntPtr, msg As UInteger, wParam As Long, lParam As Long) As Boolean Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (hWnd As IntPtr, msg As UInteger, wParam As Long, lParam As Long) As Boolean
Public Declare Function SetDllDirectory Lib "kernel32" Alias "SetDllDirectoryA" (lpPathName As String) As Boolean
#End Region #End Region
Public DragControl = Nothing Public DragControl = Nothing
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 ' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
' 方法是按如下所示使用“*” ' 方法是按如下所示使用“*”
<Assembly: AssemblyVersion("2.8.5.0")> <Assembly: AssemblyVersion("2.8.6.0")>
<Assembly: AssemblyFileVersion("2.8.5.0")> <Assembly: AssemblyFileVersion("2.8.6.0")>
<Assembly: NeutralResourcesLanguage("")> <Assembly: NeutralResourcesLanguage("")>
+30
View File
@@ -120,6 +120,26 @@ Namespace My.Resources
End Get End Get
End Property End Property
'''<summary>
''' 查找 System.Byte[] 类型的本地化资源。
'''</summary>
Friend ReadOnly Property libwebp32() As Byte()
Get
Dim obj As Object = ResourceManager.GetObject("libwebp32", resourceCulture)
Return CType(obj,Byte())
End Get
End Property
'''<summary>
''' 查找 System.Byte[] 类型的本地化资源。
'''</summary>
Friend ReadOnly Property libwebp64() As Byte()
Get
Dim obj As Object = ResourceManager.GetObject("libwebp64", resourceCulture)
Return CType(obj,Byte())
End Get
End Property
'''<summary> '''<summary>
''' 查找 System.Byte[] 类型的本地化资源。 ''' 查找 System.Byte[] 类型的本地化资源。
'''</summary> '''</summary>
@@ -149,5 +169,15 @@ Namespace My.Resources
Return CType(obj,Byte()) Return CType(obj,Byte())
End Get End Get
End Property End Property
'''<summary>
''' 查找 System.Byte[] 类型的本地化资源。
'''</summary>
Friend ReadOnly Property WebP() As Byte()
Get
Dim obj As Object = ResourceManager.GetObject("WebP", resourceCulture)
Return CType(obj,Byte())
End Get
End Property
End Module End Module
End Namespace End Namespace
@@ -136,6 +136,12 @@
<data name="Json" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Json" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Newtonsoft.Json.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>..\Resources\Newtonsoft.Json.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="libwebp32" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\libwebp32.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="libwebp64" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\libwebp64.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ModData" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="ModData" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ModData.txt;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>..\Resources\ModData.txt;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
@@ -145,4 +151,7 @@
<data name="Transformer" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Transformer" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\transformer.jar;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>..\Resources\transformer.jar;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="WebP" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Imazen.WebP.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root> </root>
@@ -104,91 +104,81 @@
</local:MyCard> </local:MyCard>
<local:MyCard Margin="0,0,0,15" Title="赞助者"> <local:MyCard Margin="0,0,0,15" Title="赞助者">
<StackPanel Margin="25,40,10,20"> <StackPanel Margin="25,40,10,20">
<TextBlock HorizontalAlignment="Left" Text="以下是 2024 年 7 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" /> <TextBlock HorizontalAlignment="Left" Text="以下是 2024 年 8 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
<WrapPanel Margin="0,0,0,10"> <WrapPanel Margin="0,0,0,10">
<TextBlock Width="120" Margin="0,1.5" Text="nemonemo" /> <TextBlock Width="120" Margin="0,1.5" Text="没用的元元" />
<TextBlock Width="120" Margin="0,1.5" Text="矢坕" /> <TextBlock Width="120" Margin="0,1.5" Text="鸮不是号鸟" />
<TextBlock Width="120" Margin="0,1.5" Text="梁景瑜" /> <TextBlock Width="120" Margin="0,1.5" Text="兮兮要次糖糖" />
<TextBlock Width="120" Margin="0,1.5" Text="GhostZiLie" /> <TextBlock Width="120" Margin="0,1.5" Text="wxzsghh114514" />
<TextBlock Width="120" Margin="0,1.5" Text="靈曦蠡醯" /> <TextBlock Width="120" Margin="0,1.5" Text="地了排子" />
<TextBlock Width="120" Margin="0,1.5" Text="zzdr" /> <TextBlock Width="120" Margin="0,1.5" Text="阿宅cheli" />
<TextBlock Width="120" Margin="0,1.5" Text="井下啊~" /> <TextBlock Width="120" Margin="0,1.5" Text="笑脸114514" />
<TextBlock Width="120" Margin="0,1.5" Text="zkQkWyQkz" /> <TextBlock Width="120" Margin="0,1.5" Text="小麦A" />
<TextBlock Width="120" Margin="0,1.5" Text="fill" /> <TextBlock Width="120" Margin="0,1.5" Text="未名小七TAO" />
<TextBlock Width="120" Margin="0,1.5" Text="法老" /> <TextBlock Width="120" Margin="0,1.5" Text="雪冥" />
<TextBlock Width="120" Margin="0,1.5" Text="aleafsautumn" /> <TextBlock Width="120" Margin="0,1.5" Text="氟西汀" />
<TextBlock Width="120" Margin="0,1.5" Text="聪明的凉生" /> <TextBlock Width="120" Margin="0,1.5" Text="阿巴阿巴" />
<TextBlock Width="120" Margin="0,1.5" Text="干嘛1337" /> <TextBlock Width="120" Margin="0,1.5" Text="侦探hj" />
<TextBlock Width="120" Margin="0,1.5" Text="dlxw4" /> <TextBlock Width="120" Margin="0,1.5" Text="666" />
<TextBlock Width="120" Margin="0,1.5" Text="古神" /> <TextBlock Width="120" Margin="0,1.5" Text="萬帆WanFan" />
<TextBlock Width="120" Margin="0,1.5" Text="朝仓理香子" /> <TextBlock Width="120" Margin="0,1.5" Text="swayst" />
<TextBlock Width="120" Margin="0,1.5" Text="Raper_Sulin" /> <TextBlock Width="120" Margin="0,1.5" Text="yuchen" />
<TextBlock Width="120" Margin="0,1.5" Text="vv" /> <TextBlock Width="120" Margin="0,1.5" Text="鲸落猫南北" />
<TextBlock Width="120" Margin="0,1.5" Text="QuinnL" /> <TextBlock Width="120" Margin="0,1.5" Text="念池鱼思故渊" />
<TextBlock Width="120" Margin="0,1.5" Text="pigeno" /> <TextBlock Width="120" Margin="0,1.5" Text="No_1died" />
<TextBlock Width="120" Margin="0,1.5" Text="whx61" /> <TextBlock Width="120" Margin="0,1.5" Text="Error02" />
<TextBlock Width="120" Margin="0,1.5" Text="peoprem" /> <TextBlock Width="120" Margin="0,1.5" Text="橙子皮" />
<TextBlock Width="120" Margin="0,1.5" Text="慕言" /> <TextBlock Width="120" Margin="0,1.5" Text="丨丨丨丨" />
<TextBlock Width="120" Margin="0,1.5" Text="白雾云-白少" /> <TextBlock Width="120" Margin="0,1.5" Text="零崽" />
<TextBlock Width="120" Margin="0,1.5" Text="S0CK" /> <TextBlock Width="120" Margin="0,1.5" Text="叁無" />
<TextBlock Width="120" Margin="0,1.5" Text="1111" /> <TextBlock Width="120" Margin="0,1.5" Text="火星上行走的柠檬精" />
<TextBlock Width="120" Margin="0,1.5" Text="怕做苦力的苦力怕" /> <TextBlock Width="120" Margin="0,1.5" Text="北极椰子" />
<TextBlock Width="120" Margin="0,1.5" Text="慕柒茗桜" /> <TextBlock Width="120" Margin="0,1.5" Text="流玉髓" />
<TextBlock Width="120" Margin="0,1.5" Text="DsxiaKsxia" /> <TextBlock Width="120" Margin="0,1.5" Text="咕咕" />
<TextBlock Width="120" Margin="0,1.5" Text="lucca" /> <TextBlock Width="120" Margin="0,1.5" Text="小鹏1098" />
<TextBlock Width="120" Margin="0,1.5" Text="时酱" /> <TextBlock Width="120" Margin="0,1.5" Text="风雪" />
<TextBlock Width="120" Margin="0,1.5" Text="666a" /> <TextBlock Width="120" Margin="0,1.5" Text="梦幻の小店" />
<TextBlock Width="120" Margin="0,1.5" Text="Rigilkent" /> <TextBlock Width="120" Margin="0,1.5" Text="nhrnick" />
<TextBlock Width="120" Margin="0,1.5" Text="亡灵引渡" /> <TextBlock Width="120" Margin="0,1.5" Text="天天的周末" />
<TextBlock Width="120" Margin="0,1.5" Text="初音末来" /> <TextBlock Width="120" Margin="0,1.5" Text="雪梨" />
<TextBlock Width="120" Margin="0,1.5" Text="king" /> <TextBlock Width="120" Margin="0,1.5" Text="Z_ebra" />
<TextBlock Width="120" Margin="0,1.5" Text="zzhm" /> <TextBlock Width="120" Margin="0,1.5" Text="acmzyh" />
<TextBlock Width="120" Margin="0,1.5" Text="半自动M9716" /> <TextBlock Width="120" Margin="0,1.5" Text="yuyyyu" />
<TextBlock Width="120" Margin="0,1.5" Text="MMIAO780" /> <TextBlock Width="120" Margin="0,1.5" Text="看看" />
<TextBlock Width="120" Margin="0,1.5" Text="7930" /> <TextBlock Width="120" Margin="0,1.5" Text="墨霜夜" />
<TextBlock Width="120" Margin="0,1.5" Text="Jedro" /> <TextBlock Width="120" Margin="0,1.5" Text="皇势力" />
<TextBlock Width="120" Margin="0,1.5" Text="寂灭星云" /> <TextBlock Width="120" Margin="0,1.5" Text="曦予千山" />
<TextBlock Width="120" Margin="0,1.5" Text="天上北辰星" /> <TextBlock Width="120" Margin="0,1.5" Text="Lv50.疾旋鼬" />
<TextBlock Width="120" Margin="0,1.5" Text="黄为很高" /> <TextBlock Width="120" Margin="0,1.5" Text="雪暮" />
<TextBlock Width="120" Margin="0,1.5" Text="a酱" /> <TextBlock Width="120" Margin="0,1.5" Text="铁树" />
<TextBlock Width="240" Margin="0,1.5" Text="Pedlar Mayweather" /> <TextBlock Width="120" Margin="0,1.5" Text="ZHypocrite" />
<TextBlock Width="120" Margin="0,1.5" Text="Daddy江" /> <TextBlock Width="120" Margin="0,1.5" Text="闫雁" />
<TextBlock Width="120" Margin="0,1.5" Text="汣魰" /> <TextBlock Width="120" Margin="0,1.5" Text="不知道叫啥" />
<TextBlock Width="120" Margin="0,1.5" Text="lawaass" /> <TextBlock Width="120" Margin="0,1.5" Text="隔壁家老张" />
<TextBlock Width="120" Margin="0,1.5" Text="scz" /> <TextBlock Width="120" Margin="0,1.5" Text="DZY" />
<TextBlock Width="120" Margin="0,1.5" Text="tiredl" /> <TextBlock Width="120" Margin="0,1.5" Text="Hugh" />
<TextBlock Width="120" Margin="0,1.5" Text="Jeffy0314" /> <TextBlock Width="120" Margin="0,1.5" Text="Jto" />
<TextBlock Width="120" Margin="0,1.5" Text="青云一梦" /> <TextBlock Width="120" Margin="0,1.5" Text="JO极名字" />
<TextBlock Width="120" Margin="0,1.5" Text="摸鱼大湿" /> <TextBlock Width="120" Margin="0,1.5" Text="啊猫" />
<TextBlock Width="120" Margin="0,1.5" Text="PIGEON" /> <TextBlock Width="120" Margin="0,1.5" Text="章九连" />
<TextBlock Width="120" Margin="0,1.5" Text="Redio" /> <TextBlock Width="120" Margin="0,1.5" Text="zeq_killjsj" />
<TextBlock Width="120" Margin="0,1.5" Text="无垠星海" /> <TextBlock Width="120" Margin="0,1.5" Text="重庆你周哥" />
<TextBlock Width="120" Margin="0,1.5" Text="Z10" /> <TextBlock Width="120" Margin="0,1.5" Text="我是桶子哥" />
<TextBlock Width="120" Margin="0,1.5" Text="嗯哼" /> <TextBlock Width="120" Margin="0,1.5" Text="chenxingyin" />
<TextBlock Width="120" Margin="0,1.5" Text="_Ejvy" /> <TextBlock Width="120" Margin="0,1.5" Text="koimiaori" />
<TextBlock Width="120" Margin="0,1.5" Text="LG.神梦" /> <TextBlock Width="120" Margin="0,1.5" Text="Awfrlu+" />
<TextBlock Width="120" Margin="0,1.5" Text="叫爱丽丝的墨鱼" /> <TextBlock Width="120" Margin="0,1.5" Text="古河渚上花" />
<TextBlock Width="120" Margin="0,1.5" Text="芙芙雪糕" /> <TextBlock Width="120" Margin="0,1.5" Text="THE END" />
<TextBlock Width="120" Margin="0,1.5" Text="屑萨你" /> <TextBlock Width="120" Margin="0,1.5" Text="哎呀菜菜子" />
<TextBlock Width="120" Margin="0,1.5" Text="qianlan" /> <TextBlock Width="120" Margin="0,1.5" Text="AptS:1547" />
<TextBlock Width="120" Margin="0,1.5" Text="dndjkdkdms" /> <TextBlock Width="120" Margin="0,1.5" Text="安麓" />
<TextBlock Width="120" Margin="0,1.5" Text="时空乂猎人" /> <TextBlock Width="120" Margin="0,1.5" Text="彘彘彘彘彘彘" />
<TextBlock Width="120" Margin="0,1.5" Text="芒果" /> <TextBlock Width="120" Margin="0,1.5" Text="通大小学弟" />
<TextBlock Width="120" Margin="0,1.5" Text="小比登T^T" /> <TextBlock Width="120" Margin="0,1.5" Text="Ender__sun" />
<TextBlock Width="120" Margin="0,1.5" Text="北川兔兔" /> <TextBlock Width="120" Margin="0,1.5" Text="此生浮" />
<TextBlock Width="120" Margin="0,1.5" Text="q_q!!!" /> <TextBlock Width="120" Margin="0,1.5" Text="皮皮恒" />
<TextBlock Width="120" Margin="0,1.5" Text="eric" /> <TextBlock Width="120" Margin="0,1.5" Text="charlesmin" />
<TextBlock Width="120" Margin="0,1.5" Text="Min" /> <TextBlock Width="120" Margin="0,1.5" Text="snow" />
<TextBlock Width="120" Margin="0,1.5" Text="JTOPfujo》" />
<TextBlock Width="120" Margin="0,1.5" Text="CZALIZI" />
<TextBlock Width="120" Margin="0,1.5" Text="outsider" />
<TextBlock Width="120" Margin="0,1.5" Text="Kimmo" />
<TextBlock Width="120" Margin="0,1.5" Text="超爱居居巧" />
<TextBlock Width="120" Margin="0,1.5" Text="quin22" />
<TextBlock Width="120" Margin="0,1.5" Text="贤者摸鱼" />
<TextBlock Width="120" Margin="0,1.5" Text="chsero" />
<TextBlock Width="120" Margin="0,1.5" Text="幽梦瞳鸭" />
<TextBlock Width="120" Margin="0,1.5" Text="Thankscrazy" />
</WrapPanel> </WrapPanel>
<Grid Height="35"> <Grid Height="35">
@@ -86,7 +86,7 @@
{"LaunchArgumentWindowHeight", New SetupEntry(480)}, {"LaunchArgumentWindowHeight", New SetupEntry(480)},
{"LaunchArgumentWindowType", New SetupEntry(1)}, {"LaunchArgumentWindowType", New SetupEntry(1)},
{"LaunchArgumentRam", New SetupEntry(False, Source:=SetupSource.Registry)}, {"LaunchArgumentRam", New SetupEntry(False, Source:=SetupSource.Registry)},
{"LaunchAdvanceJvm", New SetupEntry("-XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true")}, {"LaunchAdvanceJvm", New SetupEntry("-XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Djdk.lang.Process.allowAmbiguousCommands=true -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true")},
{"LaunchAdvanceGame", New SetupEntry("")}, {"LaunchAdvanceGame", New SetupEntry("")},
{"LaunchAdvanceRun", New SetupEntry("")}, {"LaunchAdvanceRun", New SetupEntry("")},
{"LaunchAdvanceRunWait", New SetupEntry(True)}, {"LaunchAdvanceRunWait", New SetupEntry(True)},
@@ -647,6 +647,7 @@
SelectedMods.Remove(ModEntity.RawFileName) SelectedMods.Remove(ModEntity.RawFileName)
'更改 Loader 和 UI 中的列表 '更改 Loader 和 UI 中的列表
McModLoader.Output.Remove(ModEntity) McModLoader.Output.Remove(ModEntity)
SearchResult?.Remove(ModEntity)
ModItems.Remove(ModEntity.RawFileName) ModItems.Remove(ModEntity.RawFileName)
Dim IndexOfUi As Integer = PanList.Children.IndexOf(PanList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry.Equals(ModEntity))) Dim IndexOfUi As Integer = PanList.Children.IndexOf(PanList.Children.OfType(Of MyLocalModItem).FirstOrDefault(Function(i) i.Entry.Equals(ModEntity)))
If IndexOfUi >= 0 Then PanList.Children.RemoveAt(IndexOfUi) If IndexOfUi >= 0 Then PanList.Children.RemoveAt(IndexOfUi)
@@ -140,6 +140,10 @@
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Imazen.WebP, Version=10.0.1.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>Resources\Imazen.WebP.dll</HintPath>
</Reference>
<Reference Include="NAudio, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="NAudio, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<Private>False</Private> <Private>False</Private>
@@ -185,9 +189,6 @@
<Compile Include="Controls\MyIconTextButton.xaml.vb"> <Compile Include="Controls\MyIconTextButton.xaml.vb">
<DependentUpon>MyIconTextButton.xaml</DependentUpon> <DependentUpon>MyIconTextButton.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Modules\Minecraft\ModComp.vb" /> <Compile Include="Modules\Minecraft\ModComp.vb" />
<Compile Include="Modules\Minecraft\ModJava.vb" /> <Compile Include="Modules\Minecraft\ModJava.vb" />
<Compile Include="Modules\Minecraft\ModMod.vb" /> <Compile Include="Modules\Minecraft\ModMod.vb" />
@@ -472,7 +473,6 @@
<DependentUpon>FormMain.xaml</DependentUpon> <DependentUpon>FormMain.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Page Include="Modules\Minecraft\MyLocalModItem.xaml"> <Page Include="Modules\Minecraft\MyLocalModItem.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
@@ -927,7 +927,9 @@
<Resource Include="Images\Heads\MCBBS.png" /> <Resource Include="Images\Heads\MCBBS.png" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Resources\Imazen.WebP.dll" />
<Content Include="Resources\libwebp32.dll" />
<Content Include="Resources\libwebp64.dll" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Resource Include="Images\Blocks\NeoForge.png" /> <Resource Include="Images\Blocks\NeoForge.png" />
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.