Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a01043261 | ||
|
|
36b5bcbef4 | ||
|
|
c850596cab | ||
|
|
c3ee4c7e1c | ||
|
|
4d76936f22 | ||
|
|
be59ab8dfb | ||
|
|
fffa26cd4c | ||
|
|
d253b4f187 | ||
|
|
2e41bbc187 | ||
|
|
af8be24506 | ||
|
|
f14bb03361 | ||
|
|
de4ad48acb | ||
|
|
c6c7b818c9 | ||
|
|
46f4b0b2d2 | ||
|
|
ffaf5b9618 | ||
|
|
c89ebf3b19 |
No files matched your search
@@ -51,15 +51,6 @@ Public Class Application
|
||||
Else
|
||||
Environment.Exit((My.Computer.Info.AvailablePhysicalMemory - Ram) / 1024) '返回清理的内存量(K)
|
||||
End If
|
||||
#If DEBUG Then
|
||||
'制作更新包
|
||||
ElseIf e.Args(0) = "--edit1" Then
|
||||
ExeEdit(e.Args(1), True)
|
||||
Environment.Exit(ProcessReturnValues.TaskDone)
|
||||
ElseIf e.Args(0) = "--edit2" Then
|
||||
ExeEdit(e.Args(1), False)
|
||||
Environment.Exit(ProcessReturnValues.TaskDone)
|
||||
#End If
|
||||
End If
|
||||
End If
|
||||
'初始化文件结构
|
||||
@@ -132,7 +123,7 @@ WaitRetry:
|
||||
Log($"[Start] 管理员权限:{IsAdmin()}")
|
||||
'检测异常环境
|
||||
If Path.Contains(IO.Path.GetTempPath()) OrElse Path.Contains("AppData\Local\Temp\") Then
|
||||
MyMsgBox("请将 PCL 从压缩包中解压后再使用!" & vbCrLf & "如果不会解压,可以在网上寻找教程。", "尚未解压", "我知道了", IsWarn:=True)
|
||||
MyMsgBox("请将 PCL 从压缩包中解压后再使用!" & vbCrLf & "如果不会解压,可以在网上寻找教程。", "需要解压!", "我知道了", IsWarn:=True, ForceWait:=True)
|
||||
FormMain.EndProgramForce(ProcessReturnValues.Cancel)
|
||||
End If
|
||||
If Is32BitSystem Then
|
||||
@@ -159,7 +150,7 @@ WaitRetry:
|
||||
|
||||
'结束
|
||||
Private Sub Application_SessionEnding(sender As Object, e As SessionEndingCancelEventArgs) Handles Me.SessionEnding
|
||||
FrmMain.EndProgram(False)
|
||||
FrmMain?.EndProgram(False)
|
||||
End Sub
|
||||
|
||||
'异常
|
||||
|
||||
@@ -107,11 +107,14 @@ Public Class MyHint
|
||||
End Sub
|
||||
|
||||
'触发点击事件
|
||||
Public Event Click(sender As Object, e As MouseButtonEventArgs)
|
||||
Private IsMouseDown As Boolean = False
|
||||
Private Sub MyHint_MouseUp(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseLeftButtonUp
|
||||
If Not IsMouseDown Then Return
|
||||
IsMouseDown = False
|
||||
Log("[Control] 按下提示条" & If(String.IsNullOrEmpty(Name), "", ":" & Name))
|
||||
RaiseEvent Click(sender, e)
|
||||
If e.Handled Then Return
|
||||
e.Handled = True
|
||||
RaiseCustomEvent() '自定义事件
|
||||
End Sub
|
||||
|
||||
@@ -11,6 +11,22 @@ Public Class FormMain
|
||||
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
|
||||
'统计更新日志条目
|
||||
#If BETA Then
|
||||
If LastVersion < 389 Then 'Release 2.12.6.1
|
||||
If LastVersion = 387 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法使用 Java 25+ 启动 Forge"))
|
||||
FeatureCount += 4
|
||||
BugCount += 3
|
||||
End If
|
||||
If LastVersion < 387 Then 'Release 2.12.6
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:降低 Minecraft 的内存占用"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:Minecraft 使用 Java 25+ 时的一个性能问题"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法下载 NeoForge 26.1"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:部分关键词搜不到资源,特别是中文 Mod 搜索经常没有结果"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:老版本 Windows 无法启动游戏"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:连接 Mojang 的服务可能失败,提示错误码 421"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法访问爱发电"))
|
||||
FeatureCount += 24
|
||||
BugCount += 19
|
||||
End If
|
||||
If LastVersion < 383 Then 'Release 2.12.3
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:部分关键词搜不到资源,特别是中文 Mod 搜索经常没有结果"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:下载可能完全卡住,或是下载进度反复回退"))
|
||||
@@ -84,65 +100,36 @@ Public Class FormMain
|
||||
FeatureCount += 9
|
||||
BugCount += 26
|
||||
End If
|
||||
If LastVersion < 355 Then 'Release 2.9.3
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:Minecraft 会优先使用独立显卡运行"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:简化下载新版本第二步的 UI"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:使用新的版本隔离策略"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:添加了在全局启动设置与版本独立设置之间互相跳转的按钮"))
|
||||
FeatureCount += 20
|
||||
BugCount += 28
|
||||
End If
|
||||
If LastVersion < 352 Then 'Release 2.9.1
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "新增:导出整合包功能"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:支持在超长路径下安装、启动游戏"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法安装 1.21 OptiFine"))
|
||||
FeatureCount += 23
|
||||
BugCount += 10
|
||||
End If
|
||||
If LastVersion < 349 Then 'Release 2.8.13
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:网络环境不佳时,Mod、整合包页面的加载速度"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:部分电脑无法打开程序"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:可能无法识别、更新 Mod"))
|
||||
FeatureCount += 6
|
||||
BugCount += 14
|
||||
End If
|
||||
If LastVersion < 347 Then 'Release 2.8.12
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:Mod 管理页面添加下载 Mod、安装 Mod 选项"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:Mod 详情页面支持按加载器、游戏版本进行分类和筛选"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "新增:支持安装同时包含 modpack 文件和启动器的懒人包"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "优化:整合包导入流程"))
|
||||
FeatureCount += 43
|
||||
BugCount += 37
|
||||
End If
|
||||
If LastVersion < 342 Then 'Release 2.8.9
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:支持下载原版服务端"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "新增:本地 Mod 的标题支持选择显示 Mod 原始文件名"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:搜索后启用/禁用 Mod 时出错"))
|
||||
FeatureCount += 17
|
||||
BugCount += 13
|
||||
End If
|
||||
If LastVersion < 340 Then 'Release 2.8.8
|
||||
If LastVersion = 338 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:数个与新正版登录相关的严重 Bug"))
|
||||
FeatureCount += 3
|
||||
BugCount += 7
|
||||
End If
|
||||
If LastVersion < 338 Then 'Release 2.8.7
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "优化:使用新的正版登录方式,以提高安全性"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:安装整合包、检索 Mod 的稳定性"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法加载部分 Mod 的图标"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:在 Mod 管理页面删除 Mod 导致报错"))
|
||||
FeatureCount += 11
|
||||
BugCount += 21
|
||||
End If
|
||||
#Else
|
||||
'5: FEAT+
|
||||
'4: IMP+ FEAT*
|
||||
'3:BUG+ IMP* FEAT-
|
||||
'2:BUG* IMP-
|
||||
'1:BUG-
|
||||
If LastVersion < 388 Then 'Snapshot 2.12.6.1
|
||||
If LastVersion = 386 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法使用 Java 25+ 启动 Forge"))
|
||||
FeatureCount += 4
|
||||
BugCount += 3
|
||||
End If
|
||||
If LastVersion < 386 Then 'Snapshot 2.12.6
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:Minecraft 使用 Java 25+ 时的一个性能问题"))
|
||||
If LastVersion = 384 OrElse LastVersion = 385 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法正常重命名游戏版本"))
|
||||
If LastVersion = 385 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法显示 Modrinth 整合包的版本列表"))
|
||||
BugCount += 1
|
||||
End If
|
||||
If LastVersion < 385 Then 'Snapshot 2.12.5
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法下载 NeoForge 26.1"))
|
||||
If LastVersion = 384 Then
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:下载可能失败,提示下载管理刷新线程出错"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法保存选择的 Minecraft 文件夹"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:使用中文搜索 Mod 时,部分结果会忽略筛选条件"))
|
||||
End If
|
||||
FeatureCount += 3
|
||||
BugCount += 6
|
||||
End If
|
||||
If LastVersion < 384 Then 'Snapshot 2.12.4
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:降低 Minecraft 的内存占用"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:部分关键词搜不到资源,特别是中文 Mod 搜索经常没有结果"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:降低游戏的内存占用"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:老版本 Windows 无法启动游戏"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:连接 Mojang 的服务可能失败,提示错误码 421"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法访问爱发电"))
|
||||
@@ -262,81 +249,6 @@ Public Class FormMain
|
||||
FeatureCount += 9
|
||||
BugCount += 26
|
||||
End If
|
||||
If LastVersion < 354 Then 'Snapshot 2.9.3
|
||||
If LastVersion = 352 Then
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:低版本 MC 没有声音"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:若不安装 Mod 加载器,则无法安装 OptiFine 1.14+"))
|
||||
End If
|
||||
FeatureCount += 8
|
||||
BugCount += 8
|
||||
End If
|
||||
If LastVersion < 352 Then 'Snapshot 2.9.2
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:Minecraft 会优先使用独立显卡运行"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:简化下载新版本第二步的 UI"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:使用新的版本隔离策略"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:添加了在全局启动设置与版本独立设置之间互相跳转的按钮"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:使用快照版导出带 PCL 的整合包可能失败"))
|
||||
FeatureCount += 12
|
||||
BugCount += 20
|
||||
End If
|
||||
If LastVersion < 351 Then 'Snapshot 2.9.1
|
||||
If LastVersion = 350 Then
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "优化:对导出整合包功能进行了 7 项优化,详见完整更新日志"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法进行第三方登录"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:在部分版本下,打开导出页面会导致启动器崩溃"))
|
||||
BugCount += 1
|
||||
End If
|
||||
BugCount += 2
|
||||
End If
|
||||
If LastVersion < 350 Then 'Snapshot 2.9.0
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "新增:导出整合包功能"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:支持在超长路径下安装、启动游戏"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法安装 1.21 OptiFine"))
|
||||
FeatureCount += 21
|
||||
BugCount += 10
|
||||
End If
|
||||
If LastVersion < 348 Then 'Snapshot 2.8.13
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:网络环境不佳时,Mod、整合包页面的加载速度"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:部分电脑无法打开程序"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:可能无法识别、更新 Mod"))
|
||||
FeatureCount += 6
|
||||
BugCount += 14
|
||||
End If
|
||||
If LastVersion < 346 Then 'Snapshot 2.8.12
|
||||
If LastVersion = 345 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:帮助页面报错"))
|
||||
End If
|
||||
If LastVersion < 345 Then 'Snapshot 2.8.11
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:Mod 管理页面添加下载 Mod、安装 Mod 选项"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:Mod 详情页面支持按加载器、游戏版本进行分类和筛选"))
|
||||
FeatureCount += 23
|
||||
BugCount += 21
|
||||
End If
|
||||
If LastVersion < 343 Then 'Snapshot 2.8.10
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "新增:支持安装同时包含 modpack 文件和启动器的懒人包"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "优化:整合包导入流程"))
|
||||
FeatureCount += 20
|
||||
BugCount += 16
|
||||
End If
|
||||
If LastVersion < 341 Then 'Snapshot 2.8.9
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:支持下载原版服务端"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "新增:本地 Mod 的标题支持选择显示 Mod 原始文件名"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:搜索后启用/禁用 Mod 时出错"))
|
||||
FeatureCount += 17
|
||||
BugCount += 13
|
||||
End If
|
||||
If LastVersion < 339 Then 'Snapshot 2.8.8
|
||||
If LastVersion = 337 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:数个与新正版登录相关的严重 Bug"))
|
||||
FeatureCount += 3
|
||||
BugCount += 7
|
||||
End If
|
||||
If LastVersion < 337 Then 'Snapshot 2.8.7
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "优化:使用新的正版登录方式,以提高安全性"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:安装整合包、检索 Mod 的稳定性"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法加载部分 Mod 的图标"))
|
||||
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:在 Mod 管理页面删除 Mod 导致报错"))
|
||||
FeatureCount += 11
|
||||
BugCount += 21
|
||||
End If
|
||||
#End If
|
||||
'整理更新日志文本
|
||||
Dim ContentList As New List(Of String)
|
||||
|
||||
@@ -14,25 +14,24 @@ Public Module ModBase
|
||||
#Region "声明"
|
||||
|
||||
'下列版本信息由更新器自动修改
|
||||
Public Const VersionBaseName As String = "2.12.4" '不含分支前缀的显示用版本名
|
||||
Public Const VersionStandardCode As String = "2.12.4." & VersionBranchCode '标准格式的四段式版本号
|
||||
Public Const VersionBaseName As String = "2.12.6.1" '显示用版本名
|
||||
Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
|
||||
#If BETA Then
|
||||
Public Const VersionCode As Integer = 383 'Release
|
||||
Public Const VersionCode As Integer = 389 '正式版
|
||||
#Else
|
||||
Public Const VersionCode As Integer = 384 'Snapshot
|
||||
Public Const VersionCode As Integer = 388 '快照版
|
||||
#End If
|
||||
'自动生成的版本信息
|
||||
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
|
||||
#If RELEASE Then
|
||||
Public Const VersionBranchName As String = "Snapshot"
|
||||
Public Const VersionBranchCode As String = "0"
|
||||
Public Const VersionBranchName As String = "快照版"
|
||||
Public Const VersionBranchCode As Integer = 0
|
||||
#ElseIf BETA Then
|
||||
Public Const VersionBranchName As String = "Release"
|
||||
Public Const VersionBranchCode As String = "50"
|
||||
Public Const VersionBranchName As String = "正式版"
|
||||
Public Const VersionBranchCode As Integer = 50
|
||||
#Else
|
||||
Public Const VersionBranchName As String = "Debug"
|
||||
Public Const VersionBranchCode As String = "100"
|
||||
Public Const VersionBranchName As String = "开发版"
|
||||
Public Const VersionBranchCode As Integer = 100
|
||||
#End If
|
||||
|
||||
''' <summary>
|
||||
@@ -1270,6 +1269,7 @@ Re:
|
||||
End Function
|
||||
End Class
|
||||
|
||||
'压缩文件
|
||||
''' <summary>
|
||||
''' 尝试根据后缀名判断文件种类并解压文件,支持 gz 与 zip,会尝试将 jar 以 zip 方式解压。
|
||||
''' 会尝试创建,但不会清空目标文件夹。
|
||||
@@ -1318,6 +1318,25 @@ Re:
|
||||
End Try
|
||||
End Try
|
||||
End Sub
|
||||
''' <summary>
|
||||
''' 将多个文件打包为一个压缩文件。
|
||||
''' 这些文件会被直接放在压缩包根目录下。
|
||||
''' </summary>
|
||||
Public Sub CreateCompressedFile(OutputFullPath As String, SourceFiles As IEnumerable(Of String))
|
||||
Dim DirectoryPath = IO.Path.GetDirectoryName(OutputFullPath)
|
||||
If Not Directory.Exists(DirectoryPath) Then Directory.CreateDirectory(DirectoryPath)
|
||||
Using ZipStream As New FileStream(OutputFullPath, FileMode.Create)
|
||||
Using Archive As New ZipArchive(ZipStream, ZipArchiveMode.Create)
|
||||
For Each FilePath In SourceFiles
|
||||
If Not File.Exists(FilePath) Then Return
|
||||
Using SourceStream As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read),
|
||||
EntryStream As Stream = Archive.CreateEntry(IO.Path.GetFileName(FilePath)).Open()
|
||||
SourceStream.CopyTo(EntryStream)
|
||||
End Using
|
||||
Next
|
||||
End Using
|
||||
End Using
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 删除文件夹,返回删除的文件个数。通过参数选择是否抛出异常。
|
||||
@@ -1336,11 +1355,12 @@ Re:
|
||||
Dim Files As String()
|
||||
Try
|
||||
Files = Directory.GetFiles(Path)
|
||||
Catch ex As DirectoryNotFoundException '#4549
|
||||
If Not Directory.Exists(Path) Then Return 0 '可能已被其他线程删除
|
||||
Log(ex, $"疑似为孤立符号链接,尝试直接删除({Path})", LogLevel.Developer)
|
||||
Directory.Delete(Path)
|
||||
Return 0
|
||||
Catch ex As DirectoryNotFoundException '#4549,也可能已被其他线程删除
|
||||
If Directory.Exists(Path) Then
|
||||
Log(ex, $"疑似为孤立符号链接,尝试直接删除({Path})", LogLevel.Developer)
|
||||
Directory.Delete(Path)
|
||||
End If
|
||||
Return DeletedCount
|
||||
End Try
|
||||
For Each FilePath As String In Files
|
||||
Dim RetriedFile As Boolean = False
|
||||
@@ -1348,6 +1368,8 @@ RetryFile:
|
||||
Try
|
||||
File.Delete(FilePath)
|
||||
DeletedCount += 1
|
||||
Catch ex As DirectoryNotFoundException
|
||||
Return DeletedCount
|
||||
Catch ex As Exception
|
||||
If Not RetriedFile Then
|
||||
RetriedFile = True
|
||||
@@ -3321,9 +3343,11 @@ Retry:
|
||||
|
||||
'遥测
|
||||
Public Sub Telemetry([Event] As String, ParamArray Datas As String())
|
||||
#If Not RELEASE And Not BETA Then
|
||||
Return '开发版不上传遥测
|
||||
#End If
|
||||
If Not Settings.Get("SystemSystemTelemetry") Then Return '用户关闭了遥测
|
||||
If Not ClsBaseUrl.StartsWithF("http") Then Return '开源版没有设置遥测地址
|
||||
If VersionBranchName = "Debug" Then Return '开发版本不上传遥测
|
||||
RunInNewThread(
|
||||
Sub()
|
||||
Try
|
||||
|
||||
@@ -182,10 +182,19 @@ RequestFinished:
|
||||
Throw New Exception($"预处理下载文件路径失败({LocalPath})", ex)
|
||||
End Try
|
||||
'下载
|
||||
Dim RetryCount As Integer = 0
|
||||
Retry:
|
||||
Try
|
||||
File.WriteAllBytes(LocalPath, SendRequest(Url, HttpMethod.Get, SimulateBrowserHeaders:=SimulateBrowserHeaders))
|
||||
Catch ex As ThreadInterruptedException
|
||||
File.Delete(LocalPath)
|
||||
Throw
|
||||
Catch ex As Exception
|
||||
File.Delete(LocalPath)
|
||||
If RetryCount < 2 Then
|
||||
RetryCount += 1
|
||||
GoTo Retry
|
||||
End If
|
||||
Throw New WebException($"通过网络请求直接下载小文件失败({LocalPath})", ex)
|
||||
End Try
|
||||
End Sub
|
||||
@@ -284,6 +293,9 @@ RequestFinished:
|
||||
Throw
|
||||
Catch ex As ResponsedWebException
|
||||
Throw
|
||||
Catch ex As FileNotFoundException
|
||||
'由于 CacheCow 读取缓存失败,然后系统调用不存在的 System.Net.Http.Formatting.resources 抛出(#8150)
|
||||
Throw New Exception($"网络请求时读取缓存失败", ex)
|
||||
Catch ex As Exception
|
||||
RecordIPReliability(HostIp, -1)
|
||||
If TypeOf ex Is OperationCanceledException OrElse TypeOf ex Is TimeoutException Then 'CancellationToken 超时
|
||||
@@ -416,7 +428,7 @@ RequestFinished:
|
||||
Public ReadOnly Property NetTaskSpeedLimitHigh As Long
|
||||
Get
|
||||
If _NetTaskSpeedLimitHigh Is Nothing Then
|
||||
Dim Setting = PCL.Settings.Get("ToolDownloadSpeed")
|
||||
Dim Setting As Integer = Settings.Get("ToolDownloadSpeed")
|
||||
If Setting <= 14 Then
|
||||
_NetTaskSpeedLimitHigh = (Setting + 1) * 0.1 * 1024 * 1024L
|
||||
ElseIf Setting <= 31 Then
|
||||
@@ -1959,13 +1971,9 @@ Retry:
|
||||
''' 是否有正在进行中、需要在下载管理页面显示的下载任务?
|
||||
''' </summary>
|
||||
Public Function HasDownloadingTask(Optional IgnoreCustomDownload As Boolean = False) As Boolean
|
||||
For Each Task In LoaderTaskbar.ToList()
|
||||
If (Task.Show AndAlso Task.State = LoadState.Loading) AndAlso
|
||||
(Not IgnoreCustomDownload OrElse Not Task.Name.ToString.Contains("自定义下载")) Then
|
||||
Return True
|
||||
End If
|
||||
Next
|
||||
Return False
|
||||
Return LoaderTaskbar.Any(
|
||||
Function(Task) Task.Show AndAlso Task.State = LoadState.Loading AndAlso
|
||||
(Not IgnoreCustomDownload OrElse Not Task.Name.ToString.Contains("自定义下载")))
|
||||
End Function
|
||||
|
||||
#End Region
|
||||
|
||||
@@ -1,35 +1,40 @@
|
||||
Public Module ModComp
|
||||
Imports System.IO.Compression
|
||||
|
||||
Public Enum CompType
|
||||
''' <summary>
|
||||
''' 允许任意种类,或种类未知。
|
||||
''' </summary>
|
||||
Any = -1
|
||||
Public Module ModComp
|
||||
|
||||
<Flags> Public Enum CompType
|
||||
''' <summary>
|
||||
''' Mod。
|
||||
''' </summary>
|
||||
[Mod] = 0
|
||||
[Mod] = 1
|
||||
''' <summary>
|
||||
''' 整合包。
|
||||
''' </summary>
|
||||
ModPack = 1
|
||||
ModPack = 2
|
||||
''' <summary>
|
||||
''' 资源包。
|
||||
''' </summary>
|
||||
ResourcePack = 2
|
||||
ResourcePack = 4
|
||||
''' <summary>
|
||||
''' 光影包。
|
||||
''' </summary>
|
||||
Shader = 3
|
||||
Shader = 8
|
||||
''' <summary>
|
||||
''' CurseForge:数据包。
|
||||
''' Modrinth:数据包,或数据包与 Mod 的混合。
|
||||
''' 数据包。
|
||||
''' </summary>
|
||||
DataPack = 4
|
||||
DataPack = 16
|
||||
''' <summary>
|
||||
''' 服务端插件。
|
||||
''' </summary>
|
||||
Plugin = 5
|
||||
Plugin = 32
|
||||
''' <summary>
|
||||
''' 同时包含数据包以及 Mod。
|
||||
''' </summary>
|
||||
ModOrDataPack = [Mod] Or DataPack
|
||||
''' <summary>
|
||||
''' 允许任意种类,或种类未知。
|
||||
''' </summary>
|
||||
Any = [Mod] Or ModPack Or ResourcePack Or Shader Or DataPack Or Plugin
|
||||
End Enum
|
||||
Public Enum CompModLoaderType
|
||||
'https://docs.curseforge.com/?http#tocS_ModLoaderType
|
||||
@@ -55,37 +60,39 @@
|
||||
'初始化数据库
|
||||
_CompDatabase = New List(Of CompDatabaseEntry)
|
||||
Dim i As Integer = 0
|
||||
For Each Line In DecodeBytes(GetResources("ModData")).Replace(vbCrLf, vbLf).Replace(vbCr, "").Split(vbLf)
|
||||
i += 1
|
||||
If Line = "" Then Continue For
|
||||
For Each EntryData As String In Line.Split("¨")
|
||||
Dim Entry = New CompDatabaseEntry
|
||||
Dim Splited = EntryData.Split("|")
|
||||
Entry.Popularity = Val(Splited(0))
|
||||
If Splited(1).StartsWithF("@") Then
|
||||
Entry.CurseForgeSlug = Nothing
|
||||
Entry.ModrinthSlug = Splited(1).Replace("@", "")
|
||||
ElseIf Splited(1).EndsWithF("@") Then
|
||||
Entry.CurseForgeSlug = Splited(1).TrimEnd("@")
|
||||
Entry.ModrinthSlug = Entry.CurseForgeSlug
|
||||
ElseIf Splited(1).Contains("@") Then
|
||||
Entry.CurseForgeSlug = Splited(1).Split("@")(0)
|
||||
Entry.ModrinthSlug = Splited(1).Split("@")(1)
|
||||
Else
|
||||
Entry.CurseForgeSlug = Splited(1)
|
||||
Entry.ModrinthSlug = Nothing
|
||||
End If
|
||||
Entry.WikiId = i
|
||||
If Splited.Count >= 3 Then
|
||||
Entry.ChineseName = Splited.Last
|
||||
If Entry.ChineseName.Contains("*") Then '处理 *
|
||||
Entry.ChineseName = Entry.ChineseName.Replace("*",
|
||||
$" ({If(Entry.CurseForgeSlug, Entry.ModrinthSlug).Replace("-", " ").Capitalize})")
|
||||
Using Archive As New ZipArchive(New MemoryStream(GetResources("ModData")), ZipArchiveMode.Read)
|
||||
For Each Line In ReadFile(Archive.GetEntry("moddata.txt").Open(), Encoding.UTF8).Replace(vbCrLf, vbLf).Replace(vbCr, "").Split(vbLf)
|
||||
i += 1
|
||||
If Line = "" Then Continue For
|
||||
For Each EntryData As String In Line.Split("¨")
|
||||
Dim Entry = New CompDatabaseEntry
|
||||
Dim Splited = EntryData.Split("|")
|
||||
Entry.Popularity = Val(Splited(0))
|
||||
If Splited(1).StartsWithF("@") Then
|
||||
Entry.CurseForgeSlug = Nothing
|
||||
Entry.ModrinthSlug = Splited(1).Replace("@", "")
|
||||
ElseIf Splited(1).EndsWithF("@") Then
|
||||
Entry.CurseForgeSlug = Splited(1).TrimEnd("@")
|
||||
Entry.ModrinthSlug = Entry.CurseForgeSlug
|
||||
ElseIf Splited(1).Contains("@") Then
|
||||
Entry.CurseForgeSlug = Splited(1).Split("@")(0)
|
||||
Entry.ModrinthSlug = Splited(1).Split("@")(1)
|
||||
Else
|
||||
Entry.CurseForgeSlug = Splited(1)
|
||||
Entry.ModrinthSlug = Nothing
|
||||
End If
|
||||
End If
|
||||
_CompDatabase.Add(Entry)
|
||||
Entry.WikiId = i
|
||||
If Splited.Count >= 3 Then
|
||||
Entry.ChineseName = Splited.Last
|
||||
If Entry.ChineseName.Contains("*") Then '处理 *
|
||||
Entry.ChineseName = Entry.ChineseName.Replace("*",
|
||||
$" ({If(Entry.CurseForgeSlug, Entry.ModrinthSlug).Replace("-", " ").Capitalize})")
|
||||
End If
|
||||
End If
|
||||
_CompDatabase.Add(Entry)
|
||||
Next
|
||||
Next
|
||||
Next
|
||||
End Using
|
||||
Return _CompDatabase
|
||||
End Get
|
||||
End Property
|
||||
@@ -132,10 +139,10 @@
|
||||
''' </summary>
|
||||
Public ReadOnly FromCurseForge As Boolean
|
||||
''' <summary>
|
||||
''' 工程的种类。
|
||||
''' 由于 Modrinth 混合使用 Mod 和数据包,结果不一定准确。
|
||||
''' 工程中包含的文件种类。
|
||||
''' 若为 Modrinth 工程,可能为 Mod 或 数据包。
|
||||
''' </summary>
|
||||
Public ReadOnly Type As CompType
|
||||
Public ReadOnly Types As CompType
|
||||
''' <summary>
|
||||
''' 工程的短名。例如 technical-enchant。
|
||||
''' </summary>
|
||||
@@ -191,6 +198,12 @@
|
||||
''' 例如:261(26.1.x)、180(1.18.x)。
|
||||
''' </summary>
|
||||
Public ReadOnly Drops As List(Of Integer)
|
||||
''' <summary>
|
||||
''' Modrinth API 返回的原始版本列表。
|
||||
''' 仅用于 Modrinth 工程的二次筛选,不会被缓存,不会被预处理。
|
||||
''' 若非从 Modrinth 获取则为 Nothing。
|
||||
''' </summary>
|
||||
Public ReadOnly UnsafeGameVersions As List(Of String)
|
||||
|
||||
'数据库信息
|
||||
|
||||
@@ -203,7 +216,7 @@
|
||||
Get
|
||||
If Not LoadedDatabase Then
|
||||
LoadedDatabase = True
|
||||
If Type = CompType.Mod OrElse Type = CompType.DataPack Then
|
||||
If Types.HasFlag(CompType.Mod) OrElse Types.HasFlag(CompType.DataPack) Then
|
||||
_DatabaseEntry = CompDatabase.FirstOrDefault(Function(c) If(FromCurseForge, c.CurseForgeSlug, c.ModrinthSlug) = Slug)
|
||||
End If
|
||||
End If
|
||||
@@ -240,7 +253,7 @@
|
||||
If Data.ContainsKey("Tags") Then
|
||||
#Region "CompJson"
|
||||
FromCurseForge = Data("DataSource") = "CurseForge"
|
||||
Type = Data("Type").ToObject(Of Integer)
|
||||
Types = Data("Types").ToObject(Of Integer)
|
||||
Slug = Data("Slug")
|
||||
Id = Data("Id")
|
||||
If Data.ContainsKey("CurseForgeFileIds") Then CurseForgeFileIds = CType(Data("CurseForgeFileIds"), JArray).Select(Function(t) t.ToObject(Of Integer)).ToList
|
||||
@@ -284,23 +297,23 @@
|
||||
If LogoUrl = "" Then LogoUrl = Nothing
|
||||
'Type
|
||||
If Website.Contains("/mc-mods/") OrElse Website.Contains("/mod/") Then
|
||||
Type = CompType.Mod
|
||||
Types = CompType.Mod
|
||||
ElseIf Website.Contains("/modpacks/") Then
|
||||
Type = CompType.ModPack
|
||||
Types = CompType.ModPack
|
||||
ElseIf Website.Contains("/resourcepacks/") Then
|
||||
Type = CompType.ResourcePack
|
||||
Types = CompType.ResourcePack
|
||||
ElseIf Website.Contains("/texture-packs/") Then
|
||||
Type = CompType.ResourcePack
|
||||
Types = CompType.ResourcePack
|
||||
ElseIf Website.Contains("/shaders/") Then
|
||||
Type = CompType.Shader
|
||||
Types = CompType.Shader
|
||||
Else
|
||||
Type = CompType.DataPack
|
||||
Types = CompType.DataPack
|
||||
End If
|
||||
'FileIndexes / VanillaMajorVersions / ModLoaders
|
||||
ModLoaders = New List(Of CompModLoaderType)
|
||||
Dim Files As New List(Of KeyValuePair(Of Integer, List(Of String))) 'FileId, GameVersions
|
||||
For Each File In If(Data("latestFiles"), New JArray)
|
||||
Dim NewFile As New CompFile(File, Type)
|
||||
Dim NewFile As New CompFile(File, Types)
|
||||
If Not NewFile.Available Then Continue For
|
||||
ModLoaders.AddRange(NewFile.ModLoaders)
|
||||
Dim GameVersions = File("gameVersions").ToObject(Of List(Of String))
|
||||
@@ -313,7 +326,7 @@
|
||||
Next
|
||||
CurseForgeFileIds = Files.Select(Function(f) f.Key).Distinct.ToList
|
||||
Drops = Files.SelectMany(Function(f) f.Value).
|
||||
Select(Function(v) McVersion.VersionToDrop(v)).Where(Function(v) v > 0).Distinct.OrderByDescending(Function(v) v).ToList
|
||||
Select(Function(v) McVersion.VersionToDrop(v)).Where(Function(v) v <> 209).Distinct.OrderByDescending(Function(v) v).ToList
|
||||
ModLoaders = ModLoaders.Distinct.OrderBy(Of Integer)(Function(t) t).ToList
|
||||
'Tags
|
||||
Tags = New List(Of String)
|
||||
@@ -408,14 +421,14 @@
|
||||
Website = $"https://modrinth.com/{Data("project_type")}/{Slug}"
|
||||
'GameVersions
|
||||
'搜索结果的键为 versions,获取特定工程的键为 game_versions
|
||||
Drops = If(CType(If(Data("game_versions"), Data("versions")), JArray), New JArray).
|
||||
Select(Function(v) McVersion.VersionToDrop(v)).Where(Function(v) v > 0).Distinct.OrderByDescending(Function(v) v).ToList
|
||||
UnsafeGameVersions = If(CType(If(Data("game_versions"), Data("versions")), JArray), New JArray).Select(Function(v) v.ToString).Distinct.ToList
|
||||
Drops = UnsafeGameVersions.Select(Function(v) McVersion.VersionToDrop(v)).Where(Function(v) v <> 209).Distinct.OrderByDescending(Function(v) v).ToList
|
||||
'Type
|
||||
Select Case Data("project_type").ToString
|
||||
Case "modpack" : Type = CompType.ModPack
|
||||
Case "resourcepack" : Type = CompType.ResourcePack
|
||||
Case "shader" : Type = CompType.Shader
|
||||
Case Else : Type = CompType.Mod 'Modrinth 将数据包标为 Mod
|
||||
Case "modpack" : Types = CompType.ModPack
|
||||
Case "resourcepack" : Types = CompType.ResourcePack
|
||||
Case "shader" : Types = CompType.Shader
|
||||
Case Else : Types = CompType.Mod 'Modrinth 将数据包标为 Mod,但 categories 字段里有 datapack
|
||||
End Select
|
||||
'Tags & ModLoaders
|
||||
Tags = New List(Of String)
|
||||
@@ -437,7 +450,7 @@
|
||||
Case "fabric" : ModLoaders.Add(CompModLoaderType.Fabric)
|
||||
Case "quilt" : ModLoaders.Add(CompModLoaderType.Quilt)
|
||||
Case "neoforge" : ModLoaders.Add(CompModLoaderType.NeoForge)
|
||||
Case "datapack" : Type = CompType.DataPack '若包含数据包版本,则优先标为 DataPack
|
||||
Case "datapack" : Types = CompType.DataPack
|
||||
'共用
|
||||
Case "technology" : Tags.Add("科技")
|
||||
Case "magic" : Tags.Add("魔法")
|
||||
@@ -452,9 +465,9 @@
|
||||
Case "game-mechanics" : Tags.Add("游戏机制")
|
||||
Case "transportation" : Tags.Add("运输")
|
||||
Case "storage" : Tags.Add("仓储")
|
||||
Case "decoration" : If Type <> CompType.ResourcePack Then Tags.Add("装饰")
|
||||
Case "mobs" : If Type <> CompType.ResourcePack Then Tags.Add("生物")
|
||||
Case "equipment" : If Type <> CompType.ResourcePack Then Tags.Add("装备")
|
||||
Case "decoration" : If Types <> CompType.ResourcePack Then Tags.Add("装饰")
|
||||
Case "mobs" : If Types <> CompType.ResourcePack Then Tags.Add("生物")
|
||||
Case "equipment" : If Types <> CompType.ResourcePack Then Tags.Add("装备")
|
||||
Case "social" : Tags.Add("服务器")
|
||||
Case "library" : Tags.Add("支持库")
|
||||
'整合包
|
||||
@@ -504,6 +517,7 @@
|
||||
Case "vanilla" : Tags.Add("原版可用")
|
||||
End Select
|
||||
Next
|
||||
If Types = CompType.DataPack AndAlso ModLoaders.Any Then Types = CompType.DataPack Or CompType.Mod
|
||||
#End Region
|
||||
End If
|
||||
If Not Tags.Any() Then Tags.Add("其他")
|
||||
@@ -519,7 +533,7 @@
|
||||
Public Function ToJson() As JObject
|
||||
Dim Json As New JObject
|
||||
Json("DataSource") = If(FromCurseForge, "CurseForge", "Modrinth")
|
||||
Json("Type") = CInt(Type)
|
||||
Json("Types") = CInt(Types)
|
||||
Json("Slug") = Slug
|
||||
Json("Id") = Id
|
||||
If CurseForgeFileIds IsNot Nothing Then Json("CurseForgeFileIds") = New JArray(CurseForgeFileIds)
|
||||
@@ -549,7 +563,7 @@
|
||||
For i = 0 To Drops.Count - 1 '版本号一定为降序
|
||||
'获取当前连续的版本号段
|
||||
Dim StartDrop As Integer = Drops(i), EndDrop As Integer = Drops(i)
|
||||
If StartDrop < 100 Then '如果支持新版本,则不显示 1.9-
|
||||
If StartDrop < 120 Then '如果支持新版本,则不显示 1.11-
|
||||
If Segments.Any() AndAlso Not IsOld Then
|
||||
Exit For
|
||||
Else
|
||||
@@ -567,14 +581,14 @@
|
||||
If StartDrop = EndDrop Then
|
||||
Segments.Add(StartName)
|
||||
ElseIf AllDrops IsNot Nothing AndAlso StartDrop >= AllDrops.First Then
|
||||
If EndDrop < 100 Then
|
||||
If EndDrop < 120 Then
|
||||
Segments.Clear()
|
||||
Segments.Add("全版本")
|
||||
Exit For
|
||||
Else
|
||||
Segments.Add(EndName & "+")
|
||||
End If
|
||||
ElseIf EndDrop < 100 Then
|
||||
ElseIf EndDrop < 120 Then
|
||||
Segments.Add(StartName & "-")
|
||||
Exit For
|
||||
ElseIf AllDrops Is Nothing OrElse AllDrops.IndexOf(EndDrop) - AllDrops.IndexOf(StartDrop) = 1 Then
|
||||
@@ -762,7 +776,7 @@ NoSubtitle:
|
||||
'Mod 加载器一致
|
||||
If ModLoaders.Count <> Project.ModLoaders.Count OrElse ModLoaders.Except(Project.ModLoaders).Any() Then Return False
|
||||
'若不为光影,则要求 MC 版本一致
|
||||
If Type <> CompType.Shader AndAlso (Drops.Count <> Project.Drops.Count OrElse Drops.Except(Project.Drops).Any()) Then Return False
|
||||
If Types <> CompType.Shader AndAlso (Drops.Count <> Project.Drops.Count OrElse Drops.Except(Project.Drops).Any()) Then Return False
|
||||
'最近更新时间差距在一周以内
|
||||
If Math.Abs((LastUpdate - Project.LastUpdate).TotalDays) > 7 Then Return False
|
||||
'MCMOD 翻译名 / 原名 / 描述文本 / Slug 的英文部分相同
|
||||
@@ -813,8 +827,8 @@ NoSubtitle:
|
||||
''' </summary>
|
||||
Public ReadOnly Property CanContinue As Boolean
|
||||
Get
|
||||
If Tag.StartsWithF("/") OrElse Not Source.HasFlag(CompSourceType.CurseForge) Then Storage.CurseForgeTotal = 0
|
||||
If Tag.EndsWithF("/") OrElse Not Source.HasFlag(CompSourceType.Modrinth) Then Storage.ModrinthTotal = 0
|
||||
If Tag.StartsWithF("/") OrElse Not Sources.HasFlag(CompSourceType.CurseForge) Then Storage.CurseForgeTotal = 0
|
||||
If Tag.EndsWithF("/") OrElse Not Sources.HasFlag(CompSourceType.Modrinth) Then Storage.ModrinthTotal = 0
|
||||
If Storage.CurseForgeTotal = -1 OrElse Storage.ModrinthTotal = -1 Then Return True
|
||||
Return Storage.CurseForgeOffset < Storage.CurseForgeTotal OrElse Storage.ModrinthOffset < Storage.ModrinthTotal
|
||||
End Get
|
||||
@@ -845,7 +859,7 @@ NoSubtitle:
|
||||
''' <summary>
|
||||
''' 允许的来源。
|
||||
''' </summary>
|
||||
Public Source As CompSourceType = CompSourceType.Any
|
||||
Public Sources As CompSourceType = CompSourceType.Any
|
||||
Public Sub New(Type As CompType, Storage As CompProjectStorage, TargetResultCount As Integer)
|
||||
Me.Type = Type
|
||||
Me.Storage = Storage
|
||||
@@ -904,7 +918,7 @@ NoSubtitle:
|
||||
Dim request = TryCast(obj, CompProjectRequest)
|
||||
Return request IsNot Nothing AndAlso
|
||||
Type = request.Type AndAlso TargetResultCount = request.TargetResultCount AndAlso
|
||||
Tag = request.Tag AndAlso ModLoader = request.ModLoader AndAlso Source = request.Source AndAlso
|
||||
Tag = request.Tag AndAlso ModLoader = request.ModLoader AndAlso Sources = request.Sources AndAlso
|
||||
GameVersion = request.GameVersion AndAlso SearchText = request.SearchText
|
||||
End Function
|
||||
Public Shared Operator =(left As CompProjectRequest, right As CompProjectRequest) As Boolean
|
||||
@@ -914,7 +928,7 @@ NoSubtitle:
|
||||
Return Not left = right
|
||||
End Operator
|
||||
Public Overrides Function GetHashCode() As Integer
|
||||
Return (Type, Tag, ModLoader, GameVersion, SearchText, Source).GetHashCode()
|
||||
Return (Type, Tag, ModLoader, GameVersion, SearchText, Sources).GetHashCode()
|
||||
End Function
|
||||
|
||||
End Class
|
||||
@@ -1019,7 +1033,7 @@ NoSubtitle:
|
||||
Return Candidates
|
||||
End Function
|
||||
'CurseForge
|
||||
If Request.Source.HasFlag(CompSourceType.CurseForge) Then
|
||||
If Request.Sources.HasFlag(CompSourceType.CurseForge) Then
|
||||
'数据库搜索
|
||||
Static CurseForgeSearchEntries As List(Of SearchEntry(Of CompDatabaseEntry)) =
|
||||
CompDatabase.Where(Function(Entry) Entry.CurseForgeSlug IsNot Nothing).Select(
|
||||
@@ -1043,7 +1057,7 @@ NoSubtitle:
|
||||
End If
|
||||
End If
|
||||
'Modrinth
|
||||
If Request.Source.HasFlag(CompSourceType.Modrinth) Then
|
||||
If Request.Sources.HasFlag(CompSourceType.Modrinth) Then
|
||||
'数据库搜索
|
||||
Static ModrinthSearchEntries As List(Of SearchEntry(Of CompDatabaseEntry)) =
|
||||
CompDatabase.Where(Function(Entry) Entry.ModrinthSlug IsNot Nothing).Select(
|
||||
@@ -1090,11 +1104,11 @@ NextPage:
|
||||
|
||||
'在 1.14-,部分老 Mod 没有设置支持的加载器,因此添加 Forge 筛选就会出现遗漏
|
||||
'所以,在发起请求时不筛选加载器,然后在返回的结果中自行筛除不是 Forge 的 Mod
|
||||
Dim IgnoreModLoaderFilter = Request.ModLoader = CompModLoaderType.Forge AndAlso McVersion.VersionToDrop(Request.GameVersion, True) < 140
|
||||
Dim IgnoreModLoaderFilter = Request.ModLoader = CompModLoaderType.Forge AndAlso McVersion.VersionToDrop(Request.GameVersion) < 140
|
||||
Try
|
||||
|
||||
'CurseForge 搜索
|
||||
If Request.Source.HasFlag(CompSourceType.CurseForge) AndAlso
|
||||
If Request.Sources.HasFlag(CompSourceType.CurseForge) AndAlso
|
||||
Not (Storage.CurseForgeTotal > -1 AndAlso Storage.CurseForgeTotal <= Storage.CurseForgeOffset) AndAlso '剩余的未显示的搜索结果不足
|
||||
(Not IsChineseSearch OrElse (IsChineseSearch AndAlso Not String.IsNullOrEmpty(CurseForgeAltSearchText))) Then '如果是中文搜索,就只在有对应搜索关键词的时候才继续
|
||||
WorkThreads.Add(RunInNewThread(
|
||||
@@ -1125,7 +1139,7 @@ NextPage:
|
||||
End If
|
||||
|
||||
'Modrinth 搜索
|
||||
If Request.Source.HasFlag(CompSourceType.Modrinth) AndAlso
|
||||
If Request.Sources.HasFlag(CompSourceType.Modrinth) AndAlso
|
||||
Not (Storage.ModrinthTotal > -1 AndAlso Storage.ModrinthTotal <= Storage.ModrinthOffset) AndAlso '剩余的未显示的搜索结果不足
|
||||
(Not IsChineseSearch OrElse (IsChineseSearch AndAlso Not String.IsNullOrEmpty(ModrinthAltSearchText))) Then '如果是中文搜索,就只在有对应搜索关键词的时候才继续
|
||||
WorkThreads.Add(RunInNewThread(
|
||||
@@ -1153,7 +1167,7 @@ NextPage:
|
||||
End If
|
||||
|
||||
'Modrinth 直接获取工程
|
||||
If Request.Source.HasFlag(CompSourceType.Modrinth) AndAlso
|
||||
If Request.Sources.HasFlag(CompSourceType.Modrinth) AndAlso
|
||||
Not (Storage.ModrinthTotal > -1 AndAlso Storage.ModrinthTotal <= Storage.ModrinthOffset) AndAlso '剩余的未显示的搜索结果不足
|
||||
ModrinthSlugs.Any Then '有直接获取的 Slug
|
||||
WorkThreads.Add(RunInNewThread(
|
||||
@@ -1163,7 +1177,16 @@ NextPage:
|
||||
Log("[Comp] 开始 Modrinth 直接获取:" & ModrinthUrl)
|
||||
Dim ProjectList As New List(Of CompProject)
|
||||
For Each JsonEntry As JObject In DlModRequest(ModrinthUrl)
|
||||
ProjectList.Add(New CompProject(JsonEntry))
|
||||
Dim Project As New CompProject(JsonEntry)
|
||||
'应用筛选
|
||||
If Request.Type <> CompType.Any AndAlso Not Project.Types.HasFlag(Request.Type) Then Continue For
|
||||
If Not String.IsNullOrEmpty(Request.Tag) AndAlso
|
||||
Not JsonEntry("categories").Any(Function(c) c.ToString = Request.Tag.AfterLast("/")) Then Continue For 'Project.Tags 已经转换成中文了,只能从 json 判
|
||||
If Request.ModLoader <> CompModLoaderType.Any AndAlso Not IgnoreModLoaderFilter AndAlso
|
||||
Not Project.ModLoaders.Any(Function(m) m = Request.ModLoader) Then Continue For
|
||||
If Not String.IsNullOrEmpty(Request.GameVersion) AndAlso
|
||||
Not Project.UnsafeGameVersions.Any(Function(d) d = Request.GameVersion) Then Continue For
|
||||
ProjectList.Add(Project)
|
||||
Next
|
||||
'更新结果
|
||||
ProjectList.ForEach(Sub(p) RawResults.Add(p))
|
||||
@@ -1196,9 +1219,9 @@ NextPage:
|
||||
Else
|
||||
If IsChineseSearch AndAlso Not (Request.Type = CompType.Mod OrElse Request.Type = CompType.DataPack) Then
|
||||
Throw New Exception(MSG_NO_CHINESE_SEARCH_RESULT)
|
||||
ElseIf Request.Source = CompSourceType.CurseForge AndAlso Request.Tag.StartsWithF("/") Then
|
||||
ElseIf Request.Sources = CompSourceType.CurseForge AndAlso Request.Tag.StartsWithF("/") Then
|
||||
Throw New Exception("CurseForge 不兼容所选的类型")
|
||||
ElseIf Request.Source = CompSourceType.Modrinth AndAlso Request.Tag.EndsWithF("/") Then
|
||||
ElseIf Request.Sources = CompSourceType.Modrinth AndAlso Request.Tag.EndsWithF("/") Then
|
||||
Throw New Exception("Modrinth 不兼容所选的类型")
|
||||
Else
|
||||
Throw New Exception("没有搜索结果")
|
||||
@@ -1418,7 +1441,7 @@ NextPage:
|
||||
'实例化
|
||||
|
||||
''' <summary>
|
||||
''' 从文件 Json 中初始化实例。若出错会抛出异常。
|
||||
''' 从 json 中初始化实例。若出错会抛出异常。
|
||||
''' </summary>
|
||||
Public Sub New(Data As JObject, DefaultType As CompType)
|
||||
Type = DefaultType
|
||||
@@ -1505,24 +1528,19 @@ NextPage:
|
||||
Size = File("size")
|
||||
Hash = File("hashes")("sha1")
|
||||
End If
|
||||
'ModLoaders
|
||||
'Loaders
|
||||
'结果可能混杂着 Mod、数据包和服务端插件
|
||||
Dim RawLoaders As List(Of String) = Data("loaders").Select(Function(v) v.ToString).ToList
|
||||
ModLoaders = New List(Of CompModLoaderType)
|
||||
If Type = CompType.Mod Then '以尽量宽容的方式检测加载器,以免同时兼容两种的项被删除
|
||||
If Type.HasFlag(CompType.Mod) OrElse Type.HasFlag(CompType.DataPack) Then
|
||||
If RawLoaders.Intersect({"bukkit", "folia", "paper", "purpur", "spigot"}).Any() Then Type = CompType.Plugin 'Veinminer Enchantment 同时支持服务端与 Fabric
|
||||
If RawLoaders.Contains("datapack") Then Type = CompType.DataPack
|
||||
If RawLoaders.Contains("forge") Then ModLoaders.Add(CompModLoaderType.Forge) : Type = CompType.Mod
|
||||
If RawLoaders.Contains("neoforge") Then ModLoaders.Add(CompModLoaderType.NeoForge) : Type = CompType.Mod
|
||||
If RawLoaders.Contains("fabric") Then ModLoaders.Add(CompModLoaderType.Fabric) : Type = CompType.Mod
|
||||
If RawLoaders.Contains("quilt") Then ModLoaders.Add(CompModLoaderType.Quilt) : Type = CompType.Mod
|
||||
ElseIf Type = CompType.DataPack Then
|
||||
If RawLoaders.Intersect({"bukkit", "folia", "paper", "purpur", "spigot"}).Any() Then Type = CompType.Plugin
|
||||
If RawLoaders.Contains("forge") Then ModLoaders.Add(CompModLoaderType.Forge) : Type = CompType.Mod
|
||||
If RawLoaders.Contains("neoforge") Then ModLoaders.Add(CompModLoaderType.NeoForge) : Type = CompType.Mod
|
||||
If RawLoaders.Contains("fabric") Then ModLoaders.Add(CompModLoaderType.Fabric) : Type = CompType.Mod
|
||||
If RawLoaders.Contains("quilt") Then ModLoaders.Add(CompModLoaderType.Quilt) : Type = CompType.Mod
|
||||
If RawLoaders.Contains("datapack") Then Type = CompType.DataPack
|
||||
Else
|
||||
'使用传入的类别,不作修改(#8377)
|
||||
End If
|
||||
'Dependencies
|
||||
If Data.ContainsKey("dependencies") Then
|
||||
@@ -1694,7 +1712,7 @@ NextPage:
|
||||
'Modrinth
|
||||
ResultJsonArray = DlModRequest($"https://api.modrinth.com/v2/project/{ProjectId}/version?include_changelog=false")
|
||||
End If
|
||||
CompFilesCache(ProjectId) = ResultJsonArray.Select(Function(a) New CompFile(a, TargetProject.Type)).
|
||||
CompFilesCache(ProjectId) = ResultJsonArray.Select(Function(a) New CompFile(a, TargetProject.Types)).
|
||||
Where(Function(a) a.Available).ToList.
|
||||
Distinct(Function(a, b) a.Id = b.Id) 'CurseForge 可能会重复返回相同项(#1330)
|
||||
End If
|
||||
|
||||
@@ -213,6 +213,7 @@
|
||||
For Each Version As JObject In Loader.Output.Value("versions")
|
||||
Drops.Add(McVersion.VersionToDrop(Version("id")))
|
||||
Next
|
||||
Drops.Remove(209)
|
||||
AllDrops = Drops.Distinct.OrderByDescending(Function(d) d).ToList()
|
||||
End Sub
|
||||
|
||||
@@ -858,10 +859,11 @@
|
||||
VersionName = ApiName
|
||||
Version = New Version(ApiName.BeforeFirst("-"))
|
||||
If Version.Major >= 24 Then
|
||||
Inherit = Version.ToString.Replace(".0", "")
|
||||
Inherit = $"{Version.Major}.{Version.Minor}.{Version.Build}"
|
||||
Else
|
||||
Inherit = "1." & Version.Major & If(Version.Minor > 0, "." & Version.Minor, "")
|
||||
Inherit = $"1.{Version.Major}.{Version.Minor}"
|
||||
End If
|
||||
If Inherit.EndsWithF(".0") Then Inherit = Left(Inherit, Inherit.Length - 2)
|
||||
If VersionName.Contains("+") Then Inherit &= "-" & VersionName.AfterFirst("+")
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -1413,13 +1413,23 @@ NextInstance:
|
||||
End If
|
||||
|
||||
'JLW
|
||||
Dim UseJLW As Boolean = Not Settings.Get("LaunchAdvanceDisableJLW") AndAlso Not Settings.Get("VersionAdvanceDisableJLW", McInstanceSelected)
|
||||
Dim UseJLW As Boolean =
|
||||
Not Settings.Get("LaunchAdvanceDisableJLW") AndAlso Not Settings.Get("VersionAdvanceDisableJLW", McInstanceSelected) AndAlso
|
||||
McLaunchJavaSelected.MajorVersion <= 18
|
||||
If UseJLW Then
|
||||
If McLaunchJavaSelected.MajorVersion >= 9 Then
|
||||
Args.Add("--add-exports") : Args.Add("cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED")
|
||||
End If
|
||||
Args.Add("-Doolloo.jlw.tmpdir=${pure_directory}") '这里需要不以 \ 结尾
|
||||
End If
|
||||
McLaunchLog("使用 JLW:" & UseJLW)
|
||||
|
||||
'LUA
|
||||
Dim UseLUA As Boolean =
|
||||
Not Settings.Get("LaunchAdvanceDisableLUA") AndAlso Not Settings.Get("VersionAdvanceDisableLUA", McInstanceSelected) AndAlso
|
||||
McLaunchJavaSelected.MajorVersion >= 25 AndAlso McInstanceSelected.Version.Drop >= 261
|
||||
If UseLUA Then Args.Add($"-javaagent:""{ExtractPatch("LUA")}""")
|
||||
McLaunchLog("使用 LUA:" & UseLUA)
|
||||
|
||||
#Region "内存管理"
|
||||
|
||||
@@ -1446,9 +1456,10 @@ NextInstance:
|
||||
Args = Args.Where(Function(a) Not RegexCheck(a,
|
||||
"( )*-XX:[+-]?(Use\w+GC|ZGenerational|UseCompactObjectHeaders|G1\w+Percent|G1\w+Size|(Max|Min)(GCPauseMillis|HeapFreeRatio))")).ToList
|
||||
'添加 GC 参数
|
||||
Args.Add("-XX:+UnlockExperimentalVMOptions")
|
||||
If McLaunchJavaSelected.MajorVersion >= 24 AndAlso McLaunchJavaSelected.Is64Bit Then Args.Add("-XX:+UseCompactObjectHeaders")
|
||||
If UseG1GC AndAlso SetupType = 4 Then
|
||||
'优化的 G1GC
|
||||
Args.Add("-XX:+UnlockExperimentalVMOptions")
|
||||
Args.Add("-XX:+UseG1GC")
|
||||
Args.Add("-XX:G1NewSizePercent=20")
|
||||
Args.Add("-XX:G1ReservePercent=20")
|
||||
@@ -1459,10 +1470,8 @@ NextInstance:
|
||||
If McLaunchJavaSelected.MajorVersion = 8 Then Args.Add("-XX:+ParallelRefProcEnabled")
|
||||
If McLaunchJavaSelected.MajorVersion >= 12 Then Args.Add("-XX:MinHeapFreeRatio=25") '需要比 G1NewSizePercent 大一点
|
||||
If McLaunchJavaSelected.MajorVersion >= 12 Then Args.Add("-XX:MaxHeapFreeRatio=40") '需要比 MinHeapFreeRatio 大一些
|
||||
If McLaunchJavaSelected.MajorVersion >= 24 AndAlso McLaunchJavaSelected.Is64Bit Then Args.Add("-XX:+UseCompactObjectHeaders")
|
||||
ElseIf UseG1GC Then
|
||||
'Mojang G1GC
|
||||
Args.Add("-XX:+UnlockExperimentalVMOptions")
|
||||
Args.Add("-XX:+UseG1GC")
|
||||
Args.Add("-XX:G1NewSizePercent=20")
|
||||
Args.Add("-XX:G1ReservePercent=20")
|
||||
@@ -1490,7 +1499,7 @@ NextInstance:
|
||||
|
||||
'为 JLW 添加 -jar,它必须放在最后
|
||||
If UseJLW Then
|
||||
Args.Add("-jar") : Args.Add(ExtractJavaWrapper())
|
||||
Args.Add("-jar") : Args.Add(ExtractPatch("JavaWrapper"))
|
||||
End If
|
||||
|
||||
'再次去重并输出
|
||||
|
||||
@@ -9,16 +9,19 @@ Public Module ModMinecraft
|
||||
''' </summary>
|
||||
Public Property McFolderSelected As String
|
||||
Get
|
||||
If _McFolderSelected Is Nothing Then McFolderSelected = Settings.Get("LaunchFolderSelect") '仅在首次读取时触发
|
||||
If _McFolderSelected Is Nothing Then SetMcFolder(Settings.Get("LaunchFolderSelect")) '不能使用 McFolderSelected 触发 Set,这会被视为为 Get 设置返回值
|
||||
Return _McFolderSelected
|
||||
End Get
|
||||
Set(Value As String)
|
||||
If _McFolderSelected = Value Then Return
|
||||
_McFolderSelected = Value.Replace("$", Path)
|
||||
Settings.Set("LaunchFolderSelect", Value.Replace(Path, "$"))
|
||||
Log("[Minecraft] 当前选择的 Minecraft 文件夹:" & _McFolderSelected)
|
||||
SetMcFolder(Value)
|
||||
End Set
|
||||
End Property
|
||||
Private Sub SetMcFolder(Value As String) '等同 McFolderSelected.Set
|
||||
If _McFolderSelected = Value Then Return
|
||||
_McFolderSelected = Value.Replace("$", Path)
|
||||
Settings.Set("LaunchFolderSelect", Value.Replace(Path, "$"))
|
||||
Log("[Minecraft] 当前选择的 Minecraft 文件夹:" & _McFolderSelected)
|
||||
End Sub
|
||||
Private _McFolderSelected As String
|
||||
''' <summary>
|
||||
''' 当前的 Minecraft 文件夹列表。
|
||||
@@ -41,8 +44,8 @@ Public Module ModMinecraft
|
||||
|
||||
Public Overrides Function Equals(obj As Object) As Boolean
|
||||
If Not (TypeOf obj Is McFolder) Then Return False
|
||||
Dim folder = DirectCast(obj, McFolder)
|
||||
Return Name = folder.Name AndAlso Location = folder.Location AndAlso Type = folder.Type
|
||||
Dim Folder = DirectCast(obj, McFolder)
|
||||
Return Name = Folder.Name AndAlso Location = Folder.Location AndAlso Type = Folder.Type
|
||||
End Function
|
||||
Public Overrides Function ToString() As String
|
||||
Return Location
|
||||
@@ -167,7 +170,7 @@ Public Module ModMinecraft
|
||||
|
||||
#Region "版本处理"
|
||||
|
||||
Public Const McInstanceCacheVersion As Integer = 33
|
||||
Public Const McInstanceCacheVersion As Integer = 34
|
||||
|
||||
Private _McInstanceSelected As McInstance
|
||||
''' <summary>
|
||||
@@ -441,21 +444,7 @@ Public Module ModMinecraft
|
||||
VersionSearchFinish:
|
||||
'获取版本号
|
||||
_Version.VanillaName = _Version.VanillaName.Replace("_unobfuscated", "").Replace(" Unobfuscated", "")
|
||||
If _Version.VanillaName.StartsWithF("1.") Then
|
||||
Dim Segments = _Version.VanillaName.Split(" _-.".ToCharArray)
|
||||
_Version.Vanilla = New Version(
|
||||
Val(If(Segments.Count >= 2, Segments(1), "0")),
|
||||
0,
|
||||
Val(If(Segments.Count >= 3, Segments(2), "0")))
|
||||
ElseIf RegexCheck(_Version.VanillaName, "^[2-9][0-9]\.") Then
|
||||
Dim Segments = _Version.VanillaName.Split(" _-.".ToCharArray)
|
||||
_Version.Vanilla = New Version(
|
||||
Val(Segments(0)),
|
||||
Val(If(Segments.Count >= 2, Segments(1), "0")),
|
||||
Val(If(Segments.Count >= 3, Segments(2), "0")))
|
||||
Else
|
||||
_Version.Vanilla = New Version(9999, 0, 0)
|
||||
End If
|
||||
_Version.Vanilla = McVersion.NameToVersion(_Version.VanillaName)
|
||||
Return _Version
|
||||
End Get
|
||||
Set(value As McVersion)
|
||||
@@ -758,7 +747,8 @@ Recheck:
|
||||
Case Else '根据 API 进行筛选
|
||||
Dim RealJson As String = If(JsonObject, JsonText).ToString
|
||||
'愚人节与快照版本
|
||||
If If(JsonObject("type"), "").ToString = "fool" OrElse GetMcFoolName(Version.VanillaName) <> "" Then
|
||||
If If(JsonObject("type"), "").ToString = "fool" OrElse
|
||||
(ReleaseTime.ToUniversalTime.Month = 4 AndAlso ReleaseTime.ToUniversalTime.Day = 1) OrElse GetMcFoolName(Version.VanillaName) <> "" Then
|
||||
State = McInstanceState.Fool
|
||||
ElseIf IsSnapshot() Then
|
||||
State = McInstanceState.Snapshot
|
||||
@@ -1119,27 +1109,18 @@ ExitDataLoad:
|
||||
Public Shared Function IsFormatFit(Version As String) As Boolean
|
||||
If Version Is Nothing Then Return False
|
||||
If RegexCheck(Version, "^1\.\d") Then Return True
|
||||
If Val(RegexSeek(Version, "^[2-9]\d\.\d+")) > 25 Then Return True
|
||||
If Val(RegexSeek(Version, "^[2-9]\d\.\d+")) >= 26 Then Return True
|
||||
Return False
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 尝试将版本字符串转换为 Drop 序数。
|
||||
''' 若无法转换则返回 0。
|
||||
''' 将版本名转换为 Drop 序数。
|
||||
''' 若无法转换则返回 209。
|
||||
''' </summary>
|
||||
Public Shared Function VersionToDrop(Version As String, Optional AllowSnapshot As Boolean = False) As Integer
|
||||
If Not AllowSnapshot AndAlso Version.Contains("-") Then Return 0
|
||||
If Version Is Nothing Then Return 0
|
||||
Dim Segments = Version.BeforeFirst("-").Split(".")
|
||||
If Segments.Length < 2 Then Return 0
|
||||
Dim Major As Integer = Val(Segments(0))
|
||||
Dim Minor As Integer = Val(Segments(1))
|
||||
If Major = 1 Then
|
||||
Return Minor * 10
|
||||
ElseIf Major < 25 Then
|
||||
Return 0
|
||||
Else
|
||||
Return Major * 10 + Minor
|
||||
End If
|
||||
Public Shared Function VersionToDrop(VanillaName As String) As Integer
|
||||
If VanillaName Is Nothing Then Return 209
|
||||
Dim Version = NameToVersion(VanillaName)
|
||||
If Version.Major >= 1000 Then Return 209
|
||||
Return Version.Major * 10 + Version.Minor
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 将 Drop 序数转换为版本字符串。
|
||||
@@ -1147,10 +1128,36 @@ ExitDataLoad:
|
||||
Public Shared Function DropToVersion(Drop As Integer) As String
|
||||
If Drop >= 250 Then
|
||||
Return $"{Drop \ 10}.{Drop Mod 10}"
|
||||
ElseIf Drop = 209 Then
|
||||
Log("[Minecraft] 尝试将旧快照版 Drop 序数转换为版本字符串,这不应该发生!" & vbCrLf & GetStackTrace(), LogLevel.Debug)
|
||||
Return "1.20"
|
||||
Else
|
||||
Return $"1.{Drop \ 10}"
|
||||
End If
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 将版本名转换为可比较的三段式原版版本号。
|
||||
''' 对老版本格式,例如 1.20.3,会被转换为 20.0.3。
|
||||
''' 若没有版本号,例如旧快照,则为 9999.0.0。
|
||||
''' </summary>
|
||||
Public Shared Function NameToVersion(VanillaName As String) As Version
|
||||
VanillaName = VanillaName.Replace("_unobfuscated", "").Replace(" Unobfuscated", "")
|
||||
If VanillaName.StartsWithF("1.") Then
|
||||
Dim Segments = VanillaName.Split(" _-.".ToCharArray)
|
||||
Return New Version(
|
||||
Val(If(Segments.Count >= 2, Segments(1), "0")),
|
||||
0,
|
||||
Val(If(Segments.Count >= 3, Segments(2), "0")))
|
||||
ElseIf RegexCheck(VanillaName, "^[2-9][0-9]\.") Then
|
||||
Dim Segments = VanillaName.Split(" _-.".ToCharArray)
|
||||
Return New Version(
|
||||
Val(Segments(0)),
|
||||
Val(If(Segments.Count >= 2, Segments(1), "0")),
|
||||
Val(If(Segments.Count >= 3, Segments(2), "0")))
|
||||
Else
|
||||
Return New Version(9999, 0, 0)
|
||||
End If
|
||||
End Function
|
||||
|
||||
End Class
|
||||
|
||||
@@ -1177,6 +1184,8 @@ ExitDataLoad:
|
||||
Return "2024 | 毒马铃薯一直都被大家忽视和低估,于是我们超级加强了它!"
|
||||
ElseIf Name = "25w14craftmine" Then
|
||||
Return "2025 | 你可以合成任何东西——包括合成你的世界!"
|
||||
ElseIf Name = "26w14a" Then
|
||||
Return "2026 | 为什么需要物品栏?让方块们跟着你走吧!"
|
||||
Else
|
||||
Return ""
|
||||
End If
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Imports System.IO.Compression
|
||||
|
||||
Public Module ModMod
|
||||
Private Const LocalModCacheVersion As Integer = 12
|
||||
Private Const LocalModCacheVersion As Integer = 13
|
||||
|
||||
Public Class McMod
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ EndHint:
|
||||
Public Text As String
|
||||
''' <summary>
|
||||
''' 输入模式:文本框的文本。
|
||||
''' 选择模式:需要放进去的 List(Of MyListItem)。
|
||||
''' 选择模式:需要放进去的 IEnumberable(Of IMyRadio)。
|
||||
''' 登录模式:登录步骤 1 中返回的 JSON。
|
||||
''' </summary>
|
||||
Public Content As Object
|
||||
@@ -308,7 +308,7 @@ EndHint:
|
||||
''' <param name="Button1">显示的第一个按钮,默认为 “确定”。</param>
|
||||
''' <param name="Button2">显示的第二个按钮,默认为空。</param>
|
||||
''' <param name="IsWarn">是否为警告弹窗,若为 True,弹窗配色和背景会变为红色。</param>
|
||||
Public Function MyMsgBoxSelect(Selections As List(Of IMyRadio), Optional Title As String = "提示", Optional Button1 As String = "确定", Optional Button2 As String = "", Optional IsWarn As Boolean = False) As Integer?
|
||||
Public Function MyMsgBoxSelect(Selections As IEnumerable(Of IMyRadio), Optional Title As String = "提示", Optional Button1 As String = "确定", Optional Button2 As String = "", Optional IsWarn As Boolean = False) As Integer?
|
||||
'将弹窗列入队列
|
||||
Dim Converter As New MyMsgBoxConverter With {.Type = MyMsgBoxType.Select, .Button1 = Button1, .Button2 = Button2, .Content = Selections, .IsWarn = IsWarn, .Title = Title}
|
||||
WaitingMyMsgBox.Add(Converter)
|
||||
|
||||
@@ -78,9 +78,9 @@ Friend Module ModSecret
|
||||
If Url.Contains("baidupcs.com") OrElse Url.Contains("baidu.com") Then
|
||||
Req.Headers.Add("User-Agent", "LogStatistic") '#4951
|
||||
ElseIf SimulateBrowserHeaders Then
|
||||
Req.Headers.Add("User-Agent", $"PCL2/{VersionStandardCode} Mozilla/5.0 AppleWebKit/537.36 Chrome/63.0.3239.132 Safari/537.36")
|
||||
Req.Headers.Add("User-Agent", $"PCL2/{VersionBaseName}.{VersionBranchCode} Mozilla/5.0 AppleWebKit/537.36 Chrome/63.0.3239.132 Safari/537.36")
|
||||
Else
|
||||
Req.Headers.Add("User-Agent", $"PCL2/{VersionStandardCode}")
|
||||
Req.Headers.Add("User-Agent", $"PCL2/{VersionBaseName}.{VersionBranchCode}")
|
||||
End If
|
||||
End If
|
||||
If Not SimulateBrowserHeaders Then Req.Headers.Add("Referer", $"http://{VersionCode}.open.pcl2.server/")
|
||||
|
||||
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
|
||||
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
||||
' 方法是按如下所示使用“*”
|
||||
|
||||
<Assembly: AssemblyVersion("2.12.4.0")>
|
||||
<Assembly: AssemblyFileVersion("2.12.4.0")>
|
||||
<Assembly: AssemblyVersion("2.12.6.1")>
|
||||
<Assembly: AssemblyFileVersion("2.12.6.1")>
|
||||
<Assembly: NeutralResourcesLanguage("")>
|
||||
@@ -150,6 +150,16 @@ Namespace My.Resources
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' 查找 System.Byte[] 类型的本地化资源。
|
||||
'''</summary>
|
||||
Friend ReadOnly Property LUA() As Byte()
|
||||
Get
|
||||
Dim obj As Object = ResourceManager.GetObject("LUA", resourceCulture)
|
||||
Return CType(obj,Byte())
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' 查找 System.Byte[] 类型的本地化资源。
|
||||
'''</summary>
|
||||
|
||||
@@ -145,8 +145,11 @@
|
||||
<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="LUA" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\lwjgl-unsafe-agent.jar;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<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.zip;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="NAudio" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\NAudio.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
|
||||
@@ -94,36 +94,36 @@
|
||||
End If
|
||||
'打开详情页
|
||||
Dim TargetType As CompType
|
||||
Dim TargetVersion As String = Nothing
|
||||
Dim TargetInstance As String = Nothing
|
||||
Dim TargetLoader As CompModLoaderType = CompModLoaderType.Any
|
||||
If FrmMain.PageCurrent.Page = FormMain.PageType.Download Then
|
||||
'从下载页进入
|
||||
Select Case FrmMain.PageCurrentSub
|
||||
Case FormMain.PageSubType.DownloadMod
|
||||
TargetType = CompType.Mod
|
||||
TargetVersion = FrmDownloadMod.Content.Loader.Input.GameVersion
|
||||
TargetInstance = FrmDownloadMod.Content.Loader.Input.GameVersion
|
||||
TargetLoader = FrmDownloadMod.Content.Loader.Input.ModLoader
|
||||
Case FormMain.PageSubType.DownloadPack
|
||||
TargetType = CompType.ModPack
|
||||
TargetVersion = FrmDownloadPack.Content.Loader.Input.GameVersion
|
||||
TargetInstance = FrmDownloadPack.Content.Loader.Input.GameVersion
|
||||
Case FormMain.PageSubType.DownloadDataPack
|
||||
TargetType = CompType.DataPack
|
||||
TargetVersion = FrmDownloadDataPack.Content.Loader.Input.GameVersion
|
||||
TargetInstance = FrmDownloadDataPack.Content.Loader.Input.GameVersion
|
||||
Case FormMain.PageSubType.DownloadResourcePack
|
||||
TargetType = CompType.ResourcePack
|
||||
TargetVersion = FrmDownloadResourcePack.Content.Loader.Input.GameVersion
|
||||
TargetInstance = FrmDownloadResourcePack.Content.Loader.Input.GameVersion
|
||||
Case FormMain.PageSubType.DownloadShader
|
||||
TargetType = CompType.Shader
|
||||
TargetVersion = FrmDownloadShader.Content.Loader.Input.GameVersion
|
||||
TargetInstance = FrmDownloadShader.Content.Loader.Input.GameVersion
|
||||
End Select
|
||||
Else
|
||||
'从详情页进入(查看前置)
|
||||
TargetType = CompType.Any '允许任意类别
|
||||
TargetVersion = FrmMain.PageCurrent.Additional(2)
|
||||
TargetInstance = FrmMain.PageCurrent.Additional(2)
|
||||
TargetLoader = FrmMain.PageCurrent.Additional(3)
|
||||
End If
|
||||
FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CompDetail,
|
||||
.Additional = {sender.Tag, New List(Of String), TargetVersion, TargetLoader, TargetType}})
|
||||
.Additional = {sender.Tag, New List(Of String), TargetInstance, TargetLoader, TargetType}})
|
||||
End Sub
|
||||
|
||||
'鼠标点击判定
|
||||
|
||||
@@ -34,15 +34,16 @@
|
||||
<TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="版本" Margin="0,0,18,0" />
|
||||
<local:MyComboBox x:Name="TextSearchVersion" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" IsEditable="True">
|
||||
<local:MyComboBoxItem Content="全部 (也可自行输入)" IsSelected="True" />
|
||||
<local:MyComboBoxItem Content="26.1" />
|
||||
<local:MyComboBoxItem Content="1.21.11" />
|
||||
<local:MyComboBoxItem Content="1.21.8" />
|
||||
<local:MyComboBoxItem Content="1.21.4" />
|
||||
<local:MyComboBoxItem Content="1.21.1" />
|
||||
<local:MyComboBoxItem Content="1.20.6" />
|
||||
<local:MyComboBoxItem Content="1.20.1" />
|
||||
<local:MyComboBoxItem Content="1.19.4" />
|
||||
<local:MyComboBoxItem Content="1.19.2" />
|
||||
<local:MyComboBoxItem Content="1.18.2" />
|
||||
<local:MyComboBoxItem Content="1.16.5" />
|
||||
<local:MyComboBoxItem Content="1.12.2" />
|
||||
<local:MyComboBoxItem Content="1.8.9" />
|
||||
<local:MyComboBoxItem Content="1.7.10" />
|
||||
</local:MyComboBox>
|
||||
<local:MyComboBox x:Name="ComboSearchLoader" Visibility="Collapsed" Grid.Row="2" Grid.Column="2" Margin="10,0,0,0">
|
||||
|
||||
@@ -127,7 +127,7 @@ Public Class PageComp
|
||||
.GameVersion = GameVersion
|
||||
.Tag = ComboSearchTag.SelectedItem.Tag
|
||||
.ModLoader = If(PageType = CompType.Mod, Val(ComboSearchLoader.SelectedItem.Tag), CompModLoaderType.Any)
|
||||
.Source = CType(Val(ComboSearchSource.SelectedItem.Tag), CompSourceType)
|
||||
.Sources = CType(Val(ComboSearchSource.SelectedItem.Tag), CompSourceType)
|
||||
End With
|
||||
Return Request
|
||||
End Function
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
</StackPanel>
|
||||
</local:MyCard>
|
||||
<StackPanel Grid.Row="1" Grid.RowSpan="2" Name="PanMain" Grid.IsSharedSizeScope="True">
|
||||
<local:MyHint x:Name="HintAlternative" Theme="Blue" Margin="0,0,0,15" />
|
||||
<local:MyCard Margin="0,0,0,15" x:Name="CardFilter">
|
||||
<StackPanel x:Name="PanFilter" Margin="10,10,0,10" Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Left" />
|
||||
</local:MyCard>
|
||||
|
||||
@@ -21,14 +21,15 @@
|
||||
Project = FrmMain.PageCurrent.Additional(0)
|
||||
TargetInstance = FrmMain.PageCurrent.Additional(2)
|
||||
TargetLoader = FrmMain.PageCurrent.Additional(3)
|
||||
PageType = FrmMain.PageCurrent.Additional(4)
|
||||
TargetType = FrmMain.PageCurrent.Additional(4)
|
||||
End Sub
|
||||
Private Project As CompProject
|
||||
Private TargetInstance As String, TargetLoader As CompModLoaderType
|
||||
''' <summary>
|
||||
''' 当前页面应展示的内容类别。可能为 Any。
|
||||
''' 当前页面应展示的内容类别。
|
||||
''' 若当前页面是在查看前置时进入,则也可能为 Any。
|
||||
''' </summary>
|
||||
Private PageType As CompType
|
||||
Private TargetType As CompType
|
||||
'自动重试
|
||||
Private Sub Load_State(sender As Object, state As MyLoading.MyLoadingState, oldState As MyLoading.MyLoadingState) Handles Load.StateChanged
|
||||
Select Case CompFileLoader.State
|
||||
@@ -74,13 +75,13 @@
|
||||
'筛选类型相同的结果(Modrinth 会返回 Mod、服务端插件、数据包混合的列表)
|
||||
Private Function GetResults() As List(Of CompFile)
|
||||
Dim Results As List(Of CompFile) = CompFileLoader.Output
|
||||
Select Case PageType
|
||||
Select Case TargetType
|
||||
Case CompType.Any
|
||||
Results = Results.Where(Function(r) r.Type <> CompType.Plugin).ToList
|
||||
Case CompType.Shader, CompType.ResourcePack
|
||||
'不筛选光影和资源包,否则原版光影会因为是资源包格式而被过滤(#6473)
|
||||
Case Else
|
||||
Results = Results.Where(Function(r) r.Type = PageType).ToList
|
||||
Results = Results.Where(Function(r) r.Type = TargetType).ToList
|
||||
End Select
|
||||
Return Results
|
||||
End Function
|
||||
@@ -204,7 +205,7 @@ GroupDone:
|
||||
If Not Pair.Value.Any() Then Continue For
|
||||
If Pair.Key = TargetCardName.Replace("(所选版本)", "") Then Continue For
|
||||
'增加卡片
|
||||
Dim NewCard As New MyCard With {.Title = Pair.Key, .Margin = New Thickness(0, 0, 0, 15), .SwapType = If(PageType = CompType.ModPack, 9, 8)} '9 是安装,8 是另存为
|
||||
Dim NewCard As New MyCard With {.Title = Pair.Key, .Margin = New Thickness(0, 0, 0, 15), .SwapType = If(TargetType = CompType.ModPack, 9, 8)} '9 是安装,8 是另存为
|
||||
Dim NewStack As New StackPanel With {.Margin = New Thickness(20, MyCard.SwapedHeight, 18, 0), .VerticalAlignment = VerticalAlignment.Top, .RenderTransform = New TranslateTransform(0, 0), .Tag = Pair.Value}
|
||||
NewCard.Children.Add(NewStack)
|
||||
NewCard.SwapControl = NewStack
|
||||
@@ -213,7 +214,7 @@ GroupDone:
|
||||
If Pair.Key = TargetCardName OrElse
|
||||
(FrmMain.PageCurrent.Additional IsNot Nothing AndAlso '#2761
|
||||
CType(FrmMain.PageCurrent.Additional(1), List(Of String)).Contains(NewCard.Title)) Then
|
||||
MyCard.StackInstall(NewStack, If(PageType = CompType.ModPack, 9, 8), Pair.Key) '9 是安装,8 是另存为
|
||||
MyCard.StackInstall(NewStack, If(TargetType = CompType.ModPack, 9, 8), Pair.Key) '9 是安装,8 是另存为
|
||||
Else
|
||||
NewCard.IsSwapped = True
|
||||
End If
|
||||
@@ -226,19 +227,28 @@ GroupDone:
|
||||
If PanResults.Children.Count = 1 Then
|
||||
CType(PanResults.Children(0), MyCard).IsSwapped = False
|
||||
End If
|
||||
'替代提示
|
||||
If Project.Types = CompType.ModOrDataPack AndAlso (TargetType = CompType.Mod OrElse TargetType = CompType.DataPack) Then
|
||||
HintAlternative.Visibility = Visibility.Visible
|
||||
HintAlternative.Text = If(TargetType = CompType.Mod,
|
||||
"以下是该项目的 Mod 版本。点击这里查看其数据包版本。", "以下是该项目的数据包版本。点击这里查看其 Mod 版本。")
|
||||
Else
|
||||
HintAlternative.Visibility = Visibility.Collapsed
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Log(ex, "可视化工程下载列表出错", LogLevel.Feedback)
|
||||
End Try
|
||||
End Sub
|
||||
Private Function GetGroupedVersionName(Name As String, GroupedByDrop As Boolean, FoldOld As Boolean) As String
|
||||
Dim Drop = McVersion.VersionToDrop(Name)
|
||||
If Name Is Nothing Then
|
||||
Return "其他"
|
||||
ElseIf Name.Contains("w") Then
|
||||
ElseIf Name.Contains("w") OrElse Drop = 209 Then
|
||||
Return "快照版"
|
||||
ElseIf Not McVersion.IsFormatFit(Name) OrElse (FoldOld AndAlso McVersion.VersionToDrop(Name, True) < 120) Then
|
||||
ElseIf Not McVersion.IsFormatFit(Name) OrElse (FoldOld AndAlso Drop < 120) Then
|
||||
Return "远古版"
|
||||
ElseIf GroupedByDrop Then
|
||||
Return McVersion.DropToVersion(McVersion.VersionToDrop(Name, True))
|
||||
Return McVersion.DropToVersion(Drop)
|
||||
Else
|
||||
Return Name
|
||||
End If
|
||||
@@ -494,4 +504,11 @@ GroupDone:
|
||||
ClipboardSet(CompItem.LabTitle.Text & CompItem.LabTitleRaw.Text)
|
||||
End Sub
|
||||
|
||||
'Mod / 数据包 互相跳转
|
||||
Private Sub HintAlternative_Click() Handles HintAlternative.Click
|
||||
TargetType = If(TargetType = CompType.Mod, CompType.DataPack, CompType.Mod)
|
||||
FrmMain.PageCurrent.Additional(4) = TargetType '加载器会从这里重新拿数据
|
||||
PageLoaderRestart(IsForceRestart:=True)
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
@@ -426,7 +426,7 @@ pause"
|
||||
'添加 Java Wrapper 作为主 Jar
|
||||
Dim Arguments As String
|
||||
If UseJavaWrapper AndAlso Not Settings.Get("LaunchAdvanceDisableJLW") Then
|
||||
Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" -jar ""{ExtractJavaWrapper()}"" optifine.Installer"
|
||||
Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" -jar ""{ExtractPatch("JavaWrapper")}"" optifine.Installer"
|
||||
Else
|
||||
Arguments = $"-Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" optifine.Installer"
|
||||
End If
|
||||
@@ -1101,7 +1101,7 @@ Retry:
|
||||
'添加 Java Wrapper 作为主 Jar
|
||||
Dim Arguments As String
|
||||
If UseJavaWrapper AndAlso Not Settings.Get("LaunchAdvanceDisableJLW") Then
|
||||
Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" -jar ""{ExtractJavaWrapper()}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
||||
Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" -jar ""{ExtractPatch("JavaWrapper")}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
||||
Else
|
||||
Arguments = $"-cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" com.bangbang93.ForgeInstaller ""{McFolder}"
|
||||
End If
|
||||
@@ -2373,37 +2373,38 @@ Retry:
|
||||
Private VanillaSyncLock As New Object
|
||||
|
||||
''' <summary>
|
||||
''' 释放 Java Wrapper 并返回完整文件路径。
|
||||
''' 释放补丁文件并返回完整文件路径。
|
||||
''' </summary>
|
||||
Public Function ExtractJavaWrapper() As String
|
||||
Dim WrapperPath As String = PathPure & "JavaWrapper.jar"
|
||||
Log("[Java] 选定的 Java Wrapper 路径:" & WrapperPath)
|
||||
''' <param name="Patch">"LUA" 或 "JavaWrapper"。</param>
|
||||
Public Function ExtractPatch(Patch As String) As String
|
||||
Dim PatchPath As String = $"{PathPure}{Patch}.jar"
|
||||
Log($"[Java] 选定的 {Patch} 路径:{PatchPath}")
|
||||
Static Lock As New Object
|
||||
SyncLock Lock '避免 OptiFine 和 Forge 安装时同时释放 Java Wrapper 导致冲突
|
||||
SyncLock Lock '避免 OptiFine 和 Forge 安装时同时释放导致冲突
|
||||
Try
|
||||
WriteFile(WrapperPath, GetResources("JavaWrapper"))
|
||||
WriteFile(PatchPath, GetResources(Patch))
|
||||
Catch ex As Exception
|
||||
If File.Exists(WrapperPath) Then
|
||||
'因为未知原因 Java Wrapper 可能变为只读文件(#4243)
|
||||
Log(ex, "Java Wrapper 文件释放失败,但文件已存在,将在删除后尝试重新生成", LogLevel.Developer)
|
||||
If File.Exists(PatchPath) Then
|
||||
'因为未知原因可能变为只读文件(#4243)
|
||||
Log(ex, $"{Patch} 文件释放失败,但文件已存在,将在删除后尝试重新生成", LogLevel.Developer)
|
||||
Try
|
||||
File.Delete(WrapperPath)
|
||||
WriteFile(WrapperPath, GetResources("JavaWrapper"))
|
||||
File.Delete(PatchPath)
|
||||
WriteFile(PatchPath, GetResources(Patch))
|
||||
Catch ex2 As Exception
|
||||
Log(ex2, "Java Wrapper 文件重新释放失败,将尝试更换文件名重新生成", LogLevel.Developer)
|
||||
WrapperPath = PathPure & "JavaWrapper2.jar"
|
||||
Log(ex2, $"{Patch} 文件重新释放失败,将尝试更换文件名重新生成", LogLevel.Developer)
|
||||
PatchPath = $"{PathPure}{Patch}2.jar"
|
||||
Try
|
||||
WriteFile(WrapperPath, GetResources("JavaWrapper"))
|
||||
WriteFile(PatchPath, GetResources(Patch))
|
||||
Catch ex3 As Exception
|
||||
Throw New FileNotFoundException("释放 Java Wrapper 最终尝试失败", ex3)
|
||||
Throw New FileNotFoundException($"释放 {Patch} 最终尝试失败", ex3)
|
||||
End Try
|
||||
End Try
|
||||
Else
|
||||
Throw New FileNotFoundException("释放 Java Wrapper 失败", ex)
|
||||
Throw New FileNotFoundException($"释放 {Patch} 失败", ex)
|
||||
End If
|
||||
End Try
|
||||
End SyncLock
|
||||
Return WrapperPath
|
||||
Return PatchPath
|
||||
End Function
|
||||
|
||||
End Module
|
||||
@@ -161,7 +161,7 @@
|
||||
Private VanillaIcon As String
|
||||
Private ReadOnly Property VanillaDrop As Integer
|
||||
Get
|
||||
Return McVersion.VersionToDrop(VanillaName, True)
|
||||
Return McVersion.VersionToDrop(VanillaName)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
@@ -471,7 +471,7 @@
|
||||
Version("id") = "20w14∞"
|
||||
Version("type") = "special"
|
||||
Version.Add("lore", GetMcFoolName(Version("id")))
|
||||
Case "3d shareware v1.34", "1.rv-pre1", "15w14a", "2.0", "22w13oneblockatatime", "23w13a_or_b", "24w14potato", "25w14craftmine"
|
||||
Case "3d shareware v1.34", "1.rv-pre1", "15w14a", "2.0", "22w13oneblockatatime", "23w13a_or_b", "24w14potato", "25w14craftmine", "26w14a"
|
||||
Type = "愚人节版"
|
||||
Version("type") = "special"
|
||||
Version.Add("lore", GetMcFoolName(Version("id")))
|
||||
@@ -915,16 +915,17 @@
|
||||
Dim FabricApiName = FabricApi.DisplayName
|
||||
Try
|
||||
If FabricApiName Is Nothing OrElse VanillaName Is Nothing Then Return False
|
||||
FabricApiName = FabricApiName.Lower : VanillaName = VanillaName.Replace("∞", "infinite").Replace("Combat Test 7c", "1.16_combat-3").Lower
|
||||
If FabricApiName.StartsWithF("[" & VanillaName & "]") Then Return True
|
||||
FabricApiName = FabricApiName.Lower
|
||||
Dim TargetName = VanillaName.Replace("∞", "infinite").Replace("Combat Test 7c", "1.16_combat-3").Lower
|
||||
If FabricApiName.StartsWithF("[" & TargetName & "]") Then Return True
|
||||
If Not FabricApiName.Contains("/") OrElse Not FabricApiName.Contains("]") Then Return False
|
||||
'直接的判断(例如 1.18.1/22w03a)
|
||||
For Each Part As String In FabricApiName.BeforeFirst("]").TrimStart("[").Split("/")
|
||||
If Part = VanillaName Then Return True
|
||||
If Part = TargetName Then Return True
|
||||
Next
|
||||
'将版本名分割语素(例如 1.16.4/5)
|
||||
Dim Lefts = RegexSearch(FabricApiName.BeforeFirst("]"), "[a-z/]+|[0-9/]+")
|
||||
Dim Rights = RegexSearch(VanillaName.BeforeFirst("]"), "[a-z/]+|[0-9/]+")
|
||||
Dim Rights = RegexSearch(TargetName.BeforeFirst("]"), "[a-z/]+|[0-9/]+")
|
||||
'对每段进行判断
|
||||
Dim i As Integer = 0
|
||||
While True
|
||||
|
||||
@@ -23,7 +23,7 @@ Public Class PageInstanceExport
|
||||
AniControlEnabled += 1
|
||||
If CurrentInstance <> PageInstanceLeft.Instance.PathVersion Then RefreshAll() '切换到了另一个版本,重置页面
|
||||
CustomEventService.SetEventData(BtnAdvancedHelp,
|
||||
If(VersionBranchName = "Release", "指南/整合包制作 - Public.json", "指南/整合包制作 - Snapshot.json"))
|
||||
If(VersionBranchCode = 50, "指南/整合包制作 - Public.json", "指南/整合包制作 - Snapshot.json"))
|
||||
AniControlEnabled -= 1
|
||||
End Sub
|
||||
Public Sub RefreshAll() Implements IRefreshable.Refresh
|
||||
|
||||
@@ -126,8 +126,8 @@
|
||||
JsonObject = PageInstanceLeft.Instance.JsonObject
|
||||
End Try
|
||||
'重命名主文件夹
|
||||
Directory.Move(OldPath, TempName)
|
||||
Directory.Move(TempPath, NewName)
|
||||
Directory.Move(OldPath, TempPath)
|
||||
Directory.Move(TempPath, NewPath)
|
||||
'清理 ini 缓存
|
||||
IniClearCache(PageInstanceLeft.Instance.PathIndie & "options.txt")
|
||||
IniClearCache(PageInstanceLeft.Instance.PathVersion & "PCL\Setup.ini")
|
||||
@@ -135,20 +135,20 @@
|
||||
'不能进行遍历重命名,否则在版本名很短的时候容易误伤其他文件(#6443)
|
||||
If Directory.Exists($"{NewPath}{OldName}-natives") Then
|
||||
If OnlyChangedCase Then
|
||||
Directory.Move($"{NewPath}{OldName}-natives", $"{OldName}natives_temp")
|
||||
Directory.Move($"{NewPath}{OldName}-natives_temp", $"{NewName}-natives")
|
||||
Directory.Move($"{NewPath}{OldName}-natives", $"{NewPath}{OldName}natives_temp")
|
||||
Directory.Move($"{NewPath}{OldName}-natives_temp", $"{NewPath}{NewName}-natives")
|
||||
Else
|
||||
DeleteDirectory($"{NewPath}{NewName}-natives")
|
||||
Directory.Move($"{NewPath}{OldName}-natives", $"{NewName}-natives")
|
||||
Directory.Move($"{NewPath}{OldName}-natives", $"{NewPath}{NewName}-natives")
|
||||
End If
|
||||
End If
|
||||
If File.Exists($"{NewPath}{OldName}.jar") Then
|
||||
If OnlyChangedCase Then
|
||||
File.Move($"{NewPath}{OldName}.jar", $"{OldName}_temp.jar")
|
||||
File.Move($"{NewPath}{OldName}_temp.jar", $"{NewName}.jar")
|
||||
File.Move($"{NewPath}{OldName}.jar", $"{NewPath}{OldName}_temp.jar")
|
||||
File.Move($"{NewPath}{OldName}_temp.jar", $"{NewPath}{NewName}.jar")
|
||||
Else
|
||||
File.Delete($"{NewPath}{NewName}.jar")
|
||||
File.Move($"{NewPath}{OldName}.jar", $"{NewName}.jar")
|
||||
File.Move($"{NewPath}{OldName}.jar", $"{NewPath}{NewName}.jar")
|
||||
End If
|
||||
End If
|
||||
'替换版本设置文件中的路径
|
||||
|
||||
@@ -246,7 +246,10 @@
|
||||
ToolTip="完全不更改 assets;不校验 libraries、第三方登录库与版本主 jar 文件是否被修改。
如果你没有修改相关文件,请勿勾选此项。" />
|
||||
<local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" x:Name="CheckAdvanceDisableJLW" Tag="VersionAdvanceDisableJLW"
|
||||
ToolTipService.Placement="Right"
|
||||
ToolTip="PCL 会使用 Java Launch Wrapper 来修复老版本 Java 在中文路径下无法启动的问题。
如果这被反作弊拦截,或遇到其他问题,也可以将其关闭。" />
|
||||
ToolTip="是否使用 Java Launch Wrapper 修复 Java 18- 在中文路径下可能无法正常启动的问题。
详见:https://github.com/00ll00/java_launch_wrapper" />
|
||||
<local:MyCheckBox Height="28" Text="禁用 LWJGL Unsafe Agent" local:SettingService.Key="VersionAdvanceDisableLUA"
|
||||
ToolTipService.Placement="Right"
|
||||
ToolTip="是否使用 LWJGL Unsafe Agent 修复 Java 25+ 的一个性能问题。
详见:https://github.com/HMCL-dev/lwjgl-unsafe-agent" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</local:MyCard>
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
Private Sub BtnEdit_Click(sender As Object, e As EventArgs) Handles BtnEdit.Click
|
||||
If McLoginLoader.State = LoadState.Loading Then
|
||||
Log("[Launch] 要求更换角色,但登录加载器繁忙", LogLevel.Debug)
|
||||
If CType(McLoginLoader.Input, McLoginServer).ForceReselectProfile Then
|
||||
If TypeOf McLoginLoader.Input Is McLoginServer AndAlso CType(McLoginLoader.Input, McLoginServer).ForceReselectProfile Then
|
||||
Hint("正在尝试更换,请稍候!")
|
||||
Else
|
||||
Hint("正在登录中,请稍后再更换角色!", HintType.Red)
|
||||
|
||||
@@ -85,51 +85,56 @@
|
||||
Hint("正在更改皮肤……")
|
||||
IsChanging = True
|
||||
'开始实际获取
|
||||
RunInNewThread(
|
||||
Sub()
|
||||
Try
|
||||
RunInNewThread(Sub() EditSkin(SkinInfo), "Ms Skin Upload")
|
||||
End Sub
|
||||
Private Sub EditSkin(SkinInfo As McSkinInfo)
|
||||
Retry:
|
||||
Do While McLoginMsLoader.State = LoadState.Loading '等待登录结束
|
||||
Thread.Sleep(10)
|
||||
Loop
|
||||
If McLoginMsLoader.State = LoadState.Failed Then Throw New Exception("登录失败", McLoginMsLoader.Error)
|
||||
Dim AccessToken As String = Settings.Get("CacheMsV2Access")
|
||||
Dim Uuid As String = Settings.Get("CacheMsV2Uuid")
|
||||
Dim Result As String = NetRequestByClientRetry("https://api.minecraftservices.com/minecraft/profile/skins", HttpMethod.Post,
|
||||
Content:=New Net.Http.MultipartFormDataContent From {
|
||||
{New Net.Http.StringContent(If(SkinInfo.IsSlim, "slim", "classic")), "variant"},
|
||||
{New Net.Http.ByteArrayContent(ReadFileBytes(SkinInfo.LocalFile)), "file", GetFileNameFromPath(SkinInfo.LocalFile)}
|
||||
},
|
||||
Headers:={{"Authorization", "Bearer " & AccessToken}, {"Accept", "*/*"}, {"User-Agent", "MojangSharp/0.1"}})
|
||||
If Result.Contains("request requires user authentication") Then
|
||||
Hint("正在登录,将在登录完成后继续更改皮肤……")
|
||||
McLoginMsLoader.Start(GetLoginData(), IsForceRestart:=True)
|
||||
GoTo Retry
|
||||
ElseIf Result.Contains("""error""") Then
|
||||
Hint("更改皮肤失败:" & GetJson(Result)("error").ToString, HintType.Red)
|
||||
Try
|
||||
Do While McLoginMsLoader.State = LoadState.Loading '等待登录结束
|
||||
Thread.Sleep(10)
|
||||
Loop
|
||||
If McLoginMsLoader.State = LoadState.Failed Then Throw New Exception("登录失败", McLoginMsLoader.Error)
|
||||
Dim AccessToken As String = Settings.Get("CacheMsV2Access")
|
||||
Dim Uuid As String = Settings.Get("CacheMsV2Uuid")
|
||||
Dim Result As String = NetRequestByClientRetry("https://api.minecraftservices.com/minecraft/profile/skins", HttpMethod.Post,
|
||||
Content:=New Net.Http.MultipartFormDataContent From {
|
||||
{New Net.Http.StringContent(If(SkinInfo.IsSlim, "slim", "classic")), "variant"},
|
||||
{New Net.Http.ByteArrayContent(ReadFileBytes(SkinInfo.LocalFile)), "file", GetFileNameFromPath(SkinInfo.LocalFile)}
|
||||
},
|
||||
Headers:={{"Authorization", "Bearer " & AccessToken}, {"Accept", "*/*"}, {"User-Agent", "MojangSharp/0.1"}})
|
||||
If Result.Contains("request requires user authentication") Then
|
||||
Hint("正在重新登录,将在登录后自动更改皮肤……")
|
||||
McLoginMsLoader.Start(GetLoginData(), IsForceRestart:=True)
|
||||
GoTo Retry
|
||||
ElseIf Result.Contains("""error""") Then
|
||||
Hint("更改皮肤失败:" & GetJson(Result)("error").ToString, HintType.Red)
|
||||
Return
|
||||
End If
|
||||
'获取新皮肤地址
|
||||
Log("[Skin] 皮肤修改返回值:" & vbCrLf & Result)
|
||||
Dim ResultJson As JObject = GetJson(Result)
|
||||
If ResultJson.ContainsKey("errorMessage") Then Throw New Exception(ResultJson("errorMessage").ToString) '#5309
|
||||
For Each Skin As JObject In ResultJson("skins")
|
||||
If Skin("state").ToString = "ACTIVE" Then
|
||||
MySkin.ReloadCache(Skin("url"))
|
||||
Return
|
||||
End If
|
||||
'获取新皮肤地址
|
||||
Log("[Skin] 皮肤修改返回值:" & vbCrLf & Result)
|
||||
Dim ResultJson As JObject = GetJson(Result)
|
||||
If ResultJson.ContainsKey("errorMessage") Then Throw New Exception(ResultJson("errorMessage").ToString) '#5309
|
||||
For Each Skin As JObject In ResultJson("skins")
|
||||
If Skin("state").ToString = "ACTIVE" Then
|
||||
MySkin.ReloadCache(Skin("url"))
|
||||
Return
|
||||
End If
|
||||
Next
|
||||
Throw New Exception("未知错误(" & Result & ")")
|
||||
Catch ex As Exception
|
||||
If TypeOf ex Is OperationCanceledException OrElse TypeOf ex Is TimeoutException Then
|
||||
Hint("更改皮肤失败:连接皮肤服务器超时,请稍后再试,或使用 VPN 改善网络环境", HintType.Red)
|
||||
Else
|
||||
Log(ex, "更改皮肤失败", LogLevel.Hint)
|
||||
End If
|
||||
Finally
|
||||
IsChanging = False
|
||||
End Try
|
||||
End Sub, "Ms Skin Upload")
|
||||
Next
|
||||
Throw New Exception("未知错误(" & Result & ")")
|
||||
Catch ex As Exception
|
||||
If TypeOf ex Is OperationCanceledException OrElse TypeOf ex Is TimeoutException Then
|
||||
Hint("更改皮肤失败:连接皮肤服务器超时,请稍后再试,或使用 VPN 改善网络环境", HintType.Red)
|
||||
ElseIf TypeOf ex Is ResponsedWebException AndAlso CType(ex, ResponsedWebException).StatusCode = HttpStatusCode.Unauthorized Then
|
||||
Log(ex, "更改皮肤时遭遇 401 错误", LogLevel.Developer)
|
||||
Hint("正在重新登录,将在登录后自动更改皮肤……")
|
||||
McLoginMsLoader.Start(GetLoginData(), IsForceRestart:=True)
|
||||
GoTo Retry
|
||||
Else
|
||||
Log(ex, "更改皮肤失败", LogLevel.Hint)
|
||||
End If
|
||||
Finally
|
||||
IsChanging = False
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
'保存皮肤
|
||||
|
||||
@@ -117,46 +117,14 @@
|
||||
<StackPanel Margin="25,40,19,20">
|
||||
<TextBlock HorizontalAlignment="Left" Text="以下是近期的高级赞助者们!感谢大家对 PCL 的支持!!!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
|
||||
<WrapPanel Margin="0,0,0,10">
<TextBlock Margin="0,1.5,6,0" Text="." />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="F" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="z" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="y" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Y" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="2" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="X" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="..." />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="R" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="L." />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="yi" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Q" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="D" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="le" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="寄" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ㅤ" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="vv" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="雨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="念" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="覹" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="咕" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="李" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="狼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="甘" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="。" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="cx" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="璃" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="几" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="宏" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="凯" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ht" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="枫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="龙" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text=":" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="夕" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="徐" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="谶" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="靕" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="稳" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="文" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="无" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="莫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="尊" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="埃" />
|
||||
@@ -166,123 +134,43 @@
|
||||
<TextBlock Margin="0,1.5,6,0" Text="羽" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="梦" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="零" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="jw" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ftt" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="笕" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="枫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="TT" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ZZ" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="......" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="zjx" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="XX" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Lie" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="sjg" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="yfx" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="hly" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="l y y" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="陈jj" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="xixi" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="7%" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="UU" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="PQ" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="bre" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="eye" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="O.o" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ZYL" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ZYL" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="qixi" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="555" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="661" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="轩₩" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="zzw" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ybb" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="JJJT" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Rou" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="wyb" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="qqq" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="zikil" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ZCY" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Kiro" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Win" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沙轻" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="流明" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="姜耸" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="柏枫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="柒绪" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="缤语" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="xsqs" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="啊?" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="空青" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="无风" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="听雨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="方格" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="奇才" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="柒安" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="君猫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="旋叶" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="苑煜" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="蓝臻" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="恺乐" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="还好" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="暗生" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="久辰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="陌苼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沐清" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="阿杰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="夜幕" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="夜墨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="芥裔" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="慕野" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沐落" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="澍雨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="叶子" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="谦适" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="天蚕" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="盛煌" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="疯瞳" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="梦寻" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="袁虐" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="李研" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="羁鸟" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="白哉" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="輕生" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="雾雨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="芊梦" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="命免" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="序言" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="水木" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="旧颜" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="老六" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="阿笙" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="玎默" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="星霰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="凡多" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="和尘" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="桓落" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="卢茨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="叶依" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="月月" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="大陈" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="桉桉" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="kkia" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="深邃" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="夜晨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="米龙" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="悠茵" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="星辰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="槲西" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="呱呱" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="眼睛" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沐木" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="瞄咂" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小冉" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="西奥" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="黑色" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="七七" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="白給" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="猫鱼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="玖外" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="猫菇" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="圣女" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="星光" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="LLLL" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="劳劳" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="顾浅" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="啸血" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="里奥" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="大陌" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="板刷" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="佬浏" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="令狐" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="宁笑" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="落夏" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="云螭" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="乌云" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="之祠" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="冯睿" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="夜昼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="鎔謙" />
|
||||
@@ -315,108 +203,57 @@
|
||||
<TextBlock Margin="0,1.5,6,0" Text="笨挽" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="悦木" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="林霖" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Alex" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="JIUZ" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="hina" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="king" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="END" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="AAA" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="flzxc" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="谷雨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="辞七" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="血狐" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="君泽" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="歧辰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="嗷嗷" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="陌陌" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小王" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小龙" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="月桂" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沐槿" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="雨润" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="颜峰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="符符" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="莫林" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="唐匡" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="腐蠱" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="别打" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="):" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="time" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="sadv" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="gate" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="king" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Ezzo" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="vilkil" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="1nVt" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="^O^" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="V無V" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="hhvv " />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="TTT4" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="kuze" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="HJYz" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="0216" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="DOA" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="1001" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="tynry" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="qdy8" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Qing" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="TOM" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Gaze" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Long" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Cella" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Keyn" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="4Ghz" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="miao" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="aifad" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="xxxte" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="dddy" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="cong" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="叶子L" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="lelezi" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="lucky" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="bbbb" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Gd64" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="gugu" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Ango" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Elysia" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="徐铭h" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="HKV1" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="zjunE" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="少年A" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="mouy" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="KSfall" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="司马Q" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="FedEx" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="0NaCl" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="pisces" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Brant" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="cHEn." />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="RANX" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="&#39;" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ZDHK" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Mikey" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="kjshsk" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="JaMaf" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ziqian" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="调试器" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="孙嘉言" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="张卿予" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="樟涛竹" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="布布曼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Enrico" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="柳文江" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="伊蕾娜" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="竹节虫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="狼崽子" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="刘杰世" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="汐阶屿" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ーーー" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="墨斗鱼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沈沙雕" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="萧子衿" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="好好好" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小鳄鱼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="何凝云" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Chaka" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ximou" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小萌新" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="寒凌川" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沨旻泽" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="李睿洋" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Frutaa" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="饱之维" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="刘啥啊" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="鼻涕菌" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="熙镜樱" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="不知道" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="好棒蛇" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="苏幕花" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="苏眠眩" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="享长生" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="黄锦坤" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="缄默龙" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="楽嘞嘞" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="斯科达" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="的逻辑" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="新叶叶" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="四月初" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="梦霙雪" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="夜不收" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="97ang" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="马天癸" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="剑骨头" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="栀熙阳" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="晚雾鹤" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="金苹果" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="云野寂" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="金木研" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="韩雨宸" />
|
||||
@@ -451,127 +288,71 @@
|
||||
<TextBlock Margin="0,1.5,6,0" Text="白清河" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="晚江诗" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="諸星洋" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="UN_41" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="bguae" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="哦哦哦" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="咕谷谷" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="长白山" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="杨某某" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="云尘眠" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="腐目cx" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="大鱻鱼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="颠修钩" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="拉罗克" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="八云辰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="祝卿安" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="北兮乄" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="yoyal8" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="hjsa30" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Chpoy" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Ander." />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Zh11h" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="aKALA" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="muzsh" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="gyj120" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="IC1805" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Young" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="凌·秋烨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="logical" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="bit...bit" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="wujian" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="N0rdiK" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Sphinx" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="kimma" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="techzjc" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Keiskei" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="EMO龚" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Jupiter" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Thgink" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="forever" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="114514" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="manbo" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="114514" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Gemini" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="MAL.鱼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="114514" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="114514" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="mneng" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="YEYEYE" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Phuket" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Atomic" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Kabuto" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text=".懒子:(" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ZyR3Xx" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="DrQuin" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="sund3a" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="jiduhui" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Snowill" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="kvmvvx" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="sabrina" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="XIruotE" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ling141" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Charile." />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="夜未央S" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Esykaul" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="粑8博弈" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="GY9965" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="果冻1号" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Decade" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="laobide" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ccb大神" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="chicken" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="阿毛mjy" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="CRF1SH" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="plastick" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="loouse_" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="饺子MC" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="kill1122" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="EDream" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="-Guard-" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Stridder" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="猫yi巴草" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Lennyes" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Aspirike" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Paprosa" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="秦爅QIN" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="weather" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="qwptpw" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="RedLink" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="SkyArea" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="奶酪Jzy_" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Starying" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="longday" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="wwwww" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="疾驰火车" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="鸿星天帝" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="我不在线" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="脏仔牛奶" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="金禾向暖" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="贤者摸鱼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="只见伊人" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="苏家阿辰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="未知用户" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小鱼干儿" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="逆浪千秋" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="南宫若兮" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="时灵风逝" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="二十四誓" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="浮世三千" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="英白拉多" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="逐兔寻鲸" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="红袖添香" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="氮气炸锅" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小小小马" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="爱莉希雅" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="容我三思" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="正经云泽" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="不会起名" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="肆拾贰号" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小茵fans" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="杰克刀哥" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="风止于夏" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="未梦领来" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="村里村夫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="汇流成莹" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="霜灵雾屿" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="依宸不在" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="繁星闪音" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="萧萧轻语" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="文文新闻" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="耶日霍夫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="游鹤神归" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="加央顿珠" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="不讲武德" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Xiaotian" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="雨夜渔阳" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="冻天星梦" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="醉歌梦凌" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="一只沙貂" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="高山炎炎" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="桐树生花" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="马赛克娘" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="瓦尔基里" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="旧事酒浓" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="奇迹于你" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="北宋供奉" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="粪海狂蛆" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="暮雪沉香" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="领袖凉生" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="欧气虹吸" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="饿性循环" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="白灼百叶" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="竹林提酒" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="黎月红夕" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="天下无双" />
|
||||
@@ -599,100 +380,48 @@
|
||||
<TextBlock Margin="0,1.5,6,0" Text="虫草絮语" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="咸鱼冻肉" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="六六六折" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="(=^x^=)" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Milkyink" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="houteng" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="MiaoTvT" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="是黎明Ya" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="IcassavaI" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="zgyyyyyy" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="摆烂大帝" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="念念不忘" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="万权之星" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="西风所见" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="猫猫七子" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="雾散別离" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="不想社交" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="匿迹誊纳" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="城南旧事" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="惜落的梅" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="星光夜魅" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="凌瑶雪莹" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="wswsing" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="漆黑噤默" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="無WuAD" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小鹅_XEE" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Naroulta" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="lazeshen" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="VVVerniy" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="PoiliPoili" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="CityHaze" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="wdy9527" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="777seese" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text=" 脖子右拧" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="NicoACG" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="许和0331" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Vergilius." />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="User9075" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Bai_Yang" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="平凡-仁友" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="bbbbben" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="3355411²" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="boluoluo" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Marming" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="雾眠Reko" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Sevenfan" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="114514sir" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="忆恩sama" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="InertStew" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小沉Chen" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="断网没mu" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="THOPING" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="QILUOVO" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="有鱼sama" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="EXcloudZ" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="想rua狐狸" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Leisurelyz" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="white白鸽" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="有用的小B" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="GKIGVHJJ" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="YMonody" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="历战b三狼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="DHSGXKL" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="执意追风..." />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ZMMMM" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="sensei425" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="aslillusory" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="AmorSick" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="添加剂ing" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="666abcba" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Sariel小懒" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="androidhi" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="fjh321008" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ai_114514" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="BlackGary" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="MoFu莫孚" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="gggg1234" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="-雾里看星-" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="R2hyb3Ro" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="暮幽&星辰" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="DoorDoor" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="shiroNeko" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="乄罒丶灬彡" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="众所又周知" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="一小片雨霖" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="爱游戏的狼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Smile_sink" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="不浇会枯花" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="想喝冰可乐" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="残阳墨雨柒" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="欢呼与果糖" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="忘却的旋律" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="迪奥的迪克" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="封于修不修" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="山海不可平" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="梦に逢う夜" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="被遗弃的猫" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="FalseSleep" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="消失的狐狸" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="折戟唤沉沙" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="神秘车万厨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="葡萄成熟时" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="微观粒子号" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="ㅤ明月入怀" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="没有名字哈" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="帝皇的货币" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="暗黑卡卡西" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="月掩星未眠" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="老登吃小登" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="星辰与月亮" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="想吃烤冷面" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="此玉却彼风" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="蛋炒饭大王" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="青岚丶悠远" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="玖久九鸠纠" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="无聊的爱莉" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="希希爱睡觉" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="六面三倍速" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="orangexixi" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="gugugaga" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="月下如墨黑" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="此心无一事" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="烂鱼一条线" />
|
||||
@@ -707,60 +436,28 @@
|
||||
<TextBlock Margin="0,1.5,6,0" Text="帕秋莉~go" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="玉玉小南娘" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="欣喜的掌声" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Myst-FOEY" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="qaz155808" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小云爱中国" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="内存漫游者" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="压力暴大了" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="鲜花女男爵" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="团结起来!" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="BeiWu_CN" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="289775340" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Executarea" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="rosewhisky" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="baicai1339" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="mreaaaaay" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Swampday" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="GreyFalcon" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Neko_2333" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Stellar_Red" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Kizuner630" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="陶纸Mr.Tao" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Hhhsalfkhs" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="地灵989898" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="loading182" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="hhhjtqdydz" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小啊北Devo" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text=" 花落碎人心" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="TravellerISX" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="littlefive999" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="AliesMoctxi" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="EmmSUPER" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="DeathHunk" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="时时雨Sama" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="永远的Elysia" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="2127864647" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Frankie_233" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="izmash0449" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Hashtag233" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="yu🐟 ζ°)))彡" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="COImos071_" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="QingYiLiang" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="arcueid1023" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="诺万_Norvan" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="amazingball" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="边骂边摆的驴" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="万物不及欣然" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="while(true){}" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="十六枚铜币丶" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="桓桓在等高铁" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="随便写的名字" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="我就是萝莉控" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="秦大人工作室" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="爱村民的小春" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="泰拉萌新小王" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="大貓君小貓君" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="画下梦的羽衣" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="枫叶下的沉默" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="欢愉不是花鱼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="这算个什么鬼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="你无聊的队友" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="壬彐木公木木" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="口渴了不喝水" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="全网最善之人" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="星核猎手银狼" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="凯文卡斯兰娜" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="happy?无聊" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="殷殷殷!!!" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="打泡泡SAMA" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="猫的龙车吸引" />
|
||||
@@ -768,39 +465,17 @@
|
||||
<TextBlock Margin="0,1.5,6,0" Text="酱汁饼大可爱" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="下水道的鼠鼠" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="萨卡兹大蟑螂" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="吃麦片的老鼠" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小石潭记qwq" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="centuryplant" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Suber_agiley" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="NoBody_MO" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="M的CC_5b67" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="gaomanman" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="satorikomeiji" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="元初_Nanana" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="小喜出品1239" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Changephon" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Emo真的emo" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Omori_sunny" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="路过一下的lsp" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="qingtian4135" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Nakano Nino" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="xiaolong_492" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="guduzihaoge" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="minecraft风竹" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="huangweijian" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Kecdl_Chacha" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="CrimsonCloud" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Rinshonagon" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Tincyclopedia" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="minecraftac11" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="一只可爱的ss猹" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="黑煤球第一帕克" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="zishuijing2021" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="qq1967131327" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="清清娴娴哆快乐" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="地表最强妹妹头" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="半世琉璃倾城梦" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="思念最是飞雪时" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="做人要脑洞大开" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="正义警官足立透" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="夜空中最亮的星" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="正义哥布林二号" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="大王叫我去做饭" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="泪水打湿泪水湿" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="みやぐにあかり" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="苇名剑圣有地绫" />
|
||||
@@ -808,30 +483,21 @@
|
||||
<TextBlock Margin="0,1.5,6,0" Text="逐梦青年当自强" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="哈基米南北路多" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="休伯利安养老院" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="SummerAlway_" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="照井黎Terui_Rei" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="CHENDASHUAI" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="约翰·冯·海格力斯" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="柚子_grapefruit_" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="南ིྀ熙ིྀ寒ིྀ笙ིྀ" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="星之梦Hoshino_" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="某不知名的GWM" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="MrFudgeSquare" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="WeimingFanzhe" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="PolarPanda2333" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="天下第一可爱芝麻" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Hendestroyer149" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="一名热爱mc的玩家" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="过年啦(๑ᵔ⌔ᵔ๑)ノ🧨" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="星ベ空(Xingkong)" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="WerewolfwolfyXD" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="All systems normal" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="传奇幻想乡冰之勇者" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Black_Banana_Cat" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="山有扶苏,隰有荷华" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="月亮呼了星星一巴掌" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="窝绰承保拾憶闪富拉" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="NepentheAria-ゆせ" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Mercuryearedrabbit" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="Exeller(没钱的腐竹)" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="荒漠迷城第一突破手凑友希娜" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沒錢點UberEats也不會變有錢" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="我*:《蚊子》【*】亖**蚊子引雷" />
|
||||
<TextBlock Margin="0,1.5,6,0" Text="沒錢點UberEats也不會變有錢" />
|
||||
</WrapPanel>
|
||||
<Grid Height="35">
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -886,7 +552,10 @@
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="60" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="60" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Java Launch Wrapper" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2022 00ll00
Licensed under the MIT License." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="1" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
@@ -894,51 +563,58 @@
|
||||
<local:MyButton Grid.Row="1" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/00ll00/java_launch_wrapper?tab=MIT-1-ov-file#readme" />
|
||||
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Newtonsoft.Json" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2007 James Newton-King
Licensed under the MIT License." TextWrapping="Wrap" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="LWJGL Unsafe Agent" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2026 Glavo
Licensed under the Apache License, Version 2.0." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="3" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.newtonsoft.com/json" />
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/HMCL-dev/lwjgl-unsafe-agent" />
|
||||
<local:MyButton Grid.Row="3" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.apache.org/licenses/LICENSE-2.0" />
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.Column="0" Text="Newtonsoft.Json" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2007 James Newton-King
Licensed under the MIT License." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="5" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.newtonsoft.com/json" />
|
||||
<local:MyButton Grid.Row="5" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://opensource.org/licenses/MIT" />
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.Column="0" Text="NAudio" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2015 Mark Heath ([email protected])
Licensed under the MIT License." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="5" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<TextBlock Grid.Row="6" Grid.Column="0" Text="NAudio" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2015 Mark Heath ([email protected])
Licensed under the MIT License." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="7" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/naudio/NAudio" />
|
||||
<local:MyButton Grid.Row="5" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<local:MyButton Grid.Row="7" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/naudio/NAudio/blob/master/license.txt" />
|
||||
|
||||
<TextBlock Grid.Row="6" Grid.Column="0" Text="Ookii.Dialogs" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2009 Sven Groot (Ookii.org)" TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="7" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<TextBlock Grid.Row="8" Grid.Column="0" Text="Ookii.Dialogs" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2009 Sven Groot (Ookii.org)" TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="9" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.ookii.org/Software/Dialogs/" />
|
||||
<local:MyButton Grid.Row="7" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<local:MyButton Grid.Row="9" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/caioproiete/ookii-dialogs-wpf/blob/master/LICENSE" />
|
||||
|
||||
<TextBlock Grid.Row="8" Grid.Column="0" Text="Iconmonstr" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2019 iconmonstr (Alexander Kahlkopf)" TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="9" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<TextBlock Grid.Row="10" Grid.Column="0" Text="Iconmonstr" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2019 iconmonstr (Alexander Kahlkopf)" TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="11" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://iconmonstr.com/" />
|
||||
<local:MyButton Grid.Row="9" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<local:MyButton Grid.Row="11" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://iconmonstr.com/license/" />
|
||||
|
||||
<TextBlock Grid.Row="10" Grid.Column="0" Text="libwebp wrapper for .NET" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2012 Imazen
Licensed under the MIT License." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="11" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<TextBlock Grid.Row="12" Grid.Column="0" Text="libwebp wrapper for .NET" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2012 Imazen
Licensed under the MIT License." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="13" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/imazen/libwebp-net" />
|
||||
<local:MyButton Grid.Row="11" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<local:MyButton Grid.Row="13" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/imazen/libwebp-net/blob/master/LICENSE.txt" />
|
||||
|
||||
<TextBlock Grid.Row="12" Grid.Column="0" Text="Iconfont" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © ALIMAMA MUX, powered by alimama THX." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="13" Grid.Column="2" MinWidth="140" Text="查看原网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<TextBlock Grid.Row="14" Grid.Column="0" Text="Iconfont" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="14" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © ALIMAMA MUX, powered by alimama THX." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="15" Grid.Column="2" MinWidth="140" Text="查看原网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.iconfont.cn/" />
|
||||
|
||||
<TextBlock Grid.Row="14" Grid.Column="0" Text="EasyTier" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="14" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2024-present Easytier Programme within The Commons Conservancy
Licensed under the GNU Lesser General Public License." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="15" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<TextBlock Grid.Row="16" Grid.Column="0" Text="EasyTier" TextWrapping="Wrap" FontWeight="Bold" />
|
||||
<TextBlock Grid.Row="16" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2024-present Easytier Programme within The Commons Conservancy
Licensed under the GNU Lesser General Public License." TextWrapping="Wrap" />
|
||||
<local:MyButton Grid.Row="17" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://easytier.cn/" />
|
||||
<local:MyButton Grid.Row="15" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
<local:MyButton Grid.Row="17" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/EasyTier/EasyTier/blob/main/LICENSE" />
|
||||
</Grid>
|
||||
</local:MyCard>
|
||||
|
||||
@@ -289,7 +289,9 @@
|
||||
</local:MyComboBox>
|
||||
<StackPanel Margin="0,12,0,4" Grid.Row="8" Grid.ColumnSpan="2" HorizontalAlignment="Left">
|
||||
<local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" local:SettingService.Key="LaunchAdvanceDisableJLW"
|
||||
ToolTipService.Placement="Right" ToolTip="PCL 会使用 Java Launch Wrapper 来修复老版本 Java 在中文路径下无法启动的问题。
如果这被反作弊拦截,或遇到其他问题,也可以将其关闭。" />
|
||||
ToolTipService.Placement="Right" ToolTip="是否使用 Java Launch Wrapper 修复 Java 18- 在中文路径下可能无法正常启动的问题。
详见:https://github.com/00ll00/java_launch_wrapper" />
|
||||
<local:MyCheckBox Height="28" Text="禁用 LWJGL Unsafe Agent" local:SettingService.Key="LaunchAdvanceDisableLUA"
|
||||
ToolTipService.Placement="Right" ToolTip="是否使用 LWJGL Unsafe Agent 修复 Java 25+ 的一个性能问题。
详见:https://github.com/HMCL-dev/lwjgl-unsafe-agent" />
|
||||
<local:MyCheckBox Height="28" Text="使用高性能显卡" local:SettingService.Key="LaunchAdvanceGraphicCard"
|
||||
ToolTipService.Placement="Right" ToolTip="自动在 Windows 设置 → 系统 → 屏幕 → 显示卡 中将 PCL 和 Java 改为使用高性能显卡。
如果同时有集成显卡和独立显卡,这能确保 MC 使用独立显卡进行渲染,以大幅提高帧率。" />
|
||||
</StackPanel>
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
New Setting("LaunchAdvanceRun", ""),
|
||||
New Setting("LaunchAdvanceRunWait", True),
|
||||
New Setting("LaunchAdvanceDisableJLW", False),
|
||||
New Setting("LaunchAdvanceDisableLUA", False),
|
||||
New Setting("LaunchAdvanceGraphicCard", True, Source:=Sources.Registry),
|
||||
New Setting("LaunchAdvanceGC", 4),
|
||||
New Setting("LaunchRamType", 0, OnChanged:=AddressOf PageSetupLaunch.UpdateRamType),
|
||||
@@ -171,6 +172,7 @@
|
||||
New Setting("VersionAdvanceRun", "", Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceRunWait", True, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceDisableJLW", False, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceDisableLUA", False, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceDisableModUpdate", False, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceGC", 0, Source:=Sources.Instance),
|
||||
New Setting("VersionRamType", 2, Source:=Sources.Instance, OnChanged:=AddressOf PageInstanceSetup.OnVersionRamTypeChanged),
|
||||
@@ -211,7 +213,6 @@
|
||||
''' 该设置的值的实际类型。
|
||||
''' </summary>
|
||||
Public Type As Type
|
||||
|
||||
Public Sub New(Key As String, Value As Object, Optional Source As Sources = Sources.Normal, Optional Encrypted As Boolean = False, Optional OnChanged As Action(Of Object) = Nothing)
|
||||
Try
|
||||
Me.Key = Key
|
||||
@@ -224,6 +225,30 @@
|
||||
Log(ex, "初始化设置项失败", LogLevel.Feedback) '#5095 的 fallback
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 立即将当前的 Value 写入对应的注册表或文件。
|
||||
''' </summary>
|
||||
Public Sub Save(Optional Instance As McInstance = Nothing)
|
||||
Dim Value As String = Me.Value
|
||||
If Encrypted Then
|
||||
Try
|
||||
If Value Is Nothing Then Value = ""
|
||||
Value = SecretEncrypt(Value, "PCL" & Identify)
|
||||
Catch ex As Exception
|
||||
Log(ex, "加密设置失败:" & Key, LogLevel.Developer)
|
||||
End Try
|
||||
End If
|
||||
Select Case Source
|
||||
Case Sources.Normal
|
||||
WriteIni("Setup", Key, Value)
|
||||
Case Sources.Registry
|
||||
WriteReg(Key, Value)
|
||||
Case Sources.Instance
|
||||
If Instance Is Nothing Then Throw New Exception($"保存版本独立设置 {Key} 时未提供目标版本")
|
||||
WriteIni(Instance.PathVersion & "PCL\Setup.ini", Key, Value)
|
||||
End Select
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
''' <summary>
|
||||
@@ -239,25 +264,9 @@
|
||||
If Entry.Value = Value Then Return
|
||||
'设置新值
|
||||
Entry.Value = Value
|
||||
If Entry.Encrypted Then
|
||||
Try
|
||||
If Value Is Nothing Then Value = ""
|
||||
Value = SecretEncrypt(Value, "PCL" & Identify)
|
||||
Catch ex As Exception
|
||||
Log(ex, "加密设置失败:" & Key, LogLevel.Developer)
|
||||
End Try
|
||||
End If
|
||||
Select Case Entry.Source
|
||||
Case Sources.Normal
|
||||
WriteIni("Setup", Key, Value)
|
||||
Case Sources.Registry
|
||||
WriteReg(Key, Value)
|
||||
Case Sources.Instance
|
||||
If Instance Is Nothing Then Throw New Exception($"更改版本设置 {Key} 时未提供目标版本")
|
||||
WriteIni(Instance.PathVersion & "PCL\Setup.ini", Key, Value)
|
||||
End Select
|
||||
'触发改变事件(必须在写入之后,以保证 VersionServerLogin 之类的在事件中读取到的是最新的值)
|
||||
If Entry.OnChanged IsNot Nothing Then Entry.OnChanged.Invoke(Value)
|
||||
Entry.Save(Instance)
|
||||
'触发改变事件(必须在保存之后,以保证 VersionServerLogin 之类的在事件中读取到的是最新的值)
|
||||
If Entry.OnChanged IsNot Nothing Then Entry.OnChanged.Invoke(Entry.Value)
|
||||
Catch ex As Exception
|
||||
Log(ex, "设置设置项时出错(" & Key & ", " & Value & ")", LogLevel.Feedback)
|
||||
End Try
|
||||
@@ -315,7 +324,8 @@
|
||||
Catch ex As Exception
|
||||
Log(ex, "解密设置失败:" & Key, LogLevel.Developer)
|
||||
GotValue = Entry.DefaultValue
|
||||
[Set](Key, Entry.DefaultValue)
|
||||
Entry.Value = Entry.DefaultValue
|
||||
Entry.Save(Instance)
|
||||
End Try
|
||||
End If
|
||||
End If
|
||||
|
||||
@@ -761,6 +761,7 @@
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\Font.ttf" />
|
||||
<None Include="Resources\Help.zip" />
|
||||
<None Include="Resources\moddata.zip" />
|
||||
<None Include="Resources\NAudio.dll" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -875,9 +876,6 @@
|
||||
<ItemGroup>
|
||||
<None Include="Resources\java-wrapper.jar" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\ModData.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Images\Skins\Ari.png" />
|
||||
<Resource Include="Images\Skins\Efe.png" />
|
||||
@@ -923,7 +921,10 @@
|
||||
<Resource Include="Images\Heads\EasyTier.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\System.ValueTuple.dll" />
|
||||
<None Include="Resources\System.ValueTuple.dll" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\lwjgl-unsafe-agent.jar" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||
</Project>
|
||||
File diff suppressed because it is too large.
Load diff
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user