From 62394e0052858251d6e289ddb565b532c0f10b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E7=8C=AB=E8=B7=83?= <1043137532@qq.com> Date: Sat, 17 Aug 2024 01:46:19 +0800 Subject: [PATCH] 2.8.4 --- Plain Craft Launcher 2/Application.xaml.vb | 2 +- .../Controls/MyIconButton.xaml.vb | 11 +- Plain Craft Launcher 2/FormMain.xaml.vb | 28 +- .../Images/Heads/DoodleHuang.png | Bin 1293 -> 0 bytes .../Images/Heads/z0z0r4.png | Bin 0 -> 1967 bytes .../Modules/Base/ModBase.vb | 22 +- .../Modules/Base/ModLoader.vb | 48 +- Plain Craft Launcher 2/Modules/Base/ModNet.vb | 89 +- .../Modules/Minecraft/ModComp.vb | 62 +- .../Modules/Minecraft/ModCrash.vb | 5 +- .../Modules/Minecraft/ModDownload.vb | 122 +- .../Modules/Minecraft/ModJava.vb | 6 +- .../Modules/Minecraft/ModLaunch.vb | 207 +- .../Modules/Minecraft/ModMinecraft.vb | 10 +- .../Modules/Minecraft/ModMod.vb | 15 +- .../Modules/Minecraft/ModModpack.vb | 274 +- Plain Craft Launcher 2/Modules/ModSecret.vb | 14 +- .../My Project/AssemblyInfo.vb | 4 +- .../Pages/PageDownload/ModDownloadLib.vb | 241 +- .../PageDownload/PageDownloadClient.xaml.vb | 11 +- .../PageDownloadCompDetail.xaml.vb | 10 +- .../PageDownload/PageDownloadInstall.xaml.vb | 9 +- .../Pages/PageLaunch/MySkin.xaml.vb | 3 +- .../Pages/PageLaunch/PageLaunchLeft.xaml.vb | 62 +- .../PageLaunch/PageLoginAuthSkin.xaml.vb | 22 +- .../Pages/PageOther/PageOtherAbout.xaml | 404 +-- .../Pages/PageSetup/ModSetup.vb | 3 +- .../Pages/PageSetup/PageSetupLaunch.xaml | 4 +- .../Pages/PageSetup/PageSetupSystem.xaml | 46 +- .../Pages/PageSetup/PageSetupSystem.xaml.vb | 16 +- .../Pages/PageSpeedLeft.xaml.vb | 20 +- .../Pages/PageVersion/PageVersionMod.xaml.vb | 2 +- .../PageVersion/PageVersionOverall.xaml.vb | 13 +- .../Plain Craft Launcher 2.vbproj | 4 +- Plain Craft Launcher 2/Resources/Help.zip | Bin 76889 -> 77202 bytes Plain Craft Launcher 2/Resources/ModData.txt | 2430 +++++++++++++---- .../Resources/java-wrapper.jar | Bin 16526 -> 18321 bytes 37 files changed, 2654 insertions(+), 1565 deletions(-) delete mode 100644 Plain Craft Launcher 2/Images/Heads/DoodleHuang.png create mode 100644 Plain Craft Launcher 2/Images/Heads/z0z0r4.png diff --git a/Plain Craft Launcher 2/Application.xaml.vb b/Plain Craft Launcher 2/Application.xaml.vb index 427ac33..34fc417 100644 --- a/Plain Craft Launcher 2/Application.xaml.vb +++ b/Plain Craft Launcher 2/Application.xaml.vb @@ -90,7 +90,7 @@ Public Class Application ToolTipService.HorizontalOffsetProperty.OverrideMetadata(GetType(DependencyObject), New FrameworkPropertyMetadata(8.0)) ToolTipService.VerticalOffsetProperty.OverrideMetadata(GetType(DependencyObject), New FrameworkPropertyMetadata(4.0)) '设置初始窗口 - If Setup.Get("UiLauncherLogo") AndAlso Not FormMain.IsLinkRestart Then + If Setup.Get("UiLauncherLogo") Then FrmStart = New SplashScreen("Images\icon.ico") FrmStart.Show(False, True) End If diff --git a/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb b/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb index ca8f99d..d7103c6 100644 --- a/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb +++ b/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb @@ -111,7 +111,16 @@ If IsLoaded AndAlso AniControlEnabled = 0 Then '防止默认属性变更触发动画 If PanBack.Background Is Nothing Then PanBack.Background = New MyColor(0, 255, 255, 255) - If Path.Fill Is Nothing AndAlso Theme = Themes.Black Then Path.Fill = New MyColor(140, 0, 0, 0) + If Path.Fill Is Nothing Then + Select Case Theme + Case Themes.Red + Path.Fill = New MyColor(160, 255, 76, 76) + Case Themes.Black + Path.Fill = New MyColor(160, 0, 0, 0) + Case Themes.Custom + Path.Fill = New MyColor(160, Foreground) + End Select + End If If IsMouseOver Then '指向 Dim AnimList As New List(Of AniData) diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb index 265004e..4dedbcc 100644 --- a/Plain Craft Launcher 2/FormMain.xaml.vb +++ b/Plain Craft Launcher 2/FormMain.xaml.vb @@ -124,6 +124,15 @@ Public Class FormMain '3:BUG+ IMP* FEAT- '2:BUG* IMP- '1:BUG- + If LastVersion < 333 Then 'Snapshot 2.8.4 + FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "下载 Mod 时会使用 MCIM 国内镜像源")) + FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "打开 PCL 时会自动安装同目录下的 modpack.zip")) + FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "爱发电域名迁移至 afdian.com")) + FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复 1.20.1+ 离线登录使用正版皮肤时无法保存游戏的 Bug")) + FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复安装的 1.14~1.15 Forge+OptiFine 无法进入世界的 Bug")) + FeatureCount += 13 + BugCount += 17 + End If If LastVersion < 331 Then 'Snapshot 2.8.3 If LastVersion = 329 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复部分玩家无法启动 MC 的 Bug")) End If @@ -307,17 +316,13 @@ Public Class FormMain RunInNewThread( Sub() If MyMsgBox(Content, "PCL 已更新至 " & VersionDisplayName, "确定", "完整更新日志") = 2 Then - OpenWebsite("https://afdian.net/a/LTCat?tab=feed") + OpenWebsite("https://afdian.com/a/LTCat?tab=feed") End If End Sub, "UpdateLog Output") End Sub '窗口加载 Private IsWindowLoadFinished As Boolean = False - ''' - ''' 是否为联机提权后自动重启。 - ''' - Public Shared IsLinkRestart As Boolean = False Public Sub New() ApplicationStartTick = GetTimeTick() '窗体参数初始化 @@ -355,7 +360,6 @@ Public Class FormMain PanMainLeft.Child = FrmLaunchLeft PanMainRight.Child = FrmLaunchRight FrmLaunchRight.PageState = MyPageRight.PageStates.ContentStay - If IsLinkRestart Then PageChange(PageType.Link, PageSubType.LinkIoi) '模式提醒 #If DEBUG Then Hint("[开发者模式] PCL 正以开发者模式运行,这可能会造成严重的性能下降,请务必立即向开发者反馈此问题!", HintType.Critical) @@ -424,7 +428,7 @@ Public Class FormMain Sub() PanBack.RenderTransform = Nothing IsWindowLoadFinished = True - Log($"[System] DPI:{DPI},系统版本:{OsVersion},PCL 位置:{PathWithName}") + Log($"[System] DPI:{DPI},系统版本:{Environment.OSVersion.VersionString},PCL 位置:{PathWithName}") End Sub, , True) }, "Form Show") 'Timer 启动 @@ -570,7 +574,7 @@ Public Class FormMain RunInNewThread( Sub() Log("[System] 正在强行停止任务") - For Each Task As LoaderBase In LoaderTaskbar.ToArray + For Each Task As LoaderBase In LoaderTaskbar.ToList() Task.Abort() Next End Sub, "强行停止下载任务") @@ -889,10 +893,12 @@ Public Class FormMain Install: Try For Each ModFile In FilePathList - CopyFile(ModFile, TargetVersion.PathIndie & "mods\" & GetFileNameFromPath(ModFile)) + Dim NewFileName = GetFileNameFromPath(ModFile).Replace(".disabled", "") + If Not NewFileName.Contains(".") Then NewFileName += ".jar" '#4227 + CopyFile(ModFile, TargetVersion.PathIndie & "mods\" & NewFileName) Next If FilePathList.Count = 1 Then - Hint($"已安装 {GetFileNameFromPath(FilePathList.First)}!", HintType.Finish) + Hint($"已安装 {GetFileNameFromPath(FilePathList.First).Replace(".disabled", "")}!", HintType.Finish) Else Hint($"已安装 {FilePathList.Count} 个 Mod!", HintType.Finish) End If @@ -909,7 +915,7 @@ Install: '安装整合包 If {"zip", "rar", "mrpack"}.Any(Function(t) t = Extension) Then '部分压缩包是 zip 格式但后缀为 rar,总之试一试 Log("[System] 文件为压缩包,尝试作为整合包安装") - If ModpackInstall(FilePath, ShowHint:=False) Then Exit Sub + If ModpackInstall(FilePath, ShowHint:=False) IsNot Nothing Then Exit Sub End If 'RAR 处理 If Extension = "rar" Then diff --git a/Plain Craft Launcher 2/Images/Heads/DoodleHuang.png b/Plain Craft Launcher 2/Images/Heads/DoodleHuang.png deleted file mode 100644 index 803e812467a76f4cae2fb1271b291280aaa95549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1293 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

!Lj=NvQj?n=0AR=`smV_KHF2Nb;bJFLmYk|x( zy8%Cd+P|wY&b9!^w0GmkmBllC1f8uLOYs}#ZKvY=u8^L+j@@4Jo%t0+hvk>zC(^8v zFdLP7?R9Up-Yw@0ON&TsTz(0*DjYA3RCUzIojSAwC(-TUDOXdJJMO-g7sdf4{D6{v?5Y-E64<`foP~=N-2mtSF(|gw4q#t=;J0O^>E88N_fN_(3yp?j5jvZTi$fK02;KIy};|?Hl0l9x~d)bpC{)IT3ejoMn9OS|uiYG3-s}P?B;nvAQ_LJu| z@&uUqtF+hX=bWiNP+Two$RPqpdhVToU!~nB9xw7Rbb7KFbFPKmwP-}@EzbefcWkk7i0$C=b`Pw{J6d`t_2`8)&$x01A!yG{dmDaEc&`W7yndg=cK&^E z%5~S`zlis0>v@f#v%ByY@wtfc?U+v*?)<;+{{b7YTRX7}7100y002ovPDHLkV1f~X BqY(fA literal 0 HcmV?d00001 diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb index e7897f4..f41e5b1 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb @@ -11,12 +11,12 @@ Public Module ModBase #Region "声明" '下列版本信息由更新器自动修改 - Public Const VersionBaseName As String = "2.8.3" '不含分支前缀的显示用版本名 - Public Const VersionStandardCode As String = "2.8.3." & VersionBranchCode '标准格式的四段式版本号 + Public Const VersionBaseName As String = "2.8.4" '不含分支前缀的显示用版本名 + Public Const VersionStandardCode As String = "2.8.4." & VersionBranchCode '标准格式的四段式版本号 #If BETA Then Public Const VersionCode As Integer = 332 'Release #Else - Public Const VersionCode As Integer = 331 'Snapshot + Public Const VersionCode As Integer = 333 'Snapshot #End If '自动生成的版本信息 Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName @@ -80,10 +80,6 @@ Public Module ModBase ''' Public IsGBKEncoding As Boolean = Encoding.Default.CodePage = 936 '''

- ''' 操作系统版本。Win10 为 10.0。 - ''' - Public OsVersion As Version = Environment.OSVersion.Version - ''' ''' 系统盘盘符,以 \ 结尾。例如 “C:\”。 ''' Public OsDrive As String = Environment.GetLogicalDrives().Where(Function(p) Directory.Exists(p)).First.ToUpper.First & ":\" '#3799 @@ -1108,8 +1104,6 @@ Re: Dim Retry As Boolean = False Re: Try - ''检测该文件是否在下载中,若在下载则放弃检测 - 'If IgnoreOnDownloading AndAlso NetManage.Files.ContainsKey(FilePath) AndAlso NetManage.Files(FilePath).State <= NetState.Merge Then Return "" '获取 SHA1 Dim file As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) Dim sha1 As SHA1 = New SHA1CryptoServiceProvider() @@ -1587,14 +1581,14 @@ RetryDir: ''' 获取处于两个子字符串之间的部分。 ''' 会裁切尽可能多的内容:匹配开始使用 LastIndexOf,匹配结束使用 IndexOf,但如果未找到子字符串则不裁切。 ''' - Public Function Between(Str As String, Before As String, After As String, Optional IgnoreCase As Boolean = False) As String - Dim StartPos As Integer = If(String.IsNullOrEmpty(Before), -1, Str.LastIndexOfF(Before, IgnoreCase)) + Public Function Between(Str As String, After As String, Before As String, Optional IgnoreCase As Boolean = False) As String + Dim StartPos As Integer = If(String.IsNullOrEmpty(After), -1, Str.LastIndexOfF(After, IgnoreCase)) If StartPos >= 0 Then - StartPos += Before.Length + StartPos += After.Length Else StartPos = 0 End If - Dim EndPos As Integer = If(String.IsNullOrEmpty(After), -1, Str.IndexOfF(After, StartPos, IgnoreCase)) + Dim EndPos As Integer = If(String.IsNullOrEmpty(Before), -1, Str.IndexOfF(Before, StartPos, IgnoreCase)) If EndPos >= 0 Then Return Str.Substring(StartPos, EndPos - StartPos) ElseIf StartPos > 0 Then @@ -2682,7 +2676,7 @@ Retry: Public Sub FeedbackInfo() On Error Resume Next Log("[System] 诊断信息:" & vbCrLf & - "操作系统:" & My.Computer.Info.OSFullName & vbCrLf & + "操作系统:" & My.Computer.Info.OSFullName & "(32 位:" & Is32BitSystem & ")" & vbCrLf & "剩余内存:" & Int(My.Computer.Info.AvailablePhysicalMemory / 1024 / 1024) & " M / " & Int(My.Computer.Info.TotalPhysicalMemory / 1024 / 1024) & " M" & vbCrLf & "DPI:" & DPI & "(" & Math.Round(DPI / 96, 2) * 100 & "%)" & vbCrLf & "MC 文件夹:" & If(PathMcFolder, "Nothing") & vbCrLf & diff --git a/Plain Craft Launcher 2/Modules/Base/ModLoader.vb b/Plain Craft Launcher 2/Modules/Base/ModLoader.vb index 18ed602..05596a2 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModLoader.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModLoader.vb @@ -566,38 +566,33 @@ Restart: End Class '任务栏进度条 - Public LoaderTaskbarLock As New Object - Public LoaderTaskbar As New List(Of LoaderBase) + Public LoaderTaskbar As New Concurrent.ConcurrentBag(Of LoaderBase) Public LoaderTaskbarProgress As Double = 0 '平滑后的进度 Private LoaderTaskbarProgressLast As Shell.TaskbarItemProgressState = Shell.TaskbarItemProgressState.None Public Sub LoaderTaskbarAdd(Of T)(Loader As LoaderCombo(Of T)) If FrmSpeedLeft IsNot Nothing Then FrmSpeedLeft.TaskRemove(Loader) - SyncLock LoaderTaskbarLock - LoaderTaskbar.Add(Loader) - Log($"[Taskbar] {Loader.Name} 已加入任务列表") - End SyncLock + LoaderTaskbar.Add(Loader) + Log($"[Taskbar] {Loader.Name} 已加入任务列表") End Sub Public Sub LoaderTaskbarProgressRefresh() Try Dim NewState As Shell.TaskbarItemProgressState Dim NewProgress As Double = LoaderTaskbarProgressGet() '检查任务是否完成,若完成则移除 - SyncLock LoaderTaskbarLock - '外显任务是否已经全部完成 - Dim IsAllDownloadTaskCompleted As Boolean = True - For Each Loader In LoaderTaskbar - If Loader.State = LoadState.Loading Then IsAllDownloadTaskCompleted = False - Next - '若单个任务已中止或全部任务已完成,则刷新并移除 - For Each Task In LoaderTaskbar.ToList() - If IsAllDownloadTaskCompleted OrElse Task.State = LoadState.Aborted OrElse Task.State = LoadState.Waiting Then - If FrmSpeedLeft IsNot Nothing Then FrmSpeedLeft.TaskRefresh(Task) - LoaderTaskbar.Remove(Task) - Log($"[Taskbar] {Task.Name} 已移出任务列表") - End If - Next - End SyncLock + '外显任务是否已经全部完成 + Dim IsAllDownloadTaskCompleted As Boolean = True + For Each Loader In LoaderTaskbar + If Loader.State = LoadState.Loading Then IsAllDownloadTaskCompleted = False + Next + '若单个任务已中止或全部任务已完成,则刷新并移除 + For Each Task In LoaderTaskbar.ToList() + If IsAllDownloadTaskCompleted OrElse Task.State = LoadState.Aborted OrElse Task.State = LoadState.Waiting Then + If FrmSpeedLeft IsNot Nothing Then FrmSpeedLeft.TaskRefresh(Task) + LoaderTaskbar.TryTake(Task) + Log($"[Taskbar] {Task.Name} 已移出任务列表") + End If + Next '更新平滑后的进度 If NewProgress <= 0 OrElse NewProgress >= 1 OrElse LoaderTaskbarProgress > NewProgress Then LoaderTaskbarProgress = NewProgress @@ -625,15 +620,8 @@ Restart: End Sub Public Function LoaderTaskbarProgressGet() As Double Try - Dim Total As Double = 0, Count As Integer = 0 - SyncLock LoaderTaskbarLock - For Each Task In LoaderTaskbar.ToList - Total += Task.Progress - Count += 1 '避免多线程影响导致计数出错 - Next - End SyncLock - If Count = 0 Then Return 1 - Return MathClamp(Total / Count, 0, 1) + If Not LoaderTaskbar.Any Then Return 1 + Return MathClamp(LoaderTaskbar.Select(Function(e) e.Progress).Average(), 0, 1) Catch ex As Exception Log(ex, "获取任务栏进度出错", LogLevel.Feedback) Return 0.5 diff --git a/Plain Craft Launcher 2/Modules/Base/ModNet.vb b/Plain Craft Launcher 2/Modules/Base/ModNet.vb index eaf57a2..e93c699 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModNet.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModNet.vb @@ -1,8 +1,6 @@ Imports System.Net Public Module ModNet - - Public Const NetDownloadEnd As String = ".PCLDownloading" ''' @@ -208,10 +206,10 @@ RequestFinished: Catch ex As ThreadInterruptedException Throw Catch ex As Exception - If ex.GetType.Equals(GetType(WebException)) AndAlso CType(ex, WebException).Status = WebExceptionStatus.Timeout Then - Throw New TimeoutException("连接服务器超时,已接收 " & Result.Count & " B(" & Url & ")") + If TypeOf ex Is WebException AndAlso CType(ex, WebException).Status = WebExceptionStatus.Timeout Then + Throw New TimeoutException($"获取结果失败({CType(ex, WebException).Status},{ex.Message},{Url})", ex) Else - Throw New WebException("获取结果失败," & ex.Message & "(" & Url & ")", ex) + Throw New WebException($"获取结果失败({If(TypeOf ex Is WebException, CType(ex, WebException).Status & ",", "")}{ex.Message},{Url})", ex) End If Finally Request.Abort() @@ -420,7 +418,7 @@ RequestFinished: Throw Catch ex As WebException If ex.Status = WebExceptionStatus.Timeout Then - Throw New WebException("连接服务器超时,请检查你的网络环境是否良好(" & Url & ")", ex) + ex = New WebException($"连接服务器超时,请检查你的网络环境是否良好({ex.Message},{Url})", ex) Else '获取请求失败的返回 Dim Res As String = "" @@ -434,10 +432,14 @@ RequestFinished: End Using Catch End Try - Throw New WebException("网络请求失败(" & Url & "," & ex.Message & ")" & If(String.IsNullOrEmpty(Res), "", vbCrLf & Res), ex) + ex = New WebException($"网络请求失败({ex.Status},{ex.Message},{Url}){If(String.IsNullOrEmpty(Res), "", vbCrLf & Res)}", ex) End If + If MakeLog Then Log(ex, "NetRequestOnce 失败", LogLevel.Developer) + Throw ex Catch ex As Exception - Throw New WebException("网络请求失败(" & Url & ")", ex) + ex = New WebException("网络请求失败(" & Url & ")", ex) + If MakeLog Then Log(ex, "NetRequestOnce 失败", LogLevel.Developer) + Throw ex Finally If DataStream IsNot Nothing Then DataStream.Dispose() If Resp IsNot Nothing Then Resp.Dispose() @@ -689,7 +691,7 @@ RequestFinished: ''' ''' 所属的文件列表任务。 ''' - Public Tasks As New List(Of LoaderDownload) + Public Tasks As New Concurrent.ConcurrentBag(Of LoaderDownload) ''' ''' 所有下载源。 @@ -882,7 +884,6 @@ RequestFinished: Public ReadOnly LockState As New Object Public ReadOnly LockChain As New Object Public ReadOnly LockSource As New Object - Public ReadOnly LockTasks As New Object Public ReadOnly Uuid As Integer = GetUuid() Public Overrides Function Equals(obj As Object) As Boolean @@ -965,7 +966,7 @@ Capture: Next '是否禁用多线程,以及规定碎片大小 Dim TargetUrl As String = GetSource().Url - If TargetUrl.Contains("pcl2-server") OrElse TargetUrl.Contains("gitcode.net") OrElse TargetUrl.Contains("github.com") OrElse TargetUrl.Contains("modrinth.com") Then Return Nothing + If TargetUrl.Contains("pcl2-server") OrElse TargetUrl.Contains("gitcode.net") OrElse TargetUrl.Contains("github.com") OrElse TargetUrl.Contains("modrinth") Then Return Nothing '寻找最大碎片 'FUTURE: 下载引擎重做,计算下载源平均链接时间和线程下载速度,按最高时间节省来开启多线程 Dim FilePieceMax As NetThread = Threads @@ -981,10 +982,8 @@ StartThread: If (StartPosition > FileSize AndAlso FileSize >= 0 AndAlso Not IsUnknownSize) OrElse StartPosition < 0 OrElse IsNothing(StartSource) Then Return Nothing '构建线程 Dim ThreadUuid As Integer = GetUuid() - SyncLock LockTasks - If Not Tasks.Any() Then Return Nothing '由于中断,已没有可用任务 - Th = New Thread(AddressOf Thread) With {.Name = $"NetTask {Tasks(0).Uuid}/{Uuid} Download {ThreadUuid}#", .Priority = ThreadPriority.BelowNormal} - End SyncLock + If Not Tasks.Any() Then Return Nothing '由于中断,已没有可用任务 + Th = New Thread(AddressOf Thread) With {.Name = $"NetTask {Tasks(0).Uuid}/{Uuid} Download {ThreadUuid}#", .Priority = ThreadPriority.BelowNormal} ThreadInfo = New NetThread With {.Uuid = ThreadUuid, .DownloadStart = StartPosition, .Thread = Th, .Source = StartSource, .Task = Me, .State = NetState.WaitForDownload} '链表处理 If ThreadInfo.IsFirstThread OrElse Threads Is Nothing Then @@ -1141,11 +1140,9 @@ NotSupportRange: End If SyncLock LockCount Info.Source.FailCount = 0 - SyncLock LockTasks - For Each Task In Tasks - Task.FailCount = 0 - Next - End SyncLock + For Each Task In Tasks + Task.FailCount = 0 + Next End SyncLock NetManager.DownloadDone += RealDataCount SyncLock LockDone @@ -1199,11 +1196,9 @@ SourceBreak: '状态变更 SyncLock LockCount Info.Source.FailCount += 1 - SyncLock LockTasks - For Each Task In Tasks - Task.FailCount += 1 - Next - End SyncLock + For Each Task In Tasks + Task.FailCount += 1 + Next End SyncLock Dim IsTimeoutString As String = GetExceptionSummary(ex).ToLower.Replace(" ", "") Dim IsTimeout As Boolean = IsTimeoutString.Contains("由于连接方在一段时间后没有正确答复或连接的主机没有反应") OrElse @@ -1308,7 +1303,7 @@ Retry: '合并文件 If IsNoSplit Then '仅有一个线程,从缓存中输出 - If ModeDebug Then Log($"[Download] {LocalName}:下载结束,从缓存输出文件") + If ModeDebug Then Log($"[Download] {LocalName}:下载结束,从缓存输出文件,长度:" & SmailFileCache.Count) MergeFile = New FileStream(LocalPath, FileMode.Create) AddWriter = New BinaryWriter(MergeFile) AddWriter.Write(SmailFileCache.ToArray) @@ -1345,7 +1340,7 @@ Retry: '检查文件 Dim CheckResult As String = Check?.Check(LocalPath) If CheckResult IsNot Nothing Then - Log($"[Download] {LocalName} 合并文件失败,下载线程细节:") + Log($"[Download] {LocalName} 文件校验失败,下载线程细节:") For Each Th As NetThread In Threads Log($"[Download] {Th.Uuid}#,状态 {GetStringFromEnum(Th.State)},范围 {Th.DownloadStart}~{Th.DownloadStart + Th.DownloadDone},完成 {Th.DownloadDone},剩余 {Th.DownloadUndone}") Next @@ -1398,10 +1393,8 @@ Retry: ''' Public Sub Abort(CausedByTask As LoaderDownload) '从特定任务中移除,如果它还属于其他任务,则继续下载 - SyncLock LockTasks - Tasks.Remove(CausedByTask) - If Tasks.Any Then Exit Sub - End SyncLock + Tasks.TryTake(CausedByTask) + If Tasks.Any Then Exit Sub '确认中断 SyncLock LockState If State >= NetState.Finish Then Exit Sub @@ -1431,11 +1424,9 @@ Retry: NetManager.FileRemain -= 1 If PrintLog Then Log("[Download] " & LocalName & ":已完成,剩余文件 " & NetManager.FileRemain) End SyncLock - SyncLock LockTasks - For Each Task In Tasks - Task.OnFileFinish(Me) - Next - End SyncLock + For Each Task In Tasks + Task.OnFileFinish(Me) + Next End Sub End Class @@ -1962,9 +1953,7 @@ Retry: If Files(File.LocalPath).State >= NetState.Finish Then '该文件已经下载过一次,且下载完成 '将已下载的文件替换成当前文件,重新下载 - SyncLock File.LockTasks - File.Tasks.Add(Task) - End SyncLock + File.Tasks.Add(Task) Files(File.LocalPath) = File SyncLock LockRemain FileRemain += 1 @@ -1975,15 +1964,11 @@ Retry: '该文件正在下载中 '将当前文件替换成下载中的文件,即两个任务指向同一个文件 File = Files(File.LocalPath) - SyncLock File.LockTasks - File.Tasks.Add(Task) - End SyncLock + File.Tasks.Add(Task) End If Else '没有该文件 - SyncLock File.LockTasks - File.Tasks.Add(Task) - End SyncLock + File.Tasks.Add(Task) Files.Add(File.LocalPath, File) SyncLock LockRemain FileRemain += 1 @@ -2005,14 +1990,12 @@ Retry: ''' 是否有正在进行中、需要在下载管理页面显示的下载任务? ''' Public Function HasDownloadingTask(Optional IgnoreCustomDownload As Boolean = False) As Boolean - SyncLock LoaderTaskbarLock - For Each Task In LoaderTaskbar - If (Task.Show AndAlso Task.State = LoadState.Loading) AndAlso - (Not IgnoreCustomDownload OrElse Not Task.Name.ToString.Contains("自定义下载")) Then - Return True - End If - Next - End SyncLock + For Each Task In LoaderTaskbar + 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 End Function diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb index 7c2da78..a893e44 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb @@ -278,7 +278,8 @@ End If 'Tags Tags = New List(Of String) - For Each Category In Data("categories").Select(Of Integer)(Function(t) t("id")).Distinct.OrderByDescending(Function(c) c) + For Each Category In If(Data("categories"), New JArray). '镜像源 API 可能丢失此字段:https://github.com/Hex-Dragon/PCL2/issues/4267#issuecomment-2254590831 + Select(Of Integer)(Function(t) t("id")).Distinct.OrderByDescending(Function(c) c) Select Case Category 'Mod Case 406 : Tags.Add("世界元素") @@ -387,7 +388,7 @@ Case "adventure" : Tags.Add("冒险") Case "kitchen-sink" : Tags.Add("大杂烩") Case "lightweight" : Tags.Add("轻量") - 'FUTURE: Res + 'FUTURE: Res End Select Next If Not Tags.Any() Then Tags.Add("杂项") @@ -962,7 +963,7 @@ Retry: Log($"[Comp] 从 CurseForge 获取到了 {ProjectList.Count} 个工程(已获取 {Storage.CurseForgeOffset} 个,共 {Storage.CurseForgeTotal} 个)") Catch ex As Exception Log(ex, "从 CurseForge 获取工程列表失败") - Storage.CurseForgeTotal = Storage.CurseForgeOffset + Storage.CurseForgeTotal = -1 'Storage.CurseForgeOffset [Error] = ex CurseForgeFailed = True End Try @@ -995,7 +996,7 @@ Retry: Log($"[Comp] 从 Modrinth 获取到了 {ProjectList.Count} 个工程(已获取 {Storage.ModrinthOffset} 个,共 {Storage.ModrinthTotal} 个)") Catch ex As Exception Log(ex, "从 Modrinth 获取工程列表失败") - Storage.ModrinthTotal = Storage.ModrinthOffset + Storage.ModrinthTotal = -1 'Storage.ModrinthOffset [Error] = ex ModrinthFailed = True End Try @@ -1021,7 +1022,7 @@ Retry: ElseIf Task.Input.Source = CompSourceType.Modrinth AndAlso Task.Input.Tag.EndsWithF("/") Then Throw New Exception("Modrinth 不兼容所选的类型") Else - Throw New Exception("没有符合条件的结果") + Throw New Exception("没有搜索结果") End If End If ElseIf [Error] IsNot Nothing Then @@ -1190,10 +1191,6 @@ Retry: ''' Public DownloadUrls As List(Of String) ''' - ''' 文件所有可能的镜像源。 - ''' - Public MirrorUrls As List(Of String) - ''' ''' 文件的 SHA1 或 MD5。 ''' Public ReadOnly Hash As String = Nothing @@ -1211,9 +1208,7 @@ Retry: ''' ''' 目标本地文件夹,或完整的文件路径。会自动判断类型。 Public Function ToNetFile(LocalAddress As String) As NetFile - Dim urls As List(Of String) = DownloadUrls - urls.AddRange(MirrorUrls) - Return New NetFile(urls, LocalAddress & If(LocalAddress.EndsWithF("\"), FileName, ""), New FileChecker(Hash:=Hash), UseBrowserUserAgent:=True) + Return New NetFile(DownloadUrls, LocalAddress & If(LocalAddress.EndsWithF("\"), FileName, ""), New FileChecker(Hash:=Hash), UseBrowserUserAgent:=True) End Function '实例化 @@ -1259,7 +1254,9 @@ Retry: DownloadUrls = (New List(Of String) From {Url.Replace("-service.overwolf.wtf", ".forgecdn.net").Replace("://edge", "://media"), Url.Replace("-service.overwolf.wtf", ".forgecdn.net"), Url.Replace("://edge", "://media"), - Url}).Distinct().ToList() + Url}).Distinct.ToList '对脑残 CurseForge 的下载地址进行多种修正 + DownloadUrls.AddRange(DownloadUrls.Select(Function(u) DlSourceModGet(u)).ToList) '添加镜像源,这个写法是为了让镜像源排在后面 + DownloadUrls = DownloadUrls.Distinct.ToList '最终去重 'Dependencies If Type = CompType.Mod Then RawDependencies = Data("dependencies"). @@ -1293,11 +1290,10 @@ Retry: ReleaseDate = Data("date_published") Status = If(Data("version_type").ToString = "release", CompFileStatus.Release, If(Data("version_type").ToString = "beta", CompFileStatus.Beta, CompFileStatus.Alpha)) DownloadCount = Data("downloads") - '可能为空 - If CType(Data("files"), JArray).Any() Then + If CType(Data("files"), JArray).Any() Then '可能为空 Dim File As JToken = Data("files")(0) FileName = File("filename") - DownloadUrls = New List(Of String) From {File("url")} + DownloadUrls = New List(Of String) From {File("url"), DlSourceModGet(File("url"))}.Distinct.ToList '同时添加了镜像源 Hash = File("hashes")("sha1") End If 'Dependencies @@ -1331,11 +1327,6 @@ Retry: If RawLoaders.Contains("quilt") Then ModLoaders.Add(CompModLoaderType.Quilt) #End Region End If - '末尾添加备用镜像 URL - MirrorUrls = New List(Of String) - For Each u In DownloadUrls - MirrorUrls.Add(DlSourceModGet(u)) - Next End If End Sub ''' @@ -1437,24 +1428,10 @@ Retry: Dim TargetProject As CompProject If CompProjectCache.ContainsKey(ProjectId) Then '存在缓存 TargetProject = CompProjectCache(ProjectId) - Else - Dim retryCount As Integer = 0 -Retry: - Dim comp As Object - If FromCurseForge Then 'CurseForge - comp = DlModRequest("https://api.curseforge.com/v1/mods/" & ProjectId, IsJson:=True) - TargetProject = New CompProject(DlModRequest("https://api.curseforge.com/v1/mods/" & ProjectId, IsJson:=True)("data")) - Else 'Modrinth - comp = DlModRequest("https://api.modrinth.com/v2/project/" & ProjectId, IsJson:=True) - TargetProject = New CompProject(DlModRequest("https://api.modrinth.com/v2/project/" & ProjectId, IsJson:=True)) - End If - If comp Is Nothing Then '获取 ("data") 时会报值不能为 null - If retryCount > 2 Then Throw New Exception("工程对象获取失败,请等待一段时间后刷新再试!") - retryCount += 1 - Thread.Sleep(1000) - GoTo Retry - End If - TargetProject = New CompProject(If(FromCurseForge, comp("data"), comp)) + ElseIf FromCurseForge Then 'CurseForge + TargetProject = New CompProject(DlModRequest("https://api.curseforge.com/v1/mods/" & ProjectId, IsJson:=True)("data")) + Else 'Modrinth + TargetProject = New CompProject(DlModRequest("https://api.modrinth.com/v2/project/" & ProjectId, IsJson:=True)) End If '获取工程对象的文件列表 Log("[Comp] 开始获取文件列表:" & ProjectId) @@ -1464,11 +1441,11 @@ Retry: If TargetProject.Type = CompType.Mod Then 'Mod 使用每个版本最新的文件 ResultJsonArray = GetJson(DlModRequest("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(TargetProject.CurseForgeFileIds, ",") & "]}", "application/json"))("data") Else '否则使用全部文件 - ResultJsonArray = NetGetCodeByRequestRetry($"https://api.curseforge.com/v1/mods/{ProjectId}/files?pageSize=999", Accept:="application/json", IsJson:=True, BackupUrl:=DlSourceModGet($"https://api.curseforge.com/v1/mods/{ProjectId}/files?pageSize=999"))("data") + ResultJsonArray = DlModRequest($"https://api.curseforge.com/v1/mods/{ProjectId}/files?pageSize=999", IsJson:=True)("data") End If Else 'Modrinth - ResultJsonArray = NetGetCodeByRequestRetry($"https://api.modrinth.com/v2/project/{ProjectId}/version", Accept:="application/json", IsJson:=True, BackupUrl:=DlSourceModGet($"https://api.modrinth.com/v2/project/{ProjectId}/version")) + ResultJsonArray = DlModRequest($"https://api.modrinth.com/v2/project/{ProjectId}/version", IsJson:=True) End If CompFilesCache(ProjectId) = ResultJsonArray.Select(Function(a) New CompFile(a, TargetProject.Type)). Where(Function(a) a.Available).ToList.Distinct(Function(a, b) a.Id = b.Id) 'CurseForge 可能会重复返回相同项(#1330) @@ -1485,8 +1462,7 @@ Retry: Projects = GetJson(DlModRequest("https://api.curseforge.com/v1/mods", "POST", "{""modIds"": [" & Join(UndoneDeps, ",") & "]}", "application/json"))("data") Else - Projects = NetGetCodeByRequestRetry($"https://api.modrinth.com/v2/projects?ids=[""{Join(UndoneDeps, """,""")}""]", - Accept:="application/json", IsJson:=True) + Projects = DlModRequest($"https://api.modrinth.com/v2/projects?ids=[""{Join(UndoneDeps, """,""")}""]", IsJson:=True) End If For Each Project In Projects Dim NewProject As New CompProject(Project) '在 New 的时候就添加了缓存 diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb index 3f9aab0..0228a49 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb @@ -881,7 +881,10 @@ NextStack: FileName = "游戏崩溃前的输出.txt" End Select If File.Exists(OutputFile) Then - WriteFile(TempFolder & "Report\" & FileName, SecretFilter(ReadFile(OutputFile), If(FileName = "启动脚本.bat", "F", "*"))) + Dim FileEncoding As Encoding = GetEncoding(OutputFile) + WriteFile(TempFolder & "Report\" & FileName, + SecretFilter(ReadFile(OutputFile, FileEncoding), If(FileName = "启动脚本.bat", "F", "*")), + Encoding:=FileEncoding) End If Next '导出报告 diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb index 23d6f4a..867b417 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb @@ -1,6 +1,4 @@ -Imports Newtonsoft - -Public Module ModDownload +Public Module ModDownload #Region "DlClient* | Minecraft 客户端" @@ -838,8 +836,8 @@ Public Module ModDownload ''' ''' NeoForge 版本列表,BMCLAPI。 ''' - Public DlNeoForgeListBmclapiLoader As New LoaderTask(Of Integer, DlNeoForgeListResult)("DlNeoForgeList Bmclapi", AddressOf DlNeoForgeVersionBmclapiMain) - Public Sub DlNeoForgeVersionBmclapiMain(Loader As LoaderTask(Of Integer, DlNeoForgeListResult)) + Public DlNeoForgeListBmclapiLoader As New LoaderTask(Of Integer, DlNeoForgeListResult)("DlNeoForgeList Bmclapi", AddressOf DlNeoForgeListBmclapiMain) + Public Sub DlNeoForgeListBmclapiMain(Loader As LoaderTask(Of Integer, DlNeoForgeListResult)) '获取版本列表 JSON Dim ResultLatest As String = NetGetCodeByDownload("https://bmclapi2.bangbang93.com/neoforge/meta/api/maven/details/releases/net/neoforged/neoforge", UseBrowserUserAgent:=True, IsJson:=True) Dim ResultLegacy As String = NetGetCodeByDownload("https://bmclapi2.bangbang93.com/neoforge/meta/api/maven/details/releases/net/neoforged/forge", UseBrowserUserAgent:=True, IsJson:=True) @@ -1085,12 +1083,17 @@ Public Module ModDownload #End Region -#Region "DlMod* | Mod 列表 / 信息 / 下载" - Public Function DlModRequest(Url As String, Optional IsJson As Boolean = False) As String +#Region "DlMod | Mod 镜像源请求" + + ''' + ''' 对可能涉及 Mod 镜像源的请求进行处理,返回字符串或 JObject。 + ''' 调用 NetGetCodeByRequestOnce。 + ''' + Public Function DlModRequest(Url As String, Optional IsJson As Boolean = False) As Object Dim McimUrl As String = DlSourceModGet(Url) Dim Urls As New List(Of KeyValuePair(Of String, Integer)) If McimUrl <> Url Then - Select Case Setup.Get("ToolDownloadVersion") + Select Case Setup.Get("ToolDownloadMod") Case 0 Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30)) Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60)) @@ -1102,14 +1105,27 @@ Public Module ModDownload Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60)) End Select End If - Return DlModRequest(Urls, IsJson:=IsJson) + Dim Exs As String = "" + For Each Source In Urls + Try + Return NetGetCodeByRequestOnce(Source.Key, Encode:=Encoding.UTF8, Timeout:=Source.Value * 1000, + IsJson:=IsJson, UseBrowserUserAgent:=True) + Catch ex As Exception + Exs += ex.Message + vbCrLf + End Try + Next + Throw New Exception(Exs) End Function - Public Function DlModRequest(Url As String, Method As String, Data As String, ContentType As String, - Optional Headers As Dictionary(Of String, String) = Nothing) As String + + ''' + ''' 对可能涉及 Mod 镜像源的请求进行处理。 + ''' 调用 NetRequestOnce。 + ''' + Public Function DlModRequest(Url As String, Method As String, Data As String, ContentType As String, Optional Headers As Dictionary(Of String, String) = Nothing) As String Dim McimUrl As String = DlSourceModGet(Url) Dim Urls As New List(Of KeyValuePair(Of String, Integer)) If McimUrl <> Url Then - Select Case Setup.Get("ToolDownloadVersion") + Select Case Setup.Get("ToolDownloadMod") Case 0 Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30)) Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60)) @@ -1121,66 +1137,66 @@ Public Module ModDownload Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60)) End Select End If - Return DlModRequest(Urls, Method, Data, ContentType, Headers:=Headers) - End Function - Private Function DlModRequest(Urls As List(Of KeyValuePair(Of String, Integer)), Optional IsJson As Boolean = False) As String - Dim exMessage As String = "" - For Each url In Urls + Dim Exs As String = "" + For Each Source In Urls Try - Return NetGetCodeByDownload(url.Key, Timeout:=url.Value, IsJson:=IsJson) + Return NetRequestOnce(Source.Key, Method, Data, ContentType, Timeout:=Source.Value * 1000, Headers:=Headers) Catch ex As Exception - exMessage += ex.Message + vbCrLf + Exs += ex.Message + vbCrLf End Try Next - Throw New Exception(exMessage) - End Function - Private Function DlModRequest(Urls As List(Of KeyValuePair(Of String, Integer)), Method As String, Data As String, - ContentType As String, Optional Headers As Dictionary(Of String, String) = Nothing) As String - Dim exMessage As String = "" - For Each url In Urls - Try - Return NetRequestOnce(url.Key, Method, Data, ContentType, Timeout:=url.Value, Headers:=Headers) - Catch ex As Exception - exMessage += ex.Message + vbCrLf - End Try - Next - Throw New Exception(exMessage) + Throw New Exception(Exs) End Function + #End Region #Region "DlSource | 镜像下载源" - Public Function DlSourceResourceGet(MojangBase As String) As String() - MojangBase = MojangBase.Replace("http://resources.download.minecraft.net", "https://resources.download.minecraft.net") + Public Function DlSourceResourceGet(Original As String) As String() + Original = Original.Replace("http://resources.download.minecraft.net", "https://resources.download.minecraft.net") Return { - MojangBase.Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/assets").Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/assets").Replace("https://resources.download.minecraft.net", "https://bmclapi2.bangbang93.com/assets"), - MojangBase + Original. + Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/assets"). + Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/assets"). + Replace("https://resources.download.minecraft.net", "https://bmclapi2.bangbang93.com/assets"), + Original } End Function - Public Function DlSourceLibraryGet(MojangBase As String) As String() + Public Function DlSourceLibraryGet(Original As String) As String() Return { - MojangBase.Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/maven").Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/maven").Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/maven"), - MojangBase.Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/libraries").Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/libraries").Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/libraries"), - MojangBase + Original. + Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/maven"). + Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/maven"). + Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/maven"), + Original. + Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/libraries"). + Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/libraries"). + Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/libraries"), + Original } End Function - Public Function DlSourceModGet(CfMrBase As String) As String - 'If CfMrBase Is Nothing Then Throw New Exception("无对应的 Mod 下载地址") - Return CfMrBase.Replace("api.modrinth.com/v2", "mod.mcmirror.top/modrinth") _ - .Replace("staging-api.modrinth.com/v2", "mod.mcmirror.top/modrinth") _ - .Replace("cdn.modrinth.com", "mod.mcimirror.top") _ - .Replace("api.curseforge.com", "mod.mcimirror.top/curseforge") _ - .Replace("edge.forgecdn.net", "mod.mcimirror.top") _ - .Replace("mediafilez.forgecdn.net", "mod.mcimirror.top") _ - .Replace("media.forgecdn.net", "mod.mcimirror.top") + + Public Function DlSourceModGet(Original As String) As String + Return Original. + Replace("api.modrinth.com", "mod.mcimirror.top/modrinth"). + Replace("staging-api.modrinth.com", "mod.mcimirror.top/modrinth"). + Replace("cdn.modrinth.com", "mod.mcimirror.top"). + Replace("api.curseforge.com", "mod.mcimirror.top/curseforge"). + Replace("edge.forgecdn.net", "mod.mcimirror.top"). + Replace("mediafilez.forgecdn.net", "mod.mcimirror.top"). + Replace("media.forgecdn.net", "mod.mcimirror.top") End Function - Public Function DlSourceLauncherOrMetaGet(MojangBase As String) As String() - If MojangBase Is Nothing Then Throw New Exception("无对应的 json 下载地址") + Public Function DlSourceLauncherOrMetaGet(Original As String) As String() + If Original Is Nothing Then Throw New Exception("无对应的 json 下载地址") Return { - MojangBase.Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com").Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com").Replace("https://launcher.mojang.com", "https://bmclapi2.bangbang93.com").Replace("https://launchermeta.mojang.com", "https://bmclapi2.bangbang93.com"), - MojangBase + Original. + Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com"). + Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com"). + Replace("https://launcher.mojang.com", "https://bmclapi2.bangbang93.com"). + Replace("https://launchermeta.mojang.com", "https://bmclapi2.bangbang93.com"), + Original } End Function diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb index 3bf5ef3..5852760 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb @@ -1,5 +1,5 @@ Public Module ModJava - Public JavaListCacheVersion As Integer = 6 + Public JavaListCacheVersion As Integer = 7 ''' ''' 目前所有可用的 Java。 @@ -220,6 +220,8 @@ JavaSearchFolder(GetPathFromFullPath(PathMcFolder), JavaPreList, False, True) 'Minecraft 文件夹的父文件夹(如果不是根目录的话) End If JavaSearchFolder(PathMcFolder, JavaPreList, False, True) 'Minecraft 文件夹 + JavaPreList = JavaPreList.Where(Function(j) Not j.Key.Contains(".minecraft\runtime")). + ToDictionary(Function(j) j.Key, Function(j) j.Value) '排除官启自带 Java(#4286) If RelatedVersion IsNot Nothing Then JavaSearchFolder(RelatedVersion.Path, JavaPreList, False, True) '所选版本文件夹 Dim TargetJavaList As New List(Of JavaEntry) For Each Entry In JavaPreList @@ -550,7 +552,7 @@ NoUserJava: '若不全为特殊引用,则清除特殊引用的地址 Dim JavaWithoutInherit As New Dictionary(Of String, Boolean) For Each Pair In JavaPreList - If Pair.Key.Contains("javapath_target_") OrElse Pair.Key.Contains("javatmp") Then + If Pair.Key.Contains("java8path_target_") OrElse Pair.Key.Contains("javapath_target_") OrElse Pair.Key.Contains("javatmp") Then Log("[Java] 位于 " & Pair.Key & " 的 Java 包含特殊引用") Else Log("[Java] 位于 " & Pair.Key & " 的 Java 不含特殊引用") diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb index 852dc78..18335c3 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb @@ -225,7 +225,7 @@ NextInner: "如果觉得 PCL 还算好用的话,也可以考虑赞助一下作者……一点心意也行……" & vbCrLf & "毕竟一个人开发也不容易(悲)……", "求赞助啦……", "这就赞助!", "但是我拒绝") = 1 Then - OpenWebsite("https://afdian.net/a/LTCat") + OpenWebsite("https://afdian.com/a/LTCat") End If End Select End Sub, "Donate") @@ -510,6 +510,7 @@ NextInner: '无 RefreshToken Relogin: Dim OAuthCode As String = MsLoginStep1(Data) + If OAuthCode = "Cancel" Then Exit Sub If Data.IsAborted Then Throw New ThreadInterruptedException Data.Progress = 0.2 OAuthTokens = MsLoginStep2(OAuthCode, False) @@ -518,6 +519,7 @@ Relogin: OAuthTokens = MsLoginStep2(Input.OAuthRefreshToken, True) End If '要求重新打开登录网页认证 + If OAuthTokens(0) = "Cancel" Then Exit Sub If OAuthTokens(0) = "Relogin" Then GoTo Relogin Data.Progress = 0.35 If Data.IsAborted Then Throw New ThreadInterruptedException @@ -808,62 +810,18 @@ LoginFinish: '微软登录步骤 1:打开网页认证,获取 OAuth Code Private Function MsLoginStep1(Data As LoaderTask(Of McLoginMs, McLoginResult)) As String McLaunchLog("开始微软登录步骤 1") - If True OrElse OsVersion <= New Version(10, 0, 17763, 0) Then '由于 #3849,WebBrowser 已经无法正常加载微软登录网页了 -SystemBrowser: - 'Windows 7 或老版 Windows 10 登录 - OpenWebsite(FormLoginOAuth.LoginUrl1) - Dim Result As String = - MyMsgBoxInput("等待网页登录", - "登录完成后,网页会变得完全空白,把那个空白网页的网址复制到下面的框中就行了!" & vbCrLf & - "如果网络环境不佳,它可能一直加载不出来,那就只能试试用 VPN 或加速器了。", - ValidateRules:=New ObjectModel.Collection(Of Validate) From {New ValidateRegex("(?<=code\=)[^&]+", "返回网址应以 https://login.live.com/oauth20_desktop.srf?code= 开头")}, - HintText:="https://login.live.com/oauth20_desktop.srf?code=XXXXXX") - If Result Is Nothing Then - McLaunchLog("微软登录已在步骤 1 被取消") - Throw New ThreadInterruptedException("$$") - Else - Return RegexSeek(Result, "(?<=code\=)[^&]+") - End If - Hint("网页登录成功,你可以关闭浏览器啦!", HintType.Finish) + OpenWebsite(FormLoginOAuth.LoginUrl1) + Dim Result As String = + MyMsgBoxInput("等待网页登录", + "登录完成后,网页会变得完全空白。把那个空白网页的网址复制到下面的框中就行!" & vbCrLf & + "如果网络环境不佳,它可能一直加载不出来,那就只能试试用 VPN 或加速器了。", + ValidateRules:=New ObjectModel.Collection(Of Validate) From {New ValidateRegex("(?<=code\=)[^&]+", "返回网址应以 https://login.live.com/oauth20_desktop.srf?code= 开头")}, + HintText:="https://login.live.com/oauth20_desktop.srf?code=XXXXXX") + If Result Is Nothing Then + McLaunchLog("微软登录已在步骤 1 被取消") + Throw New ThreadInterruptedException("$$") Else - 'Windows 10 登录 - Dim ReturnCode As String = Nothing - Dim ReturnEx As Exception = Nothing - Dim IsFinished As LoadState = LoadState.Loading - Dim LoginForm As FormLoginOAuth = Nothing - Dim IsSwitchToSystemBrowser As Boolean = False - RunInUi(Sub() - Try - LoginForm = New FormLoginOAuth - LoginForm.Show() - AddHandler LoginForm.OnLoginSuccess, Sub(Code As String) - ReturnCode = Code - IsFinished = LoadState.Finished - End Sub - AddHandler LoginForm.OnLoginCanceled, Sub(IsSwitch As Boolean) - IsFinished = LoadState.Aborted - IsSwitchToSystemBrowser = IsSwitch - End Sub - Catch ex As Exception - ReturnEx = ex - IsFinished = LoadState.Failed - End Try - End Sub) - Do While IsFinished = LoadState.Loading AndAlso Not Data.IsAborted - Thread.Sleep(20) - Loop - RunInUi(Sub() If LoginForm IsNot Nothing Then LoginForm.Close()) - If IsFinished = LoadState.Finished Then - Return ReturnCode - ElseIf IsFinished = LoadState.Failed Then - Throw ReturnEx - ElseIf IsSwitchToSystemBrowser Then - McLaunchLog("微软登录在步骤 1 要求切换到系统浏览器") - GoTo SystemBrowser - Else - McLaunchLog("微软登录已在步骤 1 被取消") - Throw New ThreadInterruptedException("$$") - End If + Return RegexSeek(Result, "(?<=code\=)[^&]+") End If End Function '微软登录步骤 2:从 OAuth Code 或 OAuth RefreshToken 获取 {OAuth AccessToken, OAuth RefreshToken} @@ -900,19 +858,112 @@ SystemBrowser: Dim RefreshToken As String = ResultJson("refresh_token").ToString Return {AccessToken, RefreshToken} End Function + + ''微软登录步骤 1:获取 DeviceCode 并显示验证提示 + ''https://learn.microsoft.com/zh-cn/entra/identity-platform/v2-oauth2-device-code + 'Private Function MsLoginStep1(Data As LoaderTask(Of McLoginMs, McLoginResult)) As String + ' McLaunchLog("开始微软登录步骤 1:获取验证信息") + ' Dim PrepareJson As JObject = GetJson(NetRequestMulty("https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode", "POST", + ' $"client_id={OAuthClientId}&scope=XboxLive.signin%20offline_access", "application/x-www-form-urlencoded", 2)) + + ' '从这里开始直到步骤 2 结束都没有 Review + ' '参考:https://learn.microsoft.com/zh-cn/entra/identity-platform/v2-oauth2-device-code + ' If MyMsgBox("请在打开的网页里输入 PCL2 提供的设备代码(会自动复制到剪贴板)。" & vbCrLf & + ' "设备代码有时效性,若操作时间过长需要重新进行登录流程。", "正版验证确认", "继续", "取消") <> 1 Then + ' Return "Cancel" + ' End If + + ' Dim DeviceCode As String = PrepareJson("device_code") + ' Dim UserCode As String = PrepareJson("user_code") + ' Dim VerifyUri As String = PrepareJson("verification_uri") + ' 'ResultJson("expires_in") + ' ClipboardSet(UserCode) + ' OpenWebsite(VerifyUri) + + ' Dim MsgBoxValue As String = "" + ' While MsgBoxValue IsNot "1" + ' MsgBoxValue = MyMsgBox("本次验证的设备代码为:" & UserCode & vbCrLf & vbCrLf & "你也可以在任意设备上打开下列网址进行验证:" & vbCrLf & VerifyUri & vbCrLf & vbCrLf & "在验证完成后,你可以直接关闭这个弹窗,PCL2 会自动完成接下来的流程。", "正版验证", "关闭", "复制网址", "复制设备代码").ToString + ' If MsgBoxValue = "2" Then + ' ClipboardSet(VerifyUri) + ' Continue While + ' ElseIf MsgBoxValue = "3" Then + ' ClipboardSet(UserCode) + ' Continue While + ' ElseIf MsgBoxValue = "1" Then + ' Exit While + ' End If + ' End While + + ' Return DeviceCode + 'End Function + + ''微软登录步骤 2:从 OAuth Code 或 OAuth RefreshToken 获取 {OAuth AccessToken, OAuth RefreshToken} + 'Private Function MsLoginStep2(Code As String, IsRefresh As Boolean, Optional ExpiresIn As String = "900") As String() + ' McLaunchLog("开始微软登录步骤 2(" & If(IsRefresh, "", "非") & "刷新登录)") + + ' Dim Request As String + ' If IsRefresh Then + ' Request = "grant_type=refresh_token" & "&" & + ' "client_id=" & OAuthClientId & "&" & + ' "device_code=" & Code & "&" & + ' "refresh_token=" & Uri.EscapeDataString(Code) & "&" & + ' "scope=XboxLive.signin%20offline_access" + ' Else + ' Request = "grant_type=urn:ietf:params:oauth:grant-type:device_code" & "&" & + ' "client_id=" & OAuthClientId & "&" & + ' "device_code=" & Code & "&" & + ' "scope=XboxLive.signin%20offline_access" + ' End If + ' Dim Result As String + ' Dim stopwatch As Stopwatch = Stopwatch.StartNew() + + ' While stopwatch.Elapsed < TimeSpan.FromSeconds(ExpiresIn) + ' Try + ' Result = NetRequestMulty("https://login.microsoftonline.com/consumers/oauth2/v2.0/token", "POST", Request, "application/x-www-form-urlencoded", 2) + ' Catch ex As Exception + ' If ex.Message.Contains("must sign in again") OrElse ex.Message.Contains("invalid_grant") Then '#269 + ' Return {"Relogin", ""} + ' ElseIf ex.Message.Contains("authorization_declined") Then + ' Hint("你拒绝了 PCL2 的访问权限申请,验证过程被中断!") + ' Return {"Cancel", ""} + ' ElseIf ex.Message.Contains("expired_token") Then + ' Hint("Token 已过期,请尝试重新验证!") + ' Exit While + ' ElseIf ex.Message.Contains("AADSTS70016") Then + ' Continue While + ' Else + ' Throw + ' End If + ' End Try + + ' If Result IsNot Nothing Then + ' Dim ResultJson As JObject = GetJson(Result) + ' Dim AccessToken As String = ResultJson("access_token").ToString + ' Dim RefreshToken As String = ResultJson("refresh_token").ToString + ' Return {AccessToken, RefreshToken} + ' End If + + ' Thread.Sleep(1000) + ' End While + + ' Hint("验证超时,请尝试重新验证!") + ' Return {"Cancel", ""} + + 'End Function + '微软登录步骤 3:从 OAuth AccessToken 获取 XBLToken Private Function MsLoginStep3(AccessToken As String) As String McLaunchLog("开始微软登录步骤 3") Dim Request As String = "{ - ""Properties"": { - ""AuthMethod"": ""RPS"", - ""SiteName"": ""user.auth.xboxlive.com"", - ""RpsTicket"": """ & AccessToken & """ - }, - ""RelyingParty"": ""http://auth.xboxlive.com"", - ""TokenType"": ""JWT"" - }" + ""Properties"": { + ""AuthMethod"": ""RPS"", + ""SiteName"": ""user.auth.xboxlive.com"", + ""RpsTicket"": """ & AccessToken & """ + }, + ""RelyingParty"": ""http://auth.xboxlive.com"", + ""TokenType"": ""JWT"" + }" 'TODO: 新版登录改为 ""RpsTicket"": ""d=" & AccessToken & """ Dim Result As String = NetRequestMulty("https://user.auth.xboxlive.com/user/authenticate", "POST", Request, "application/json", 3) Dim ResultJson As JObject = GetJson(Result) @@ -1069,7 +1120,7 @@ SystemBrowser: Case 3 '使用正版用户名 Try - If Not SkinName = "" Then + If SkinName <> "" AndAlso McVersionCurrent.Version.McCodeMain < 20 Then '1.20+ 或快照版不能使用该项(#3746) Log("[Skin] 由于离线皮肤设置,使用正版 UUID:" & SkinName) Uuid = McLoginMojangUuid(SkinName, False) End If @@ -1199,7 +1250,7 @@ SystemBrowser: '统一通行证检测 If Setup.Get("LoginType") = McLoginType.Nide Then '至少 Java 8u101 - MinVer = If(New Version(1, 8, 0, 101) > MinVer, New Version(1, 8, 0, 101), MinVer) + MinVer = If(New Version(1, 8, 0, 141) > MinVer, New Version(1, 8, 0, 141), MinVer) End If SyncLock JavaLock @@ -1226,12 +1277,12 @@ SystemBrowser: ElseIf MaxVer < New Version(1, 8, 0, 0) Then JavaCode = 7 If Not JavaDownloadConfirm("Java 7", True) Then Throw New Exception("$$") - ElseIf MinVer > New Version(1, 8, 0, 100) AndAlso MaxVer < New Version(1, 8, 0, 321) Then - JavaCode = "8u101" - If Not JavaDownloadConfirm("Java 8.0.101 ~ 8.0.320", True) Then Throw New Exception("$$") - ElseIf MinVer > New Version(1, 8, 0, 100) Then - JavaCode = "8u101" - If Not JavaDownloadConfirm("Java 8.0.101 或更高版本的 Java 8", True) Then Throw New Exception("$$") + ElseIf MinVer > New Version(1, 8, 0, 140) AndAlso MaxVer < New Version(1, 8, 0, 321) Then + JavaCode = "8u141" + If Not JavaDownloadConfirm("Java 8.0.141 ~ 8.0.320", True) Then Throw New Exception("$$") + ElseIf MinVer > New Version(1, 8, 0, 140) Then + JavaCode = "8u141" + If Not JavaDownloadConfirm("Java 8.0.141 或更高版本的 Java 8", True) Then Throw New Exception("$$") ElseIf MaxVer < New Version(1, 8, 0, 321) Then JavaCode = 8 If Not JavaDownloadConfirm("Java 8.0.320 或更低版本的 Java 8") Then Throw New Exception("$$") @@ -1785,7 +1836,6 @@ NextVersion: { ""authenticationDatabase"": { ""00000111112222233333444445555566"": { - ""accessToken"": """ & McLoginLoader.Output.AccessToken & """, ""username"": """ & McLoginLoader.Output.Name.Replace("""", "-") & """, ""profiles"": { ""66666555554444433333222221111100"": { @@ -1816,7 +1866,6 @@ NextVersion: { ""authenticationDatabase"": { ""00000111112222233333444445555566"": { - ""accessToken"": """ & McLoginLoader.Output.AccessToken & """, ""username"": """ & McLoginLoader.Output.Name.Replace("""", "-") & """, ""profiles"": { ""66666555554444433333222221111100"": { @@ -1892,16 +1941,12 @@ NextVersion: End Try '离线皮肤 Alex 警告 - Try - If McVersionCurrent.Version.McCodeMain <= 7 AndAlso McVersionCurrent.Version.McCodeMain >= 2 AndAlso '1.7 ~ 1.2 + If McVersionCurrent.Version.McCodeMain <= 7 AndAlso McVersionCurrent.Version.McCodeMain >= 2 AndAlso '1.2 ~ 1.7 McLoginLoader.Input.Type = McLoginType.Legacy AndAlso '离线登录 (Setup.Get("LaunchSkinType") = 2 OrElse '强制 Alex (Setup.Get("LaunchSkinType") = 4 AndAlso Setup.Get("LaunchSkinSlim"))) Then '或选用 Alex 皮肤 - Hint("此 Minecraft 版本尚不支持 Alex 皮肤,你的皮肤可能会显示为 Steve!", HintType.Critical) - End If - Catch ex As Exception - Log(ex, "检查离线皮肤失效失败") - End Try + Hint("此 Minecraft 版本尚不支持 Alex 皮肤,你的皮肤可能会显示为 Steve!", HintType.Critical) + End If '离线皮肤资源包 Try diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb index 4afbfd0..abc4a6b 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb @@ -565,6 +565,7 @@ Recheck: Log(ex, "合并版本依赖项 json 失败(" & If(InheritVersion, "null").ToString & ")") End Try Catch ex As Exception + Log($"[Minecraft] 传入的版本 json 文件内容(共 {Text.Length} 字符,最多输出前 5000 字符):{vbCrLf}{Text.Substring(0, 5000)}") Throw New Exception("版本 json 不规范(" & If(Name, "null") & ")", ex) End Try Try @@ -665,7 +666,7 @@ Recheck: Try Dim JsonObjCheck = JsonObject Catch ex As Exception - Log(ex, "版本 json 可用性检查失败(" & Path & ")") + Log(ex, "版本 JSON 可用性检查失败(" & Path & ")") JsonText = "" JsonObject = Nothing Info = ex.Message @@ -2026,8 +2027,9 @@ OnLoaded: If Token.Url IsNot Nothing Then '获取 Url 的真实地址 Urls.Add(Token.Url) - If Token.Url.Contains("launcher.mojang.com/v1/objects") Then - Urls = DlSourceLauncherOrMetaGet(Token.Url).ToList() 'Mappings + If Token.Url.Contains("launcher.mojang.com/v1/objects") OrElse Token.Url.Contains("client.txt") OrElse + Token.Url.Contains(".tsrg") Then + Urls.AddRange(DlSourceLauncherOrMetaGet(Token.Url).ToList()) 'Mappings(#4425) End If If Token.Url.Contains("maven") Then Urls.Insert(0, Token.Url.Replace(Mid(Token.Url, 1, Token.Url.IndexOfF("maven")), "https://bmclapi2.bangbang93.com/"). @@ -2049,7 +2051,7 @@ OnLoaded: '普通文件 Urls.AddRange(DlSourceLibraryGet("https://libraries.minecraft.net" & Token.LocalPath.Replace(If(Token.IsJumpLoader, JumpLoaderFolder, CustomMcFolder) & "libraries", "").Replace("\", "/"))) End If - Result.Add(New NetFile(Urls.Distinct.ToArray, Token.LocalPath, Checker)) + Result.Add(New NetFile(Urls.Distinct, Token.LocalPath, Checker)) Next '去重并返回 Return Result.Distinct(Function(a, b) a.LocalPath = b.LocalPath) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMod.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModMod.vb index ddb4bf3..f21c764 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModMod.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModMod.vb @@ -924,7 +924,7 @@ Finished: End Try End Sub '联网加载 Mod 详情 - Private Const LocalModCacheVersion As Integer = 5 + Private Const LocalModCacheVersion As Integer = 6 Public McModDetailLoader As New LoaderTask(Of KeyValuePair(Of List(Of McMod), JObject), Integer)("Mod List Detail Loader", AddressOf McModDetailLoad) Private Sub McModDetailLoad(Loader As LoaderTask(Of KeyValuePair(Of List(Of McMod), JObject), Integer)) Dim Mods As List(Of McMod) = Loader.Input.Key @@ -973,7 +973,7 @@ Finished: Log($"[Mod] 需要从 Modrinth 获取 {ModrinthMapping.Count} 个本地 Mod 的工程信息") '步骤 3:获取工程信息 If Not ModrinthMapping.Any() Then Exit Sub - Dim ModrinthProject = CType(GetJson(NetRequestRetry( + Dim ModrinthProject = CType(GetJson(DlModRequest( $"https://api.modrinth.com/v2/projects?ids=[""{ModrinthMapping.Keys.Join(""",""")}""]", "GET", "", "application/json")), JArray) For Each ProjectJson In ModrinthProject @@ -1022,7 +1022,7 @@ Finished: CurseForgeHashes.Add(Entry.CurseForgeHash) If Loader.IsAbortedWithThread(MainThread) Then Exit Sub Next - Dim CurseForgeRaw = CType(CType(GetJson(DlModRequest("https://api.curseforge.com/v1/fingerprints/432/", "POST", + Dim CurseForgeRaw = CType(CType(GetJson(DlModRequest("https://api.curseforge.com/v1/fingerprints/432", "POST", $"{{""fingerprints"": [{CurseForgeHashes.Join(",")}]}}", "application/json")), JObject)("data")("exactMatches"), JContainer) Log($"[Mod] 从 CurseForge 获取到 {CurseForgeRaw.Count} 个本地 Mod 的对应信息") '步骤 2:尝试读取工程信息缓存,构建其他 Mod 的对应关系 @@ -1050,7 +1050,7 @@ Finished: Dim UpdateFileIds As New Dictionary(Of Integer, List(Of McMod)) 'FileId -> 本地 Mod 文件列表 Dim FileIdToProjectSlug As New Dictionary(Of Integer, String) For Each ProjectJson In CurseForgeProject - If Not ProjectJson("isAvailable").ToObject(Of Boolean) Then Continue For + If ProjectJson("isAvailable") IsNot Nothing AndAlso Not ProjectJson("isAvailable").ToObject(Of Boolean) Then Continue For '设置 Entry 中的工程信息 Dim Project As New CompProject(ProjectJson) For Each Entry In CurseForgeMapping(Project.Id) '倒查防止 CurseForge 返回的内容有漏 @@ -1066,7 +1066,8 @@ Finished: Dim NewestVersion As String = Nothing Dim NewestFileIds As New List(Of Integer) For Each IndexEntry In ProjectJson("latestFilesIndexes") - If ModLoaders.Single <> IndexEntry("modLoader")?.ToObject(Of Integer) Then Continue For 'ModLoader 唯一且匹配 + If IndexEntry("modLoader") Is Nothing OrElse Not IndexEntry("modLoader").HasValues OrElse '镜像源会返回一个值为 null 的键 + ModLoaders.Single <> IndexEntry("modLoader").ToObject(Of Integer) Then Continue For 'ModLoader 唯一且匹配 Dim IndexVersion As String = IndexEntry("gameVersion") If McVersion <> IndexVersion Then Continue For 'MC 版本匹配 '由于 latestFilesIndexes 是按时间从新到老排序的,所以只需取第一个;如果需要检查多个 releaseType 下的文件,将 > -1 改为 = 1,但这应当并不会获取到更新的文件 @@ -1134,6 +1135,8 @@ Finished: Cache(Entry.ModrinthHash & McVersion & ModLoaders.Join("")) = Entry.ToJson() Next WriteFile(PathTemp & "Cache\LocalMod.json", Cache.ToString(If(ModeDebug, Newtonsoft.Json.Formatting.Indented, Newtonsoft.Json.Formatting.None))) + '刷新下边栏(#4377) + RunInUi(Sub() FrmVersionMod?.RefreshBottomBar()) End Sub Private Function GetTargetModLoaders() As List(Of CompModLoaderType) Dim ModLoaders As New List(Of CompModLoaderType) @@ -1275,4 +1278,4 @@ Finished: End Function #End If -End Module +End Module \ No newline at end of file diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb index 7dacc5d..27b9f87 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb @@ -12,9 +12,10 @@ Public Module ModModpack RunInThread(Sub() ModpackInstall(File)) End Sub ''' - ''' 安装一个给定的整合包文件,返回是否安装成功。必须在工作线程执行。 + ''' 安装一个给定的整合包文件,返回启动的安装加载器,如果未成功启动则返回 Nothing。 + ''' 必须在工作线程执行。 ''' - Public Function ModpackInstall(File As String, Optional VersionName As String = Nothing, Optional ShowHint As Boolean = True, Optional Logo As String = Nothing) As Boolean + Public Function ModpackInstall(File As String, Optional VersionName As String = Nothing, Optional ShowHint As Boolean = True, Optional Logo As String = Nothing) As LoaderCombo(Of String) Log("[ModPack] 整合包安装请求:" & If(File, "null")) Dim Archive As ZipArchive = Nothing Dim ArchiveBaseFolder As String = "" @@ -45,6 +46,7 @@ Public Module ModModpack If FullNames.Count <> 2 Then Continue For '判断是否为关键文件 If FullNames(1) = "mcbbs.packmeta" Then PackType = 3 : Exit Try 'MCBBS 整合包(优先于 manifest.json 判断) + If FullNames(1) = "mmc-pack.json" Then PackType = 2 : Exit Try 'MMC 整合包(优先于 manifest.json 判断,#4194) If FullNames(1) = "modrinth.index.json" Then PackType = 4 : Exit Try 'Modrinth 整合包 If FullNames(1) = "manifest.json" Then Dim Json As JObject = GetJson(ReadFile(Entry.Open, Encoding.UTF8)) @@ -55,54 +57,52 @@ Public Module ModModpack End If End If If FullNames(1) = "modpack.json" Then PackType = 1 : Exit Try 'HMCL 整合包 - If FullNames(1) = "mmc-pack.json" Then PackType = 2 : Exit Try 'MMC 整合包 Next Catch ex As Exception If GetExceptionDetail(ex, True).Contains("Error.WinIOError") Then Log(ex, "打开整合包文件失败", If(ShowHint, LogLevel.Hint, LogLevel.Normal)) - Return False + Return Nothing ElseIf File.EndsWithF(".rar", True) Then Log(ex, "PCL 无法处理 rar 格式的压缩包,请在解压后重新压缩为 zip 格式再试", If(ShowHint, LogLevel.Hint, LogLevel.Normal)) - Return False + Return Nothing Else Log(ex, "打开整合包文件失败,文件可能损坏或为不支持的压缩包格式", If(ShowHint, LogLevel.Hint, LogLevel.Normal)) - Return False + Return Nothing End If End Try '执行对应的安装方法 Select Case PackType Case 0 Log("[ModPack] 整合包种类:CurseForge") - InstallPackCurseForge(File, Archive, ArchiveBaseFolder, VersionName, Logo) + Return InstallPackCurseForge(File, Archive, ArchiveBaseFolder, VersionName, Logo) Case 1 Log("[ModPack] 整合包种类:HMCL") - InstallPackHMCL(File, Archive, ArchiveBaseFolder) + Return InstallPackHMCL(File, Archive, ArchiveBaseFolder) Case 2 Log("[ModPack] 整合包种类:MMC") - InstallPackMMC(File, Archive, ArchiveBaseFolder) + Return InstallPackMMC(File, Archive, ArchiveBaseFolder) Case 3 Log("[ModPack] 整合包种类:MCBBS") - InstallPackMCBBS(File, Archive, ArchiveBaseFolder) + Return InstallPackMCBBS(File, Archive, ArchiveBaseFolder, VersionName) Case 4 Log("[ModPack] 整合包种类:Modrinth") - InstallPackModrinth(File, Archive, ArchiveBaseFolder, VersionName, Logo) + Return InstallPackModrinth(File, Archive, ArchiveBaseFolder, VersionName, Logo) Case 9 Log("[ModPack] 整合包种类:压缩包") Archive.Dispose() Archive = Nothing - InstallPackCompress(File, ArchiveBaseFolder) + Return InstallPackCompress(File, ArchiveBaseFolder) Case Else If ShowHint Then Hint("未能识别该整合包的种类,无法安装!", HintType.Critical) Else Log("[ModPack] 未能识别该整合包的种类,无法安装!") End If - Return False + Return Nothing End Select - Return True Catch ex As Exception Log(ex, "准备安装整合包失败", LogLevel.Feedback) - Return False + Return Nothing Finally If Archive IsNot Nothing Then Archive.Dispose() End Try @@ -159,7 +159,8 @@ Retry: #Region "不同类型整合包的安装方法" 'CurseForge - Private Sub InstallPackCurseForge(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, Optional VersionName As String = Nothing, Optional Logo As String = Nothing) + Private Function InstallPackCurseForge(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, + Optional VersionName As String = Nothing, Optional Logo As String = Nothing) As LoaderCombo(Of String) '读取 Json 文件 Dim Json As JObject @@ -167,18 +168,18 @@ Retry: Json = GetJson(ReadFile(Archive.GetEntry(ArchiveBaseFolder & "manifest.json").Open)) If Json("minecraft") Is Nothing OrElse Json("minecraft")("version") Is Nothing Then Throw New Exception("整合包未提供 Minecraft 版本信息") Catch ex As Exception - Log(ex, "整合包安装信息存在问题", LogLevel.Hint) - Exit Sub + Log(ex, "CurseForge 整合包安装信息存在问题", LogLevel.Hint) + Return Nothing End Try '获取版本名 Dim ShowRibble As Boolean = VersionName Is Nothing If VersionName Is Nothing Then - Dim PackName As String = If(Json("name"), "") + VersionName = If(Json("name"), "") Dim Validate As New ValidateFolderName(PathMcFolder & "versions") - If Validate.Validate(PackName) <> "" Then PackName = "" - VersionName = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate}) - If String.IsNullOrEmpty(VersionName) Then Exit Sub + If Validate.Validate(VersionName) <> "" Then VersionName = "" + If VersionName = "" Then VersionName = MyMsgBoxInput("输入版本名称", "", "", New ObjectModel.Collection(Of Validate) From {Validate}) + If String.IsNullOrEmpty(VersionName) Then Return Nothing End If '获取 Mod API 版本信息 @@ -191,7 +192,7 @@ Retry: 'Forge 指定 If Id.Contains("recommended") Then Log("[ModPack] 该整合包版本过老,已不支持进行安装!", LogLevel.Hint) - Exit Sub + Return Nothing End If Try Log("[ModPack] 整合包 Forge 版本:" & Id) @@ -319,7 +320,7 @@ Retry: .FabricVersion = FabricVersion } Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True) - If MergeLoaders Is Nothing Then Exit Sub + If MergeLoaders Is Nothing Then Return Nothing '构造 Libraries 加载器 Dim LoadersLib As New List(Of LoaderBase) LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionName))) With {.ProgressWeight = 1, .Show = False}) @@ -350,14 +351,10 @@ Retry: '重复任务检查 Dim LoaderName As String = "CurseForge 整合包安装:" & VersionName & " " - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = LoaderName Then - Hint("该整合包正在安装中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + If LoaderTaskbar.Any(Function(l) l.Name = LoaderName) Then + Hint("该整合包正在安装中!", HintType.Critical) + Return Nothing + End If '启动 Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = AddressOf McInstallState} @@ -365,11 +362,11 @@ Retry: LoaderTaskbarAdd(Loader) FrmMain.BtnExtraDownload.ShowRefresh() If ShowRibble Then FrmMain.BtnExtraDownload.Ribble() - - End Sub + Return Loader + End Function 'Modrinth - Private Sub InstallPackModrinth(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, Optional VersionName As String = Nothing, Optional Logo As String = Nothing) + Private Function InstallPackModrinth(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, Optional VersionName As String = Nothing, Optional Logo As String = Nothing) As LoaderCombo(Of String) '读取 Json 文件 Dim Json As JObject @@ -378,7 +375,7 @@ Retry: If Json("dependencies") Is Nothing OrElse Json("dependencies")("minecraft") Is Nothing Then Throw New Exception("整合包未提供 Minecraft 版本信息") Catch ex As Exception Log(ex, "整合包安装信息存在问题", LogLevel.Hint) - Exit Sub + Return Nothing End Try '获取 Mod API 版本信息 Dim MinecraftVersion As String = Nothing @@ -400,42 +397,42 @@ Retry: Log("[ModPack] 整合包 Fabric 版本:" & FabricVersion) Case "quilt-loader" 'eg. 1.0.0 Hint("PCL 暂不支持安装需要 Quilt 的整合包!", HintType.Critical) - Exit Sub + Return Nothing Case Else Hint($"无法安装整合包,其中出现了未知的 Mod 加载器 {Entry.Value}!", HintType.Critical) - Exit Sub + Return Nothing End Select Next '获取版本名 Dim ShowRibble As Boolean = VersionName Is Nothing If VersionName Is Nothing Then - Dim PackName As String = If(Json("name"), "") + VersionName = If(Json("name"), "") Dim Validate As New ValidateFolderName(PathMcFolder & "versions") - If Validate.Validate(PackName) <> "" Then PackName = "" - VersionName = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate}) - If String.IsNullOrEmpty(VersionName) Then Exit Sub + If Validate.Validate(VersionName) <> "" Then VersionName = "" + If VersionName = "" Then VersionName = MyMsgBoxInput("输入版本名称", "", "", New ObjectModel.Collection(Of Validate) From {Validate}) + If String.IsNullOrEmpty(VersionName) Then Return Nothing End If '解压和配置文件 Dim InstallTemp As String = PathTemp & "PackInstall\" & RandomInteger(0, 100000) & "\" Dim InstallLoaders As New List(Of LoaderBase) InstallLoaders.Add(New LoaderTask(Of String, Integer)("解压整合包文件", - Sub(Task As LoaderTask(Of String, Integer)) - UnpackFiles(InstallTemp, FileAddress, Task) - Task.Progress = 0.5 - '复制 overrides 文件夹和 client-overrides 文件夹 - If Directory.Exists(InstallTemp & ArchiveBaseFolder & "overrides") Then - CopyDirectory(InstallTemp & ArchiveBaseFolder & "overrides", PathMcFolder & "versions\" & VersionName) - Else - Log("[ModPack] 整合包中未找到 override 目录,已跳过") - End If - Task.Progress = 0.8 - If Directory.Exists(InstallTemp & ArchiveBaseFolder & "client-overrides") Then - CopyDirectory(InstallTemp & ArchiveBaseFolder & "client-overrides", PathMcFolder & "versions\" & VersionName) - End If - Task.Progress = 0.9 - '开启版本隔离 - WriteIni(PathMcFolder & "versions\" & VersionName & "\PCL\Setup.ini", "VersionArgumentIndie", 1) - End Sub) With {.ProgressWeight = New FileInfo(FileAddress).Length / 1024 / 1024 / 6, .Block = False}) '每 6M 需要 1s + Sub(Task As LoaderTask(Of String, Integer)) + UnpackFiles(InstallTemp, FileAddress, Task) + Task.Progress = 0.5 + '复制 overrides 文件夹和 client-overrides 文件夹 + If Directory.Exists(InstallTemp & ArchiveBaseFolder & "overrides") Then + CopyDirectory(InstallTemp & ArchiveBaseFolder & "overrides", PathMcFolder & "versions\" & VersionName) + Else + Log("[ModPack] 整合包中未找到 override 目录,已跳过") + End If + Task.Progress = 0.8 + If Directory.Exists(InstallTemp & ArchiveBaseFolder & "client-overrides") Then + CopyDirectory(InstallTemp & ArchiveBaseFolder & "client-overrides", PathMcFolder & "versions\" & VersionName) + End If + Task.Progress = 0.9 + '开启版本隔离 + WriteIni(PathMcFolder & "versions\" & VersionName & "\PCL\Setup.ini", "VersionArgumentIndie", 1) + End Sub) With {.ProgressWeight = New FileInfo(FileAddress).Length / 1024 / 1024 / 6, .Block = False}) '每 6M 需要 1s '获取下载文件列表 Dim FileList As New List(Of NetFile) For Each File In If(Json("files"), {}) @@ -452,8 +449,10 @@ Retry: End Select End If '添加下载文件 - FileList.Add(New NetFile(File("downloads").Select(Function(t) t.ToString.Replace("://edge.forgecdn", "://media.forgecdn")).ToArray, '修复 #2390 - PathMcFolder & "versions\" & VersionName & "\" & File("path").ToString, + Dim Urls = File("downloads").Select(Function(t) t.ToString.Replace("://edge.forgecdn", "://media.forgecdn")).ToList + Urls.AddRange(Urls.Select(Function(u) DlSourceModGet(u)).ToList) + Urls = Urls.Distinct.ToList() + FileList.Add(New NetFile(Urls, PathMcFolder & "versions\" & VersionName & "\" & File("path").ToString, New FileChecker(ActualSize:=File("fileSize").ToObject(Of Long), Hash:=File("hashes")("sha1").ToString), True)) Next If FileList.Any Then @@ -470,7 +469,7 @@ Retry: .FabricVersion = FabricVersion } Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True) - If MergeLoaders Is Nothing Then Exit Sub + If MergeLoaders Is Nothing Then Return Nothing '构造 Libraries 加载器 Dim LoadersLib As New List(Of LoaderBase) LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionName))) With {.ProgressWeight = 1, .Show = False}) @@ -501,14 +500,10 @@ Retry: '重复任务检查 Dim LoaderName As String = "Modrinth 整合包安装:" & VersionName & " " - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = LoaderName Then - Hint("该整合包正在安装中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + If LoaderTaskbar.Any(Function(l) l.Name = LoaderName) Then + Hint("该整合包正在安装中!", HintType.Critical) + Return Nothing + End If '启动 Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = AddressOf McInstallState} @@ -516,25 +511,26 @@ Retry: LoaderTaskbarAdd(Loader) FrmMain.BtnExtraDownload.ShowRefresh() If ShowRibble Then FrmMain.BtnExtraDownload.Ribble() + Return Loader - End Sub + End Function 'HMCL - Private Sub InstallPackHMCL(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String) + Private Function InstallPackHMCL(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String) As LoaderCombo(Of String) '读取 Json 文件 Dim Json As JObject Try Json = GetJson(ReadFile(Archive.GetEntry(ArchiveBaseFolder & "modpack.json").Open, Encoding.UTF8)) Catch ex As Exception Log(ex, "整合包安装信息存在问题", LogLevel.Hint) - Exit Sub + Return Nothing End Try '获取版本名 - Dim PackName As String = If(Json("name"), "") + Dim VersionName As String = If(Json("name"), "") Dim Validate As New ValidateFolderName(PathMcFolder & "versions") - If Validate.Validate(PackName) <> "" Then PackName = "" - Dim VersionName As String = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate}) - If VersionName Is Nothing Then Exit Sub + If Validate.Validate(VersionName) <> "" Then VersionName = "" + If VersionName = "" Then VersionName = MyMsgBoxInput("输入版本名称", "", "", New ObjectModel.Collection(Of Validate) From {Validate}) + If String.IsNullOrEmpty(VersionName) Then Return Nothing '解压与配置文件 Dim InstallTemp As String = PathTemp & "PackInstall\" & RandomInteger(0, 100000) & "\" Dim InstallLoaders As New List(Of LoaderBase) @@ -555,7 +551,7 @@ Retry: '构造加载器 If Json("gameVersion") Is Nothing Then Hint("该整合包未提供游戏版本信息,无法安装!", HintType.Critical) - Exit Sub + Return Nothing End If Dim Request As New McInstallRequest With { .TargetVersionName = VersionName, @@ -563,7 +559,7 @@ Retry: .MinecraftName = Json("gameVersion").ToString } Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True) - If MergeLoaders Is Nothing Then Exit Sub + If MergeLoaders Is Nothing Then Return Nothing '构造 Libraries 加载器(为了使得 Mods 下载结束后再构造,这样才会下载 JumpLoader 文件) Dim LoadersLib As New List(Of LoaderBase) LoadersLib.Add(New LoaderTask(Of String, String)("重命名版本 Json(副加载器)", @@ -591,14 +587,10 @@ Retry: '重复任务检查 Dim LoaderName As String = "HMCL 整合包安装:" & VersionName & " " - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = LoaderName Then - Hint("该整合包正在安装中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + If LoaderTaskbar.Any(Function(l) l.Name = LoaderName) Then + Hint("该整合包正在安装中!", HintType.Critical) + Return Nothing + End If '启动 Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = AddressOf McInstallState} @@ -607,10 +599,11 @@ Retry: LoaderTaskbarAdd(Loader) FrmMain.BtnExtraDownload.ShowRefresh() FrmMain.BtnExtraDownload.Ribble() - End Sub + Return Loader + End Function 'MMC - Private Sub InstallPackMMC(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String) + Private Function InstallPackMMC(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String) As LoaderCombo(Of String) '读取 Json 文件 Dim PackJson As JObject, PackInstance As String Try @@ -618,14 +611,14 @@ Retry: PackInstance = ReadFile(Archive.GetEntry(ArchiveBaseFolder & "instance.cfg").Open, Encoding.UTF8) Catch ex As Exception Log(ex, "整合包安装信息存在问题", LogLevel.Hint) - Exit Sub + Return Nothing End Try '获取版本名 - Dim PackName As String = If(RegexSeek(PackInstance, "(?<=\nname\=)[^\n]+"), "") + Dim VersionName As String = If(RegexSeek(PackInstance, "(?<=\nname\=)[^\n]+"), "") Dim Validate As New ValidateFolderName(PathMcFolder & "versions") - If Validate.Validate(PackName) <> "" Then PackName = "" - Dim VersionName As String = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate}) - If VersionName Is Nothing Then Exit Sub + If Validate.Validate(VersionName) <> "" Then VersionName = "" + If VersionName = "" Then VersionName = MyMsgBoxInput("输入版本名称", "", "", New ObjectModel.Collection(Of Validate) From {Validate}) + If String.IsNullOrEmpty(VersionName) Then Return Nothing '解压、配置设置文件 Dim InstallTemp As String = $"{PathTemp}PackInstall\{RandomInteger(0, 100000)}\" Dim SetupFile As String = $"{PathMcFolder}versions\{VersionName}\PCL\Setup.ini" @@ -685,7 +678,7 @@ Retry: '构造版本安装请求 If PackJson("components") Is Nothing Then Hint("该整合包未提供游戏版本信息,无法安装!", HintType.Critical) - Exit Sub + Return Nothing End If Dim Request As New McInstallRequest With {.TargetVersionName = VersionName, .TargetVersionFolder = $"{PathMcFolder}versions\{VersionName}\"} For Each Component In PackJson("components") @@ -702,12 +695,12 @@ Retry: Request.FabricVersion = Component("version") Case "org.quiltmc.quilt-loader" 'eg. 1.0.0 Hint("PCL 暂不支持安装需要 Quilt 的整合包!", HintType.Critical) - Exit Sub + Return Nothing End Select Next '构造加载器 Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True) - If MergeLoaders Is Nothing Then Exit Sub + If MergeLoaders Is Nothing Then Return Nothing '构造 Libraries 加载器 Dim LoadersLib As New List(Of LoaderBase) LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionName))) With {.ProgressWeight = 1, .Show = False}) @@ -720,14 +713,10 @@ Retry: '重复任务检查 Dim LoaderName As String = "MMC 整合包安装:" & VersionName & " " - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = LoaderName Then - Hint("该整合包正在安装中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + If LoaderTaskbar.Any(Function(l) l.Name = LoaderName) Then + Hint("该整合包正在安装中!", HintType.Critical) + Return Nothing + End If '启动 Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = AddressOf McInstallState} @@ -735,10 +724,12 @@ Retry: LoaderTaskbarAdd(Loader) FrmMain.BtnExtraDownload.ShowRefresh() FrmMain.BtnExtraDownload.Ribble() - End Sub + Return Loader + End Function 'MCBBS - Private Sub InstallPackMCBBS(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String) + Private Function InstallPackMCBBS(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, + Optional VersionName As String = Nothing) As LoaderCombo(Of String) '读取 Json 文件 Dim Json As JObject Try @@ -746,14 +737,17 @@ Retry: Json = GetJson(ReadFile(Entry.Open, Encoding.UTF8)) Catch ex As Exception Log(ex, "整合包安装信息存在问题", LogLevel.Hint) - Exit Sub + Return Nothing End Try '获取版本名 - Dim PackName As String = If(Json("name"), "") - Dim Validate As New ValidateFolderName(PathMcFolder & "versions") - If Validate.Validate(PackName) <> "" Then PackName = "" - Dim VersionName As String = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate}) - If VersionName Is Nothing Then Exit Sub + Dim ShowRibble As Boolean = VersionName Is Nothing + If VersionName Is Nothing Then + VersionName = If(Json("name"), "") + Dim Validate As New ValidateFolderName(PathMcFolder & "versions") + If Validate.Validate(VersionName) <> "" Then VersionName = "" + If VersionName = "" Then VersionName = MyMsgBoxInput("输入版本名称", "", "", New ObjectModel.Collection(Of Validate) From {Validate}) + If String.IsNullOrEmpty(VersionName) Then Return Nothing + End If '解压与配置文件 Dim InstallTemp As String = PathTemp & "PackInstall\" & RandomInteger(0, 100000) & "\" Dim InstallLoaders As New List(Of LoaderBase) @@ -774,7 +768,7 @@ Retry: '构造加载器 If Json("addons") Is Nothing Then Hint("该整合包未提供游戏版本附加信息,无法安装!", HintType.Critical) - Exit Sub + Return Nothing End If Dim Addons As New Dictionary(Of String, String) For Each Entry In Json("addons") @@ -782,11 +776,11 @@ Retry: Next If Not Addons.ContainsKey("game") Then Hint("该整合包未提供游戏版本信息,无法安装!", HintType.Critical) - Exit Sub + Return Nothing End If If Addons.ContainsKey("quilt") Then Hint("PCL 暂不支持安装需要 Quilt 的整合包!", HintType.Critical) - Exit Sub + Return Nothing End If Dim Request As New McInstallRequest With { .TargetVersionName = VersionName, @@ -798,7 +792,7 @@ Retry: .FabricVersion = If(Addons.ContainsKey("fabric"), Addons("fabric"), Nothing) } Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True) - If MergeLoaders Is Nothing Then Exit Sub + If MergeLoaders Is Nothing Then Return Nothing '构造 Libraries 加载器 Dim LoadersLib As New List(Of LoaderBase) LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionName))) With {.ProgressWeight = 1, .Show = False}) @@ -811,14 +805,10 @@ Retry: '重复任务检查 Dim LoaderName As String = "MCBBS 整合包安装:" & VersionName & " " - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = LoaderName Then - Hint("该整合包正在安装中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + If LoaderTaskbar.Any(Function(l) l.Name = LoaderName) Then + Hint("该整合包正在安装中!", HintType.Critical) + Return Nothing + End If '启动 Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = AddressOf McInstallState} @@ -826,28 +816,36 @@ Retry: Loader.Start(Request.TargetVersionFolder) LoaderTaskbarAdd(Loader) FrmMain.BtnExtraDownload.ShowRefresh() - FrmMain.BtnExtraDownload.Ribble() - End Sub + If ShowRibble Then FrmMain.BtnExtraDownload.Ribble() + Return Loader + End Function '普通压缩包 - Private Sub InstallPackCompress(FileAddress As String, ArchiveBaseFolder As String) + Private Function InstallPackCompress(FileAddress As String, ArchiveBaseFolder As String) As LoaderCombo(Of String) MyMsgBox("请在接下来打开的窗口中选择安装目标文件夹,它必须是一个空文件夹。", "安装提示", "继续", ForceWait:=True) '获取解压路径 Dim TargetFolder As String = SelectFolder("选择安装目标(必须是一个空文件夹)") - If String.IsNullOrEmpty(TargetFolder) Then Exit Sub - If TargetFolder.Contains("!") OrElse TargetFolder.Contains(";") Then Hint("Minecraft 文件夹路径中不能含有感叹号或分号!", HintType.Critical) : Exit Sub - If Directory.GetFileSystemEntries(TargetFolder).Length > 0 Then Hint("请选择一个空文件夹作为安装目标!", HintType.Critical) : Exit Sub + If String.IsNullOrEmpty(TargetFolder) Then Return Nothing + If TargetFolder.Contains("!") OrElse TargetFolder.Contains(";") Then Hint("Minecraft 文件夹路径中不能含有感叹号或分号!", HintType.Critical) : Return Nothing + If Directory.GetFileSystemEntries(TargetFolder).Length > 0 Then Hint("请选择一个空文件夹作为安装目标!", HintType.Critical) : Return Nothing '要求显示名称 Dim NewName As String = MyMsgBoxInput("输入显示名称", "输入该文件夹在左边栏列表中显示的名称。", GetFolderNameFromPath(TargetFolder), New ObjectModel.Collection(Of Validate) From {New ValidateNullOrWhiteSpace, New ValidateLength(1, 30), New ValidateExcept({">", "|"})}) - If String.IsNullOrWhiteSpace(NewName) Then Exit Sub + If String.IsNullOrWhiteSpace(NewName) Then Return Nothing '解压 - Hint("正在解压压缩包……") - UnpackFiles(TargetFolder, FileAddress, Nothing) - '加入文件夹列表 - PageSelectLeft.AddFolder(TargetFolder, NewName, False) - Hint("已加入游戏文件夹列表:" & NewName, HintType.Finish) - End Sub + Dim Loader As New LoaderCombo(Of String)("安装压缩包", { + New LoaderTask(Of String, Integer)("安装压缩包", + Sub() + UnpackFiles(TargetFolder, FileAddress, Nothing) + PageSelectLeft.AddFolder(TargetFolder, NewName, False) '加入文件夹列表 + End Sub) + }) + Loader.Start() + LoaderTaskbarAdd(Loader) + FrmMain.BtnExtraDownload.ShowRefresh() + FrmMain.BtnExtraDownload.Ribble() + Return Loader + End Function #End Region diff --git a/Plain Craft Launcher 2/Modules/ModSecret.vb b/Plain Craft Launcher 2/Modules/ModSecret.vb index f6e0a36..593a0e9 100644 --- a/Plain Craft Launcher 2/Modules/ModSecret.vb +++ b/Plain Craft Launcher 2/Modules/ModSecret.vb @@ -10,6 +10,8 @@ Friend Module ModSecret '在开源内容的注册表键与普通内容的注册表键隔离 Public Const RegFolder As String = "PCLDebug" + '用于微软登录的 ClientId + Public Const OAuthClientId As String = "" Friend Sub SecretOnApplicationStart() '提升 UI 线程优先级 @@ -41,8 +43,9 @@ Friend Module ModSecret Environment.[Exit](Result.Cancel) End If '开源版本提示 - MyMsgBox($"该版本中不包含以下特性: -- CurseForge 查询:需要 API Key(你可以申请一个,然后添加到 SecretHeadersSign 方法中) + MyMsgBox($"该版本中无法使用以下特性: +- CurseForge API 调用:需要你自行申请 API Key,然后添加到 SecretHeadersSign 方法中 +- 正版登录:需要你自行申请 Client ID,然后添加到 ModSecret.vb 的开头 - 更新与联网通知:避免滥用隐患 - 主题切换:这是需要赞助解锁的纪念性质的功能,别让赞助者太伤心啦…… - 百宝箱:开发早期往里面塞了些开发工具,整理起来太麻烦了", "开源版本说明") @@ -89,7 +92,6 @@ Friend Module ModSecret #Region "网络鉴权" Friend Function SecretCdnSign(UrlWithMark As String) - '只处理以 {CDN} 结尾的链接 If Not UrlWithMark.EndsWithF("{CDN}") Then Return UrlWithMark Return UrlWithMark.Replace("{CDN}", "").Replace(" ", "%20") End Function @@ -97,26 +99,24 @@ Friend Module ModSecret ''' 设置 Headers 的 UA、Referer。 ''' Friend Sub SecretHeadersSign(Url As String, ByRef Client As CookieWebClient, Optional UseBrowserUserAgent As Boolean = False) - If ApplicationStartTick < 1 Then Return '禁止在没有运行程序的情况下通过反射调用 If UseBrowserUserAgent Then Client.Headers("User-Agent") = "PCL2/" & VersionStandardCode & " Mozilla/5.0 AppleWebKit/537.36 Chrome/63.0.3239.132 Safari/537.36" Else Client.Headers("User-Agent") = "PCL2/" & VersionStandardCode End If - Client.Headers("Referer") = "http://" & VersionCode & ".pcl2.server/" + Client.Headers("Referer") = "http://" & VersionCode & ".pcl2.open.server/" '如果你有 CurseForge API Key,请添加到 Headers 中,以恢复对 CurseForge 的访问 End Sub ''' ''' 设置 Headers 的 UA、Referer。 ''' Friend Sub SecretHeadersSign(Url As String, ByRef Request As HttpWebRequest, Optional UseBrowserUserAgent As Boolean = False) - If ApplicationStartTick < 1 Then Return '禁止在没有运行程序的情况下通过反射调用 If UseBrowserUserAgent Then Request.UserAgent = "PCL2/" & VersionStandardCode & " Mozilla/5.0 AppleWebKit/537.36 Chrome/63.0.3239.132 Safari/537.36" Else Request.UserAgent = "PCL2/" & VersionStandardCode End If - Request.Referer = "http://" & VersionCode & ".pcl2.server/" + Request.Referer = "http://" & VersionCode & ".pcl2.open.server/" '如果你有 CurseForge API Key,请添加到 Headers 中,以恢复对 CurseForge 的访问 End Sub diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb index 086cbf9..6fc9adb 100644 --- a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb +++ b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb @@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices ' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 ' 方法是按如下所示使用“*” - - + + diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb index 866c3e1..7302f5d 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb @@ -28,15 +28,12 @@ Public Module ModDownloadLib Dim VersionFolder As String = PathMcFolder & "versions\" & Id & "\" '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = "Minecraft " & Id & " 下载" Then - If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Return LoaderTaskbar(i) - Hint("该版本正在下载中!", HintType.Critical) - Return LoaderTaskbar(i) - End If - Next - End SyncLock + For Each OngoingLoader In LoaderTaskbar + If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For + If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Return OngoingLoader + Hint("该版本正在下载中!", HintType.Critical) + Return OngoingLoader + Next '已有版本检查 If Behaviour <> NetPreDownloadBehaviour.IgnoreCheck AndAlso File.Exists(VersionFolder & Id & ".json") AndAlso File.Exists(VersionFolder & Id & ".jar") Then @@ -74,15 +71,12 @@ Public Module ModDownloadLib VersionFolder = VersionFolder & Id & "\" '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = "Minecraft " & Id & " 下载" Then - If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Exit Sub - Hint("该版本正在下载中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + For Each OngoingLoader In LoaderTaskbar + If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For + If Behaviour = NetPreDownloadBehaviour.ExitWhileExistsOrDownloading Then Exit Sub + Hint("该版本正在下载中!", HintType.Critical) + Exit Sub + Next Dim Loaders As New List(Of LoaderBase) '下载版本 Json 文件 @@ -323,14 +317,11 @@ Public Module ModDownloadLib If Not Target.Contains("\") Then Exit Sub '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = "OptiFine " & DownloadInfo.NameDisplay & " 下载" Then - Hint("该版本正在下载中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + For Each OngoingLoader In LoaderTaskbar + If OngoingLoader.Name <> $"OptiFine {DownloadInfo.NameDisplay} 下载" Then Continue For + Hint("该版本正在下载中!", HintType.Critical) + Exit Sub + Next Dim Loader As New LoaderCombo(Of DlOptiFineListEntry)("OptiFine " & DownloadInfo.NameDisplay & " 下载", McDownloadOptiFineSaveLoader(DownloadInfo, Target)) With {.OnStateChanged = AddressOf DownloadStateSave} Loader.Start(DownloadInfo) @@ -753,14 +744,11 @@ Retry: Dim VersionFolder As String = PathMcFolder & "versions\" & VersionName & "\" '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = "LiteLoader " & Id & " 下载" Then - Hint("该版本正在下载中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + For Each OngoingLoader In LoaderTaskbar + If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For + Hint("该版本正在下载中!", HintType.Critical) + Exit Sub + Next '已有版本检查 If File.Exists(VersionFolder & VersionName & ".json") Then @@ -790,14 +778,11 @@ Retry: If Not Target.Contains("\") Then Exit Sub '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = "LiteLoader " & Id & " 下载" Then - Hint("该版本正在下载中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + For Each OngoingLoader In LoaderTaskbar + If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For + Hint("该版本正在下载中!", HintType.Critical) + Exit Sub + Next '构造步骤加载器 Dim Loaders As New List(Of LoaderBase) @@ -975,14 +960,11 @@ Retry: If Not Target.Contains("\") Then Exit Sub '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = DisplayName & " 下载" Then - Hint("该版本正在下载中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + For Each OngoingLoader In LoaderTaskbar + If OngoingLoader.Name <> $"{DisplayName} 下载" Then Continue For + Hint("该版本正在下载中!", HintType.Critical) + Exit Sub + Next '获取下载地址 Dim Files As New List(Of NetFile) @@ -1278,15 +1260,17 @@ Retry: '[net.minecraft:client:1.17.1-20210706.113038:mappings@txt] 或 @tsrg] Dim OriginalName As String = Json("data")("MOJMAPS")("client").ToString.Trim("[]".ToCharArray()).Before("@") Dim Address = McLibGet(OriginalName).Replace(".jar", "-mappings." & Json("data")("MOJMAPS")("client").ToString.Trim("[]".ToCharArray()).Split("@")(1)) - Libs.Add(New McLibToken With {.IsJumpLoader = False, .IsNatives = False, .LocalPath = Address, .OriginalName = OriginalName, - .Url = RawJson("downloads")("client_mappings")("url"), .Size = RawJson("downloads")("client_mappings")("size"), .SHA1 = RawJson("downloads")("client_mappings")("sha1")}) - Log("[Download] 需要下载 Mappings:" & Address) + Dim ClientMappings As JToken = RawJson("downloads")("client_mappings") + Libs.Add(New McLibToken With { + .IsJumpLoader = False, .IsNatives = False, .LocalPath = Address, .OriginalName = OriginalName, + .Url = ClientMappings("url"), .Size = ClientMappings("size"), .SHA1 = ClientMappings("sha1")}) + Log($"[Download] 需要下载 Mappings:{ClientMappings("url")} (SHA1: {ClientMappings("sha1")})") End If Task.Progress = 0.8 '去除其中的原始 Forgelike 项 For i = 0 To Libs.Count - 1 If Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}.jar") OrElse - Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}-client.jar") Then +Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}-client.jar") Then Log($"[Download] 已从待下载 {LoaderName} 支持库中移除:" & Libs(i).LocalPath, LogLevel.Debug) Libs.RemoveAt(i) Exit For @@ -1413,55 +1397,55 @@ Retry: End Sub) With {.ProgressWeight = 10}) Else Log("[Download] 检测为非新版 Forge:" & LoaderVersion) - Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)($"安装 {LoaderName}(方式 B)", - Sub(Task As LoaderTask(Of List(Of NetFile), Boolean)) - Dim Installer As ZipArchive = Nothing - Try - '解压并获取信息 - Installer = New ZipArchive(New FileStream(InstallerAddress, FileMode.Open)) - Task.Progress = 0.2 - Dim Json As JObject = GetJson(ReadFile(Installer.GetEntry("install_profile.json").Open)) - Task.Progress = 0.4 - '新建版本文件夹 - Directory.CreateDirectory(VersionFolder) - Task.Progress = 0.5 - If Json("install") Is Nothing Then - '中版:Legacy 方式 1 - Log("[Download] 开始进行 Forge 安装,Legacy 方式 1:" & InstallerAddress) - '建立 Json 文件 - Dim JsonVersion As JObject = GetJson(ReadFile(Installer.GetEntry(Json("json").ToString.TrimStart("/")).Open)) - JsonVersion("id") = TargetVersion - WriteFile(VersionFolder & TargetVersion & ".json", JsonVersion.ToString) - Task.Progress = 0.6 - '解压支持库文件 - Installer.Dispose() - ExtractFile(InstallerAddress, InstallerAddress & "_unrar\") - CopyDirectory(InstallerAddress & "_unrar\maven\", McFolder & "libraries\") - DeleteDirectory(InstallerAddress & "_unrar\") - Else - '旧版:Legacy 方式 2 - Log("[Download] 开始进行 Forge 安装,Legacy 方式 2:" & InstallerAddress) - '解压 Jar 文件 - Dim JarAddress As String = McLibGet(Json("install")("path"), CustomMcFolder:=McFolder) - If File.Exists(JarAddress) Then File.Delete(JarAddress) - WriteFile(JarAddress, Installer.GetEntry(Json("install")("filePath")).Open) - Task.Progress = 0.9 - '建立 Json 文件 - Json("versionInfo")("id") = TargetVersion - If Json("versionInfo")("inheritsFrom") Is Nothing Then CType(Json("versionInfo"), JObject).Add("inheritsFrom", Inherit) - WriteFile(VersionFolder & TargetVersion & ".json", Json("versionInfo").ToString) - End If - '新建 mods 文件夹 - Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\") - Catch ex As Exception - Throw New Exception("非新版方式安装 Forge 失败", ex) - Finally - Try - '清理文件 - If Installer IsNot Nothing Then Installer.Dispose() - If File.Exists(InstallerAddress) Then File.Delete(InstallerAddress) - If Directory.Exists(InstallerAddress & "_unrar\") Then DeleteDirectory(InstallerAddress & "_unrar\") - Catch ex As Exception + Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)($"安装 {LoaderName}(方式 B)", +Sub(Task As LoaderTask(Of List(Of NetFile), Boolean)) + Dim Installer As ZipArchive = Nothing + Try + '解压并获取信息 + Installer = New ZipArchive(New FileStream(InstallerAddress, FileMode.Open)) + Task.Progress = 0.2 + Dim Json As JObject = GetJson(ReadFile(Installer.GetEntry("install_profile.json").Open)) + Task.Progress = 0.4 + '新建版本文件夹 + Directory.CreateDirectory(VersionFolder) + Task.Progress = 0.5 + If Json("install") Is Nothing Then + '中版:Legacy 方式 1 + Log("[Download] 开始进行 Forge 安装,Legacy 方式 1:" & InstallerAddress) + '建立 Json 文件 + Dim JsonVersion As JObject = GetJson(ReadFile(Installer.GetEntry(Json("json").ToString.TrimStart("/")).Open)) + JsonVersion("id") = TargetVersion + WriteFile(VersionFolder & TargetVersion & ".json", JsonVersion.ToString) + Task.Progress = 0.6 + '解压支持库文件 + Installer.Dispose() + ExtractFile(InstallerAddress, InstallerAddress & "_unrar\") + CopyDirectory(InstallerAddress & "_unrar\maven\", McFolder & "libraries\") + DeleteDirectory(InstallerAddress & "_unrar\") + Else + '旧版:Legacy 方式 2 + Log("[Download] 开始进行 Forge 安装,Legacy 方式 2:" & InstallerAddress) + '解压 Jar 文件 + Dim JarAddress As String = McLibGet(Json("install")("path"), CustomMcFolder:=McFolder) + If File.Exists(JarAddress) Then File.Delete(JarAddress) + WriteFile(JarAddress, Installer.GetEntry(Json("install")("filePath")).Open) + Task.Progress = 0.9 + '建立 Json 文件 + Json("versionInfo")("id") = TargetVersion + If Json("versionInfo")("inheritsFrom") Is Nothing Then CType(Json("versionInfo"), JObject).Add("inheritsFrom", Inherit) + WriteFile(VersionFolder & TargetVersion & ".json", Json("versionInfo").ToString) + End If + '新建 mods 文件夹 + Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\") + Catch ex As Exception + Throw New Exception("非新版方式安装 Forge 失败", ex) + Finally + Try + '清理文件 + If Installer IsNot Nothing Then Installer.Dispose() + If File.Exists(InstallerAddress) Then File.Delete(InstallerAddress) + If Directory.Exists(InstallerAddress & "_unrar\") Then DeleteDirectory(InstallerAddress & "_unrar\") + Catch ex As Exception Log(ex, "非新版方式安装 Forge 清理文件时出错") End Try End Try @@ -1730,14 +1714,11 @@ Retry: If Not Target.Contains("\") Then Exit Sub '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = "Fabric " & Version & " 安装器下载" Then - Hint("该版本正在下载中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + For Each OngoingLoader In LoaderTaskbar + If OngoingLoader.Name <> $"Fabric {Version} 安装器下载" Then Continue For + Hint("该版本正在下载中!", HintType.Critical) + Exit Sub + Next '构造步骤加载器 Dim Loaders As New List(Of LoaderBase) @@ -1773,26 +1754,26 @@ Retry: '下载 Json MinecraftName = MinecraftName.Replace("∞", "infinite") '放在 ID 后面避免影响版本文件夹名称 Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("获取 Fabric 主文件下载地址", - Sub(Task As LoaderTask(Of String, List(Of NetFile))) - '启动依赖版本的下载 - If FixLibrary Then - McDownloadClient(NetPreDownloadBehaviour.ExitWhileExistsOrDownloading, MinecraftName) - End If - Task.Progress = 0.5 - '构造文件请求 - Task.Output = New List(Of NetFile) From {New NetFile({ - "https://bmclapi2.bangbang93.com/fabric-meta/v2/versions/loader/" & MinecraftName & "/" & FabricVersion & "/profile/json", - "https://meta.fabricmc.net/v2/versions/loader/" & MinecraftName & "/" & FabricVersion & "/profile/json" - }, VersionFolder & Id & ".json", New FileChecker(IsJson:=True))} - '新建 mods 文件夹 - Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\") - End Sub) With {.ProgressWeight = 0.5}) + Sub(Task As LoaderTask(Of String, List(Of NetFile))) + '启动依赖版本的下载 + If FixLibrary Then + McDownloadClient(NetPreDownloadBehaviour.ExitWhileExistsOrDownloading, MinecraftName) + End If + Task.Progress = 0.5 + '构造文件请求 + Task.Output = New List(Of NetFile) From {New NetFile({ + "https://bmclapi2.bangbang93.com/fabric-meta/v2/versions/loader/" & MinecraftName & "/" & FabricVersion & "/profile/json", + "https://meta.fabricmc.net/v2/versions/loader/" & MinecraftName & "/" & FabricVersion & "/profile/json" + }, VersionFolder & Id & ".json", New FileChecker(IsJson:=True))} + '新建 mods 文件夹 + Directory.CreateDirectory(New McVersion(VersionFolder).GetPathIndie(True) & "mods\") + End Sub) With {.ProgressWeight = 0.5}) Loaders.Add(New LoaderDownload("下载 Fabric 主文件", New List(Of NetFile)) With {.ProgressWeight = 2.5}) '下载支持库 If FixLibrary Then Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析 Fabric 支持库文件", - Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False}) + Sub(Task) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False}) Loaders.Add(New LoaderDownload("下载 Fabric 支持库文件", New List(Of NetFile)) With {.ProgressWeight = 8}) End If @@ -2039,9 +2020,11 @@ Retry: Dim LiteLoaderFolder As String = Nothing If Request.LiteLoaderEntry IsNot Nothing Then LiteLoaderFolder = TempMcFolder & "versions\" & Request.MinecraftName & "-LiteLoader" - 'OptiFine 是否作为 Mod 进行下载 - Dim OptiFineAsMod As Boolean = - (Request.OptiFineEntry IsNot Nothing OrElse Request.OptiFineVersion IsNot Nothing) AndAlso Request.FabricVersion IsNot Nothing + '判断 OptiFine 是否作为 Mod 进行下载 + Dim MinecraftCode As Integer = If(Request.MinecraftName.Contains("."), Request.MinecraftName.Split(".")(1), 99) + Dim OptiFineAsMod As Boolean = Request.OptiFineEntry IsNot Nothing AndAlso '1. 选择了 OptiFine + (Request.FabricVersion IsNot Nothing OrElse '2. 选择了 Fabric... + (Request.ForgeEntry IsNot Nothing AndAlso MinecraftCode >= 14 AndAlso MinecraftCode <= 15)) '...或者 Forge 1.14~15(#4134) If OptiFineAsMod Then Log("[Download] OptiFine 将作为 Mod 进行下载") OptiFineFolder = New McVersion(OutputFolder).GetPathIndie(True) & "mods\" diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadClient.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadClient.xaml.vb index fbc9d8b..5c041d1 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadClient.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadClient.xaml.vb @@ -43,12 +43,9 @@ Type = "愚人节版" Version("type") = "special" Version.Add("lore", GetMcFoolName(Version("id"))) - End Select - '所有4月1日发布的版本可视为愚人节版,但不改动版本描述 - Dim swedenTime As Date = Version("releaseTime").Value(Of Date).ToUniversalTime().AddHours(2) - Select Case swedenTime.ToString("MM'/'dd") - Case "04/01" - If Not Version("type") = "special" Then + Case Else '4/1 自动视作愚人节版 + Dim ReleaseDate = Version("releaseTime").Value(Of Date).ToUniversalTime().AddHours(2) + If ReleaseDate.Month = 4 AndAlso ReleaseDate.Day = 1 Then Type = "愚人节版" Version("type") = "special" End If @@ -65,7 +62,7 @@ '排序 For i = 0 To Dict.Keys.Count - 1 Dict(Dict.Keys(i)) = Sort(Dict.Values(i), - Function(a, b) a("releaseTime").Value(Of Date) > b("releaseTime").Value(Of Date)) + Function(a, b) a("releaseTime").Value(Of Date) > b("releaseTime").Value(Of Date)) Next '清空当前 PanMain.Children.Clear() diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb index 0302160..60f54bd 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb @@ -170,11 +170,11 @@ Dim LogoFileAddress As String = PathTemp & "CompLogo\" & GetHash(CompItem.Logo) & ".png" Loaders.Add(New LoaderDownload("下载整合包文件", New List(Of NetFile) From {File.ToNetFile(Target)}) With {.ProgressWeight = 10, .Block = True}) Loaders.Add(New LoaderTask(Of Integer, Integer)("准备安装整合包", - Sub() - If Not ModpackInstall(Target, VersionName, Logo:=If(IO.File.Exists(LogoFileAddress), LogoFileAddress, Nothing)) Then - Throw New Exception("整合包安装出现异常!") - End If - End Sub) With {.ProgressWeight = 0.1}) + Sub() + If ModpackInstall(Target, VersionName, Logo:=If(IO.File.Exists(LogoFileAddress), LogoFileAddress, Nothing)) Is Nothing Then + Throw New Exception("整合包安装出现异常!") + End If + End Sub) With {.ProgressWeight = 0.1}) '启动 Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb index e869a41..2230ba6 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb @@ -618,12 +618,9 @@ Type = "愚人节版" Version("type") = "special" Version.Add("lore", GetMcFoolName(Version("id"))) - End Select - '所有4月1日发布的版本视为愚人节版,但不改动版本描述 - Dim swedenTime As Date = Version("releaseTime").Value(Of Date).ToUniversalTime().AddHours(2) - Select Case swedenTime.ToString("MM'/'dd") - Case "04/01" - If Not Version("type") = "special" Then + Case Else '4/1 自动视作愚人节版 + Dim ReleaseDate = Version("releaseTime").Value(Of Date).ToUniversalTime().AddHours(2) + If ReleaseDate.Month = 4 AndAlso ReleaseDate.Day = 1 Then Type = "愚人节版" Version("type") = "special" End If diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb index 81d5cee..068a40a 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb @@ -241,7 +241,8 @@ Retry: {"Translator-Chinese", "Crowdin 中文翻译者披风"}, {"Translator", "Crowdin 翻译者披风"}, {"Cobalt", "Cobalt 披风"}, {"Vanilla", "原版披风"}, {"Minecon2011", "Minecon 2011 参与者披风"}, {"Minecon2012", "Minecon 2012 参与者披风"}, {"Minecon2013", "Minecon 2013 参与者披风"}, {"Minecon2015", "Minecon 2015 参与者披风"}, {"Minecon2016", "Minecon 2016 参与者披风"}, - {"Cherry Blossom", "樱花披风"}, {"15th Anniversary", "15 周年纪念披风"}, {"Purple Heart", "紫色心形披风"}, {"Follower's", "追随者披风"}, {"MCC 15th Year", "MCC 15 周年披风"} + {"Cherry Blossom", "樱花披风"}, {"15th Anniversary", "15 周年纪念披风"}, {"Purple Heart", "紫色心形披风"}, + {"Follower's", "追随者披风"}, {"MCC 15th Year", "MCC 15 周年披风"} } Dim SelectionControl As New List(Of IMyRadio) From {New MyRadioBox With {.Text = "无披风"}} For Each Cape In SkinData("capes") diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb index 60005b2..206f96a 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb @@ -21,19 +21,27 @@ '加载版本 RunInNewThread( Sub() - ''自动整合包安装:准备 - 'Dim PackInstallPath As String = Nothing - 'If File.Exists(Path & "modpack.zip") Then PackInstallPath = Path & "modpack.zip" - 'If File.Exists(Path & "modpack.mrpack") Then PackInstallPath = Path & "modpack.mrpack" - 'If PackInstallPath IsNot Nothing Then - ' Log("[Launch] 需自动安装整合包:" & PackInstallPath, LogLevel.Debug) - ' If Not Directory.Exists(Path & ".minecraft\") Then - ' Directory.CreateDirectory(Path & ".minecraft\") - ' Directory.CreateDirectory(Path & ".minecraft\versions\") - ' McFolderLauncherProfilesJsonCreate(Path & ".minecraft\") - ' End If - ' Setup.Set("LaunchFolderSelect", "$.minecraft\") - 'End If + '自动整合包安装:准备 + Dim PackInstallPath As String = Nothing + If File.Exists(Path & "modpack.zip") Then PackInstallPath = Path & "modpack.zip" + If File.Exists(Path & "modpack.mrpack") Then PackInstallPath = Path & "modpack.mrpack" + If PackInstallPath IsNot Nothing Then + If MyMsgBox($"PCL 即将在当前文件夹下自动安装整合包。", "自动安装", "继续", "取消") = 1 Then + '确认自动安装 + Log("[Launch] 需自动安装整合包:" & PackInstallPath, LogLevel.Debug) + Setup.Set("LaunchFolderSelect", "$.minecraft\") + If Not Directory.Exists(Path & ".minecraft\") Then + Directory.CreateDirectory(Path & ".minecraft\") + Directory.CreateDirectory(Path & ".minecraft\versions\") + McFolderLauncherProfilesJsonCreate(Path & ".minecraft\") + End If + McFolderListLoader.WaitForExit(IsForceRestart:=True) + Else + '取消自动安装 + Log("[Launch] 取消自动安装整合包:" & PackInstallPath, LogLevel.Debug) + PackInstallPath = Nothing + End If + End If '确认 Minecraft 文件夹存在 PathMcFolder = Setup.Get("LaunchFolderSelect").ToString.Replace("$", Path) If PathMcFolder = "" OrElse Not Directory.Exists(PathMcFolder) Then @@ -48,21 +56,27 @@ End If Log("[Launch] Minecraft 文件夹:" & PathMcFolder) If Setup.Get("SystemDebugDelay") Then Thread.Sleep(RandomInteger(500, 3000)) - ''自动整合包安装 - 'If PackInstallPath IsNot Nothing Then - ' If ModpackInstall(PackInstallPath) Then - ' Log("[Launch] 自动安装整合包成功:" & PackInstallPath) - ' File.Delete(PackInstallPath) - ' Else - ' Log("[Launch] 自动安装整合包失败:" & PackInstallPath) - ' End If - 'End If + '自动整合包安装 + If PackInstallPath IsNot Nothing Then + Dim InstallLoader = ModpackInstall(PackInstallPath) + If InstallLoader Is Nothing Then + Log("[Launch] 自动安装整合包失败:" & PackInstallPath) + Else + Log("[Launch] 自动安装整合包开始:" & PackInstallPath) + RunInUi(Sub() FrmMain.PageChange(FormMain.PageType.DownloadManager)) + InstallLoader.WaitForExit() + If InstallLoader.State = LoadState.Finished Then + Log("[Launch] 自动安装整合包成功,删除安装包:" & PackInstallPath) + File.Delete(PackInstallPath) + End If + End If + End If '确认 Minecraft 版本存在 Dim Selection As String = Setup.Get("LaunchVersionSelect") Dim Version As McVersion = If(Selection = "", Nothing, New McVersion(Selection)) - If Version Is Nothing OrElse Not (Version.Path.StartsWith(PathMcFolder) AndAlso Version.Check) Then + If Version Is Nothing OrElse Not Version.Path.StartsWithF(PathMcFolder) OrElse Not Version.Check() Then '无效的版本 - Log("[Launch] Minecraft 版本无效" & If(Version Is Nothing, ",没有有效版本", ":" & Version.Path), If(IsNothing(Version), LogLevel.Normal, LogLevel.Debug)) + Log("[Launch] 当前选择的 Minecraft 版本无效:" & If(Version Is Nothing, "null", Version.Path), If(IsNothing(Version), LogLevel.Normal, LogLevel.Debug)) If Not McVersionListLoader.State = LoadState.Finished Then LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\", WaitForExit:=True) If Not McVersionList.Any() OrElse McVersionList.First.Value(0).Logo.Contains("RedstoneBlock") Then Version = Nothing diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginAuthSkin.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginAuthSkin.xaml.vb index 0ed101d..ca21ffa 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginAuthSkin.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginAuthSkin.xaml.vb @@ -58,19 +58,21 @@ Hint("正在尝试更换,请稍候!") Setup.Set("CacheAuthUuid", "") '清空选择缓存 Setup.Set("CacheAuthName", "") - RunInThread(Sub() - Try - Dim Data As McLoginServer = GetLoginData() - Data.ForceReselectProfile = True - McLoginLoader.WaitForExit(Data, IsForceRestart:=True) - RunInUi(Sub() Reload(True)) - Catch ex As Exception - Log(ex, "更换角色失败", LogLevel.Hint) - End Try - End Sub) + RunInThread( + Sub() + Try + Dim Data As McLoginServer = GetLoginData() + Data.ForceReselectProfile = True + McLoginLoader.WaitForExit(Data, IsForceRestart:=True) + RunInUi(Sub() Reload(True)) + Catch ex As Exception + Log(ex, "更换角色失败", LogLevel.Hint) + End Try + End Sub) End Sub Private Sub BtnExit_Click() Handles BtnExit.Click Setup.Set("CacheAuthAccess", "") + Setup.Set("CacheAuthUuid", "") FrmLaunchLeft.RefreshPage(False, True) End Sub diff --git a/Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml b/Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml index b586851..f693f70 100644 --- a/Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml +++ b/Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml @@ -29,7 +29,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -75,7 +75,7 @@ - + @@ -104,312 +104,92 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -418,7 +198,7 @@ - + @@ -427,12 +207,12 @@ - + - + - + diff --git a/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb b/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb index 0bac32c..5caddae 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb +++ b/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb @@ -108,8 +108,7 @@ {"ToolDownloadKeepModpack", New SetupEntry(False, Source:=SetupSource.Registry)}, {"ToolDownloadIgnoreQuilt", New SetupEntry(True, Source:=SetupSource.Registry)}, {"ToolDownloadCert", New SetupEntry(True, Source:=SetupSource.Registry)}, - {"ToolDownloadMod", New SetupEntry(0, Source:=SetupSource.Registry)}, - {"ToolDownloadModMirror", New SetupEntry(False, Source:=SetupSource.Registry)}, + {"ToolDownloadMod", New SetupEntry(1, Source:=SetupSource.Registry)}, {"ToolUpdateAlpha", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)}, {"ToolUpdateRelease", New SetupEntry(False, Source:=SetupSource.Registry)}, {"ToolUpdateSnapshot", New SetupEntry(False, Source:=SetupSource.Registry)}, diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml index a1957fe..d34419c 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml @@ -7,9 +7,9 @@ PanScroll="{Binding ElementName=PanBack}"> - + - + diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml index d3eef4d..4f95fe3 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml @@ -22,7 +22,6 @@ - @@ -34,28 +33,28 @@ - - + + - - + + + + + + + - - - - - - - - + - - + @@ -102,7 +101,8 @@ - + + @@ -125,15 +125,23 @@ - + - - + + + + + + + + + + diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb index 066894e..0b19b11 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb @@ -35,7 +35,10 @@ '重复加载部分 PanBack.ScrollToHome() -#If Not BETA Then +#If BETA Then + PanDonate.Visibility = Visibility.Collapsed +#Else + PanDonate.Visibility = Visibility.Visible ItemSystemUpdateDownload.Content = "在有新版本时自动下载(更新快照版可能需要更新密钥)" #End If @@ -214,4 +217,15 @@ End Try End Function +#Region "导出 / 导入设置" + + Private Sub BtnSystemSettingExp_Click(sender As Object, e As MouseButtonEventArgs) Handles BtnSystemSettingExp.Click + Hint("该功能尚在开发中!") + End Sub + Private Sub BtnSystemSettingImp_Click(sender As Object, e As MouseButtonEventArgs) Handles BtnSystemSettingImp.Click + Hint("该功能尚在开发中!") + End Sub + +#End Region + End Class diff --git a/Plain Craft Launcher 2/Pages/PageSpeedLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageSpeedLeft.xaml.vb index 18c7270..665ff21 100644 --- a/Plain Craft Launcher 2/Pages/PageSpeedLeft.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageSpeedLeft.xaml.vb @@ -60,11 +60,9 @@ Public Class PageSpeedLeft End Try If FrmSpeedRight Is Nothing OrElse FrmSpeedRight.PanMain Is Nothing Then Exit Sub Try - SyncLock LoaderTaskbarLock - For Each Loader In LoaderTaskbar.ToList - TaskRefresh(Loader) - Next - End SyncLock + For Each Loader In LoaderTaskbar.ToList + TaskRefresh(Loader) + Next Catch ex As Exception Log(ex, "下载管理右栏监视出错", LogLevel.Feedback) End Try @@ -197,13 +195,11 @@ Public Class PageSpeedLeft Sub(sender As MyIconButton, e As EventArgs) AniDispose(sender, False) AniDispose(Card, True, Sub() If FrmSpeedRight.PanMain.Children.Count = 0 AndAlso FrmMain.PageCurrent = FormMain.PageType.DownloadManager Then FrmMain.PageBack()) - RightCards.Remove(Loader.Name) - SyncLock LoaderTaskbarLock - LoaderTaskbar.Remove(Loader) - Log($"[Taskbar] 由于下载管理卡片关闭,{Loader.Name} 已移出任务列表") - End SyncLock - Log($"[Watcher] 关闭下载管理卡片:{Loader.Name}") - RunInThread(Sub() Loader.Abort()) + Dim LoaderName = If(Loader Is Nothing, "null", Loader.Name) + RightCards.Remove(LoaderName) + LoaderTaskbar.TryTake(Loader) + Log($"[Taskbar] 关闭下载管理卡片:{LoaderName},且移出任务列表") + RunInThread(Sub() Loader?.Abort()) End Sub '如果已经失败,再刷新一次,修改成失败的控件 If Loader.State = LoadState.Failed Then diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb index c909f09..f583842 100644 --- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb @@ -229,7 +229,7 @@ '改变下边栏状态 Private ShownCount As Integer = 0 - Private Sub RefreshBottomBar() + Public Sub RefreshBottomBar() '计数 Dim NewCount As Integer = SelectedMods.Count Dim Selected = NewCount > 0 diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionOverall.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionOverall.xaml.vb index 4619d5b..783a111 100644 --- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionOverall.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionOverall.xaml.vb @@ -284,14 +284,11 @@ Private Sub BtnManageCheck_Click(sender As Object, e As EventArgs) Handles BtnManageCheck.Click Try '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = PageVersionLeft.Version.Name & " 文件补全" Then - Hint("正在处理中,请稍候!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock + For Each OngoingLoader In LoaderTaskbar + If OngoingLoader.Name <> PageVersionLeft.Version.Name & " 文件补全" Then Continue For + Hint("正在处理中,请稍候!", HintType.Critical) + Exit Sub + Next '启动 Dim Loader As New LoaderCombo(Of String)(PageVersionLeft.Version.Name & " 文件补全", DlClientFix(PageVersionLeft.Version, True, AssetsIndexExistsBehaviour.AlwaysDownload, False)) Loader.OnStateChanged = diff --git a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj index d68df7a..8246a85 100644 --- a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj +++ b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj @@ -876,7 +876,6 @@ - @@ -933,5 +932,8 @@ + + + \ No newline at end of file diff --git a/Plain Craft Launcher 2/Resources/Help.zip b/Plain Craft Launcher 2/Resources/Help.zip index 600091f7dd8e081efab76d255fae7ceb23916d47..a49d41f9f0bc1dd15c3bb20166b9992f5eb12a07 100644 GIT binary patch delta 17968 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 DZSXur diff --git a/Plain Craft Launcher 2/Resources/ModData.txt b/Plain Craft Launcher 2/Resources/ModData.txt index 822f369..91cb6ce 100644 --- a/Plain Craft Launcher 2/Resources/ModData.txt +++ b/Plain Craft Launcher 2/Resources/ModData.txt @@ -31,7 +31,7 @@ flans-mod-5-5-2|Flan 的枪械 (Flan's Mod) ee3|等价交换3 (Equivalent Exchange 3) minefactory-reloaded|我的工厂 (MineFactory) -render-player-api|玩家渲染API (Render Player API) - 已失效¨renderplayerapi|玩家渲染API (Render Player API) +render-player-api|玩家渲染API (Render Player API)¨renderplayerapi|玩家渲染API (Render Player API) player-api|玩家API (Player API)¨playerapi|玩家API (Player API) @@ -42,7 +42,7 @@ not-enough-items-1-8@nei|NEI物品管理器 (Not Enough Items)¨notenoughitems|N -custom-npcs|自定义NPC* +custom-npcs|自定义NPC (Custom NPCs) millenaire|千年村庄 (Millénaire) clay-soldiers-mod|粘土士兵* mo-creatures|更多生物 (Mo' Creatures) @@ -102,7 +102,7 @@ minecraft-comes-alive-mca|虚拟人生/凡家物语 (Minecraft Comes Alive) forge-essentials-74735@forge-essentials -translocators@|转运器*¨translocators-1-8|转运器 (Translocators) +translocators-1-8@translocators|转运器 (Translocators)¨translocators|转运器* craftguide|G键合成表 (CraftGuide) biomes-o-plenty@|超多生物群系 (Biomes O' Plenty) @@ -147,7 +147,7 @@ logistics-pipes|物流管道* magic-bees|魔法蜜蜂* carpenters-blocks|木匠方块 (Carpenter's Blocks) -mystcraft@|神秘岛* +mystcraft|神秘岛*¨@mystcraft|神秘岛 (Mystcraft) - Archived @@ -182,7 +182,7 @@ ender-io@enderio|末影接口 (Ender IO) -electrodynamics|电动力学* +electrodynamics@|电动力学* elite-armageddon¨mc-1-6-4-solar-apocalypse mekanism@|通用机械* @@ -209,7 +209,7 @@ plasmacraft|电浆工艺 (PlasmaCraft) fossils@fossils-and-archeology-revival|考古与化石 (Fossils and Archeology Revival) glenns-gases|格林的气体 (Glenn's Gases) the-lord-of-the-rings-mod-legacy|魔戒:传承 (The Lord of the Rings Mod: Legacy) -thaumic-tinkerer|神秘工匠*¨thaumic-tinkerer-unofficial|神秘工匠 (Thaumic Tinkerer)¨ichorium-kit|神秘工匠 (Thaumic Tinkerer) +thaumic-tinkerer|神秘工匠* @@ -232,13 +232,13 @@ animal-bikes|动物坐骑* electro-magic-tools|电力魔法工具 (Electro-Magic Tools) forbidden-magic|禁忌魔法* mobtalker2|怪物交谈2 (MobTalker 2) -icbm-classic|洲际导弹 (ICBM)¨icbm|洲际导弹 (ICBM) - 已停更 +icbm-classic@icbm|洲际导弹 (ICBM)¨icbm|洲际导弹 (ICBM) - 已停更 thaumic-infusion|神秘注魔* thaumic-exploration|神秘探险* deconstruction-table|解构工作台* -b0bgarys-growable-ores|可生长矿石 (B0bGary's Growable Ores) +kcs-growable-ores|可生长矿石 (Kc's Growable Ores) @@ -386,7 +386,7 @@ thaumic-energistics|神秘能源* chisel|凿子* nuclearcraft-mod@nuclearcraft|核电工艺 (NuclearCraft) -opencomputers|开放式电脑 (Open Computers) +opencomputers@|开放式电脑 (Open Computers) elemental-stones|元素之石* waila-nbt|万用高亮显示 (Waila NBT) @@ -416,16 +416,16 @@ lanteacraft|星际之门 (LanteaCraft) matteroverdrive-17-edition|超能物质 (Matter Overdrive)¨matteroverdrive-legacy|超能物质 (Matter Overdrive) tainted-magic|污秽魔法* minetweaker3 -treecapitator|砍树 (Tree Capitator) +treecapitator|砍树* insta-house|即时建造* multi-page-chest|多页箱子 (Multi-Page Chest) -draconic-evolution|龙之进化/龙之研究* +draconic-evolution@|龙之进化/龙之研究* galacticraft-add-on-more-planets@more-planets|更多行星 (More Planets) +thermal-expansion@thermal-foundation|热力基本 (Thermal Foundation) - -ding|界面进入提醒* +ding@|界面进入提醒* ender-utilities@|末影设备* magical-crops|魔法作物* headcrumbs|更多头颅* @@ -483,7 +483,7 @@ zoology|动物学* thaumic-revelations|神秘启示录* warp-book|传送书* -ex-compressum|压缩工具* +ex-compressum@|压缩工具* simply-jetpacks|简易喷气背包* blood-arsenal|血液兵工厂* sim-u-kraft-old|模拟城市 (Sim-U-Kraft) @@ -503,7 +503,7 @@ real-first-person-render|真实的第一人称 (Real First Person 2) custom-stuff-3|自定义物品3* lockdown|地图生成锁定* avaritia|无尽贪婪*¨avaritia-1-10|无尽贪婪 (Avaritia) -minecraft-flight-simulator|飞行模拟*¨transport-simulator-official-vehicle-set|飞行模拟 (Minecraft Flight Simulator) - 官方认证续写 +minecraft-flight-simulator@immersive-vehicles-official-content-pack|飞行模拟*¨transport-simulator-official-vehicle-set|飞行模拟 (Minecraft Flight Simulator) essential-thaumaturgy|源质神秘学* abyssalcraft|深渊国度 (AbyssalCraft) calculator|运算工艺* @@ -547,7 +547,7 @@ candycraft|糖果世界 (CandyCraft) minefantasy2|我的幻想2 (MineFantasy2) rails-of-war|铁路战争 (Rails of War) -actually-additions|实用拓展* +actually-additions@|实用拓展* galaxy-space-addon-for-galacticraft@galaxy-space|星空 (Galaxy Space) latiao-craft|辣条工艺* @@ -596,7 +596,7 @@ vics-modern-warfare-mod|维克的现代战争 (Vic's Modern Warfare Mod) chance-cubes@|机会方块* gun-customization endercore@|末影核心 (EnderCore) -brandons-core +brandons-core@ cofh-core@|CoFH核心 (CoFH Core) statuseffecthud|状态信息显示 (StatusEffectHUD) lambdalib @@ -621,10 +621,10 @@ mob-properties|怪物属性* ganys-surface|Gany的世界 (Gany's Surface) ezstorage|EZ存储 (EZStorage) -ichunutil +ichunutil@ intangible -forge-multipart-cbe¨forge-multi-part +forge-multipart-cbe@cb-multipart¨forge-multi-part the-titans-mod|泰坦生物 (The Titans) enchiridion stimmedcow-nomorerecipeconflict|合成冲突消除 (NoMoreRecipeConflict) @@ -679,7 +679,7 @@ pressure-pipes|压力管道* onlinepictureframe|在线相框显示 (OnlinePictureFrame) super-circuit-maker|超级电路* switch-bow -minecolonies|模拟殖民地* +minecolonies@|模拟殖民地* mcjtylib@ mcmultipart @@ -740,7 +740,7 @@ thaumic-palmistry one-click-crafting|一键合成 (One click crafting) essential-thaumaturgy-unofficial|源质神秘学(非官方版)* wireless-crafting-terminal|无线合成终端* -waila-plugins|Waila插件* +waila-plugins|Waila 插件* appleskin@|苹果皮 (AppleSkin) tcbotaniaexoflame|奥术投射 (TCBotaniaExoflame) thaumic-equivalence|奥法置换* @@ -788,7 +788,7 @@ solar-flux-reborn|日光通量:重制版* simple-void-world|简单虚空世界* shetiphiancore@¨shetiphiancore-fabric shadowmc -scannable|扫描器* +scannable@|扫描器* rebornstorage|存储重置 (Reborn Storage) quantumstorage|量子存储 (QuantumStorage) p455w0rds-library @@ -912,7 +912,7 @@ world-of-warcraft|魔兽世界* the-witcher-adventure|猎魔人* fancy-battleaxes@|华丽战斧* zora-no-densha|Zora的电车 (Zora no Densha) -roguelike-dungeons|冒险地牢* +roguelike-dungeons@roguelikedungeons|冒险地牢* first-aid@firstaid|急救/医疗护理* bonfires@|篝火* immersive-craft@|沉浸工艺* @@ -956,7 +956,7 @@ ex-nihilo-creatio|无中生有:创世 (Ex Nihilo: Creatio) thaumcraft|神秘时代* colossal-chests|巨型箱子* auto-pickup|自动拾取* -all-u-want|背包编辑器 (All-U-Want) +mc-mods-u-want|背包编辑器 (All-U-Want) potion-core|药水核心* solar-expansion blue-power|蓝石力量 (Blue power) @@ -1007,14 +1007,14 @@ croparia@|矿石作物/魔种之咏* simple-corn|简单玉米* thaumic-jei tinkers-steelworks|匠魂炼钢厂 (Tinkers' Steelworks) -unicode-font-extension|Unicode字体扩展* +unicode-font-extension|Unicode 字体扩展* placeable-items|可放置物品* compendium|工匠防御 (Tinkers' Compendium (Tinkers' Defense)) stargate-network|格雷的星门 (Greg's SG Craft) damage-indicators-mod|伤害显示 (Damage Indicators) torohealth-damage-indicators|ToroHealth 伤害显示 (ToroHealth Damage Indicators) omni-ocular -wrapup +wrapup@ nuclear-physics wither-skeleton-tweaks|凋灵骷髅调整* heat-and-climate|热量与气候* @@ -1071,7 +1071,7 @@ omlib|开放式炮台库 (OMLib) dynamictrees@|动态的树/有活力的树 (Dynamic Trees) merry-christmas|圣诞箱子 (Merry Christmas!) cloud-control|可控制的云* -zombie-ore|矿石僵尸 (Zombie ore) +zombie-ore|矿石僵尸* meanmobs|残忍怪物 (MeanMobs) zyins-hud @@ -1081,7 +1081,7 @@ the-disenchanter-mod|祛魔台 (The Disenchanter) carry-on@|搬运* better-than-llamas|更好看的羊驼*¨better-than-llamas-fabric|更好看的羊驼 (Better Than Llamas) dynamic-surroundings@dynamicsurroundingsfabric|动态环境/动态环绕*¨dynamic-surroundings-fabric-edition|动态环境/动态环绕 (Dynamic Surroundings) -alfheim|亚尔夫海姆* +alfheim@|亚尔夫海姆* mob-battle-mod@|怪物大乱斗*¨mob-battle-mod-fabric|怪物大乱斗 (Mob Battle Mod) smooth-font|平滑字体* @@ -1107,7 +1107,7 @@ bonsai-trees|盆栽* misty-world@|朦胧世界* -beta-kathairis|卡塞瑞斯 (Kathairis/Kether)¨kathairis-alive|卡塞瑞斯 (Kathairis/Kether) +beta-kathairis|卡塞瑞斯 (Kathairis / Kether)¨kathairis-alive|卡塞瑞斯 (Kathairis / Kether) manametal|魔法金属 (ManaMetalMod) avaritiaddons|无尽收容 / 更多空间箱子* base @@ -1162,7 +1162,7 @@ cloche-call mouse-tweaks@|鼠标手势* jaopcaagriculture|JAOPCA神秘农业附属 (Just A Resource Generation Compatibility Attempt) sky-resources|空岛资源2 (Sky Resources2) -hexxit-gear|Hexxit装备* +hexxit-gear|Hexxit 装备*¨hexxit-gear-restored|Hexxit 装备 (Hexxit Gear) magic-clover|幸运四叶草* inventory-crafting-grid|背包工作台* @@ -1220,7 +1220,7 @@ poop|屎 (Poop Mod) slurp|啜饮* tough-expansion|意志坚定:热力附属* mystical-agradditions@|神秘农业扩展* -vanillafix|原版修复 (VanillaFix) +vanillafix@|原版修复 (VanillaFix) just-enough-harvestcraft|更多潘马斯配方查询 (Just Enough HarvestCraft) charcoal-pit@charcoal_pit uncomplication|IC2exp还原* @@ -1228,7 +1228,7 @@ the-wings-of-alfheim-1-7-10|亚尔夫海姆之翼 (The Wings of Alfheim) mubble¨mubble-forge -libraryex|MineEx通用库 (LibraryEx) +libraryex|MineEx 通用库 (LibraryEx) industrial-wires|工业线缆* mystagrad-cloche-compat waitingtime|加载页面游戏 (WaitingTime) @@ -1252,7 +1252,7 @@ level-up-legacy|升级!前版 (Level Up!Legacy) moar-boats|模块化船* numina|模块化动力装甲前置* tinkers-complement@|匠魂补充 (Tinkers' Complement) -everlastingabilities|永恒能力 (EverlastingAbilities) +everlastingabilities@everlasting-abilities|永恒能力 (EverlastingAbilities) abyssalcraft-heads|深渊国度头颅 (AbyssalCraft Heads) overlord@|不死者之王* multifarm-crops|多功能农场兼容* @@ -1360,7 +1360,7 @@ morelibs game-stages@|游戏阶段* silents-gems@|寂静宝石 (Silent's Gems) -silent-lib +silent-lib@ silents-gems-tic-support|寂静宝石:匠魂支持 (Silent's Gems: TiC Support) lit-little-insignificant-things gemulation @@ -1404,7 +1404,7 @@ architecturecraft-tridev@architecture-craft|建筑师工艺重置版 (Architectu ore-farm|矿石农场* sound-physics-fabric|物理声效 (Sound Physics) -plethora-peripherals +plethora-peripherals@ simple-flight|简单的飞行* factory-tech|工厂科技 (FactoryTech) @@ -1419,13 +1419,13 @@ road-stuff@|道路2 (Road Stuff2) ae2wtlib real-filing-cabinet|仿真档案柜* hycrafthds-wtf-ic2-addon|WTF 工业拓展 (WTF Ic2 Addon) -u-team-core +u-team-core@ ftb-quests|FTB任务 (FTB Quests)¨ftb-quests-fabric|FTB任务 (FTB Quests) texfix@|材质修复 (TexFix) mapmakers-gadgets|地图作者小帮手 (Mapmaker's Gadgets) travellers-gear|旅者之器 (Traveller's Gear) ceramics@|陶瓷器* -slashblade-japanese-addon-pack|拔刀剑日系附属包 (SlashBlade Japanese Addon Pack) +slashblade-japanese-addon-pack@sjap|拔刀剑日系附属包 (SlashBlade Japanese Addon Pack) planet-progression|星球研究* space-advanced-addon-for-galactic-craft-3 @@ -1436,7 +1436,7 @@ new-tardis-mod advanced-chimneys|高级烟囱* regeneration|神秘博士 - 再生 (Doctor Who - Regeneration​) -stevekungs-lib +more-planets-gc-addon make-zoom-zoom|更快的加载 (MakeZoomZoom) minecraft-virtual-machines|Minecraft虚拟机* cavern2|洞穴 II (Cavern II) @@ -1506,8 +1506,8 @@ vanillaautomation|原版自动化 (VanillaAutomation) tickprofiler|Tick分析器 (TickProfiler) vanilla-immersion|立体工具方块* earthworks|土方工程* -terraqueous|地灵云心/海树山花*¨terraqueous-fabric|地灵云心/海树山花 (Terraqueous) -initial-inventory|自定义初始物品* +terraqueous@|地灵云心/海树山花*¨terraqueous-fabric|地灵云心/海树山花 (Terraqueous) +initial-inventory@|自定义初始物品* interaction-wheel@ water-strainer|滤水器* tinkers-skyblock|匠魂空岛 (Tinkers' Skyblock) @@ -1518,7 +1518,7 @@ hp-spells|哈利·波特:法术 (Harry Potter Spells) recurrent-complex|自然建筑生成* capabilityproxy|功能代理 (CapabilityProxy) reauth¨reauth-fabric -autoverse +autoverse@ transprot|运输* default-world-generator-port better-questing-standard-expansion|更好的任务-基础扩展 (Better Questing - Standard Expansion) @@ -1526,10 +1526,10 @@ exchangers|方块交换器* flexible-tools|灵活的工具* dimensional-control|维度控制* valkyrien-warfare@valkyrien-skies|瓦尔基里天空/瓦尔基里战争 (Valkyrien Skies/Valkyrien Warfare) -item-scroller|物品滚轮* +item-scroller@|物品滚轮* better-advancements@|更好的进度* lucraft-core -progressive-bosses@|进化的BOSS*¨fabric-progressive-bosses|进化的BOSS (Progressive Bosses) +progressive-bosses@|进化的 BOSS*¨fabric-progressive-bosses|进化的 BOSS (Progressive Bosses) persistent-bits rc-roads|真实公路 (RC Roads) emoticons|动作表情* @@ -1630,7 +1630,7 @@ tinkers-slashblade|刀锻冶匠魂 (Tinker's SlashBlade) audio-death|死亡音效* deep-mob-learning|深度怪物学习* -tofucraftreload|豆腐工艺重制版 (TofuCraftReload) +tofucraftreload@|豆腐工艺重制版 (TofuCraftReload) electroblobs-wizardry|巫术学 (Electroblob's Wizardry) moarsigns|更多告示牌 (MoarSigns) kamen-rider-craft|假面骑士工艺 (KamenRiderCraft) @@ -1661,7 +1661,7 @@ cplpibalds-tweaks|CplPibald的微调 (CplPibald's Tweaks) ore-biome|矿石生态群系* farm-adventure|农场冒险* the-shadow-world|暗影世界 (Shadow World) -japaricraftmod-2|加帕里公园 (JapariCraftMod) +project-306141|加帕里公园 (JapariCraftMod) mchorses-mclib musiccraft-mod|音乐工艺 (MusicCraft mod) hardcore-darkness|真实的黑夜* @@ -1688,7 +1688,7 @@ refined-machinery|精致机械* magicalsculpture|魔法雕像 (MagicalSculpture) ash-another-simple-hud|另一个简单的HUD (Another Simple HUD) -customselectionbox|自定义选择框 (Custom Selection Box)¨custom-selection-box-port|自定义选择框 (Custom Selection Box) - 已失效 +custom-selection-box-port|自定义选择框 (Custom Selection Box)¨customselectionbox|自定义选择框 (Custom Selection Box) librikka-api not-enough-wands@|更多魔杖* deep-mob-learning-blood-magic-addon|深度怪物知识-血魔法插件 (Deep Mob Learning - Blood Magic Addon) @@ -1696,7 +1696,7 @@ informed-load-fabric|更多加载信息 (Informed Load) huajiage-infinite-galaxy|滑稽纪元II:无尽星河 (Huaji Age II:Infinite Galaxy) cqrepoured|寻找巧克力重铸版 (Chocolate Quest Repoured) -fabricproxy@|Fabric群组支持 (FabricProxy) +fabricproxy@|Fabric 群组支持 (FabricProxy) ex-sartagine|锅具* xaeros-minimap@|Xaero的小地图 (Xaero's Minimap) - 完整版¨xaeros-minimap-fair-play-edition@xaeros-minimap-fair|Xaero的小地图 (Xaero's Minimap) - 公平竞争版 everlastingabilities-potioncore|永恒能力-药水核心 (EverlastingAbilities-PotionCore) @@ -1777,7 +1777,7 @@ ender-compass|末影指南针* ic2-tweaker thaumic-gadgets|神秘宝具* multi-mine|多人开采* -extra-foam-for-liteloader|Liteloader修复 (Extra Foam For LiteLoader) +extra-foam-for-liteloader@|Liteloader 修复 (Extra Foam For LiteLoader) embersified|余烬能量转换* thaumic-grid|神秘网络* @@ -1813,7 +1813,7 @@ crafttweaker-utils fps-reducer@|FPS减速器 (FPS Reducer) -freelook|自由视角 (FreeLook) +freelook@freelook-og|自由视角 (FreeLook) spacecraftx@spacecraftx-reloaded|航天高科X (SpaceCraftX)¨spacecraftx-reloaded|航天高科X (SpaceCraftX) bamboo-everything@|竹子制品*¨bamboo-everything-fabric|竹子制品 (Bamboo Everything) @@ -1864,11 +1864,11 @@ multi-mob-core structurize|结构化* -improvable-skills|技能进阶 (Improvable Skills 3) +improvable-skills@|技能进阶 (Improvable Skills 3) bounding-box-outline-reloaded@bbor|自然生成建筑结构显示* sauceconstruct -colorful-hearts@|更美观的血条 (Health Overlay/Colorful Hearts)¨health-overlay-fabric|更美观的血条 (Health Overlay/Colorful Hearts)¨health-overlay|更美观的血条 (Health Overlay/Colorful Hearts) +colorful-hearts@|更美观的血条 (Health Overlay / Colorful Hearts)¨health-overlay-fabric|更美观的血条 (Health Overlay / Colorful Hearts)¨health-overlay|更美观的血条 (Health Overlay / Colorful Hearts) auto-feeder-helmet|自动进食头盔* cc-tweaked-fabric simple-farming|简单农业* @@ -1911,7 +1911,7 @@ ftb-money|FTB交易 (FTB Money) restricted-portals|传送门限制* vampirelib@ ingameconfigmanager|游戏内配置器 (InGameConfigManager) -playerrevive|玩家救援 (PlayerRevive) +playerrevive@|玩家救援 (PlayerRevive) farlands|边境之地 (FarLands) inworldcrafting|世界合成 (InWorldCrafting) food-editor|食物编辑器* @@ -1923,7 +1923,7 @@ unforgiving-void|不那么仁慈的虚空* moretweaker riteclicker-mod|小石子 (RiteClicker Mod) -forgiving-void|仁慈的虚空*¨forgiving-void-fabric|仁慈的虚空 (Forgiving Void) +forgiving-void@|仁慈的虚空*¨forgiving-void-fabric|仁慈的虚空 (Forgiving Void) bread-craft|面包工艺* alchemistry|炼金化学*¨alchemistry-fabric|炼金化学 (Alchemistry) damage-control|伤害控制* @@ -1945,7 +1945,7 @@ instantlava|无限岩浆 (InstantLava) enchantment-descriptions@|附魔描述* streak|残影* dttc|动态的树:神秘时代附属 (Dynamic Trees - Thaumcraft Compat) -dtbop|动态的树:超多生物群系附属 (Dynamic Trees - Biomes O' Plenty Compat) +dtbop@dynamic-trees-biomes-o-plenty|动态的树:超多生物群系附属 (Dynamic Trees - Biomes O' Plenty Compat) dynamic-trees-compatibility-for-climatic-biomes|动态的树:气候生态群系附属 (Dynamic Trees Compatibility for Climatic Biomes) capability-adapter|ME功能适配器 (ME Capability Adapter) tf2-stuff-mod|军团要塞2 (TF2 stuff mod) @@ -1978,11 +1978,11 @@ kottle customdrones|自定义无人机 (Custom Drones) call-to-battle-2-authentic-world-war-2-experience|战争召唤2 (Call To Battle 2)¨call-to-battle-the-wwii-mod|战争召唤2 (Call To Battle 2) - 远古 some-like-it-dry -yungs-better-caves|YUNG的洞穴优化 (YUNG's Better Caves)¨yungs-better-caves-fabric|YUNG的洞穴优化 (YUNG's Better Caves) +yungs-better-caves|YUNG 的洞穴优化 (YUNG's Better Caves)¨yungs-better-caves-fabric|YUNG 的洞穴优化 (YUNG's Better Caves) resynth|神农科技* flatworld|开山棒 (Flat World) pymtech|皮姆科技 (PymTech) -corail-tombstone|Corail的墓碑 (Corail's Tombstone) +corail-tombstone|Corail 的墓碑 (Corail's Tombstone) arcane-archives|奥术档案馆* @@ -2005,7 +2005,7 @@ world-primer bookworm openeye|错误报告器 (OpenEye) -let-sleeping-dogs-lie|嘘,别吵醒狗狗*¨let-sleeping-dogs-lie-for-fabric|嘘,别吵醒狗狗 (Let Sleeping Dogs Lie) +let-sleeping-dogs-lie@|嘘,别吵醒狗狗*¨let-sleeping-dogs-lie-for-fabric|嘘,别吵醒狗狗 (Let Sleeping Dogs Lie) super-ores|超级矿石* gravelminer@|沙砾终结者 (GravelMiner)¨gravelminer-fabric|沙砾终结者 (GravelMiner) @@ -2040,7 +2040,7 @@ zollern-galaxy|卓伦星系* macaws-bridges|Macaw的桥梁 (Macaw's Bridges) trample-stopper|防止踩踏*¨trample-stopper-fabric|防止踩踏 (Trample Stopper) -macaws-roofs|Macaw的屋顶 (Macaw's Roofs) +macaws-roofs@|Macaw的屋顶 (Macaw's Roofs) shadows-of-greg|格雷之影 (Shadows of Greg) loottabletweaker@ rockycore @@ -2067,7 +2067,7 @@ traitors-better-swampland-mod|更好的沼泽 (Traitor's Better Swamplands Mod) soviet-abandoned-lab-mod@soviet-era|苏维埃风格装饰 (Soviet Era Mod(earlier Soviet Lab)) charm@¨charm-reforged -village-names@|村庄名字*¨villager-names-fabric|村庄名字 (Village Names) +village-names@|村庄名字* advanced-rocketry-tweaker alternating-flux|交变磁通* projectextended|等价交换扩展 (ProjectExtended) @@ -2154,7 +2154,7 @@ usefultnt|更有用的TNT (UsefulTNT) crow-flight|乌鸦坐飞机* findme@|东寻西觅 (FindMe) -minecraft-transit-railway@|我的世界铁路* +minecraft-transit-railway|我的世界铁路* - 较为落后¨@minecraft-transit-railway|我的世界铁路 (Minecraft Transit Railway) random-loot-mod|随机战利品* tinkers-aether|天境工匠* @@ -2174,7 +2174,7 @@ wsbim-legacy-blocks-and-items storage-items-mod what-should-be-in-mc-wsbim bluestone -effortless-building +effortless-building@ ic2-classic-tweaker Ic2c-Crop-Overrides|IC2经典版作物覆盖 (IC2C Crop Overrides) ic2c-extras|工业时代2经典版拓展 (IC2C Extras) @@ -2223,11 +2223,11 @@ hurt-animation-remover more-cauldrons|更多炼药锅* parabox sky-grid -forbidden-arcanus|禁忌与奥秘 (Forbidden and Arcanus) +forbidden-arcanus@|禁忌与奥秘 (Forbidden and Arcanus) mysticalmechanics|奇械学 (Mystical Mechanics API) backpacked|背包*¨backpacked-fabric|背包 (Backpacked) starship|星舰 (StarShip) -tweakeroo +tweakeroo@ integrated-rest@ citadel@ screenshot-browser|内置截图管理器* @@ -2258,7 +2258,7 @@ tfc-metric|公制重量转换 (TFC Metric) tfc-additions|群峦附加 (TFC-Additions) raolcraft-w -litematica-forge|投影 (Litematica)¨litematica|投影* +litematica@|投影*¨litematica-forge|投影 (Litematica) telepastries|传送蛋糕 (TelePastries) heroesexpansion|超级英雄拓展 (HeroesExpansion) attributefix@|属性修复 (AttributeFix) @@ -2308,7 +2308,7 @@ rediscovered|特性重现* baubles-reborn|饰品栏重置版* pams-brewcraft|潘马斯酿造工艺 (Pam's Brewcraft) dirtcraft|泥土工艺 (DirtCraft) -minihud|迷你HUD (MiniHUD) +minihud@|迷你HUD (MiniHUD) potato-craft|土豆工艺* bed-patch @@ -2388,13 +2388,13 @@ tube-transport-system|管道传输系统* transmutation-alchemy¨transmutation-alchemy-revival extra-spells-electroblobs-wizardry|额外咒语 (Extra Spells) ancient-spellcraft|古代咒法* -moving-elevators@ +@moving-elevators interstellar-exoplanets@|星际:系外行星 (Interstellar: Exoplanets) infini-tic extra-disks@|更多磁盘* optiforge magic-seeds-for-electroblobs-wizardry|巫术学魔法种子 (Magic seeds for Electroblobs Wizardry) -extra-alchemy|扩展炼药* +extra-alchemy@extraalchemy|扩展炼药* beyond-the-veil|帷幕彼端* maple-syrup|枫糖* blood-particles|血液粒子效果* @@ -2491,8 +2491,8 @@ beesourceful middle-earth-industry|中洲工业 (Middle-Earth Industry) thut-wearables after-the-drizzle|细雨田园 (After the Drizzle) -cmdcam|CMD指令摄影机 (CMDCam) -climate-control-geographicraft|气候控制/地理世界 (Climate Control/Geographicraft) +cmdcam|CMD 指令摄影机 (CMDCam) +climate-control-geographicraft@geographicraft|气候控制 / 地理世界 (Climate Control / Geographicraft) cosmetic-armor-reworked|时装盔甲重置版* @@ -2610,7 +2610,7 @@ karat-garden|克拉的花园* bard-mania shulkerboxtooltip@|潜影盒工具提示 (Shulker Box Tooltip) -crafting-dead-official|行尸走肉 (Crafting Dead) +crafting-dead-official|行尸走肉 (Crafting Dead)¨crafting-dead-legacy|行尸走肉 (Crafting Dead) lord-craft @@ -2633,7 +2633,7 @@ quirky-generators megaloot|超级战利品 (MegaLoot) mad-villagers|疯狂的村民* -logical-drops|逻辑工艺 (Logical Craft) +logical-drops|逻辑工艺 (Logical Craft / Logical Drops) drone-craft water-source|水源* @@ -2714,7 +2714,7 @@ recipe-stages|配方阶段* attack-on-minecraft@wingsoffreedom|自由之翼 (Wings of Freedom) cavern-miner|洞穴:矿工 (Cavern: Miner) vanilla-tools|原版工具+ (Vanilla Plus Tools) -server-tab-info +server-tab-info@ letsencryptcraft creeperhost-minetogether @@ -2736,7 +2736,7 @@ hunterillager@hunters-return|邪猎者 (HunterIllager) pocket-apocalypse-mod|便携式天灾 (Pocket Apocalypse mod) compass|指南针 (compass) -tinkers-evolution|匠魂进化 (Tinkers' Evolution) +tinkers-evolution@|匠魂进化 (Tinkers' Evolution) tinkers-exporter|匠魂数据导出器* farlanders@the-farlanders|更多末影人 (The Farlanders) vials|瓶瓶罐罐* @@ -2749,11 +2749,11 @@ immersive-energy|沉浸能源* crimson-moon|绯红之月* mobs-attempt-parkour@ identity|化身*¨identity-on-forge|化身 (Identity) -industrial-revolution|工业革命* +industrial-revolution@|工业革命* art-of-alchemy|炼金艺术 (Art of Alchemy) lan-server-properties|自定义局域网联机* -immersive-intelligence|沉浸智能* +immersive-intelligence@|沉浸智能* analyzeio wool-buttons@|羊毛按钮* total-tinkers|统合匠艺* @@ -2785,7 +2785,7 @@ stepup|平滑自动上坡 (StepUp) sodium@|钠* netherlicious -yungs-better-mineshafts-forge@yungs-better-mineshafts|YUNG的矿井优化 (YUNG's Better Mineshafts)¨yungs-better-mineshafts-fabric|YUNG的矿井优化 (YUNG's Better Mineshafts) +yungs-better-mineshafts-forge@yungs-better-mineshafts|YUNG 的矿井优化 (YUNG's Better Mineshafts)¨yungs-better-mineshafts-fabric|YUNG 的矿井优化 (YUNG's Better Mineshafts) terrible-chest|可怕的箱子/可怖箱子* spartan-shields@|斯巴达之盾* silent-gear@|寂静装备* @@ -2815,7 +2815,7 @@ never-needed-or-wanted ama-damage-indicator magic-circle|阵法* -crash-utilities +crash-utilities@ eldritch-mobs@ farmers-delight@|农夫乐事 (Farmer's Delight)¨farmers-delight-fabric@|农夫乐事 (Farmer's Delight) artifacts@|奇异饰品*¨artifacts-fabric|奇异饰品 (Artifacts) @@ -2849,10 +2849,10 @@ camera-mod@|照相机* heartdrops|生命汲取 (Heart Drops) observerlib zen-summoning -campanion|野营物品* - Farbic¨campanion-forge@campanion|野营物品 (Campanion) +campanion-forge@campanion|野营物品 (Campanion)¨campanion|野营物品* - Farbic wolves-with-armor|狼铠*¨wolves-with-armor-forge|狼铠 (Wolves With Armor) get-exp-for-everything|万物皆可获得经验 (Get exp for everything) -jei-enchantment-info|JEI附魔信息 (JEI Enchantment Info) +jei-enchantment-info|JEI 附魔信息 (JEI Enchantment Info) project-red-fabrication|红石计划:制作 (Project Red - Fabrication) project-red-integration|红石计划:集成 (Project Red - Integration) @@ -2868,7 +2868,7 @@ better-loading-screen|自定义加载画面 (Custom Loading Screen) extended-lights-mod|灯具拓展 (Extended Lights) more-swords-legacy@|更多剑:传承* the-undergarden@|深暗之园* -allure|诱惑* +mc-modsure|诱惑 (Allure) glibys-voice-chat-reloaded|Gliby的语音聊天重置版 (Gliby's Voice Chat Reloaded) greater-eye-of-ender-fabric|高级末影之眼 (Greater Eye of Ender)¨greater-eye-of-ender-forge|高级末影之眼 (Greater Eye of Ender) @@ -2906,7 +2906,7 @@ wtfs-expedition-cavebiomes-ores-trees-and-tweaks guide-api-village-and-pillage@guide-api drcyanos-lootable-bodies|可拾取尸体 (DrCyano's Lootable Bodies) simply-cats@ -pams-harvestcraft-2-crops|潘马斯农场2 - 作物 (Pam's HarvestCraft 2 - Crops) +pams-harvestcraft-2-crops@|潘马斯农场2 - 作物 (Pam's HarvestCraft 2 - Crops) base-metals|基础金属* mmdlib @@ -2927,12 +2927,12 @@ scavenge heaven-earth-ring|乾坤戒指* -pams-harvestcraft-2-food-extended|潘马斯农场2 - 食物拓展 (Pam's HarvestCraft 2 - Food Extended) +pams-harvestcraft-2-food-extended@|潘马斯农场2 - 食物拓展 (Pam's HarvestCraft 2 - Food Extended) -pams-harvestcraft-2-trees|潘马斯农场2 - 果树 (Pam's HarvestCraft 2 - Trees) +pams-harvestcraft-2-trees@|潘马斯农场2 - 果树 (Pam's HarvestCraft 2 - Trees) minecart-direction-follow¨better-minecart-rotation-forge modern-metals|现代金属* -block-renderer¨blockrenderer +blockrenderer¨block-renderer blockus@ conjurers-cookbook color-unchained @@ -2947,12 +2947,12 @@ furbishcraft ambientsounds@|自然音效 (AmbientSounds) ordinary-firearms|普通枪械2 (Ordinary Firearms 2) territory|领地 (MineTerritory) -better-ping-display@better-ping-display-fabric|更好的延迟显示*¨better-ping-display-fabric@better-ping-display|更好的延迟显示 (Better Ping Display) +better-ping-display@|更好的延迟显示*¨better-ping-display-fabric@|更好的延迟显示 (Better Ping Display) turned-the-changed-mod survival-tweaks|生存微调* -melon-slabs|西瓜台阶* -lambdynamiclights@|Lambda的动态光源 (LambDynamicLights) -realistic-torches|真实火把* +melon-slabs@|西瓜台阶* +lambdynamiclights@|Lambd 的动态光源 (LambDynamicLights) +realistic-torches@|真实火把* durability-viewer|耐久显示器* @@ -2971,15 +2971,15 @@ travellers-boots cofh-vanilla-satchels betteranimalsplus|更多动物 (Better Animals Plus) -packagedauto|封包合成 (PackagedAuto) -packagedexcrafting|封包合成拓展 (PackagedExCrafting) +packagedauto@|封包合成 (PackagedAuto) +packagedexcrafting@|封包合成拓展 (PackagedExCrafting) -compactstorage@compact_storage|紧凑存储 (compactstorage) -useful-backpacks|实用背包* +compactstorage|紧凑存储 (compactstorage)¨@compact_storage|紧凑存储 (compactstorage) - 已失效 +useful-backpacks@|实用背包* conquest-reforged@|征服者* steelseries-gamesense pizzaatimes-timber-mod -tellme +tellme@ minerva-library @@ -2998,7 +2998,7 @@ oc-sensors fabric-for-fabric storage-tech thaumic-periphery|神秘外饰* -embellishcraft|装饰工艺 (EmbellishCraft) +embellishcraft@|装饰工艺 (EmbellishCraft) open-loader@|开放式加载* deep-mob-learning-refabricated@|深度怪物学习:重制版 (Deep Mob Learning: Refabricated) ftb-ultimine-forge|连锁破坏 (FTB Ultimine)¨ftb-ultimine-fabric|连锁破坏 (FTB Ultimine) @@ -3024,9 +3024,9 @@ crock-pot|烹饪锅* together-forever -iron-furnaces|更多熔炉*¨iron-furnaces-fabric|更多熔炉 (Iron Furnaces) +iron-furnaces@|更多熔炉*¨iron-furnaces-fabric|更多熔炉 (Iron Furnaces) -lenient-creepers|仁慈的苦力怕* +lenient-creepers@|仁慈的苦力怕* treasure2|寻宝记2 (Treasure2!) @autoreconnector-fabric|自动断线重连 (AutoReconnector-Fabric) @@ -3041,12 +3041,12 @@ tumat riddle-chests|谜题箱* totem-plus|图腾增强* -blockmeterfabric@blockmeter|方块计量表 (BlockMeterFabric) +blockmeterfabric@blockmeter|方块计量表 (Block Meter Fabric) fluid-drawers|储液抽屉* creepypastacraft-reborn|蠕动意面重置版 (CreepyPastaCraft Reborn) itemzoom|物品缩放 (ItemZoom) -light-overlay|亮度覆盖* +light-overlay@|亮度覆盖* smallerfpsincrements regex-filters|正则表达式过滤器* @@ -3192,13 +3192,13 @@ extracpus|更多CPU (Extra CPUs) extra-crafting-storage underground-city-engineering@|地下城市工程* -essentials +essentials@essentialsmod soul-shards-respawn soul-shards-the-old-ways the-flying-things ftb-ranks¨ftb-ranks-fabric -ftb-chunks-forge¨ftb-chunks-fabric +ftb-chunks-forge|FTB 区块 (FTB Chunks)¨ftb-chunks-fabric|FTB 区块 (FTB Chunks) ftb-essentials silveroak-outpost|银橡前哨* pehkui@ @@ -3223,7 +3223,7 @@ boatload@|额外船只 (Extra Boats / Boatload)¨extra-boats@|额外船只 (Extr outvoted@|落选生物* attribute|属性修复 - Fabric版 (Attribute Fix {FABRIC}) -packmodemenu|PackMode菜单 (PackModeMenu) +packmodemenu|PackMode 菜单 (PackModeMenu) simple-gamemodes|游戏模式短指令* uniq|流体统一/物品统一 (UniQ) @@ -3244,13 +3244,13 @@ inventory-free|无物品栏 (Inventory-Free) randompatches-integration bubble-column-elevator-backport|1.13水域机制 (1.13 Water Mechanics) -basic-nether-ores|基础下界矿石* +basic-nether-ores@|基础下界矿石* nuclearcraft-reactor-builder|核电工艺反应堆建造机 (NuclearCraft Reactor Builder) pams-harvestcraft-2-food-core@|潘马斯农场2 - 食物核心 (Pam's HarvestCraft 2 - Food Core) eki-lib @immibis-core nodami|伤害免疫机制移除 (No Damage Immunity) -astrological-sorcery|星占魔法* +astrological-sorcery@|星占魔法* efab-ct-bindings golden-hopper|金漏斗* wizardry-golems|巫术傀儡* @@ -3306,23 +3306,23 @@ shoulder-surfing-reloaded@|越肩视角重制* aqua-acrobatics|水游技艺* silents-mechanisms|寂静机械 (Silent Mechanisms) project-potman|背锅人计划 (ProjectPotman) -nbt-crafting@|数据包NBT合并* +nbt-crafting@|数据包 NBT 合并* diregoo ogdragon|OG龙+ (OGDragon+) sevtweaks journeymapstages|旅行地图阶段控制 (JourneyMapStages) -textile-backup@textile_backup|Textile备份* +textile-backup@textile_backup|Textile 备份* goopers mob-drops|自定义生物战利品 (Mob Drops Your Way) alexs-mobs@|Alex 的生物 (Alex's Mobs) -all-stackable@|可堆叠物品自定义* +mc-mods-stackable@all-stackable|可堆叠物品自定义 (All Stackable) thermal-mj|热力MJ支持 (Thermal MJ) ctd-core@ time-speed-mod|Minecraft地球自转/真实昼夜循环 (Вращение Земли Майнкрафтская (Accurate day/night-cycles Mod)) mineral-tracker -carpet-extra@|Carpet拓展 (carpet-extra) +carpet-extra@|Carpet 拓展* viafabric@ double-slabs|双重台阶* @@ -3375,7 +3375,7 @@ assembly-line-machines|装配线* netherending-ores Flex-FOV|扭曲视野* hooked|抓钩* -createtweaker +createtweaker@ iTorch gullivern @@ -3389,7 +3389,7 @@ time-travel-mod|时间旅行* backslotaddon@|背用武器拓展 (BackSlotAddon) optifabric-1-8-9 -gt6-ore-helper|GT6矿石助手 (GT6 Ore Helper) +gt6-ore-helper|GT6 矿石助手 (GT6 Ore Helper) applied-integrations|应用集成* inventory-hud-forge|物品栏HUD+ (Inventory HUD+) @@ -3470,7 +3470,7 @@ eidolon|幻梦* rats-ratlantis|老鼠:鼠西洲 (Rats: Ratlantis) wthit@¨wthit-forge modern-industrialization@|现代工业化* -chunk-pregenerator-fabric|区块预生成器(Fabric) (Fabric Chunk Pregenerator) +chunk-pregenerator-fabric@fabricquilt-chunk-pregenerator|区块预生成器(Fabric) (Fabric Chunk Pregenerator) jumploader unloader better-animal-models|更真实的动物 (Better animal models) @@ -3488,14 +3488,14 @@ clear-despawn unionlib@ -botany-trees@ +botany-trees@|植树盆栽* better-third-person@ survive|生存要素* wallpapercraft-a-fresh-roll-stairs|墙纸创造:楼梯 (Wallpapercraft - A Fresh Roll (Stairs!)) wallpapercraft-a-fresh-roll-slabs|墙纸创造:台阶 (Wallpapercraft - A Fresh Roll (Slabs!)) wallpapercraft-a-fresh-roll-walls|墙纸创造:围墙 (Wallpapercraft - A Fresh Roll (Walls!)) compact-crafting -assembly-lines|装配线* +assembly-lines@|装配线* botany-pots@|植物盆栽* callable-horses|召之马来* @@ -3510,7 +3510,7 @@ hats|帽子* smoother-bedrock|平滑基岩层* c2me-fabric@|C^2M 引擎 (C^2M-Engine/Concurrent Chunk Management Engine) datapack-anvil -nuclear-science|核科学* +nuclear-science@|核科学* glaretorch|强光火把 (Glare Torch) mrcrayfishs-jumping-castle-mod|MrCrayfish的充气城堡 (MrCrayfish's Jumping Castle) exposer @@ -3538,7 +3538,7 @@ zycraft quitconfirm|退出前确认 (QuitConfirm) ruined-equipment@ clickthrough@|穿牌开箱 (ClickThrough) -dynamic-sound-filters|动态声音滤波器* +dynamic-sound-filters@|动态声音滤波器* binniepatcher subterranean-wilderness @@ -3557,9 +3557,9 @@ more-fuels-mod pointless-tech-collective revampedwolf@ -bedrock-b-gone +bedrock-b-gone@ -elemental-creepers|元素爬行者* +elemental-creepers@|元素爬行者*¨elemental-creepers-og|元素爬行者 (Elemental Creepers) gymcraft infernal-expansion@|地狱扩展* @@ -3580,8 +3580,8 @@ xnicex@ krate chickensshed|鸡棚重置版 (ChickensShed) chickenshed -expanded-storage-fabric@expanded-storage|扩展存储 (Expanded Storage)¨expanded-storage-forge|扩展存储 (Expanded Storage)¨expanded-storage|扩展存储* -project-mmo +expanded-storage@|扩展存储*¨expanded-storage-fabric|扩展存储 (Expanded Storage)¨expanded-storage-forge|扩展存储 (Expanded Storage) +project-mmo@ abnormals-delight@ jojos-bizarre-survival @@ -3608,9 +3608,9 @@ when-dungeons-arise@|地牢浮现之时*¨when-dungeons-arise-fabric|地牢浮 animal-feeding-trough@animal_feeding_trough|动物喂养槽* wiki-zoomer@ personality@personality! -allurement@allurement! +mc-modsurement@allurement! dwarf-miner-totem|矮人矿工* -yungs-better-portals|YUNG的传送门机制重构 (YUNG's Better Portals) +yungs-better-portals|YUNG 的传送门机制重构 (YUNG's Better Portals) german-road-signs-mod|德国交通标志* iguana-in-a-blanket|真实调整 (Iguana in a Blanket) anthill-inside|蚂蚁物流* @@ -3641,7 +3641,7 @@ abundance@ just-enough-calculation -mythicbotany|神话植物学 (MythicBotany) +mythicbotany@|神话植物学 (MythicBotany) improved-mobs|怪物增强*¨improved-mobs-fabric|怪物增强 (Improved Mobs) limitless|无上限附魔* vpn-blocker|禁用VPN (VPN Blocker) @@ -3652,7 +3652,7 @@ configured|配置界面*¨configured-fabric|配置界面 (Configured) jellyfishing@|抓水母* accurate-block-placement -pro-placer|放置专家* +pro-placer@|放置专家* farmers-delight-compats farmers-tea|农夫的茶 (Farmer's Tea) farmers-delight-integration @@ -3661,7 +3661,7 @@ anvil-fix|铁砧修复* no-increasing-repair-cost wool-temples|羊毛神殿* exp-bottling|经验装瓶 (EXP Bottling) -buildersaddition +buildersaddition@ gt-remastered|格雷科技重制版 (GT: Remastered) tips|提示* Interactio @@ -3684,7 +3684,7 @@ inductive-logistics|集成物流* automatic-path morevanillalib@ -vanilla-excavators@excavar¨vanilla-excavators-forge +vanilla-excavators@¨vanilla-excavators-forge dynagear morevanillatools@|更多原版工具 (MoreVanillaTools) colorful-health-bar @@ -3692,7 +3692,7 @@ tipline ultimate-plane-mod@|终极飞机* simple-voice-chat@|简单的语音聊天* not-enough-milk -ewewukeks-musket-mod|ewewukek的火枪模组 (ewewukek's Musket mod) +ewewukeks-musket-mod|ewewukek 的火枪模组 (ewewukek's Musket mod) irisshaders@iris @dimthread|世界多线程化 (DimensionalThreading) @@ -3718,8 +3718,8 @@ random-title|随机标题* astikorcarts @invsync|背包同步 (InvSync) jea@|JEI进度 (Just Enough Advancements) -et-futurum-requiem¨@etfuturum -better-op|更好的OP* +et-futurum-requiem|把未来带回现实* - <2.7.0¨@etfuturum|把未来带回现实 (Et Futurum Requiem) - ≥2.4.0 +better-op|更好的 OP* fastworkbench-minus-replacement crimson-compass|绯红指南针* tinkers-construct@|匠魂 (Tinkers' Construct) @@ -3779,12 +3779,12 @@ astromine-foundations|天体矿工:基础 (Astromine: Foundations) create-stuff-additions@|机械动力:物品附加 (Create Stuff & Additions) slab-machines|台阶型设备* more-create-stuffs|更多机械动力物品* -rsinfinitybooster|RS无限范围增幅卡 (RSInfinityBooster) +rsinfinitybooster|RS 无限范围增幅卡 (RSInfinityBooster) cuneiform terraincognita cloth-api ingameime|游戏内输入法 (IngameIME) -yungs-better-strongholds@|YUNG的要塞优化 (YUNG's Better Strongholds)¨yungs-better-strongholds-fabric|YUNG的要塞优化 (YUNG's Better Strongholds) +yungs-better-strongholds@|YUNG 的要塞优化 (YUNG's Better Strongholds)¨yungs-better-strongholds-fabric|YUNG 的要塞优化 (YUNG's Better Strongholds)¨yungs-better-strongholds-neoforge|YUNG 的要塞优化 (YUNG's Better Strongholds) mojangdark|暗色加载 (MojangDark) astromine-technologies|天体矿工:科技 (Astromine: Technologies) astromine-transportations|天体矿工:运输 (Astromine: Transportaions) @@ -3799,7 +3799,7 @@ ex-nihilo-sequentia-mekanism-addon|无中生有:传承 - 通用机械扩展 (E panorama@swd-panorama|全景图* bgcore induction-charger -tiered-forge¨tiered +tiered-forge@tiered¨tiered c-o-m-b-a-t burden-of-time gamemenumodoption@|游戏菜单模组设定 (Game Menu Mod Option) @@ -3821,7 +3821,7 @@ cat-jammies rhino@|犀牛* fastsuite|配方性能优化 (FastSuite) twerkitmeal|跳舞生长一切 (Twerk To Grow All The Things) -thermal-expansion@thermal-foundation|热力膨胀*¨thermal-integration@thermal-locomotion|热力集成* +thermal-integration@thermal-locomotion|热力集成* piggybanks|存钱罐* in-control@ mystical-agriculture-refabricated|神秘农业:Fabric版 (Mystical Agriculture: Refabricated) @@ -3851,7 +3851,7 @@ ctm-fabric|连接纹理Fabric版 (ConnectedTexturesMod for Fabric) whats-that-slot@ pmmo-and-nbt-compat techstacks-heavy-machinery-mod -enhanced-mushrooms|蘑菇增强*¨enhanced-mushrooms-fabric|蘑菇增强 (Enhanced Mushrooms) +enhanced-mushrooms@|蘑菇增强*¨enhanced-mushrooms-fabric|蘑菇增强 (Enhanced Mushrooms) versatile-portals|通用传送门* spawn-egg-recipes|刷怪蛋配方注册* configurable-extra-mob-drops@|可配置的额外怪物掉落*¨configurable-extra-mob-drops-fabric|可配置的额外怪物掉落 (Configurable Extra Mob Drops) @@ -3888,14 +3888,14 @@ entity-nan-health-fix|假死修复 (Entity NaN Health Fix) ferritecore@ferrite-core|铁氧体磁芯 (FerriteCore)¨ferritecore-fabric|铁氧体磁芯 (FerriteCore) thaumcraft-research-patcher masterful-machinery -minecraft-earth-mod|Derec的地球生物 (Derec's Earth Mobs) +minecraft-earth-mod|Derec 的地球生物 (Derec's Earth Mobs) scotts-essential drawerfps|储物抽屉渲染配置 (DrawerFPS) cursed-earth¨cursed-earth-fabric sll|逆向交易 (sɹǝƃɐllᴉΛ) lagmeter|延迟表 (LagMeter) -hexxit-gear-2|Hexxit装备2* +hexxit-gear-2|Hexxit 装备 2 (Hexxit Gear R) scootys-plants-vs-zombies|Scooty的植物大战僵尸重生 (Scootys Plants Vs. Zombies Regrown) @@ -3905,7 +3905,7 @@ bonsai-tree-crops rpgz@ - +@stationapi scavenge-timing-addon cull-particles|粒子渲染机制优化*¨cull-particles-fabric|粒子渲染机制优化 (Cull Particles) majos-broom|魔女的扫帚 (Majo's broom) @@ -3930,7 +3930,7 @@ incubation@ create-goggles@ -coloured-tooltips@colored-tooltips-fabric +coloured-tooltips@|彩色提示框* magicraft-magic|魔法材料 (Magical Materials) glowstone-ores|荧石矿石* more-wires @@ -3941,7 +3941,7 @@ wild-netherwart|野生地狱疣* the-periodic-table-mod|元素周期表 (The Periodic Table) adamantium-in-minecraft forgerocks -ballistix|弹道学* +ballistix@|弹道学* wireless-industry spice-of-life-tonio-edition|生活调味料:托尼欧版 (Spice of Life: Tonio Editon) husk-spawn@|尸壳生成微调*¨husk-spawn-fabric|尸壳生成微调 (Husk Spawn) @@ -3973,7 +3973,7 @@ time-in-a-bottle-standalone|时间之瓶 (Time in a bottle standalone) compressed-grass|压缩草* applepie|苹果派 (ApplePie) doles-mod -ex-nihilo-sequentia-thermal-addon|无中生有:传承 - 热力扩展 (Ex Nihilo: Sequentia - Thermal Addon) +ex-nihilo-sequentia-thermal-addon@|无中生有:传承 - 热力扩展 (Ex Nihilo: Sequentia - Thermal Addon) ex-naturae@|无中生有:传承 - 植物魔法扩展* ex-nihilo-sequentia-tinkers-addon|无中生有:传承 - 匠魂扩展 (Ex Nihilo: Sequentia - Tinkers Addon) iron-jetpacks@¨iron-jetpacks-fabric @@ -4046,7 +4046,7 @@ skds-core endertech|末影科技 (Ender Tech) enderpig-mod|末影猪* - +no-no-ai-spawn|镇压前端召唤 (No No-AI Spawn) atomic-bomb-1-16|枪,炮,原子弹! (Guns, Rockets and Atomic Explosions) se-sign-shop|简单经济:牌子商店 (SE: Sign Shop) @@ -4066,7 +4066,7 @@ incendium@ cooperative-advancements|合作进度*¨cooperative-advancements-fabric|合作进度 (Cooperative Advancements) lightstones openbackup -fat-experience-orbs|肥胖经验球 ([Fabric] Fat Experience Orbs) - 已失效¨@fat-experience-orbs|肥胖经验球 ([Fabric] Fat Experience Orbs) +fat-experience-orbs@|肥胖经验球 ([Fabric] Fat Experience Orbs) better-pipes|更好的管道* truetype-font-replacement fluidlogged-api@ @@ -4112,8 +4112,8 @@ village-employment@|村庄就业* deathlog@|死亡日志* automatic-elytra|自动鞘翅* -axolotl-bucket-fix|美西螈桶修复* -xks-decoration|XK的装饰 (XK's Deco) +axolotl-bucket-fix@|美西螈桶修复* +xks-decoration@|XK的装饰 (XK's Decoration) endgame-materials-addons|更多终局材料* ravage-and-cabbage@ stackup @@ -4127,9 +4127,9 @@ moarrecipes|更多的配方 (MoarRecipes) luminium better-nether-map-port@better-nether-map -iguanatweaks-reborn|生存重构/蜥蜴微调重生 (Survival Reimagined/IguanaTweaks Reborn) +iguanatweaks-reborn|生存重构/蜥蜴微调重生 (Survival Reimagined / IguanaTweaks Reborn) enter-the-void|进入虚空* -tensura-mod-that-time-i-got-reincarnated-as-a-slime|关于我转生变成史莱姆这档事 (Tensura Mod -That time I got reincarnated as a Slime) +tensura-mod-that-time-i-got-reincarnated-as-a-slime@tensura-mod|关于我转生变成史莱姆这档事 (Tensura Mod -That time I got reincarnated as a Slime) speedometer@speedometer-cafeteria|速度表* falling-leaves-forge@fallingleavesforge|落叶 (Falling Leaves (NeoForge/Forge)) @@ -4154,7 +4154,7 @@ beehivetooltips|蜂巢工具提示 (BeehiveTooltips) buddycards@|巴迪卡牌* extended-caves@expanded-caves¨expanded-caves -inventorio¨inventorio-forge +inventorio@¨inventorio-forge more-curios-totems-of-undying selene@moonlight compatibilitylayerforcustomskinloader|万用皮肤补丁兼容层 (CompatibilityLayerForCustomSkinLoader) @@ -4193,7 +4193,7 @@ insanelib@ daydreamer phantomfaces|幻灵接口* improved-villagers|改进的村民 (Improved Villager Mod) -equipment-compare|装备比较*¨equipment-compare-fabric|装备比较 (Equipment Compare) +equipment-compare@|装备比较*¨equipment-compare-fabric|装备比较 (Equipment Compare) PickupWidely @@ -4235,7 +4235,7 @@ its-the-little-things fruitful@|硕果累累*¨fruitful-fabric|硕果累累 (Fruitful) environmental-energy@|环境科技-发电机* nakranoths-herdcraft|群兽行为 (Nakranoth's Herdcraft) -lambdabettergrass@|Lambda的更好的草方块 (LambdaBetterGrass) +lambdabettergrass@|Lambd 的更好的草方块 (LambdaBetterGrass) @client-commands bright-ore|矿石高亮* chinese-style-sword|中式剑 (Arsenal Core) @@ -4273,7 +4273,7 @@ custom-entity-models-kaimyentity-reborn|自定义玩家和实体模型 / KAI我 miniutilities|迷你实用设备 (Mini Utilities) stumble-upon-campsites|邂逅:营地 (Stumble Upon: Campsites) nomad-books|游牧之书* -yungs-extras@¨yungs-extras-fabric +yungs-extras@¨yungs-extras-fabric¨yungs-extras-neoforge stoneholm-forge@stoneholm|地下村庄 (Stoneholm, Underground Villages)¨stoneholm|地下村庄 (Stoneholm, Underground Villages) inspecio@ @@ -4369,7 +4369,7 @@ simple-ambients modern-loading-screen|现代加载界面* - +dong-dongs-random-creation@|冬冬的随意创作 (Dong Dong's random creation) transliterationlib @@ -4426,7 +4426,7 @@ terracore seeker-compass ghosts-explosives power-drop@|蓄力投掷* -yungs-better-dungeons@|YUNG的地牢优化 (YUNG's Better Dungeons)¨yungs-better-dungeons-fabric|YUNG的地牢优化 (YUNG's Better Dungeons) +yungs-better-dungeons@|YUNG 的地牢优化 (YUNG's Better Dungeons)¨yungs-better-dungeons-fabric|YUNG 的地牢优化 (YUNG's Better Dungeons)¨yungs-better-dungeons-neoforge|YUNG 的地牢优化 (YUNG's Better Dungeons) ore-controller morechickens@|更多鸡 (MoreChickens) @@ -4468,10 +4468,10 @@ plumed-belt better-with-minecolonies calemis-utilities|Calemi的实用设备 (Calemi's Utilities) botanical-cowardice -travelers-titles@¨travelers-titles-fabric +travelers-titles@¨travelers-titles-fabric¨travelers-titles-neoforge expand-chinese-sword|中式剑拓展 (Arsenal Integration) -littleframes@littlepictureframes|小画 (LittleFrames) +littleframes@littlepictureframes|小画 (LittlePictureFrames) lavalogged-blocks|岩浆充填 (Lavalogged blocks) awoken-world gt4-reimagined|格雷科技4:重构想 (GregTech 4 Reimagined) @@ -4494,7 +4494,7 @@ essential-commands@ caves-and-cliffs-backport that-future-mod-glow-squid-axolotl-moobloom-etc diamond-buildcraft|钻石装饰* -apocalypse-rebooted|启示录重制* +apocalypse-rebooted|启示录重制* - 已失效¨@apocalypse-rebooted|启示录重制 (Apocalypse Rebooted) mcwifipnp@|更高级联机设置 (LAN World Plug-n-Play) requious-frakto @@ -4508,7 +4508,7 @@ sync-fabric@|克隆(Fabric) (Sync (Fabric)) tale-of-kingdoms-a-new-conquest@|王国:新征程 (Tale of Kingdoms: A new Conquest) schwarz@|黑* -megane@¨megane-forge +megane@¨megane-forge@ crusade@ vending-machine|售货机* modernxl @@ -4522,12 +4522,12 @@ electrona reasonable-sorting@|合理排序* chat-heads@|聊天头像* hidden-armor|隐藏盔甲* -majruszs-progressive-difficulty|Majrusz的进阶难度 (Majrusz's Progressive Difficulty) +majruszs-progressive-difficulty@|Majrusz的进阶难度 (Majrusz's Progressive Difficulty) pharmacist|药师* kappa@ equivalent-integrations|等价集成* keep-equipment|保留装备* -herobrines-origin|Herobrine的起源 (Herobrine's Origin) +herobrines-origin|Herobrine 的起源 (Herobrine's Origin) the-abyss|深渊:远古 (The Abyss: Legacy) sekiro-sense-symbols lurker|Cold的潜伏者 (Colds: Lurker) @@ -4576,7 +4576,7 @@ tinkers-planner|匠魂蓝图 (Tinker's Planner) playing-cards|扑克牌* rainbow-oak-trees-2|彩虹橡树2* mapfrontiers|地图边界 (MapFrontiers) -customizable-elytra|可自定义鞘翅*¨customizable-elytra-fabric|可自定义鞘翅 (Customizable Elytra) +customizable-elytra@|可自定义鞘翅*¨customizable-elytra-fabric|可自定义鞘翅 (Customizable Elytra) puzzles-lib@¨puzzles-lib-fabric unique-enchantments-base|独特的附魔:基础* ore-stages|矿石阶段* @@ -4596,7 +4596,7 @@ william-wythers-overhauled-overworld@wwoo¨expanded-ecosphere@ infinite-music cobbler|可靠的潜影贝工厂 (Shulker's Faithful Factories/Cobbler) nether-fast-transport-layer -the-outer-end +the-outer-end@ hamncheese@ buzzy-drones morevanillaarmor@|更多原版盔甲 (MoreVanillaArmor) @@ -4612,11 +4612,11 @@ slotlock@|锁定槽 (SlotLock) panorama-tweaker@ simple-tomb|简单坟墓* modern-life@|摩登生活* -paxi-fabric@paxi¨paxi +paxi-fabric@paxi¨paxi¨paxi-neoforge waveycapes@wavey-capes|飘扬披风 (Wavey Capes) skin-layers-3d@3dskinlayers|3D 皮肤层 (Skin Layers 3D) -all-the-discs|唱片大全 (All the Discs) +mc-mods-the-discs|唱片大全 (All the Discs) cryptic-cosmos bayou-blues@|长沼蓝调*¨bayou-blues-fabric|长沼蓝调 (Bayou Blues) hex-lands|六边形地貌* @@ -4624,18 +4624,18 @@ fixrtm serene-tweaks ScalingGuis|界面缩放 (ScalingGUIs) ide-better-command-block-forge-editor|更好的命令方块 (Better Command Block IDE)¨ide-better-command-block-fabric-editor|更好的命令方块 (Better Command Block IDE) -@breakfree|自由破坏 (Break Free) +breakfree@|自由破坏 (Break Free) tinkers-mechworks-fork extended-nether-backport borderless|无边框全屏 (Borderless Window) lifted-restrictions-structure-block|更好的结构方块 (Better Structure Block) -entity-model-json|实体模型JSON (Entity Model JSON) +entity-model-json|实体模型 JSON (Entity Model JSON) death-coords|死亡坐标显示* never-enough-currency|货币多多* never-enough-currency-lite|货币多多:精简版* create-chunkloading -name-pain +name-pain@ wireless-chargers@|无线充电器* bouncier-beds@|弹力床*¨bouncier-beds-fabric|弹力床 (Bouncier Beds) hexlands-ii|六边形地貌 2 (HexLands II) @@ -4652,8 +4652,8 @@ fins-and-tails|鳍和尾巴 (Fins and Tails) smarter-farmers-farmers-replant@|更聪明的农夫 (Smarter Farmers/Farmers Replant) peculiars|独特风味* draggable-resource-packs@draggable-lists|可拖动列表/可拖动资源包 (Draggable Lists/Draggable Resource Packs) -fastchest|快速箱子渲染 (FastChest) - 已不再更新¨@fastchest|快速箱子渲染 (FastChest) -yuushya-townscape-fabric@yuushya-townscape|方块小镇 (Yuushya Townscape) +fastchest|快速箱子渲染 (FastChest) - 已不再更新¨@fastchest|快速箱子渲染 (FastChest) - 在此处更新 +yuushya-townscape@|方块小镇* architects-palette-fabric@|建筑师的调色板 (Architect's Palette)¨architects-palette@architects-palette#all-versions|建筑师的调色板 (Architect's Palette) whisperwoods|低语之森* dimensional-dungeons@|维度地牢* @@ -4699,7 +4699,7 @@ relics-of-gaming|游戏遗物* modular-controller|模块化控制器* Item-Collectors@item-collectors -gamemodeoverhaul|旧版指令 (GamemodeOverhaul) +gamemodeoverhaul@|旧版指令 (GamemodeOverhaul) dash@ minecraft-dungeons-content|地下城内容 (Dungeons Content) @@ -4710,7 +4710,7 @@ compatchedstorage|紧凑存储修复 (ComPatchedStorage) iseedragons psionic-peripherals malum|灵灾* -allomancy|镕金术* +mc-modsomancy|镕金术 (Allomancy) steamcraft2 boilerplate meldexuns-crystalic-void @@ -4891,11 +4891,11 @@ underground-loot-crates|地下战利品箱* smooth-scrolling-everywhere|平滑滚动*¨smooth-scrolling-everywhere-fabric|平滑滚动 (Smooth Scrolling Everywhere) sword-blocking@|持剑格挡* -better-mount-hud@|更好的骑乘HUD* +better-mount-hud@|更好的骑乘 HUD (Better Mount HUD) fire-overlay-controller@|火焰叠加层调整* particle-rain@|粒子雨* -sodium-reforged|镁 (Magnesium/Sodium Reforged) +sodium-reforged|镁 (Magnesium / Sodium Reforged) phosphor-reforged|硫 (Sulfuric/Phosphor Reforged) hydrogen-reforged|氦 (HeIium) xl-food-mod-plus|超多食物+ (XL Food Mod+) @@ -4955,7 +4955,7 @@ enderscape@ goblin-traders-fabric@|哥布林商人Fabric版 (Goblin Traders (Fabric)) lakeside@|湖畔* chenziqius-originality|CHENZIQIU的创意 (CHENZIQIU's Originality) -alloy-forgery@ +mc-modsoy-forgery@alloy-forgery mechanical-tech@|机械科技* hadesgame|阴间游戏 (HadesGame) one-block-forge @@ -4977,7 +4977,7 @@ levelz@ betterend-re-forked|更好的末地Forge重铸版 (BetterEnd Reforked) mining-gadgets|采矿小工具*¨mining-gadgets-fabric|采矿小工具 (Mining Gadgets) ponderjs -majrusz-library +majrusz-library@ ydms-coppergolem@ydms-copper-golem|YDM的铜傀儡 (YDM's CopperGolem) chococraft-3 chococraft-plus@ @@ -5007,14 +5007,14 @@ right-click-harvest@|右击收割 (Right-Click-Harvest) custom-content-packs cake-chomps@¨cake-chomps-fabric distant-horizons@distanthorizons -betterp2p|更好的P2P支持 (Better P2P) -ob-aquamirae@aquamirae|海灵物语 (Aquamirae Mod)¨aquamirae-fabric|海灵物语 (Aquamirae Mod) +betterp2p@|更好的P2P支持 (Better P2P) +ob-aquamirae@aquamirae|海灵物语 (Aquamirae)¨aquamirae-fabric|海灵物语 (Aquamirae) nuclear-tfc just-more-cakes@|只是更多的蛋糕! (Just More Cakes!)¨just-more-cakes-fabric|只是更多的蛋糕! (Just More Cakes!) image-mod reinforced-barrels@|增强木桶* spyglass-zoom|望远镜变焦* -npc-variety-port|NPC变体 (NPC Variety) +npc-variety-port@npc-variety|NPC变体 (NPC Variety) just-enough-effects incorporeal-2-rhododendrite|幻想多媒体2 (Incorporeal 2 + Rhododendrite) @@ -5022,13 +5022,13 @@ einsteins-library worldshape rslargepatterns|精致存储大样板 (Refined Storage Large Patterns) gendustry-jei-addon -statement +statement@ mutant-more@|更多突变生物* - 旧¨new-mutant-more@|更多突变生物 (Mutant More) - 新 just-enough-keg paleolithic-revolution better-shields|更好的盾牌* -yungs-bridges@|YUNG的桥 (YUNG's Bridges)¨yungs-bridges-fabric|YUNG的桥 (YUNG's Bridges) +yungs-bridges@|YUNG 的桥 (YUNG's Bridges)¨yungs-bridges-fabric|YUNG 的桥 (YUNG's Bridges)¨yungs-bridges-neoforge|YUNG 的桥 (YUNG's Bridges) project-red-transmission|红石计划:传导 (ProjectRed - Transmission) day-dream savage-ender-dragon|更凶猛的末影龙* @@ -5078,7 +5078,7 @@ enhanced-farming@|增强农业* lava-clear-view@|熔岩下清晰视野*¨lava-clear-view-fabric|熔岩下清晰视野 (Lava Clear View) -global-xp +global-xp@ universal-graves@ more-bows-restrung@|更多弓:重振旗鼓! (More Bows: Restrung!) @@ -5116,7 +5116,7 @@ budschies-morph-mod@ pswg|帕尔奇的星球大战 (Parzi's Star Wars Mod)¨parzis-star-wars-mod|帕尔奇的星球大战 (Parzi's Star Wars Mod) aquatic-abyss slimier-slimes -wacky-weapons +stupid-weapon slime-carnage|史莱姆杀戮* portal-tags eden-ring@eden-ring-reforked|伊甸星环* @@ -5211,7 +5211,7 @@ modular-assembly|模块化组装* healer@ calcium|钙* from-the-shadows -l_ender-s-cataclysm@l_enders-cataclysm(cataclysm)|灾变 (L_Ender 's Cataclysm) +l_ender-s-cataclysm@l_enders-cataclysm|灾变 (L_Ender 's Cataclysm) brighter-block-light|亮光 (Brighter) pick-up-notifier@|拾取提示*¨pick-up-notifier-fabric|拾取提示 (Pick Up Notifier) @@ -5223,7 +5223,7 @@ login edible-bugs farsight¨farsight-fabric -atlantis|亚特兰蒂斯* +atlantis@|亚特兰蒂斯* gaia-dimension pwem akisephilas-bosses @@ -5235,7 +5235,7 @@ vanilla-cookbook@vanillacookbook|原版烹饪书* edible-nether-wart|可食用下界疣* plasmo-voice@|Plasmo语音* armor-sound-tweak|盔甲音效调整* -hexerei|魔法巫师* +hexerei@|魔法巫师* morerefinedstorage give-me-water-or-give-me-death lost-and-found @@ -5293,13 +5293,13 @@ boosted-brightness@|亮度增强* effective@¨effective-forge voidtotem|虚空图腾 (Void Totem)¨voidtotem-fabric|虚空图腾 (Void Totem) -tool-leveling-plus@tool-leveling¨tool-leveling-plus-fabric +tool-leveling-plus@tool-leveling|工具升级 (Tool Leveling+)¨tool-leveling-plus-fabric|工具升级 (Tool Leveling+) mythicmetals@|神话金属 (Mythic Metals) creeper-firework@|烟花苦力怕* second-chance@second-chance-forge¨second-chance-forge promenade@ -london-underground|伦敦地铁 (The London Underground) -dynamiclights-reforged|镁/铷:动态光源 (Embeddium/Rubidium Dynamic Lights) +london-underground@the-tube|伦敦地铁 (The London Underground) +dynamiclights-reforged|Embeddium/铷:动态光源 (Embeddium/Rubidium Dynamic Lights) the-wild-mod@|荒野更新* tuff-depth|凝灰岩深度* minefantasy-reforged|我的幻想重铸版 (MineFantasy Reforged) @@ -5311,9 +5311,9 @@ anointed-items golden-age-combat|黄金时代的战斗* magnesium-extras|镁/铷:附属 (Magnesium/Rubidium Extras) chest-tracker@|箱子追踪* -advancementinfo@|进度信息展示* +advancementinfo@|进度信息展示 (AdvancementInfo) animatica@ -all-dimension-height-increase|全维度建筑高度提升* +mc-mods-dimension-height-increase|全维度建筑高度提升 (All Dimension Height Increase) merchant-markers@|商人标记*¨merchant-markers-fabric|商人标记 (Merchant Markers) loot-bag|战利品袋子* miner-watcher|矿工监视者* @@ -5331,7 +5331,7 @@ adventtic questionably-immersive long-fall-boots total-darkness -true-darkness +true-darkness@ starlight-x-create grand-economy chinacraft2|华夏文明2 (ChinaCraft2) @@ -5343,12 +5343,12 @@ hardcore-buoyance gregtech-ce-unofficial@|格雷科技社区版:非官方版 (GregTech CE: Unofficial) eggtab-fabric|独立刷怪蛋列表 (Egg Tab)¨eggtab-forge|独立刷怪蛋列表 (Egg Tab) always-a-wither-skull@|必得凋灵骷髅头颅 (Always a Wither Skull)¨always-a-wither-skull-fabric|必得凋灵骷髅头颅 (Always a Wither Skull) -anvil-restoration-fabric@anvil-restoration|铁砧修复 (Anvil Restoration)¨anvil-restoration|铁砧修复* +anvil-restoration@|铁砧修复*¨anvil-restoration-fabric|铁砧修复 (Anvil Restoration) hide-hands-fabric@hide-hands|隐藏主副手 (Hide Hands)¨hide-hands|隐藏主副手* better-beacon-placement-fabric@better-beacon-placement|更好的信标放置 (Better Beacon Placement)¨better-beacon-placement|更好的信标放置* dead-totems -functional-storage|功能性存储* -the-wild-update|荒野更新1.19 (The Wild Update 1.19) +functional-storage@|功能性存储* +the-wild-update|荒野更新 1.19 (The Wild Update 1.19) archeology@|考古学 (CapsLock Archeology) trinkets-and-baubles|饰品与小玩意 (Trinkets and Baubles) @@ -5356,7 +5356,7 @@ trinkets-and-baubles|饰品与小玩意 (Trinkets and Baubles) rope-ladders|绳梯* skewers-updated|烤串更新版* keep-my-soil-tilled-fabric|保持肥沃 (Keep My Soil Tilled)¨keep-my-soil-tilled|保持肥沃* -double-doors-fabric@double-doors|双开门 (Double Doors)¨double-doors|双开门* +double-doors@|双开门*¨double-doors-fabric|双开门 (Double Doors) expanded-armor-enchanting@|盔甲附魔扩展* expanded-weapon-enchanting@|武器附魔扩展* expanded-axe-enchanting@|斧附魔扩展* @@ -5393,12 +5393,12 @@ mekanism-matter|通用机械:物质拓展* inzhefop-core -legendary-tooltips@|传说工具提示*¨legendary-tooltips-fabric|传说工具提示 (Legendary Tooltips) +legendary-tooltips@|传说提示框*¨legendary-tooltips-fabric|传说提示框 (Legendary Tooltips) myrtrees tiny-redstone -icarus-fabric@icarus +icarus@ the-splash-milk@|喷溅牛奶 (Splash Milk) fastbench-for-fabric|工作台性能优化Fabric版 (FastBench for Fabric) mob-buckets-fabric|生物桶 (Mob Buckets) @@ -5432,7 +5432,7 @@ renamer|代号名称* the-herobrine-mod-1-7-10 aquatic-armors immersive-industry|沉浸工业* -lightmans-currency¨lightmans-currency-fabric +lightmans-currency@¨lightmans-currency-fabric hellfire-fireball-launcher|地狱火:火焰弹发射器 (Hellfire: Fireball Launcher)¨hellfire-fireball-launcher-fabric|地狱火:火焰弹发射器 (Hellfire: Fireball Launcher) guild endless-deep-space|无尽深空* @@ -5450,12 +5450,12 @@ collision-damage@ project-74246|毁灭地牢 (Doomlike Dungeons) dynamic-trees-defiled-lands|动态的树:污秽之地附属 (Dynamic Trees - Defiled Lands) xaero-map-addition@ -lambdacontrols@|Lambda 的控制优化 (LambdaControls) +lambdacontrols@|Lambd 的控制优化 (LambdaControls) ducky-mod -@craftgr|幻想乡电台 (CraftGR) +craftgr@|幻想乡电台 (CraftGR) quartz -all-the-blocks -allthemodium +mc-mods-the-blocks +mc-modsthemodium ato just-enough-effect-descriptions-jeed@|JEI药水效果 (Just Enough Effect Descriptions) hostile-neural-networks @@ -5465,7 +5465,7 @@ neon-craft-2-mod|霓虹灯艺2* architects-dream|建筑师之梦 (Architect's Dream) ignition-enderbags correlated@ - +enderbags no-mob-spawning-on-trees rf-lux@ @@ -5486,7 +5486,7 @@ giant-player-boss|巨人玩家Boss* set-bonus tntutils giant-swords|巨剑* -terrablender@¨terrablender-fabric +terrablender@¨terrablender-fabric¨terrablender-neoforge commandhelper|命令助手 (CommandHelper) bilibili @@ -5514,7 +5514,7 @@ vitality featured-servers oldjavawarning@|旧Java警告 (OldJavaWarning) mercurius -all-the-swords +mc-mods-the-swords pams-simple-recipes bow-infinity-fix@|无限附魔修复* @@ -5543,9 +5543,9 @@ better-compatibility-checker fastfurnace-minus-replacement harvest craftpresence@ -stonecutter-recipe-tags +stonecutter-recipe-tags@stonecutter_recipe_tags customnpcsreborn|自定义NPC:重生 (Custom NPCs Reborn) -nightmare-craft-survival|梦魇工艺:生存 (Nightmare Craft: Survival) + brassamberbattletowers jags sedna @@ -5567,7 +5567,7 @@ creatures-and-beasts@|动物和野兽 (Creatures and Beasts) dead-guys-deep-dark towers-of-the-wild-reworked|旷野之息高塔:重制 (Towers of the Wild: Reworked) towers-of-the-wild-reloaded|旷野之塔:重置 (Towers of the Wild: Reloaded) -bansoko|创可贴 (Bansōkō) +bansoko|创可贴 (Bansoukou) inventory-backpack@inventory-backpack-mod @@ -5587,7 +5587,7 @@ no-null-processors ma-enchants|Ma 附魔* bits-and-chisels@ trading-post|交易站*¨trading-post-fabric|交易站 (Trading Post) -phantasmic¨@nourished-nether|Nourished Nether/Phantasmic/Netherific - 已失效 +phantasmic¨@phantasmic|Nourished Nether/Phantasmic/Netherific - 已失效 furnus permanent-light-generator@plg|恒久光发电机*¨permanent-light-generator-fabric|恒久光发电机 (Permanent Light Generator) @@ -5604,7 +5604,7 @@ botany-pots-ore-planting@|植物盆栽矿石种植* satin-api@ easy-magic@|简易附魔台* -enlightend@enlightened-end +enlightend¨@enlightened-end|Enlightend/Enlightened End/Nourished End - 已失效 rubidium@|铷* cultural-delights@|多元乐事* @@ -5643,10 +5643,10 @@ blaze-gear|烈焰装备* @aier|反内能革命 (Anti-internal Energy Revolution) rhodonite-tools-armour more-minecarts -corn-delight@|玉米乐事*¨corn-delight-fabric|玉米乐事 (Corn Delight) +corn-delight@|玉米乐事*¨corn-delight-fabric@|玉米乐事 (Corn Delight) -blast-craft|防爆工艺 (Blastcraft) +blast-craft@blastcraft|防爆工艺 (Blastcraft) zdgx@|mod自动更新 (zdgx-AutoUpdateMod) @@ -5659,7 +5659,7 @@ cuboiddroids-support-mod -litematica-tool|投影工具 (litematica tool) +litematica-tool|投影工具* frozen-up|千里冰封* carpet-tis-addition@ @@ -5719,7 +5719,7 @@ herodotusutils@herodotus-utils platypuses hostile-villages|敌对村庄* throwability|投掷* -biomeinfo|生物群系信息 (BiomeInfo)¨biomeinfo-fabric|生物群系信息 (BiomeInfo) +biomeinfo@|生物群系信息 (BiomeInfo)¨biomeinfo-fabric|生物群系信息 (BiomeInfo) clickable-advancements|可点击的进度 (Clickable advancements) factory0-resources epic-knights-armor-and-weapons@epic-knights-shields-armor-and-weapons|史诗骑士:盾牌,盔甲和武器 (Epic Knights: Shields, Armor and Weapons) @@ -5742,7 +5742,7 @@ oculus@ simple-planes-tfc mishang-urban-construction@|迷上城建* @cursed-legacy-api -phi +phi@ ae2-utilities|AE2实用设备 (AE2 Utilities) epic-psi @@ -5755,7 +5755,7 @@ psio -copper-pot|铜锅! (Copper Pot!) +copper-pot@|铜锅! (Copper Pot!) viarewind @@ -5775,7 +5775,7 @@ creatures-of-the-snow@creatures-from-the-snow-fabric|雪地里的生物! (Crea collisions-lib@ wooled-boots@|羊毛靴子* zawa-evolved|野生动物园:进化 (Zoo and Wild Animals: Evolved) -bongo +bongo@ impersonate@ calemi-core@ccore @@ -5805,9 +5805,9 @@ ladylucs-critters-mod better-signs @howmanyitems +@howmanyitems-fabric - - +@glass-config-api @translated-legacy @@ -5853,13 +5853,13 @@ comics-bubbles-chat@ fabric-extended-armor-bars-forked eating-animation-forge@eating-animation|进食动画 (Eating Animation)¨eating-animation-fabric@eating-animations|进食动画 (Eating Animation) waterdripsound@¨dripsounds-fabric@ -better-horse-hud|更好的骑马HUD* +better-horse-hud|更好的骑马 HUD* thermopolium|汤饮铺* orderly-fabric-2-0 -entity-texture-features-fabric@entitytexturefeatures +entity-texture-features-fabric@entitytexturefeatures|实体纹理特性 (Entity Texture Features) sculk-plus creeper-confetti-fabric|烟花苦力怕Fabric版* double-jump-attribute¨@double-jump-attribute|Double Jump Attribute - 已失效 @@ -5876,7 +5876,7 @@ window-title-changer robins-ruby-mod -just-needed¨just-needed-fabric +just-needed@justneeded¨just-needed-fabric nodami-remake|伤害免疫机制移除重制版 (NoDamIRemake) had-enough-items|HEI物品管理器* worldinfo @@ -5904,7 +5904,7 @@ tinkers-golems-addon tinkers-addons-fork reagenchant -sim-u|模拟城市 (Sim-U) +sim-u|模拟城市/模拟大都市 thorium@|钍* creative-one-punch@ @@ -6002,7 +6002,7 @@ mobifier¨mobifier-fabric art-of-forging-a-tetra-addon|锻造之艺 (Art of Forging) harder-staged-difficulty material-changer -tree-harvester¨tree-harvester-fabric +tree-harvester@¨tree-harvester-fabric itemfx mekanism-ce@mekanism-community-edition|通用机械:社区版 (Mekanism Community Edition)¨mekanism-1-12-2-ce|通用机械:社区版 (Mekanism Community Edition) @@ -6016,12 +6016,12 @@ too-many-glyphs create-cafe@|机械动力:咖啡馆* @worldbordercolor ic2-rpg|工业RPG (IC2 RPG) -drop-the-meat@dropthemeat +drop-the-meat@dropthemeat|肉多多 (Drop the Meat) better-invisibility|更好的隐身* tweakerplus@ autorun-fabric@autorun fpv-drone -campfire-backport +campfire-backport@ skip-transitions@ just-load@ cheese-dragon @@ -6029,7 +6029,7 @@ boatjump@ torched nyfs-quivers|Nyf的箭袋 (Nyf's Quivers) -party-parrots¨party-parrots-fabric +party-parrots@¨party-parrots-fabric patina-pipeworks|古铜管道* brewevolution|酿造进化🍺 (Brewevolution 🍺) devil-fruits|恶魔果实* @@ -6065,7 +6065,7 @@ croptosis weeping-angels-mod¨the-lonely-assassins hardcore-item-stages game-stages-viewer -mpm-lotr +mpm-lotr|更多玩家模型:魔戒兼容 (MPM LOTR) guard-villagers-fabric@guard-villagers-(fabricquilt)|警卫村民Fabric版 (Guard Villagers (Fabric)) item-highlighter@|物品高亮*¨item-highlighter-fabric|物品高亮 (Item Highlighter) @@ -6106,7 +6106,7 @@ gregicality-multiblocks@ the-box-trot@ better-biome-blend@|更好的生物群系过渡* forever-enough-items|FEI物品管理器* -chess|象棋* +chess|象棋* - 此已不受支持¨@chinesechess|象棋 (Chess) - >=3.0 immersive-fx ydms-weapon-master@weaponmaster|YDM的武器大师 (YDM's Weapon Master) galacticrafttweaker @@ -6119,7 +6119,7 @@ messmod@ log4j2-jndi-exploit-fix woodcutter¨woodcutter-forge origins-classes-forge@|起源:职业非官方Forge版 (Origins: Classes (Forge)) -tool-stats +tool-stats@ thatched fumo-mod basement-origins @@ -6133,10 +6133,10 @@ just-the-binding-of-isaac-pills pendant-of-life the-binding-of-isaac-tears-mod humbling-bundle@|慈善捆绑包* -grindstone-sharper-tools-fabric¨grindstone-sharper-tools -nutritious-milk¨nutritious-milk-fabric +grindstone-sharper-tools@¨grindstone-sharper-tools-fabric +nutritious-milk@¨nutritious-milk-fabric|Nutritious Milk - 文件已失效 extract-poison¨extract-poison-fabric -zombie-villagers-from-spawner-fabric@zombie-villagers-from-spawner¨zombie-villagers-from-spawner +zombie-villagers-from-spawner@¨zombie-villagers-from-spawner-fabric vine-climber healing-soup@¨healing-soup-fabric idas@|地牢建筑统合 (Integrated Dungeons and Structures) @@ -6177,12 +6177,12 @@ kitteh6660s-morecraft angel-ring|天使指环* debugify@ nomowanderer -allthecompressed +mc-modsthecompressed cave-enhancements creative-apiary|创造蜂场* creative-crafter mcmod-search-reborn|MC百科资料搜索-重生 (MCMOD Search Reborn) -proxy-server +proxy-server@ multithreaded-noise spelling-table-mod|拼写台* @@ -6191,7 +6191,7 @@ dirt-deco multiblocked arcanus@ armor-weight -all-the-tweaks +mc-mods-the-tweaks runelic alexs-cloud-storage@|云存储 (Cloud Storage) visuality@|可视性* @@ -6256,13 +6256,13 @@ carpetclient@ dynamic-trees-vampirism|动态的树:吸血鬼附属 (Dynamic Trees - Vampirism) transcend|超越* -connectible-chains@connectible_chains¨connectible-chains-forge +connectible-chains@connectiblechains¨connectible-chains-forge -birds-nests-fabric|鸟巢Fabric版 (Birds Nests (Fabric)) +birds-nests-fabric|鸟巢 Fabric 版 (Birds Nests (Fabric)) hot-or-not-tfc eye-of-dragons paperdoll@|纸娃娃 (PaperDoll) -little-logistics +little-logistics@ show-me-what-you-got@ herdspanic@ extrasounds@ @@ -6279,7 +6279,7 @@ ironagefurniture minekea-fabric aeble trident-mod|三叉戟 (Trident) -custom-professions|自定义村民职业 (Custom Villager Professions) +custom-professions@custom-villager-professions|自定义村民职业 (Custom Villager Professions)¨custom-villager-professions-fabric|自定义村民职业 (Custom Villager Professions) nextspring|化作春泥更护花 (NextSpring)¨nextspring-fabric|化作春泥更护花 (NextSpring) psionic-utilities @@ -6297,7 +6297,7 @@ biomes-far-away better-runtime-resource-pack@brrp|更好的运行时资源包* ends-delight@|末地乐事 (End's Delight) natures-starlight -alloygery@ +mc-modsoygery@alloygery custom-game-rules lava-walker@lavawalker pretty-pipes|更好的管道* @@ -6327,7 +6327,7 @@ reach-fix lootjs-forge chat-sounds@chatsounds advancement-screenshot@¨advancement-screenshot-fabric -all-loot-drops@ +mc-mods-loot-drops@all-loot-drops disc-jockey@ better-taskbar@|更好的任务栏* storage-network @@ -6378,7 +6378,7 @@ deep-mob-learning-reforged|深度怪物学习:重铸 (Deep Mob Learning: Refor zenith@ extended-drawers@ equippable-utilities@utilities -never-enough-currency-2|货币多多2*¨never-enough-currency-fabric|货币多多2 (Never Enough Currency 2) +never-enough-currency-2@never-enough-currency-2-(forge)#all-versions|货币多多2*¨never-enough-currency-fabric|货币多多2 (Never Enough Currency 2) quartz-chests|石英箱子* frozen-delight|冰封乐事* @@ -6399,7 +6399,7 @@ creeper-chain-reaction tiffitlib sanity -dynamic-trees-the-aether-legacy|动态的树:天境附属 (Dynamic Trees - The Aether Legacy) +dynamic-trees-the-aether-legacy@dynamic-trees-aether|动态的树:天境附属 (Dynamic Trees - The Aether Legacy) dynamic-trees-cuisine|动态的树:料理工艺附属 (Dynamic Trees - Cuisine) ancient-classes bigger-stacks@biggerstacks @@ -6529,7 +6529,7 @@ human-companions odysseyhud colorblindness@ aether-addon -@moonstone|月之石 (MoonStone)¨@moonfabric|月之石 (MoonStone) +moonstone@|月之石 (MoonStone)¨@moonfabric|月之石 (MoonStone) server-redirect city-blocks @@ -6546,12 +6546,12 @@ wumpleutil twilight-delight@twilightdelight|暮色乐事* recruits@villager-recruits the-true-backrooms -webstreamer +webstreamer@ op-items-tab thaumisc|神秘杂项学* -treechop@tIdTnzkf +treechop@ idwtialsimmoedm@ entity-collision-fps-fix@¨entity-collision-fps-fix-fabric hollowwoods @@ -6599,7 +6599,7 @@ language-reload@ @beer sound-categories@ @unsuspicious-stew%22 -@preventer +preventer@ @wpit starflight-innovation powah-rearchitected@powah @@ -6610,12 +6610,12 @@ better-rocks horse-combat-controls libgui simply-houses@ -yungs-better-desert-temples@|YUNG的沙漠神殿优化 (YUNG's Better Desert Temples)¨yungs-better-desert-temples-fabric|YUNG的沙漠神殿优化 (YUNG's Better Desert Temples) +yungs-better-desert-temples@|YUNG的沙漠神殿优化 (YUNG's Better Desert Temples)¨yungs-better-desert-temples-fabric|YUNG的沙漠神殿优化 (YUNG's Better Desert Temples)¨yungs-better-desert-temples-neoforge|YUNG的沙漠神殿优化 (YUNG's Better Desert Temples) modern-dynamics@|现代动力学* doggo-mod@ tan-huge-trees @wiangdtbisadtn|草我本来不想这么做的但是我这么做了啊啊啊啊啊啊啊啊啊啊啊啊啊啊 (Wait I Am Not Gonna Do This But I Somehow Accidentally Did This Nooooooooooooooo) -yungs-better-witch-huts@|YUNG的沼泽小屋优化 (YUNG's Better Witch Huts)¨yungs-better-witch-huts-fabric|YUNG的沼泽小屋优化 (YUNG's Better Witch Huts) +yungs-better-witch-huts@|YUNG的沼泽小屋优化 (YUNG's Better Witch Huts)¨yungs-better-witch-huts-fabric|YUNG的沼泽小屋优化 (YUNG's Better Witch Huts)¨yungs-better-witch-huts-neoforge|YUNG的沼泽小屋优化 (YUNG's Better Witch Huts) panorama-creator|全景图创建器* ui-input-undo-fabric@¨ui-input-undo-forge@ paimeng|应急食物 (PaiMeng) @@ -6677,7 +6677,7 @@ hidden-names|隐藏名称* doph@|远程命中提示 (Ding On Projectile Hit) keybinds@ hat-list@hatlist -@nmuk +nmuk@ raven-brews-core raven-coffee|Raven咖啡* cqc @@ -6707,7 +6707,7 @@ no-telemetry@ create-chromatic-return|机械动力:异彩化合物 (Create: Chromatic Return) coffee-spawner -timber-mod +timber-mod@timber-mod-by-mycf sophisticated-storage|精妙存储* advanced-lootable-weapons what-the-bucket @@ -6812,7 +6812,7 @@ nether-tears|下界遗泪 (NetherTears) africraft -applied-botanics-addon|应用能源:植物魔法附属* +applied-botanics-addon@applied-botanics|应用能源:植物魔法附属* overloaded-armor-bar-updated delightful@ wizardry-tales @@ -6820,7 +6820,7 @@ wizardry-tales tamedrespawn|驯兽重生 (TamedRespawn) dumplings-delight@|饺子乐事* -thermal_extra +thermal_extra@thermal-extra nether-sky-block@|下界空岛* arte-magicum @@ -6836,7 +6836,7 @@ custom-damage-particles@|自定义伤害粒子* @aei|AEI物品管理器 (Always Enough Items) cyan-warrior-swords-mod@ plant-in-a-jar@ -solid-mobs +solid-mobs@solid_mobs naturalist@|自然主义* c3h6n6o6@|环三亚甲基三硝胺 (Cyclotrimethylenetrinitramine) syncmatica@|共享原理图* @@ -6878,7 +6878,7 @@ create-chromaticreturn powertool@|电动工具 (PowerTool) keymap@|键盘映射* actually-useful-stonecutter -itemphysic-lite-fabric +itemphysic-lite-fabric|物品物理掉落:轻量版 - Fabric (ItemPhysic Lite - Fabric) forgotten-treasures player-health-indicators@playerhealthindicators displaycase@|陈列柜 (Display Case) @@ -6923,7 +6923,7 @@ starry-skies flesh2leather-forge¨flesh2leather-fabric fall-damage-indicator aww-man-achievement-mod -fire-extinguisher@ +fire-extinguisher@|灭火器* farmers-knives@ sullys-mod@sullysmod magicaldecorations @@ -6936,7 +6936,7 @@ warden-loot-forge¨warden-loot @vmwcr|维克的现代战争补充合成表 (Crafting Recipes of Vic's Modern Warfare Mod) -optifine-checker|高清修复检测 (OptiFine Checker) +optifine-checker@|高清修复检测 (OptiFine Checker) paintings builtin-servers@ extractinator@|提炼机* @@ -6963,7 +6963,7 @@ parrying back-in-slime-slime-blocks-for-1-7 create-alloyed|机械动力:合金 (Create: Alloyed) -verdure|郁郁葱葱* +verdure@|郁郁葱葱* the-ori-mod @@ -6982,7 +6982,7 @@ medieval-origins elytra-chestplate-swapper - +the-ends-flora apollos-additional-structures chimes @@ -7023,10 +7023,10 @@ player-tabs cie easy-mob-farm@ material-elements -raised-clouds +raised-clouds@ music-triggers@ sneaky-screens -inmis¨inmis-forge +inmis@¨inmis-forge rechiseled@ @@ -7041,7 +7041,7 @@ butchers-delight@|屠夫乐事 (Butcher's Delight) large-meals-an-add-on-for-farmers-delight explorers-delight@ the-irregular-chef -compat-o-plenty +compat-o-plenty@compatoplenty snow-pig@snowpig|雪猪*¨snow-pig-fabric@snowpig-fabric|雪猪 (Snow Pig) wandering-collector@ @@ -7056,11 +7056,11 @@ crafting-on-a-stick endlessids@ @cpm-fabric|压缩空间 Fabric (Compact Machines - Fabric) -cycle-paintings¨cycle-paintings-fabric +cycle-paintings@¨cycle-paintings-fabric fire-spread-tweaks¨fire-spread-tweaks-fabric anger-management -easy-elytra-takeoff¨easy-elytra-takeoff-fabric +easy-elytra-takeoff@¨easy-elytra-takeoff-fabric stack-refill¨stack-refill-fabric light-meals@|轻食物语* lost-and-fished@lost-fished|失而钓得 (Lost and Fished) @@ -7117,7 +7117,7 @@ goodall freecam-by-zergatul macaws-bridges-oh-the-biomes-youll-go@|Macaw的桥梁:你将去的生物群系附属 (Macaw's Bridges - Oh The Biomes You'll Go) -macaws-fences-oh-the-biomes-youll-go|Macaw的栅栏与墙:你将去的生物群系附属 (Macaw's Fences - Oh The Biomes You'll Go) +macaws-fences-oh-the-biomes-youll-go@|Macaw的栅栏与墙:你将去的生物群系附属 (Macaw's Fences - Oh The Biomes You'll Go) alternate-current@ no-unused-chunks@ no-fade@ @@ -7142,9 +7142,9 @@ auto-reconnect text-damage-indicators recall monster-coin -dotcoin-mod +dotcoin-mod@dot-coin-mod¨dot-coin-mod-fabric super-potato|超级土豆* -custom-fog +custom-fog@ oc-xnet-driver @@ -7246,16 +7246,16 @@ ftb-quests-localization-keys unlit-realistic-torch-remake|真实火把:重置 (Realistic Torch Remake) chunk-saving-fix|区块保存修复* fullscreeno@ - +@xibao-plus-plus|喜报++ (Xibao Plus Plus) piglin-proliferation@ the-binding-of-isaac-style-consumables guns-rpg -configuration +configuration@ natural-decoration spice-of-fabric@ -better-climbing@ +better-climbing@|更好的攀爬* dog-yeeter mc122477fix@ armors-hud-revived-liteloader-only @@ -7308,8 +7308,8 @@ mrp-library bypass-anvil-restriction no-early-loading-progress -block-runner-forge¨block-runner -quick-paths¨quick-paths-fabric +block-runner-forge@block-runner¨block-runner +quick-paths@¨quick-paths-fabric solar-energy restored-earth @@ -7322,7 +7322,7 @@ exlines-snorkel-mod@snorkel two-players-one-horse headshot-forge left-hanging - +stars_carrier|星光的载具 aetherworks|天华之作 (AetherWorks) slice-and-dice@ @@ -7345,7 +7345,7 @@ unusual-end@unusual_end|不同寻常的末地* solar-flux|日光通量* custom-background-color@cbc|自定义背景颜色* -simple-shulker-preview@ +simple-shulker-preview|Simple Shulker Preview - 已弃用¨@simple-shulker-preview bygone-nether¨bygone-nether-fabric @clickopener kokoalinux-backport @@ -7366,7 +7366,7 @@ broken-discs forgedfabric@ create-extended-flywheels@extended-flywheels|机械动力:更多飞轮 (Create: Extended Flywheels)¨create-extended-flywheels-fabric|机械动力:更多飞轮 (Create: Extended Flywheels) piggy-bank -deeperdarker@ +deeperdarker@|幽邃黑暗 (Deeper And Darker) remote-gui-opener-forge @@ -7428,7 +7428,7 @@ custom-window-title@ crated-foods-farmers-delight damage-tilt -upgraded-core@ +upgraded-core¨@upgraded-core|Upgraded Core - 不全 upgraded-netherite-ultimerite@|下界合金增强:终极 (Upgraded Netherite : Ultimerite) upgraded-netherite-items@|下界合金增强:物品 (Upgraded Netherite : Items) upgraded-netherite-creativerite|下界合金增强:创造 (Upgraded Netherite : Creativerite) @@ -7491,7 +7491,7 @@ auudio-forge@auudio¨auudio-fabric easy-shulker-boxes@ qu-enchantments@ -ironchests +ironchests@ piercing-paxels@piercingpaxels icy-incitement@ visible-librarian-trades @@ -7511,11 +7511,11 @@ itank snowy-spirit@ no-tutorial-toasts experience-ores -anvil-player-heads-fabric +anvil-player-heads-fabric@anvil-player-heads artisan-integrations seemyname biomes-o-plenty-tools -bedrockcraft +bedrockcraft@ better-mobgriefing-gamerule frozen-fiend @@ -7556,7 +7556,7 @@ instant-blocks@¨instant-blocks-fabric better-sprinting@|更好的疾跑* rpglevels snow-under-trees@ -elytra-physics +elytra-physics@ scout@ zenstages @@ -7585,7 +7585,7 @@ serene-seasons-harvestcraft2-compat goat simple-autofish -@thinkbeforedrop|丢弃物品保护 (Think Before Drop) +think-before-drop@thinkbeforedrop|丢弃物品保护* omo mushroom-additions @@ -7608,7 +7608,7 @@ stop-hiding simple-world-timer recursive-resources@recursiveresources inventory-actions - +lavafishing@|岩浆钓鱼 (Lava Fishing) haunted-harvest@ dungeonsenhanced create-crystal-clear@|机械动力:晶莹剔透 (Create: Crystal Clear) @@ -7714,7 +7714,7 @@ libipn@ hulsealib blues-dynamic-lights gtc-expansion -nether-depths-upgrade +nether-depths-upgrade@|炽海生机* cloud-factory disc-holders-dj @econ @@ -7737,7 +7737,7 @@ simply-swords@|简易刀剑* kuayue@|跨越 (KuaYue) summoningrituals|召唤仪式 (Summoning Rituals) -no-sleep-forge¨no-sleep +no-rest you-died@|你死了* hotbarcycle@ hungry-in-peaceful-mode|无中生饥* @@ -7771,7 +7771,7 @@ mysteriumlib@ @inrealtime furnace-recycle@¨furnace-recycle-fabric -wild-lands +wild-lands@ noenchanting gregtech-experimental@ @@ -7823,7 +7823,7 @@ gregicality-tjfork @flagslib create-mechanical-extruder@ no-debug-5-you -packagedavaritia|封包无尽贪婪 (PackagedAvaritia) +packagedavaritia@|封包无尽贪婪 (PackagedAvaritia) pillar resound mob-plaques@ @@ -7855,7 +7855,7 @@ gregtech-sieves|格雷矿石筛子 (GregTech Sieves) dynamic-trees-gregtech-ceu-rubber-tree|动态的树:格雷科技社区版:非官方版附属 (Dynamic Trees - GregTech CEu) fertility -tcintegrations +tcintegrations@ underground-villages spook broglis-owls @@ -7890,7 +7890,7 @@ curious-lands cpmsvcc@|自定义玩家模型的简单的语音聊天兼容 (Customizable Player Models Simple Voice Chat compat) pettable@ create-enchantment-industry@|机械动力:附魔工业*¨create-enchantment-industry-fabric@|机械动力:附魔工业 (Create Enchantment Industry) -enchanted-witchcraft +enchanted-witchcraft@ wyml bunch-o-bugs @@ -7901,7 +7901,7 @@ your-items-are-safe@¨your-items-are-safe-fabric techemistry the-missing-villages continents@ -yungs-better-ocean-monuments@|YUNG的海底神殿优化 (YUNG's Better Ocean Monuments)¨yungs-better-ocean-monuments-fabric|YUNG的海底神殿优化 (YUNG's Better Ocean Monuments) +yungs-better-ocean-monuments@|YUNG的海底神殿优化 (YUNG's Better Ocean Monuments)¨yungs-better-ocean-monuments-fabric|YUNG的海底神殿优化 (YUNG's Better Ocean Monuments)¨yungs-better-ocean-monuments-neoforge|YUNG的海底神殿优化 (YUNG's Better Ocean Monuments) echoing-depths advanced-finders @@ -7983,7 +7983,7 @@ creative-fireworks invertedbed time-arrow catch-me-if-you-can-cmiyc -allis-one-way-glass|Alli的单向玻璃 (Alli's One Way Glass) +mc-modsis-one-way-glass|Alli的单向玻璃 (Alli's One Way Glass) sanguis ender-trigon litlaunch @@ -7996,7 +7996,7 @@ teams-stages kiwi-boi rubidium-toolkit@|铷 · 工具箱* advanced-combat|高级战斗装备* -advanced-combat-revitalized|高级战斗装备重置 (Advanced Combat (Revitalized)) +advanced-combat-revitalized@|高级战斗装备重置 (Advanced Combat (Revitalized)) totemic-overhaul battlecorrection|战斗修正 (BattleCorrection) @@ -8016,7 +8016,7 @@ survival-light-blocks garden-stuff|园林组合* forgottenrecipes corgilib@ -moms-love|母爱 (Mom's Love) +moms-love@|母爱 (Mom's Love) food-effect-tooltips@foodeffecttooltips|食物效果显示* @resounding hbm-fixes @@ -8059,7 +8059,7 @@ packet-size-doubler arachnophobia-mode-for-minecraft@arachnophobia-mode villagerconfig@|村民配置 (VillagerConfig) jasm -paginated-advancements@paginatedadvancements|分页进度* +paginated-advancements@paginatedadvancements|分页进度 (Paginated Advancements & Custom Frames) @backport-gamerules structures-compass swiss-cheese @@ -8150,7 +8150,7 @@ rgb-chat diamond-caliber @emi_farmersdelight -world-stripper +world-stripper@ dayz-remastered|DayZ 重制版 (DayZ Remastered) visuality-reforged@visuality-forge|可视性:重铸 (Visuality: Reforged) no-night-vision-flickering@ @@ -8179,7 +8179,7 @@ xp-obelisk|经验方尖碑 (XP Obelisk) enhanced-searchability@|搜索增强* compact-ui@ lets-do-wine@lets-do-vinery|葡园酒香 (Let's do Wine / Vinery) -wealthyandgrowth +wealthyandgrowth@ subtitle-highlight@|字幕高亮* clockhud@clock-hud @@ -8227,7 +8227,7 @@ better-game-menu@ seasonhud@¨seasonhud-fabric@ stack-to-nearby-chests@|堆叠到附近的箱子 (Stack to Nearby Chests) gmod-title-screen@ -create-steam-n-rails@|机械动力:汽鸣铁道 (Create: Steam 'n Rails) +create-steam-n-rails@|机械动力:汽鸣铁道 (Create: Steam 'n' Rails) neutron applied-cooking|应用厨房* @litematica-printer|投影打印机 (Litematica Printer) @@ -8265,7 +8265,7 @@ last-days-of-humanity-tweaks space-bosstools-giselle-addon @ser|刷怪蛋配方 (Spawn Eggs Recipes) mined-rider-kuuga -inventory-essentials¨inventory-essentials-fabric +inventory-essentials@¨inventory-essentials-fabric astral-additions|星辉附加* simple-copper-pipes@¨simple-copper-pipes-forge advanced-nbt-tooltips@|高级NBT提示工具 (Advanced NBT Tooltips) @@ -8329,7 +8329,7 @@ fancy-dyes@ @extra-mod-integrations mod-settings@ -@dont-dissapear +dont-disappear-on-me@dont-dissapear fastquit@ violeta-cannons war-of-valor @@ -8340,7 +8340,7 @@ epic-paladins brazier@|生灵火盆* stackcalc-revived@ with-thursday-delight|乐在星期四* -@osmium|锇 (Osmium) +osmiummod@osmium|锇 (Osmium) @command-gui-buttons wagyourminimap@ chunks-fade-in@|区块淡入动画 (Chunks fade in) @@ -8352,7 +8352,7 @@ masonry-blocks mssql-jdbc packages@|自定义包裹* giant-spawn@¨giant-spawn-fabric -@mtr-nte|纸板箱的交通扩展 (Nemo's Transit Expansion) +@mtr-nte|蓝星社交通扩展 (Nemo's Transit Expansion) serene-shrubbery gardens-of-the-dead@ pirate-hats @@ -8362,7 +8362,7 @@ clay-no-more-balanced|黏土不再制衡* blossom@ whipdashing@ potiontimestacker-forge@timestacker -breezy +breezy@ heart-balance throwabletorch-fabric@throwabletorch¨throwabletorch potion-descriptions¨potion-descriptions-fabric @@ -8375,7 +8375,7 @@ biomes-in-jars-forge@biomes-in-jars|群系罐子 (Biomes in Jars)¨biomes-in-jar craftable-potion-combinations@craftablepotioncombinations polylib @creeper-fire-charge-fix|Creeper火焰弹修复 (Creeper Fire Charge Fix) -@tags-binder +tags-binder@ fastcaps throwable-fluids time-in-a-bottle@|时间之瓶 Fabric 版 (Time in a Bottle (Fabric)) @@ -8404,7 +8404,7 @@ potato-cooking clienttime mcpitanlibarch@ -manure-fabric@manure|粪便 (Manure)¨manure|粪便* +manure@|粪便*¨manure-fabric|粪便 (Manure) well@ enderling-invaders@ @@ -8492,7 +8492,7 @@ create-mounted-storages|机械动力:更多存储挂载 (Create: Mounted Stora minecells@|我的细胞 (Mine Cells - Dead Cells Mod) @heatwaves|热浪 (Heatwaves) steves-mini-pouch -infinite-abyss +infinite-abyss@ @ktice creator-overlays@creatoroverlays maplecraft @@ -8542,7 +8542,7 @@ forgebrainlib render-360 async-locator@ -minemention|提及 (MineMention) +minemention@|提及 (MineMention) umapyoi@|马儿蹦跳*¨@umapyoi-fabric|马儿蹦跳 (Umapyoi) origins-full-moon|起源:满月 (Origins: Full Moon) codechickenlib-unofficial@ @@ -8574,7 +8574,7 @@ tales-of-villagers-the-infiltrators|村民之书:渗透者 (Tales of Villagers @morecullingextra carpet-fixes@ er-core|ER 核心 (ER Core) -rings-of-ascension¨fabric-rings-of-ascension +rings-of-ascension@¨fabric-rings-of-ascension @@ -8613,14 +8613,14 @@ news-pillagers rangers-haven heyberryshutup destroy-on-death -yes-steve-model@|是,史蒂夫模型* +@yes-steve-model|是,史蒂夫模型 (Yes Steve Model) macaws-roofs-oh-the-biomes-youll-go|Macaw的屋顶:你将去的生物群系附属 (Macaw's Roofs - Oh The Biomes You'll Go) macaws-roofs-biomes-o-plenty|Macaw的屋顶:超多生物群系附属 (Macaw's Roofs - Biomes O' Plenty) configured-feature-saplings@ coyote-time@ -macaws-bridges-modding-legacy|Macaw的桥梁:Modding Legacy 附属 (Macaw's Bridges - Modding Legacy) -macaws-bridges-aurora|Macaw的桥梁:Aurora 附属 (Macaw's Bridges - Aurora) +macaws-bridges-modding-legacy|Macaw 的桥梁:Modding Legacy 附属 (Macaw's Bridges - Modding Legacy) +macaws-bridges-aurora@|Macaw的桥梁:Aurora 附属 (Macaw's Bridges - Aurora) betterlands koremods@ heart-of-ender @@ -8641,7 +8641,7 @@ ost-overhaul@ chunk-by-chunk@chunkbychunk beyond-planets-core|飞越群星:核心 (Planeteer - Core) webdisplays@|内置网页浏览器 (WebDisplays) -mcef-forge@mcef|Minecraft Chromium嵌入式框架 (MCEF [Forge]) +mcef@|Minecraft Chromium 嵌入式框架 (Minecraft Chromium Embedded Framework) @@ -8667,7 +8667,7 @@ well-rested@ raw-input-1-12-2@raw-input spider-pig jingames-hair-c@hair-c -map-tooltip +map-tooltip@ planetoid golem-tweaks yummy-foods @@ -8699,7 +8699,7 @@ weapon-master@|武器大师* your-ideas|你的想法* vanity-ancient-tool-variants motion-capture-mod-mocap|动作捕捉 (Motion Capture) -wormhole-portals|虫洞 (Wormhole) +wormhole-portals@wormhole|虫洞 (Wormhole) dragon-magic-and-relics@|神龙魔法与遗物* yummy-foods-forked content-creator @@ -8750,7 +8750,7 @@ thaumic-travelers-dream aetherium-ashen-armor smoothmenu|平滑菜单 (Smooth Menu) @cabricality-mod -unusual-fish|独特鱼类* +unusual-fish@unusual-fish-mod|独特鱼类 (Unusual Fish Mod) obscure-tooltips @@ -8777,7 +8777,7 @@ containersearcher@csearcher screencapper@ valkyrien-skies-world -lucky-tnt-lib +lucky-tnt-lib@ waffles-placeable-foods@ otg-the-void otg-flatlands @@ -8805,7 +8805,7 @@ minespaceex gregious-maximus shut-up-model-loader cultural-delights-fabric@|多元乐事(Fabric版) (Cultural Delights [Fabric]) -collectors-reap +collectors-reap@ bones-and-swords vanity-shedds-mystical-toolsets-pack emc-builders-wand @@ -8815,12 +8815,12 @@ hunger-in-peace lexicon@¨lexicon-fabric scaffolding-drops-nearby@¨scaffolding-drops-nearby-fabric -@fuel-info +fuel-info@ glacier-ice gtnhmixins@ dawn-to-dusk open-tower-defence@|开放式塔防* -mtr-station-decoration@station-decoration +mtr-station-decoration@station-decoration|MTR车站装饰 (MTR Station Decoration) perviaminvenire silverbirch@silver-birch @@ -8909,7 +8909,7 @@ spell-power@ morecrashinfo|更多崩溃报告信息 (MoreCrashInfo) epicfight-saopack@epicacg|史诗战斗:ACG附属包 (EpicFight ACG AddonPack) -screenshot-viewer|截图查看器* +screenshot-viewer@|截图查看器* gml @futurepack-additions|飞向未来附加 (Futurepack Additions) bee-fix|蜜蜂修复* @@ -8928,7 +8928,7 @@ minegooseduck floating-islands @qwq-library -scorched-guns +scorched-guns@scorched-guns-2 fred-qol@fred mekanism-ce-unofficial|通用机械社区版:非官方 (Mekanism CE Unofficial) @@ -8997,14 +8997,14 @@ dialog|对话框* fix-selected-item-text dregora-o-plenty -integrated-api +integrated-api@ the-betweenlands-eternal-melodies|交错次元:永恒旋律 (The Betweenlands: Eternal Melodies) frozen-apocalypse|冰封启示录* -whymap +whymap@ craftify@ overgrown-cities-fabric -night-config-fixes +night-config-fixes@ standardconfigs armor-adjustment|盔甲调整* enchanting-max_level@enchanting.max_level @@ -9066,7 +9066,7 @@ graphutil@ comfy-sky@|舒适空岛* entropy@ ngv-forge¨ngv-fabric -world-of-wonder +world-of-wonder@ full-brightness-toggle@ @your-ideas|你的想法 (Your Ideas) @@ -9104,7 +9104,7 @@ lwjgl3ify creates-delight@|机械动力乐事 (Create's Delight) -mo-villager|更多村民 (Mo' Villager) +mo-villager@mo-villagers|更多村民 (Mo' Villager) logunspam @@ -9134,7 +9134,7 @@ betweencards -@google-chat +google-chat@ @resclone tame-them-all @@ -9170,7 +9170,7 @@ why-does-my-food-taste-like-that iron-generators elytra-swapper-forge|鞘翅切换 (Elytra Swapper) ftb-team-islands-forge -nightmare-craft-memeshrooms|梦魇工艺:蘑菇 (Nightmare Craft: MEMESHROOMS) + market-crates|集市板条箱* industrial-renewal-port|工业复兴移植版* tfcm|群峦合金非官方版 (TFC Metallum U) @@ -9187,7 +9187,7 @@ create-compact-exp|机械动力:压缩经验* heat-and-processing skytheorylib -ad-astra-giselle-addon +ad-astra-giselle-addon@ shift-scroll-fix gim|原神农业 (Genshin Impact Cropper) oxygen-daily-rewards @@ -9210,13 +9210,13 @@ create-mechanical-spawner@|机械动力:动力刷怪笼* amethyst-core@ fzzy-core@ -tnt-breaks-bedrock -from-the-north +tnt-breaks-bedrock@ +from-the-north@ spruce-willis-the-xmas-tree@ sweet-potato-core-spc|地瓜核心 (Sweet Potato Core) merge-enchantments turkey|火鸡* -nightmare-craft-legendary-gear|梦魇工艺:传奇装备 (Nightmare Craft: Legendary Gear) + snowy-weaponry@ dungeon-mobs-reborn quickteleports @@ -9231,7 +9231,7 @@ fat-chicken snowmancy@ @roadchina|道路中国 (Road China) -nightmare-craft-decorations|梦魇工艺:装饰品 (Nightmare Craft: Decorations) + @immersive-snow functional_tfc @@ -9255,7 +9255,7 @@ aa-farmer-compat better-crates -nightmare-craft-auto-factory + vanillaicecreamfix@ actually-unbreaking-forge@actually-unbreaking¨actually-unbreaking-fabric handcrafted@|精巧手艺* @@ -9269,7 +9269,7 @@ lost-cities-potato-edition|失落的城市:土豆版 (Lost Cities: Potato Edit endless-noend matmos-2 tfc-item-barrels -nightmare-craft-super-foods + villagersplus-forge¨villagersplus-fabric data-criteria japanese-emoji-commands @@ -9279,14 +9279,14 @@ voxel-latest the-printer@ flying-cullers@ -timeless-power +timeless-power@ create-deco-fabric-fixed calibrated frozen-memories -atlantis-api@ +atlantis-api¨@atlantis-api|Atlantis API - 已失效 nutritional-balance profession-lock -nightmare-craft-mobs + spectrum-jetpacks@ difficult-caves @@ -9303,20 +9303,20 @@ mysterious-biomes head-in-the-clouds@ fdmc rpg-style-more-weapons -nightmare-craft-guns-explosives + easy-experience full-turtle-armor@ -tokusatsu-hero-completion-plan|特摄英雄补完计划* +tokusatsu-hero-completion-plan@tokusatsu-hero-instrumentality-project|特摄英雄补完计划 (Tokusatsu Hero Instrumentality Project) spyglass-astronomy@ mchalo@ -darkmenu-darkrpg-legacy-menu -nightmare-craft-game-engine +darkmenu-darkrpg-legacy-menu@darkrpg-menu + rl-artifacts|奇异饰品-RLCraft版 (RLArtifacts) azurelib@ harder-monster-boats-finer-boat-control @@ -9381,7 +9381,7 @@ bubbles@pop nan-health-fixer@|假死修复:土豆版 (Potato NaN Health Fix) @voxelmap-updated blood-and-stuff@ -yungs-better-nether-fortresses@|YUNG的下界要塞优化 (YUNG's Better Nether Fortresses)¨yungs-better-nether-fortresses-fabric|YUNG的下界要塞优化 (YUNG's Better Nether Fortresses) +yungs-better-nether-fortresses@|YUNG的下界要塞优化 (YUNG's Better Nether Fortresses)¨yungs-better-nether-fortresses-fabric|YUNG的下界要塞优化 (YUNG's Better Nether Fortresses)¨yungs-better-nether-fortresses-neoforge|YUNG的下界要塞优化 (YUNG's Better Nether Fortresses) squidless enders-delight|末影乐事 (Ender's Delight) @@ -9389,7 +9389,7 @@ decostorage mahogany aspen unmending-potato-edition|经验不修补:土豆版* -allens-rocket-launcher-arl|简易火箭筒 (Allen's Rocket Launcher) +mc-modsens-rocket-launcher-arl|简易火箭筒 (Allen's Rocket Launcher) @item-tributes assorted-discoveries not-so-shrimple-forge @@ -9423,12 +9423,12 @@ gliders@ @no-teleport-cooldown riding-partners@|双人骑行* rpgskillable -extra-discs +extra-discs@ propertyerizer waxable-coral@|涂蜡珊瑚* @fireframe|火焰框架 (FireFrame) goated@ -morebread +morebread@ @@ -9488,7 +9488,7 @@ villager-brute exspiravit-magicae equiped limited-chunkloading -custom-villager-trades-forge|自定义村民交易 (Custom Villager Trades) +custom-villager-trades-forge@custom-villager-trades|自定义村民交易 (Custom Villager Trades)¨custom-villager-trades-fabric|自定义村民交易 (Custom Villager Trades) dungeons-more-mod ancient-trees extraskills @@ -9527,7 +9527,7 @@ steamagerevolution|蒸汽时代革命 (SteamAgeRevolution) brewcraft zombie-awareness-freeze-fix|僵尸意识冻结修复* integrated-stronghold@ -grass-overhaul +grass-overhaul@ @purpurclient alkimicraft-part-i-project-oasis @@ -9539,7 +9539,7 @@ vending-block-revived|自动售货机:重生* assortment opotato|哦,土豆!* -contingameime@|游戏内输入法续更版/游戏内输入法Forge重置版 (ContingameIME/IngameIME-Forge/IngameIME-Forged) +contingameime@|游戏内输入法续更版 / 游戏内输入法 Forge 重置版 (ContingameIME / IngameIME-Forge / IngameIME-Forged) ccastroadds aerial-hell@ swashbucklers @@ -9625,8 +9625,8 @@ delightful-mining trimmable-tools @tablesaw|锯木台 (Tablesaw) -@glowglass -all-the-fan-made-discs@ +glowglass@ +mc-mods-the-fan-made-discs@all-the-fan-made-discs from-the-fog more-ladders@ reblured@ @@ -9662,7 +9662,7 @@ smitheesfoundry@ beach-slimes rideable-ravagers@|可骑乘的劫掠兽* -splatcraft@splatcraft-forge|斯普拉遁* +splatcraft@|斯普拉遁* beneath-the-snow sea-creeps skills-v|技能:香草 (Skills: Vanilla) @@ -9676,7 +9676,7 @@ alternative-world-save-location@ skills-firearms|技能:枪械 (Skills: Firearms) tx-loader@ Reacharound@reacharound -variety-aquatic¨@variety-aquatic|Variety Aquatic - 已失效 +variety-aquatic|Variety Aquatic - 已被续作替代¨@variety-aquatic|Variety Aquatic - 已失效 blocks-booster@ tfc-cast-iron-grill@|群峦铸铁烤架 (TFC Cast Iron Grill) @@ -9716,7 +9716,7 @@ simple-conveyors itemupgrader-core itemupgrader screenfx@ -dense-ores-abundant +dense-ores-abundant@dense-ores tinkers-thinking@|匠心独运 (Tinkers' Thinking) simple-musket@ cash-ores@ @@ -9748,14 +9748,14 @@ turned-changed-extension immediatelyfast-reforged@ magic-mirror magic-mirror-fabric@magic-mirror -chassis +chassis@ fast-doll@fastdoll better-lily-pads@|更好的睡莲* mo-zombies-wave almost-all-the-ores @Geyser -supplementaries-squared +supplementaries-squared@ changed-addon-plus functional-armor-trim @@ -9799,7 +9799,7 @@ hexal@|咒法拓展* create-encased@ @treeplacer -death-knell +death-knell@ moreiotas@ numismatic-overhaul@¨numismatic-overhaul-reforged @hexbound|咒法组构学 (Hexbound) @@ -9817,11 +9817,11 @@ click-for-hot-chicks@ vanity-molten-pack vanity-spartan-pack woods-and-mires@ -@suggestion-tweaker +suggestion-tweaker@ Additional-Redstone@additional-redstone heartstone@ -dyed -wireless-redstone-re +dyed@ +wireless-redstone@wirelessredstone vanity-steel-pack vanity-viking @@ -9844,8 +9844,8 @@ chatimg|图片聊天 (chatImg) throwable-explosives @skillmmo archeon@ -chat-toggle@ -enchancement +chattoggle@ +enchancement@ useful-spyglass@ @@ -9876,19 +9876,19 @@ l2weaponry@|莱特兰-武器 (L2 Weaponry) zoom-o-matic@ @broken-tool @fishing-ruler -@command-relay +command-relay@ beasts-bosses the-one-probe-community-edition|检测器-社区版* -packageddraconic|封包龙之进化 (PackagedDraconic) +packageddraconic@|封包龙之进化 (PackagedDraconic) imitationcore big-sip@ floating @blast-travel skygrid@ disable-new-world-creation-screen-forge@disable-new-create-world-menu-forge¨disable-new-world-creation-screen-fabric@disable-new-create-world-menu-fabric -packagedmekemicals|封包通用机械 (PackagedMekemicals) -packagedastral|封包星辉魔法 (PackagedAstral) +packagedmekemicals@|封包通用机械 (PackagedMekemicals) +packagedastral@|封包星辉魔法 (PackagedAstral) mekanism-moresolarpanels@|通用机械-更多太阳能板 (Mekanism-MoreSolarPanels) paperandquill @@ -9898,7 +9898,7 @@ universal-bone-meal-forge@universal-bone-meal|通用骨粉 (Universal Bone Meal) @bottle-of-gender leave-my-bars-alone@ -all-enchantments-for-trade +mc-mods-enchantments-for-trade i-need-block spiky-spikes@ straw-statues@|稻草雕像* @@ -9914,7 +9914,7 @@ world-of-bosses mirabilis-vanilla-biome-overhaul -energized-power +energized-power@ carpenter tolerable-creepers anchor @@ -9933,7 +9933,7 @@ inventory-crafter maxs-armory|Max 的武器库 (Max's Armory) nefs-farm-decoration -create-armory +create-armory@ dangerous-wasps createfabricreibugfix@|机械动力Fabric版REI配方显示修复 (Create&REIBugFix/CreateFabric&REIBugFix) seasontweaks @@ -9942,7 +9942,7 @@ seasontweaks @automessenger -padoru +padoru@ snow-coated miracle-berry @@ -9965,7 +9965,7 @@ bring-color-to-my-skies portal-dungeons radiant-gear@¨radiant-gear-fabric -create-teleporters|机械动力:传送器 (Create : Teleporters!) +create-teleporters@|机械动力:传送器 (Create : Teleporters!) enchantato floating-block@floating-cube|浮空立方体 (Floating Cube) curious-lanterns @@ -10014,7 +10014,7 @@ boundless-flux @axolotlclient energy-nodes -fog-looks-good-now-fabric@ +fog-looks-good-now-fabric@fog thirst-was-taken@|口渴* unlimited-fluidity @@ -10028,12 +10028,12 @@ oceanic-expanse@|海洋拓展* origins-vampire|起源:吸血鬼 (Origins: Vampire) bad-to-the-bone¨bad-to-the-bone-fabric -workers +workers@villager-workers sculk-horde|幽匿部落* stratospherical-expansion candlelight-lets-do-a-candlelight-dinner@lets-do-candlelight|烛火晚宴 ([Let's Do] Candlelight) -let-me-play-iris +let-me-play-iris@ dimensional-depths create-molten-vents@ everything-as-a-hat¨@everything-as-a-hat|Everything as a Hat - 已失效 @@ -10045,7 +10045,7 @@ diamond-economy@|钻石经济* texels-paintings tinkers-expansion revelationary@ -fullstack-watchdog +fullstack-watchdog@ adventure-apparatus neruina@ @@ -10083,7 +10083,7 @@ mutant-monsters@ @physics-toys tarot-cards@ -chatmove +chatmove@ @forgedloaderapi public-transport-mod mineral-chance@ @@ -10139,7 +10139,7 @@ ae2_tools create-compats dont-drop-it@ nicemod-new-blocks@nicemod -forgematica@|全息蓝图 (Forgematica/Litematica-Forge) +forgematica@|全息蓝图 (Forgematica / Litematica-Forge) framland @blahaj-legacy|布罗艾:旧版 (Blåhaj:Legacy) deep-aether@|深入天境* @@ -10239,7 +10239,7 @@ improved-vanilla@ upgraded-netherite-aetherite betterwithpatches@ -pickable-orbs +pickable-orbs@pickable-health-orbs mobneutralizer @@ -10251,7 +10251,7 @@ ender-pearl-swap jer-ore-integration adorkable-dogs-pocky|DK狗的Pocky (Adorkable dog's Pocky) -realistic-explosion-physics +realistic-explosion-physics@ nitwitification items-to-mobs @@ -10266,7 +10266,7 @@ new-nether-chest@|下界箱子 (Nether Chested) plenty-plates@ simple-sponge new-paper-doll@paper-doll -ender-zoology@ +ender-zoology@|末影动物学* vectorientation@ seven-days-to-fix-parasitus dtm-integrations @@ -10299,7 +10299,7 @@ extraordinary-extra-totems @squidfriends beachparty@lets-do-beachparty|沙滩派对 (Let's Do Beachparty) -s33r-more-food +s33r-more-food@ froglight-backport @@ -10365,7 +10365,7 @@ wildberries kubejs-powah @hexkinetics|咒法动力学 (HexKinetics) -sand_box +sand_box@sandbox sublime spells-shields-x-tinkers-construct @@ -10396,12 +10396,12 @@ strategic-enchanting forged-in-fire lumy-skin-patch @le0s-spoons -@redstone-clock +redstone-clock@ anti-mob-griefing nbtedit-reborn@|游戏内NBT编辑器重制版 (In-game NBTEdit Reborn) the-filler-update@ -custom-machinery-create +custom-machinery-create@ @rightproperguiscale armor-trims@ revised-phantoms@ @@ -10432,7 +10432,7 @@ kubejs-tfc@ precision-prospecting@ potatoos-custom-structure-for-hbms-nuclear-tech fabric-seasons-terraformers-compat@ -fabric-seasons-extras@ +fabric-seasons-extras@|Fabric Seasons: 拓展 (Fabric Seasons: Extra) better-f3-plus@ fabric-seasons-delight-compat@ fabric-seasons-terralith-compat@ @@ -10524,14 +10524,14 @@ stat-check hit-indication@ multipart-machines-farming -lotweakr + tru-first-person-mod reduced-music-delay agers-giant-junkyard-dimension jsmacros great-big-world@ armored-mobs -inversia@ +astrological@ end-expansion-the-lamented-islands @@ -10558,11 +10558,11 @@ cherry-blossom-grotto parties pots-and-mimics-rpg -@gemspark +gemspark@ otakomod wall-jumping new-life -reeves-furniture +reeves-furniture@reevess-furniture @undying|不朽 (Undying) creatania boat-rocked @@ -10592,13 +10592,13 @@ alphabet-speedrun@|自定义速通挑战 (αβspeedrun) @symlink-check|符号链接拦截 (Symlink Check) tis-stringify -@dismount-entity +dismount-entity@¨dismount-entity-fabric dyeable-compasses@|染色指南针* supercompression|超级压缩 (Super Compression) better-hungteen-s-plants-vs-zombies|更好的HTPVZ (Better HungTeen's Plants vs. Zombies) piglinsafety|猪灵:多喝岩浆 (PiglinSafety) gatewayer -bocchud@|孤独HUD (BoccHUD/MiniHUD-Forge) +bocchud@|孤独HUD (BoccHUD / MiniHUD-Forge) arrowcollector@arrow-collector|你返箭吗 (Arrow Collector) saplingslayer|鸽子衔枝 (SaplingSlayer) quality-quails @@ -10607,8 +10607,8 @@ hydration halohud@ resourcify@ ioclias@ -twilights-flavors-delight@twilight-delight|暮色风味乐事 (Twilight Flavors & Delight) -@clean-f3 +twilights-flavors-delight@twilight-delight|暮色风味乐事 (Twilight's Flavors & Delight) +clean-f3@ enchanted-lib architect-tools-converter-1-7-10|建筑师工具 - 转换器 (Architect Tools - Converter) @@ -10623,7 +10623,7 @@ ships-mod-unofficial|船:非官方版 (Cuchaz Ships Unofficial) storage-overhaul chorus-warps aureate-reliquary -submerged-explosions +submerged-explosions@ netherite-items aim-plus reckless-drilling @@ -10673,7 +10673,7 @@ wizardy-delight@wizardry-delight tinyallies@ -all-da-nuggets +mc-mods-da-nuggets random-recipes starks|史塔克一家* easy-paper @@ -10715,7 +10715,7 @@ iron-bows-forge¨iron-bows-fabric filtered-chests -@anti-xray +antixray@anti-xray¨antixray-forge special-strength armorpoints@ easy-enchanting@|轻松附魔* @@ -10732,7 +10732,7 @@ suspicious-sand-maker create-cobblemon-industrialized@ create-pixelfactory ies-tweaks -@haunt-furnace +haunt-furnace@ player-ladder@ orb-of-origin-plus@ @@ -10746,12 +10746,12 @@ classic-minecraft-icon@ some-useful-ores @stardew-valley-mod rainy-harvest -mythic-mobs@ +mythic-mobs@mobs-of-mythology lost-features@lostfeatures bagus-lib@ @better-doors -3178320@server-pack-unlocker¨3178321 +server-pack-unlocker-forge@server-pack-unlocker¨server-pack-unlocker x-enchant @blahaj-remake @@ -10809,7 +10809,7 @@ workshop-for-handsome-adventurer desert-upgrade ocean-recovery more-armor-trims -all-the-trims@allthetrims +mc-mods-the-trims@allthetrims @bamboo-sign-editor|告示牌编辑器 (Bamboo Sign Editor) revival-orb@ stackable-trims @@ -10829,7 +10829,7 @@ emogg@ @festival-delicacies|节日佳肴 (Festival Delicacies) elytra-trims@ benefits-of-reading|雕纹书架注魔/阅页读著 (Benefits of Reading) -gothic-rpg +gothic-rpg@ arcadian-dream@|幻想之梦* dungeon-and-taverns @@ -10876,7 +10876,7 @@ stackable127@ wanderer-profession -cataclysmic-combat +cataclysmic-combat@ persona create-air-forge @@ -10892,7 +10892,7 @@ do-api@ @tp-chat-cmd|TP 聊天命令 (TP Chat Command) grabby-mobs@ pandas-falling-trees@ -iron-ender-chests +iron-ender-chests@ delightful-creators-fabric@|动力乐事 (Delightful Creators) deathbutthree@death-but-three|逝不过三 (Death But Three) @@ -10914,7 +10914,7 @@ overworld-piglins@ waveapi@ modlist panorama-screens@ -campfire-spawn-and-tweaks +campfire-spawn-and-tweaks@ ghostz@ better-totem-of-undying@better-totem-of-undying-forge¨better-totem-of-undying-fabric modonomicon@ @@ -10934,7 +10934,7 @@ skinned-carts quick-effect@quickeffect block-log -equipment-benediction|装备祝福* +equipmentbenediction@equipment-benediction|装备祝福 (Equipment Benediction) @gms|现代游戏模式选择器 (Modern Gamemode Switcher) dimension-localized-inventories skillcraft-modpack-tool @@ -10945,7 +10945,7 @@ worldsalads-opulence @wyrms pearfection -enderchests¨enderchests-fabric +enderchests@¨enderchests-fabric dragon-rider create-utilities-fabric@create-utilities|机械动力:实用物品 (Create Utilities) @@ -10963,7 +10963,7 @@ villagertradefix bullet-chat|弹幕聊天* -fishermans-trap +fishermans-trap@fishermens-trap removebats@|禁止蝙蝠生成 (RemoveBats) nabba enchantdemon|附恶魔 (EnchantDemon) @@ -10977,7 +10977,7 @@ stellarity @modern-sound @polished-gui -all-bark-all-bite +mc-mods-bark-all-bite lively-forests dynamic-fullbright@ @@ -11028,10 +11028,10 @@ renewable-spore-blossoms mobs-info@mobsinfo -@ngrok-api +ngrok-api@ -@swordunsheather|利刃出鞘:重铸 (Sword Unsheathe Recasting) +@swordunsheather|利刃出鞘:重铸 (Sword Unsheathe Reforged) rpgloot @sus-saver @@ -11056,12 +11056,12 @@ brown-mooshrooms @better-log4j-config @harvest wooden-hoppers -skeleton-horse-spawn@ +skeleton-horse-spawn@¨skeleton-horse-spawn-fabric configanytime@ faster-crouching@ -yeetusexperimentus +yeetusexperimentus@yeetus-experimentus xbob@|准星摇晃 (Crosshair Bobbing) -zombie-horse-spawn@ +zombie-horse-spawn@¨zombie-horse-spawn-fabric tinkers-katanas fbp yeetem-potions@ @@ -11094,7 +11094,7 @@ despawning-eggs-hatch@ mob-death-messages chunkapi@ @betterwaystonesmenu -@big-fish +big-fish@ nulltal@ caffeinefilled@ pet-transfer-trade-your-pets@pet-pass-trade-your-pets! @@ -11104,7 +11104,7 @@ dixtas-armory@ ingamestats@ hanger-system-overhaul isaidnosnow@ -jarsauth|客户端验证 (JarsAuth) - 此已不受支持¨@jarsauth|客户端验证 (JarsAuth) - >= 4.0 +jarsauth|客户端管理 (JarsAuth) - 此已不受支持¨@jarsauth|客户端管理 (JarsAuth) - >= 4.0 autoelytrapanic@ more-crossbows-cj multipart-machines-cooking @@ -11178,7 +11178,7 @@ remodified|你再造! (Remodifier) better-fusion-reactor-for-mekanism@ -growableores@ +growableores@¨growableores-ore-cane-forge¨growableores-ore-cane-neoforge golemsarefriends @@ -11186,7 +11186,7 @@ keep-command-history@keepcommandhistory generatorgalore -@map-shirts +map-shirts@ fireproof-boats dyenamicsandfriends @@ -11197,13 +11197,13 @@ hunger-reworked armor-status-hud-renewed|耐久信息显示:重生 (Armor Status HUD Renewed) boblib placeable-mobs@placeble-mobs -potion-blender +potion-blender@ t6-auto-attack-mod@t6-auto-attack forceasciifont-backport -@vmupdate|VM汉化更新 (VM Translation Update) +vmtranslationupdate@vmupdate|VM汉化更新 (VM Translation Update) trample-no-more@ -jeremyseq-damage-indicator +jeremyseq-damage-indicator@jeremyseqs-damage-indicator digs-dnd-origins superior-flat @@ -11219,7 +11219,7 @@ gilded-ingot chatpatches@|聊天补丁 (Chat Patches) burning-furnace@ shadowizardlib@ -ants-unleashed +ants-unleashed@ @seaborgium gold-fish pipeplus@ @@ -11257,7 +11257,7 @@ dark-matter@ simply-steel-continued@ simple-corinthium -chidori-origins-collection +chidori-origins-collection@ enhancedp2p|增强的P2P (EnhancedP2P) custom-de-upgrade-recipes|自定义 DE 升级配方 (Custom DE Upgrade Recipes) mode-switch @@ -11292,7 +11292,7 @@ custom-villagers|自定义村民* turtlematic remove-base-origins @cobblemon-delights|方块宝可梦乐事 (Cobblemon Delights) -redirectionor|异引定址 (Redirector)¨redirectionor-retro|异引定址 (Redirector) +redirectionor@redirector|异引定址 (Redirector)¨redirectionor-retro|异引定址 (Redirector) villager-mantle-fix|村民帽子修复* rechiseled-create@ xaeroplus@|Xaero的地图增强 (XaeroPlus) @@ -11315,7 +11315,7 @@ yamato-gun-mod@yamato-gun ars-mage-fight -epicfight-pirates +epic-sanji kubejs-entity-events-extension mc-dungeons-enchanting@|我的世界:地下城附魔 (MC Dungeons Enchanting) rei-custom-command|REI自定义命令 (REI Custom Command) @@ -11328,7 +11328,7 @@ makecold|冷境 (MakeCold) sculk-redstone-components@sculkredstonecomponents -toggle-enchantments +toggle-enchantments@ unbreakable-enchantment-forge@unbreakable-enchantment immersive-portal-gun@portal-gun|沉浸式传送枪* tac-craft-tactical-armor-pack @@ -11343,23 +11343,23 @@ illager-invasion@|灾厄侵扰* @touhou-origins-blessings altorigingui@ -dynamic-trees-pams-harvestcraft-2 -dynamic-trees-hexerei +dynamic-trees-pams-harvestcraft-2|动态的树:潘马斯农场2 - 果树附属 (Dynamic Trees Pam's Harvestcraft 2: Trees) +dynamic-trees-hexerei|动态的树:魔法巫师附属 (Dynamic Trees - Hexerei) minium-stone@ @fastrtp -tech-decorators@|科技装饰商*¨@tech-decorators-fabric|科技装饰商 (Tech Decorators) -dynamic-trees-ars-nouveau +tech-decorators@|科技装饰商* +dynamic-trees-ars-nouveau|动态的树:元素魔艺附属 (Dynamic Trees - Ars Nouveau) @kazzmons-magecraft @metal-bundles -tidal-towns +tidal-towns|潮汐小镇* blossom-blade cute-kiwi-birds-new-animal -moremobheads +moremobheads@ ouchies@ @traditional-asphalt @thaumic_boots @@ -11367,7 +11367,7 @@ carpeted-stairs@ just-enough-archaeology bedrock_world -world-preview@ +world-preview@|世界预览* the-five-nights-at-freddys-mod@the-five-nights-at-freddys-mod#all-versions|玩具熊的五夜后宫 (The Five Nights at Freddy's Mod) easylan@|自定义LAN局域网联机服务器 (EasyLAN) @@ -11395,7 +11395,7 @@ moogs-end-structures@mes-moogs-end-structures @oneclickcrafting @genshin-ui fenomena-structures@phenomena-structures -first-join-message +first-join-message@ expansive-weaponry wabi-sabi-structures-forge¨wabi-sabi-structures-fabric jobsaddon@ @@ -11531,7 +11531,7 @@ mother-silverfish mcretector@ little-botanics -ex-pattern-provider|AE2扩展 (ExtendedAE) +ex-pattern-provider@extended-ae|AE2扩展 (ExtendedAE) @integrated-circuit creative-disk engineers-construct @@ -11553,7 +11553,7 @@ pipe-master-2000|管道专家 2000 (Pipe Master 2000 / Pipe Googles) command-macros@|命令宏* @shwetro|上海地铁装饰组件 (The Shanghai Wetro Mod) yuushya-modelling|方块建模* -tactical-aid|战术医疗* +tactical-aid@|战术医疗* @clear-enchanting fishing-bobber-detector @unfix-mc-181190|村民折扣叠加 (Unfix MC-181190) @@ -11597,11 +11597,11 @@ cozy-foods-milk-tea opolis-miners@ netherite-but-cheaper @fabric-hammers -items-displayed-forge@¨items-displayed-fabric@items-displayed +items-displayed-fabric@items-displayed¨items-displayed-forge@ wood-converter hammer-mod -realisticsleepfabric@realisticsleep +realisticsleepfabric@stevesrealisticsleep zombies-actually-siege hex-gloop@hexgloop|咒法凝浆* the-void @@ -11614,7 +11614,7 @@ wither-dimension-whitelist usefulfood-reborn@ ancient-warfare-2-tweaked@ -cuffed +cuffed@ rockn-roller@rocknroller bodies-bodies@ potionparticlepack@|药水粒子包 (Potion Particle Pack) @@ -11624,7 +11624,7 @@ potion-bundles@|药水捆* kofi-table@ better-mcdonalds-mod@ @itemframesplus -sinytra-connector@connector +sinytra-connector@connector|信雅互联* noclip@ diamond-in-the-rough-as-in-obsidian@diamond-in-the-rough factioncraft@ @@ -11665,7 +11665,7 @@ player-stages|玩家阶段* generation-stages|生成阶段* ars-oscura@|黑暗魔艺* bobby-reforged -shut-up-gl-error +shut-up-gl-error@ no-spider@ terracart-reloaded dme @@ -11778,7 +11778,7 @@ nb_mod stacked-armor-trims@ @final-beta -@better-trim-tooltips +better-trim-tooltips@ totally-enough-pain@ custom-village|村民调教* animaticareforged @@ -11847,7 +11847,7 @@ simple-enchantments simple-weapons-for-better-combat wither-drops-netherite-templates @spineless -immersive-melodies +immersive-melodies@ theobsidianboat dragon-survival-compatibility@|龙之生存:兼容* bettercookedaxolotls @@ -11949,7 +11949,7 @@ prehistoric-nature-silurian-dimension grass-seeds@ minecraft-dungeons-weaponry ahznbs-naruto-mod-addon -random-village-names@ +random-village-names@¨random-village-names-fabric mooshroom-tweaks@ grinners-ents log-cleaner@ @@ -11962,7 +11962,7 @@ souls real-seasons eternal-winter move-boats@ -omnom +omnom@ forest-x-reborn@ exlines-bark-carpets@bark-carpets exlines-more-carpets @@ -12005,9 +12005,9 @@ harvestcraft-tweaker the-legend-of-the-mudman mutagenesis nether-update-backport -l2hostility|莱特兰-恶意 (L2Hostility) -packagedthaumic|封包神秘 (PackagedThaumic) -cat-eyes-night-vision-toggle-mod@cat-eyes +l2hostility@|莱特兰-恶意 (L2Hostility) +packagedthaumic@|封包神秘 (PackagedThaumic) +cat-eyes-night-vision-toggle-mod vtdownloader@ smithing-mod @@ -12026,7 +12026,7 @@ prehistoric-nature-triassic-dimension flower-power vr-combat@ embeddium@ -no-arrows-in-you@naiy +no-arrows-in-you@ @unicopia|奇幻小马国 (Unicopia) ryans-zombies lights-out-2 @@ -12057,7 +12057,7 @@ deep-dark-regrowth textrues-embeddium-options@|TexTrue的Embeddium视频界面 (TexTrue's Embeddium Options) silent-mine headhunter-mod@shadows-formidable-foes-the-headhunter -yungs-better-jungle-temples@|YUNG的丛林神庙优化 (YUNG's Better Jungle Temples)¨yungs-better-jungle-temples-fabric|YUNG的丛林神庙优化 (YUNG's Better Jungle Temples) +yungs-better-jungle-temples@|YUNG的丛林神庙优化 (YUNG's Better Jungle Temples)¨yungs-better-jungle-temples-fabric|YUNG的丛林神庙优化 (YUNG's Better Jungle Temples)¨yungs-better-jungle-temples-neoforge|YUNG的丛林神庙优化 (YUNG's Better Jungle Temples) forlorn-beasts harpiccore-mod poonggis-add-more-bosses @@ -12087,9 +12087,9 @@ loginar-storage@ night-vision-flash-be-gone @ancient-return -allayed +mc-modsayed honkai-star-rail-12|星铁12* -torchflower-relit +torchflower-relit@ fexs-random-stuff-mod k9@k9-mod the-digimod-beta|方块数码宝贝 (The Digimod) @@ -12110,7 +12110,7 @@ your-log-saw-something-last-night@ tubes-reloaded@ -natures-spirit|自然之灵 (Nature's Spirit) - 已失效¨@natures-spirit|自然之灵 (Nature's Spirit) +natures-spirit@|自然之灵 (Nature's Spirit) @natrium bossominium@ @sort-extension @@ -12120,7 +12120,7 @@ history-of-middle-earth-legacy|中洲历史:传承 (History of Middle-earth: L hostile-humans@ classic-and-simple-status-bars@cssb|经典且简易的状态栏 (Classic and simple status bars) @turtle-charging-station -@your-reputation +your-reputation@¨your-reputation-jade@¨your-reputation-wthit@ futurediary|未来日记 (FutureDiary) infiniverse@ use-item-on-block-event@ @@ -12172,7 +12172,7 @@ netherrocks@ efw-forgotten-place @vulkanite-mod -yungs-better-end-island@|YUNG的末地岛屿优化 (YUNG's Better End Island)¨yungs-better-end-island-fabric|YUNG的末地岛屿优化 (YUNG's Better End Island) +yungs-better-end-island@|YUNG的末地岛屿优化 (YUNG's Better End Island)¨yungs-better-end-island-fabric|YUNG的末地岛屿优化 (YUNG's Better End Island)¨yungs-better-end-island-neoforge|YUNG的末地岛屿优化 (YUNG's Better End Island) bellsandwhistles@ daniinatorul @@ -12204,7 +12204,7 @@ prehistoriclegacy redyed enchantmentdisabler@enchantment-disabler miners-glasses -relics-and-alchemy +relics-and-alchemy@ @greate advanced-world-selection accelerated-decay@ @@ -12223,7 +12223,7 @@ akkamaddis-arsenic-and-lace|Arsenic and Lace - 新 xiyus-exchanted-book|饩雨的附魔书 (xiyu's Exchanted book) la-abuelita -rotted-forge +rotted-forge@rotted rustic-furniture-compat @no-realms-button|Realms按钮移除 (No Realms Button) @benchantments @@ -12263,9 +12263,9 @@ akkamaddis-simple-cthon@ @heads-hurt-too! pooping-animals good-boy@ -nethers-overhaul +nethers-overhaul@ +better-battle-towers|战斗高塔,启动!* -gregtech-ce-unofficial-child-happy-edition@|格雷科技社区版非官方版儿童快乐版 (GregTech CE Unofficial : Child Happy Edition) @axiom @@ -12290,7 +12290,7 @@ potion-of-armor@ tenebrous-lands@ super-better-grass configurable-boss-bars@ -nuclearcraft-neoteric +nuclearcraft-neoteric@ beastly-beacons creeplets@ thermoo@ @@ -12318,7 +12318,7 @@ haraldsbetterstructures squake ae2-uel-extended|应用能源2非官方拓展 (AE2 Unofficial Extended) terraria-calamity-mod|泰拉瑞亚灾厄 (Terraria Calamity) -darkrtp-rtp-random-teleport +darkrtp-rtp-random-teleport@darkrtp cute-bears additional-fruits@ bigger-better-end-cities@ @@ -12330,7 +12330,7 @@ persistentcooldowns|物品冷却持久化 (Persistent Cooldowns) advancement-based-spawning@ heroic-armory-legacy -yungs-menu-tweaks@|YUNG的菜单调整 (YUNG's Menu Tweaks)¨yungs-menu-tweaks-fabric|YUNG的菜单调整 (YUNG's Menu Tweaks) +yungs-menu-tweaks@|YUNG的菜单调整 (YUNG's Menu Tweaks)¨yungs-menu-tweaks-fabric|YUNG的菜单调整 (YUNG's Menu Tweaks)¨yungs-menu-tweaks-neoforge|YUNG的菜单调整 (YUNG's Menu Tweaks) entity-distance-1-12-2|实体距离 (Entity Distance) coolesthardcore@coolest-hardcore taxcastlepillager @@ -12338,9 +12338,9 @@ pesky-pirates@ subterrestrial@ illusioners-tower bad-npcs -darkfeather-golden-feather -darkspawn-teleport-to-spawn -darksmelting-smelt-armor-and-tools +darkfeather-golden-feather@darkfeather +darkspawn-teleport-to-spawn@darkspawn +darksmelting-smelt-armor-and-tools@darksmelting fast-build digi-applimobs|数码宝贝宇宙应用怪兽* duckies @@ -12371,7 +12371,7 @@ fizzle grimoire-api cristel-lib@ -more-sleeps +more-sleeps@more_sleeps o-coracao-da-selva creative-experience more-than-50 @@ -12380,7 +12380,7 @@ forge-soul-like-armors-reworked @meds-and-herbs soul-like-monsters-epic-fight-addon souls-like-parry -@tcdcommons +tcdcommons@ autotranslation@|自动翻译 (AutoTranslation) villages-and-pillages@ @@ -12399,7 +12399,7 @@ tw-resurrection @dice any-lanterns@any-lanterns! horse-tack -darkmobs-increase-mob-difficulty +darkmobs-increase-mob-difficulty@darkmobs @apollo-the-parrot mob-variants galvanization @@ -12451,7 +12451,7 @@ just-sword-blocking mltpojectmonster|銘洛天的怪物增强 (MLTPojectMonster) @relics-of-the-sky|空岛遗物 (Relics of the Sky) -ae2-stuff-extended +ae2-stuff-extended@ butchers-delight-foods@ better-falling@ dmcloot @@ -12484,7 +12484,7 @@ weapons-of-miracles-epicfight@weapons-of-miracles mcdar|我的世界:地下城法器 (MC Dungeons Artifacts) dnt-swamp-hut-overhaul -jaopcagt +jaopcagt@ smidgeon-o-bliss cable-flux@12.3.5 jet-and-elias-armors @@ -12552,7 +12552,7 @@ better-wake-up-position@|更好的起床位置 (Better Wake-up Position) railroad-blocks-forge@railroad-blocks¨railroad-blocks fossilmon@ -opack2reload|资源包惰性重载/抑验怠载 (OPack2Reload) +opack2reload|资源包惰性重载/抑验怠载 (0Pack2Reload) @wits @motleys-music-discs @@ -12601,7 +12601,7 @@ dynamic-village@ jammies@ dj-villager ars-energistique -chatimages|聊天图片 (ChatImage) +chatimages@chatimageN|聊天图片 (ChatImages) create-more-drill-heads@|机械动力:更多钻头 (Create: More Drill Heads) create-liquid-fuel@|机械动力:液体燃料 (Create: Liquid Fuel) @rays-cool-armor @@ -12647,7 +12647,7 @@ legendary-origins@ flow@ lit-it-up@ lucky-cat|招财猫* -all-the-wizard-gear +mc-mods-the-wizard-gear better-tools-and-armor berrfect@|完莓无缺* mazemanicore @@ -12657,15 +12657,15 @@ uncanney-valley @quality-sounds dolt-compat embeddium-extension -@wakes +wakes@ create-immersive-portal-integration dangers-in-the-darkness spookycraft -kelpie +kelpie@ @viavanillaplus dead-mans-abyss the-leagues-of-the-dead -@centered-crosshair +centered-crosshair@ @create-fabric-sodium-fix realm-rpg-creep-crop fexcraft-common-library @@ -12710,7 +12710,7 @@ pick-blockstate@pickblockstate @epcore|满同态核心 (Epimorphism Core) oh-my-sherd archaeology-banners@ -mobvote-2023-crab +mobvote-2023-crab@ totem-curse zombies-are-real @@ -12718,7 +12718,7 @@ timeless-and-classics-guns-lesraisins-append-pack@lesraisins-weapon|TaC:绿葡 permanent-chat-logs@permanent-chatlogs|聊天记录保存 (Permanent ChatLogs) mob-strength@ catastrophemod - +@water-generators|水发电机 (Water Generators) fishes-undead-rise-ye nameless-servers@ noisium@ @@ -12732,7 +12732,7 @@ modular-item-api@¨truly-modular-arsenal@¨truly-modular-archery@¨truly-modular @actionhunger trafficcraft@ banilla-hammers@ - +everyx-hotpot|一起火锅 (EveryXHotpot) @hira-hira tierability@ soul-collector@ @@ -12781,7 +12781,7 @@ petal@ creatures-of-runeterra@cor from-another-world@ pumpkin-moon@ -zombie-onslaught +zombie-onslaught@ neighborly natural-progressions@natural-progression charged-explosives@ @@ -12800,7 +12800,7 @@ chat-colours@ mekanism-weapons|通用机械武器 (Mekanism: Weapons) vanilla-reflex@ flighthud-reborn|鞘翅飞行抬头显示:重生 (FlightHUD: Reborn) - +celestial-enchantments|星月附魔* clearsky|洁净天空 (ClearSky) educate-nitwit damage-spawns-mobs @@ -12808,7 +12808,7 @@ decorative-sniffer-egg@ gilded-sherds@ camps-castles-carriages rainbow-reef@ -@advancement-no-more +advancement-no-more@ aqua-geode medieval-buildings@ @@ -12833,7 +12833,7 @@ advanced-enchantments@|进阶附魔* oaks-nature@ geophilic-reforged lglegacy@|延迟监视:移植版 (LagGogglesLegacy) -@smooth-scrolling-refurbished +smooth-scrolling-refurbished@ medieval-weapons-pack@ celestial-artifacts|星月遗物* @@ -12855,7 +12855,7 @@ nbt@ separated-leaves@ pangteens-immortal-adventure@|PangTeen的平凡冒险 (PangTeen's Immortal Adventure) -simple-shops|简单商店* +simple-shops@simpleshops|简单商店* forgiving-border|仁慈的世界边界 (ForgivingBorder) snow-mercy @@ -12917,7 +12917,7 @@ speedy-ladders @youaremyhatnow -fruits-delight|果园乐事* +fruits-delight@|果园乐事* destruction-difficulty@destructiond|破坏困难* @@ -12928,7 +12928,7 @@ asmc-performance-patch mrcrayfishs-gun-mod-unofficial|MrCrayfish的枪:非官方版 (MrCrayfish's Gun Mod: Unofficial) @fish-tanks 4913730@ram-compat - +@wcsm|中国式学校 (Chinese School Mod) zombies-reworked-forge@zombies-reworked legendary-monsters@ catontoasts-mobs @@ -13015,7 +13015,7 @@ sakura-cherry-additions pillagers-gun|掠夺者的枪 (Pillager's Gun) hammers-and-smithing -tetra-booster-pack +tetra-booster-pack@withering-boon-for-tetra everlasting-skins legacy-console-sounds@ @@ -13036,15 +13036,15 @@ ore-discovery-broadcast@ alchemists-garden opolis-strainers book-eater@ -rotom-phone@ +rotom-phone-cobblemon@ @world-comment|随处随笔 (World Comment) ultramarine-refabricated|群青:重织* long-nbt-killer @curio-attribute|饰品属性 (CurioAttribute) consistent-aim|持久瞄准/移眼盯住* -@arrow-pointers -bareback-horse-riding +arrow-pointers@ +bareback-horse-riding@ what-the-gecko@ forgotten-pots-forge explorations@ @@ -13098,7 +13098,7 @@ eugenes-guan-dao@ eugenes-wealthy-plains-village lets-do-herbal-brews@lets-do-herbalbrews|煨茶酝露 (HerbalBrews) enchant-icon@|附魔标签* -vintage-delight|腌渍乐事* +vintage-delight@|腌渍乐事* @hotshot biospherical-expansion@ @serendustry @@ -13116,7 +13116,7 @@ awesome-magic@awesome_magic christmas-dweller create-curio-goggles@ @cobblemon-loot-balls -dontusecommand|请别用指令 (DontUseCommand) +dontusecommand@|请别用指令 (DontUseCommand) beans-backpacks@ randomjs@ @@ -13137,7 +13137,7 @@ metabolism@|新陈代谢* adv-js|Advancement JS - 更新较慢¨@advancementjs teleportcraft@ frights-delight@|惊吓乐事 (Fright's Delight) -travelers-compass +travelers-compass@ @artemis-thin-logs configjs@ hardrock-tools-materials @@ -13157,7 +13157,7 @@ clickmanaita command-toast|指令面包机* @hex-research|咒法研究 (Hex Research) cwg-far-plane-view -firmacivilization +firmacivilization@firmaciv|群峦传说:航海文明 (Firma: Civilization) catbop-things player-mobs@ @create-trimmed @@ -13196,10 +13196,10 @@ respite-creators-fabric@ simple-pizzas@|简单比萨* rapscallions-and-rockhoppers@ pescatore@ -apocalypse-now +apocalypse-now@ cenozoic-nightmare-the-horror-of-prehistory -@quickbackupmulti|多槽位备份 (QuickBackupMulti-Fabric) +quickbackupmulti@|多槽位备份 (QuickBackupMulti-Fabric) slashblade-japanese-addon-pack-reforked|拔刀剑日系附属重置版 (SlashBlade Japanese Addon Pack Reforked) @create-fabric-fixes @@ -13215,7 +13215,7 @@ cerbons-api-forge@cerbons-api arcane-apprentices kirara nether-gold -create-interactive@interactive +create-interactive|Create: Interactive - 已放弃¨@interactive this-tsunami blendium@ awakened-bosses @@ -13250,14 +13250,14 @@ digestive @inventory-binds octo-lib@ -farmers-utils +farmers-plus¨farmers-utils|Farmer's Plus - 旧 architects-friend bagus-cosmetic@ floatingitems ars-ocultas@ tetracelium@ -create-food-fabric@create-food +create-food@ a-block-of-charcoal|木炭块 (A Block of Charcoal) @@ -13304,7 +13304,7 @@ ae2-network-analyser mxtune customui|自定义UI (CustomUI) deadly-monsters-patched -glodium +glodium@ aether-delight dungeonz@ @@ -13330,7 +13330,7 @@ phosphorcrashfix sound-physics-remixin|籁* hextended-staves@ aquaculture-delight -vics-point-blank +vics-point-blank@ occultism-kubejs tetra-extras@ anilink @@ -13359,7 +13359,7 @@ mmm-lib create-design-n-decor@ -enviromine-lite@ +enviromine-lite@|更多生存要素:精简版 (EnviroMine Lite) knaves-needs@ azurelib-armor@ @container-tooltips @@ -13470,7 +13470,7 @@ leftist-potions@ more-delight-fabric@more-delight¨more-delight-forge mceconomy3 @antique-atlas-4 - +pollution|污染* tinted-campfires@ additionalstatus epic-knights-slavic-armory @@ -13497,7 +13497,7 @@ mekanismecoenergistics@mekanism-eco-energistics waila-blacklist|Waila黑名单 (WAILA Blacklist) item-blacklist|物品黑名单* continue@ -the-dawn-era@ +the-dawn-era@|黎明纪元* tridents-n-stuff@ create-hand-crafting@ @@ -13523,7 +13523,7 @@ museum-curator@|琳琅满目* pixel-hud@ @immibis-macroblocks @heater -@natures-melody +@natures-melody|自然旋律 (Nature's Melody) astemirlib@ create-unbreakable-tools@create_unbreakable timeless-heroes@superhero @@ -13557,7 +13557,7 @@ nether-sheep@|暗黑羊* light-level-description set-home-waypoints leaky -curse-of-pandora|潘多拉之咒 (Curse of Pandora) +curse-of-pandora@|潘多拉之咒 (Curse of Pandora) champions-rotn-edition tempest@ simpledifficulty-for-underdog @@ -13575,7 +13575,7 @@ killer-rabbit-transformation|转化杀手兔* bronze-viking astikor-carts-redux@astikorcarts-redux -third-person-shooting|第三人称射击* +third-person-shooting@third-person-shooting-zero|第三人称射击* sight|视域* @the-first-city threetag-palladium@|钯 (Palladium) @@ -13584,7 +13584,7 @@ threetag-palladium@|钯 (Palladium) permanent-status-effect@permanent_status_effect|永久状态效果* -world-play-time +world-play-time@ ikwila-i-know-what-im-looking-at experienced-crops@experienced_crops medieval-seedbags @@ -13610,11 +13610,11 @@ no-baby-zombies¨@no-baby-zombies|No Baby Zombies - 已失效 combat-nouveau@ @hanging-on - +@lazy-mystical|神秘农业:懒人 (Lazy Mystical) udlede@|港口* hammer-time hammerz -@pickup +@pickup|物品框互交优化 (Pickup) livingadventuretrails suggestions-api@ colorful-subtitles@ @@ -13624,7 +13624,7 @@ extended-potions dimension-inventorys|维度物品栏* dimension-rules|维度规则* erroring-entity-remover-reforged@eer-reforged - +@vs-tournament fabricated-exchange@ more-variants-and-biomes badoptimizations@ @@ -13656,7 +13656,7 @@ framed gear-core@ hideasterisk@hidemodded|隐藏“已修改” (HideModded) monster-eggs@ -rain-shield@ +rain-shield@|驱雨盾* cerbons-better-beacons@ @funny-roulette @worldeditcui-forge @@ -13699,24 +13699,24 @@ elenai-dodge xenon@xenon-forge|氙* riftstorm-rpg - +better-babies morecreativetabs-forge-fabric@morecreativetabs @shove! sunflower-delight -mystias-izakaya|夜雀乐事* +mystias-izakaya@mystiasizakaya|夜雀乐事* carpet-everything lets-do-brewery|盛节精酿 (Let's Do Brewery) hephaestusplus@ re-dimension-stages|维度阶段重制版 (Re-Dimension Stages) -lemoned +lemoned@lemoned-(farmers-delight) @horizonlimit fallen-paladins-and-priests @rgb @virtualpump -everymole +everymole@ mutant-iceologer@mutant-iceologer-mod @days-gone @extra-loot|额外战利品 (Extra Loot) @@ -13729,7 +13729,7 @@ epic-fight-infernal-gainer prodigy-mechanics just-an-end-anchor@ -memory-usage-title +memory-usage-title@|标题显示内存* sweeper-maid@|清洁女仆* @@ -13790,14 +13790,14 @@ startinginventory wireless-speakers|无线扬声器* -jewelrycraft-2 +jewelrycraft-2|珠宝工艺2* fallflyinglib enchantable-spike xaeros-map-chest-tracker-integration@ warden-horn too-many-efficiency-losses -srp-addon-cotesia-glomerata@ +srp-addon-cotesia-glomerata@|SRP:寄生蜂 (Scape and Run Parasites Addon: Cotesia Glomerata) damage-lock|磁场天锁 (DamageLock) @@ -13807,7 +13807,7 @@ custom-portals@|自定义传送门* dirty-lens@ @improved-anvils styled-player-list@styledplayerlist -create-love-war +create-love-war@ chainmailed serious-player-animations@ @@ -13836,13 +13836,13 @@ thermals-delight @advanced-hud better-farmers-combat -simple-butchery@ +simple-butchery¨@simple-butchery|Simple Butchery - 已失效 butchery enchantment-reveal@ copycats@ -the-great-alchemical-compendium +the-great-alchemical-compendium@ desperate-measures@ block-slabs-mod roost-re-hatched @@ -13862,10 +13862,10 @@ piglin-army decorative-ladders@ more-foods -mordern-kitchen@modern-kitchen|现代厨房 (Modern Kitchen) +modern-delight@|现代乐事* better-main-menu@bettermainmenu -more-wizards +more-wizards@more-wizards-more-magic-series oldresearch@ ascension-megamons@ simply-sulphur@ @@ -13948,14 +13948,14 @@ sign-button startinv@ @server-replay ftb-stoneblock-companion -ash-of-sin-custom-anti-enchantment-entity|罪业余烬:自定义反附魔实体 (Ash Of Sin:Custom Anti Enchantment Entity) -ash-of-sin-anti-high-level-enchantment|罪业余烬:反高级附魔 (Ash Of Sin:Anti High Level Enchantment) -ash-of-sin-custom-anti-item-entity|罪业余烬:自定义反物品实体 (Ash Of Sin:Custom Anti Item Entity) -ash-of-sin-custom-anti-seat-entity|罪业余烬:自定义反坐垫实体 (Ash Of Sin:Custom Anti Seat Entity) -ash-of-sin-custom-entity-anti-effect|罪业余烬:自定义实体反状态效果 (Ash Of Sin:Custom Entity Anti Effect) -ash-of-sin-custom-entity-effect|罪业余烬:自定义实体状态效果 (Ash Of Sin:Custom Entity Effect) -ash-of-sin-custom-entity-item|罪业余烬:自定义实体装备 (Ash Of Sin:Custom Entity Item) -ash-of-sin-eternal-entity|罪业余烬:永恒实体 (Ash Of Sin:Eternal Entity) +ash-of-sin-custom-anti-enchantment-entity|罪业余烬:自定义反附魔实体 (Ash Of Sin: Custom Anti Enchantment Entity) +ash-of-sin-anti-high-level-enchantment|罪业余烬:反高级附魔 (Ash Of Sin: Anti High Level Enchantment) +ash-of-sin-custom-anti-item-entity|罪业余烬:自定义反物品实体 (Ash Of Sin: Custom Anti Item Entity) +ash-of-sin-custom-anti-seat-entity|罪业余烬:自定义反坐垫实体 (Ash Of Sin: Custom Anti Seat Entity) +ash-of-sin-custom-entity-anti-effect|罪业余烬:自定义实体反状态效果 (Ash Of Sin: Custom Entity Anti Effect) +ash-of-sin-custom-entity-effect|罪业余烬:自定义实体状态效果 (Ash Of Sin: Custom Entity Effect) +ash-of-sin-custom-entity-item|罪业余烬:自定义实体装备 (Ash Of Sin: Custom Entity Item) +ash-of-sin-eternal-entity|罪业余烬:永恒实体 (Ash Of Sin: Eternal Entity) fundamental@ wendigo @@ -14014,7 +14014,7 @@ armortip@ true-herobrine@ oam-by-choupiclou2007@ore-and-more-(oam) squat-grow@ -backported-wolves +backported-wolves@ betweenlands-extended-config deeper-caves@deeper_caves @@ -14055,7 +14055,7 @@ crystalline-ender-eye|晶化末影之眼* ars-caelum@ elytra-chestplates|鞘翅之甲* variants-and-ventures@ -horseshoes@ +horseshoes@|马掌* questlines@ endofherobrine@ thirstcanteen@thirst-canteen|口渴-水壶 (ThirstCanteen) @@ -14065,7 +14065,7 @@ thaumic-energistics-extended-life-fork prehistoric-nature-decorations tinyfoes pyradium -anvilcraft@|铁砧工艺:原版科技 (AnvilCraft) +anvilcraft@|铁砧工艺:重力科技 (AnvilCraft) tiny-mob-farm-remastered@ create-aquatic-ambitions@ ffl-trinkets-compat @@ -14074,7 +14074,7 @@ mc-vr-playground cosmopolis-mod@cosmopolis caveopolis-mod@caveopolis_mod flexipause@ -geysers|间歇泉* +geysers@|间歇泉* @moar-enchantments @lose-your-touch man-of-many-planes@ @@ -14103,10 +14103,10 @@ respackopts@ fortuitous-feasts monazite@|独居石* music-control|音乐控制* - 不再更新¨@music-control|音乐控制 (Music Control) +stellarcore|星核 (StellarCore) - -ash-of-sin-custom-entity-attack-effect|罪业余烬:自定义实体攻击状态效果 (Ash Of Sin:Custom Entity Attack Effect) -ash-of-sin-soul-like-boss-battle|罪业余烬:类魂BOSS战 (Ash Of Sin:Soul Like Boss Battle) +ash-of-sin-custom-entity-attack-effect|罪业余烬:自定义实体攻击状态效果 (Ash Of Sin: Custom Entity Attack Effect) +ash-of-sin-soul-like-boss-battle|罪业余烬:类魂BOSS战 (Ash Of Sin: Soul Like Boss Battle) wh40kmc-project pixelmon-bank|Pixelmon 银行* @@ -14138,7 +14138,7 @@ mace-backport @steve-eat-stew imaginary kuvalich|赤毒玄骸 (KuvaLich) -ae2-insert-export-card@ +ae2-import-export-card@ @magick-experience @repairable-disc-11 @@ -14154,7 +14154,7 @@ torches-in-water|水中火把 (Torches in Water) pigs-with-fireworks infinityspell|无限魔咒 (InfinitySpell) multipart-machines-grinding -ash-of-sin-custom-anti-high-atk-entity|罪业余烬:自定义反高攻击力实体 (Ash Of Sin:Custom Anti High ATK Entity) +ash-of-sin-custom-anti-high-atk-entity|罪业余烬:自定义反高攻击力实体 (Ash Of Sin: Custom Anti High ATK Entity) @bioforge quad@ @@ -14179,7 +14179,7 @@ tectonic-tweak forge-essentials-client@ @world-host -spit-splat@ +spit-splat@|唾溅兽* maced|重锤一击* nether-villager-trader @no-exp-enchanting-reimagined @@ -14227,7 +14227,7 @@ aquatweaks|水下微调 (AquaTweaks) aquatweaks-compat|水下微调:兼容 (AquaTweaks Compat) @potions-re-glint simpletextoverlay@ -bountiful-fares@|丰饶食记* +bountiful-fares|丰饶食记* - 已失效¨@bountiful-fares|丰饶食记 (Bountiful Fares) @ancient-debris-tweak|远古残骸微调 (Ancient Debris Tweak) @@ -14274,7 +14274,7 @@ biome-decoration-fix simply-tools@ immersive-snowgen@isg|沉浸式雪生成* the-wandering-gambler -cheatdetector@|作弊检测器 (CheatDetector) +cheatdetector|作弊检测器 (CheatDetector)¨@cheatdetector|作弊检测器 (CheatDetector) - 已失效 just-another-spawner stack-size-edit-fabric@stack-size-edit @remote-resource-pack|远程资源包 (Remote Resource Pack) @@ -14290,7 +14290,7 @@ apotheotic-creation@apotheoticcreation eiorecipesteinductionsmelter -ash-of-sin-better-ai|罪业余烬:更好的AI (Ash Of Sin:Better AI) +ash-of-sin-better-ai|罪业余烬:更好的AI (Ash Of Sin: Better AI) dimensional-cake-rebuilt@dimensional-cake-rebaked medieval-village-dimension create-big-contraptions@big-contraptions @@ -14303,7 +14303,7 @@ pantheonsent@ @moddetectionpreventer dramatic-spawning -all-mobs-attack-villagers +mc-mods-mobs-attack-villagers cicada@ immersive-cvm @@ -14330,7 +14330,7 @@ semi-hardcore placeables@ bigbanana|🍌大香蕉🍌 (BigBanana) @dabaosword|大宝刀 (DabaoSword) -@look +look-eye-of-cthulhu@look @salmonberry-addition pet-collecting@ @yummy_glass @@ -14392,7 +14392,7 @@ lhmob-difficulty-increase|变强的怪物 (LH Mob Difficulty Increase) from-the-shadow-reborn @life-crystals -the-slumbering-omen@ +the-slumbering-omen@|沉睡的预兆* ftb-guides-forge¨ftb-guides-legacy-forge|FTB Guides - 旧版 @@ -14417,7 +14417,7 @@ andromeda@|群星* mobdisguises@ inventory-generators creating-space-gravity-addon -alexs-caves-torpedoes@alexscaves-torpedoes +alexs-caves-torpedoes@alexscaves-torpedoes|Alex 的洞穴:物品 & 鱼雷 (Alex's Caves: Stuff & Torpedoes) @slavic-cuisine @@ -14428,7 +14428,7 @@ tfc-fresh-water-everywhere tfc-more-swords galleria@ constructs-casting@ - +@tinkersinnovation|工匠创新 (Tinkers' Innovation) delicious-delights @vietnamsdelight @@ -14483,8 +14483,8 @@ additional-attributes@ suicide-key -@mcrconvertlib -@annotationlib +uranus@ +annotationlib@ @waxed nether-overload ender-relay@ender-relay-ff @@ -14513,8 +14513,8 @@ hearty-meals@ enderfake @alwaysonline - - +@awakenedsilverfish|蠹虫觉醒了 (AwakenedSilverfish) +rawore-on-1-12-2@rawore_on_1.12.2|1.12.2的粗矿 (rawOre_on_1.12.2) entityjs@ @poem-of-star-wars @hex-ways @@ -14537,7 +14537,7 @@ valentines-blessing@valentines-blessing-lilypads-roses decent-biomes@ d-placeable-food-fabric-forge@3d-placeable-food fan-shaped-cake@fan-shaped-cake-mod -dried-spice@ +bitter-brews@ richards-coffee-tea-mod@richards-coffee-and-tea-mod ribes-adventures@ @@ -14566,7 +14566,7 @@ biome-cows@ simple-stopwatch liolib@ giacomos-better-dye -ash-of-sin-custom-anti-trap-cage-entity|罪业余烬:自定义反捕捉笼实体 (Ash Of Sin:Custom Anti Trap Cage Entity) +ash-of-sin-custom-anti-trap-cage-entity|罪业余烬:自定义反捕捉笼实体 (Ash Of Sin: Custom Anti Trap Cage Entity) elementus@ dedicated-bud @@ -14575,7 +14575,7 @@ tfc-barrels melter@ armour speedometer-and-more -ash-of-sin-anti-same-modifier|罪业余烬:反重复修饰符 (Ash Of Sin:Anti Same Modifier) +ash-of-sin-anti-same-modifier|罪业余烬:反重复修饰符 (Ash Of Sin: Anti Same Modifier) giacomos-automatable-cauldrons giacomos-bookshelf no-outbreaks@ @@ -14597,7 +14597,7 @@ cafes-birding@ kafs-valentine-special@ create-deepfried@ sleepable-create -create-railways-navigator@ +create-railways-navigator@|机械动力:铁路导航* speed-drifter@speed_drifters|MC飞车 (MCSpeed) rearmour @@ -14622,12 +14622,12 @@ create-optical mob-battle-music@|战斗音乐* - +@concerto|协奏曲/一起听 (Concerto) @invisible-frames-for-forge -factions-and-curiosities@ +factions-and-curiosities@|派系与奇遇* @anyfps -@create-amazing-trading +create-amazing-trading@ westeroscraft-worldeditcui @@ -14645,7 +14645,7 @@ back-up-beds@ - +mountain-sea-and-continent-two|山海大陆2 (Mountain Sea and Continent Two) vinery-tfc tkbs-campfires @@ -14671,11 +14671,11 @@ better-one-block|更好的单方块* the-fletching-table-mod@ @create-militarized - -sword-soaring|御剑飞行* +customemoji|自定义表情 (CustomEmoji) +sword-soaring|史诗战斗:御剑飞行 (Epic Fight - Sword Soaring) bigger-ae2@ scalar -trials-towers@|试炼高塔* +trials-towers@|试炼高塔 (Trials Chambers) blus-sign-pack-mts-iv alexs-mediumcore@ sherdsapi@ @@ -14703,12 +14703,12 @@ marbleds-api-mapi@ magma-bucket|岩浆桶* ropes paniclecraft -cpmpvc@|自定义玩家名称Plasmo语音兼容 (Customizable Player Models Plasmo Voice compat) +cpmpvc@|自定义玩家模型Plasmo语音兼容 (Customizable Player Models Plasmo Voice compat) ydms-gunblades-mod@ydms-gunblades warp-pads@warppads marbleds-arsenal@marbledsarsenal @inventory-tabs -mob-spawning-fix +mob-spawning-fix|生物生成修复* lh-miracle-road|奇迹之路之魂系加点 (LH Miracle Road) compatskills-fork @@ -14716,7 +14716,7 @@ reskillable-fork @subtick electroblobs-wizardry-continuation|巫术学:延续 (Electroblob's Wizardry Continuation) -agricraft-continuation +agricraft-continuation|农业工艺:延续* create-nuke@ egg-particle-fix|鸡蛋粒子修复* chicken-chunk-patcher @@ -14725,16 +14725,16 @@ achievement-detection-fix|成就检测修复* @chais-inventory-sorter - +@mysteriumlibunofficial witcherypatch@|巫术补丁 (WitcheryPatch) pin simple-pings@ -great-scrollable-tooltips +great-scrollable-tooltips@ waterframes@ eugenes-whistle-spur|友止殷的马哨和马刺 (Eugene's Whistle & Spur) - +quickquark|畅启速始 (QuickQuark) minecraft-mineralogy seed-delight|种子乐事* transmog@|幻化* @@ -14749,8 +14749,8 @@ stewing-baking@|炖与烤 (Stewing & Baking) am2playground@ @astrocraft -neat-shaders-fix@|极简血量显示 - 光影修复 (Neat - Shaders-Fix) -worldtooltips-shadersfix@|掉落物信息显示 - 光影修复 (WorldTooltips - ShadersFix) +neat-shaders-fix@|极简血量显示 - 光影修复版 (Neat - Shaders-Fix) +worldtooltips-shadersfix@|掉落物信息显示 - 光影修复版 (WorldTooltips - ShadersFix) options-enforcer@ macaws-bridges-biome-o-plenty@|Macaw的桥梁:超多生物群系附属 (Macaw's Bridges - Biomes O' Plenty) @@ -14758,10 +14758,10 @@ renhider@ itemframeremover@|物品展示框移除器 (ItemFrameRemover) @legacy-debug-pause trick-or-treat -ninjin-entities-by-hedaox +ninjin-entities-by-hedaox@ninjinentities dangerrpg-continuation@|危险RPG:延续 (DangerRPG Continuation) zelda-sword-skills-continuation@|塞尔达剑技:延续* -@forgotten-relics-unofficial|失落遗物学:非官方 (Forgotten Relics Unofficial) +@forgotten-relics-unofficial|失落遗物学:非官方版 (Forgotten Relics Unofficial) mc-mods-enhanced|截图增强 (Screenshots Enhanced) the-rings-of-power@|力量之戒/魔戒众戒 (The Rings of Power) @@ -14774,10 +14774,10 @@ ivtoolkit-arcana-rpg-continuation-edition|IvToolkit:延续 (IvToolkit Arcana R @byzh-picgen|byzh's 麦块画图 (BYZH's Picgen) tropicraft-continuation|热带世界:延续* battle-tower-continuation|战斗高塔:延续* -kswitch +kswitch@ tfc-lumberjack tfc-better-stone-tools -protons-additions +protons-additions@ kinetic-anti-cheat@kac where-are-the-ores@ underp-hangables@ @@ -14786,7 +14786,7 @@ mod-observer@ mineralogy-continuation@ ubc-ore-registrar|科学地质:矿石注册 (UBC Ore Registrar) genesis-2d|创世纪 (Genesis) - +@non-update-reloaded|不再有更新重制版 (NonUpdate Reloaded) radiation-zone|辐辽地带* adventure-backpacks-patched|探索者背包:延续* @@ -14795,16 +14795,1290 @@ adventure-backpacks-patched|探索者背包:延续* bhops@ from-spores just-dire-things -hit-feedback|攻击反馈* +hit-feedback@|攻击反馈* @hasoook middle-earth@|中洲 (Middle-earth) windows-keyboard-fixes-fixes-sticky-keys@|Windows 键盘修复 - 粘滞键 (Windows Keyboard Fixes - Fixes sticky keys) statuesmod-fix@statuesmodfix|雕像模组-修复 (StatuesMod Fix) @numericaltabping - +ninjinentities-unofficial@|Ninjin Entities-非官方版 (ninjinentities-Unofficial) sanguine-arsenal-reforged|血染武装重铸版* -respawn-obelisks -flintandsteel-improve -forge-zombie-plague-mod-2-wip@zombie-plague-2-hardcore-zombie-apocalypse +respawn-obelisks@ +flintandsteel-improve@ +forge-zombie-plague-mod-2-wip@zombie-plague-2-hardcore-zombie-apocalypse|僵尸瘟疫2 (Zombie Plague 2) colored-grasses -more-default-options \ No newline at end of file +more-default-options +@livelydanmaku|缤纷弹幕 + +treecapitator-updated|砍树更新版* +@offhandlights|副手光源 (Offhand Lights) +keep-your-mouth-healthy|保持口腔健康* +prehistoric-nature-jurassic-dimension + +many-more-structures@¨many-more-structures-depricated@more-structures +mobs-are-friends@ +polytone@ +@calcium-fps|钙 (Calcium) +delightful-burgers@ +cinderloe-project +lotweakr|魔戒微调 (LOTweakR) +lotr-renewed-extended|魔戒:复兴-拓展 (LOTR: Renewed Extended) +lotr-companions-renewed-addon|魔戒:同伴 (LOTR: Companions) +dvs|自定义魔戒小建筑 (DVS) +mffs +lotr-extended|魔戒大陆拓展 (LOTR Extended) +bitcrafting +fart-shit-pee +statuseffecthud-updated|状态信息显示更新版 (StatusEffectHUD Updated) +capejs@ +advanced-machines-patcher +@immersive-tooltip|沉浸式的工具提示 (Immersive:Tooltip) + +sound-controller|Sound Controller - 已弃用¨@sound-controller +cagerium +advanced-inventory-mod@ +rolling-down-in-the-deep@ +dwarven-realm|矮人诸国* +renewed-eras-of-arda-addon|阿尔达纪元:复兴 (Eras of Arda: Renewed Addon (First and Second Age)) +legendary-item@|魔戒传说物品* +lotr-middleearth-tweaks|中洲微调 (MiddleEarth Tweaks) +thaumcraft-integration +reach-display@ +gravitation-suite-patcher +anti-rat-dungeon +modchu_defaultmodelset +create-storage@fxnt-create-storage +avaritia-item|无尽特效物品* +kingdom-of-rin-regions +durability-speed-legacy-backport +inventory-on-death-mod +berries-cherries-delight@berries-and-cherries +silents-delight@|幽匿乐事 (Silent's Delight) +darwin-sprinting-system|达尔文疾跑系统* +camera-overhaul-reforged@ +monolib@ +@pyrofrost +animal-armor-trims@ + +better-safe-bed@ +modchu_models +ice-and-fire-spellbooks@ +exlines-fishing@ +cavernous-delight +@steep-surface-fix + +arthropocolypse@ +@kaleido + + +combat-skill|战斗技巧* +life-is-precious|生命是宝贵的 (Life is precious) + +advanced-skills@|进阶技能* +nuts-delight +@vegetables-delight +enderpack@ +ingame-mod-configs|游戏内模组配置 (InGame Mod Configs) +playertag|玩家标签 (PlayerTag) +hide-names|隐藏名称* +camo-suits|迷彩套装* +vtubruh-lotr-mobs-new@vtubruh-lotr-mobs|Vtubruh的魔戒生物 (vtubruh LOTR Mobs) + + +@create-more-features +armadillo-scute-armor@ +new-shield-variants@ + + +way-much-faster-oxidize-reborn@ +bn-blood-particles@ +bn-weapons@ +ecotones@ +froglins +create-armor-trim +slashblade-resharped@|拔刀剑:重锋 (SlashBlade: Resharped) +spawn-mod@ +@smooth-swapping-1.20.4-port +@create-tab-fix +@srp-origins +origins-extra-keybinds@origins-extra-keybinds-fabric +epic-knights-addon + +@arknights-skadi-orca-plushie|【明日方舟】斯卡蒂的虎鲸抱枕 ([Arknights] Skadi Orca Plushie) +sona-survival-101|唢呐生存指南* +@more_villagers +cult-of-the-wither +clochetweaks + + +@multiproto +frostbytes-improved-inventory@ +mekanism-extras@mekanism_extra|通用机械:扩展* +leaf-beds@ +unidentified-enchantments@unidentified_enchantments +protection-pixel@|机素防护* + + +createdpcompat@ + +lava-waterblock + +constant-music@ +supercore +extreme-reactors-create-compat +modchu_playerformlittlemaid +totally-lit@ +mo-shiz-mod +aetheric-tetranomicon + +arda-addon|阿尔达拓展*¨lotr-arda|阿尔达拓展 (Arda Addon) - Snow的阿尔达拓展 +@potionwarning +a-good-place@ +aether-protect-your-moa@ +advanced-rocketry-2 +compostimprove@ +superb-steeds@ +coal-piece + + +@mechmonstrosity|机械巨兽 (MechMonstrosity) +slash-illager@ +@create-spawnerboxer +skeletalband|骷髅乐队乐谱 (SkeletalBand) +alexs-caves-entropy|Alex 的洞穴:熵 (Alex's Caves:Entropy) +mekanism-explosives|通用机械:炸药* +@minimal-coords-hud + + + +avaritiareborn@|无尽贪婪:复兴 (AvaritiaReborn) +cherry-shrimp@ +pick-command@|俺拾的指令* +regalliv +extra-addition-s@extra-additions + +@amethyst-shield|紫水晶盾 (Amethyst Shield) +@plateplate|板板 (PlatePlate) + + +@difficulty-tweak|难度调整 (Difficulty Tweak) + +@herbal-delight + + +@compatlib +warriors-of-past-epoch +the-ghast-cow@ +@alternate-current-unofficial +birds-on-a-wire +no-hurt-animation +incense +wild-lands-2 +hullabaloo@ +invinci-dogs-ssp +@noglow|禁止发光 (noglow) +timeless-and-classics-zero@|永恒枪械工坊:零 (Timeless and Classics Zero) + +@concentration|专注 (Concentration) +terra-curio@|泰拉饰品* + +cobblemon-counter@ +cobblemon-move-inspector@ +cobblemon-spawn-notification@ +cobblemon-pokenav@ +cobblemontrainers@ +the-ink-arena@ + +epicfight-integration|史诗战斗·集成 (EpicFight Integration) +@stop-spiders-from-climbing +kubejs-enderio@ +polymorphic-energistics@ +war-of-the-ring-mc|魔戒大战 (The War of the Ring MC) +redstone-clock-mod@|红石钟 (Redstone Clock) +create-cobblestone@ +@another-pickaxe +@selfexpression +electricalcraft +@elecfurn +what-is-stone-colorful-caves@what-is-stone-(colorful-caves) +vtones +heavy-inventories|物品负重* +vs-addition@ +gravity-torch +lifesteal-forge-fabric@ +mores-by-its-infinite +dragonite-gear +lets-do-addon-fluids@ + + +@just-glowing-buttons +rats-hats +biome-reactors +mystical-agriculture-tiered-crystals@ +tpaplusplus@tpa++ +warlerys-hq +call-of-yucutan@|尤卡坦的呼唤 (Call of Yucatán) +redman@|红超人 +lets-do-addon-compat@ + +worldeditcui-forge-edition +slime-delight|粘液乐事* +darkcap@ +@ryoamium +quality-equipment +seals +nocubes-better-smoker +@shutdown-on-death +mekanism-energistics +ae2-network-visualiser +ahznb-sword-plus +anbu-bingo-book-for-ahznbs-shinobicraft +ahznbs-naruto-mod-reroll +xycraft-override +xycraft-machines +xycraft-world +battlemusic@ + +@embyui +engineered-golems +axifier@ +renderjs +@enchantment-compat +dehand@ +jadecolonies +@cobblemon-mike-skills +diamond-star-combat +modern-ae2-additions@ +create-metallurgy@|机械动力:冶金学 (Create: Metallurgy) +@client-info-fix +the-shy-guy +@tea-time +@cobbreeding +@cobblemon-myths-and-legends-addon +@rctmod +create-klinks-n-klangs@klinksnklangs +mo-than-enough-guns@ + +forge-creeper-heal|Forge 苦力怕坑修复* + + +@momos-skiphand|莫莫的折跃之手 (Momo's SkipHand) +curse-of-disintegration +adventure-backport|冒险模式向后移植* +@oreganized-refabricated|井然有矿:重织 (Oreganized Refabricated) +yosby +@zundamod +common-network@ +addurdisc@|自定义唱片 (AddurDisc/Add your disc) +enigmatic-addons|神秘遗物扩展* + +@bloodscythe +dungeons-delight@ +stronger-potions@|更强的药水* + + +@particular + +reforgedplay-mod +sqript +natures-delight@|生灵乐事 (Nature's Delight) +reimagining-potatoes@ +@legacy-resource-pack-adapter +insane-stamina +bren@ +@power-hud +plushables@|毛绒玩偶* + + + +@rcspeedbuild +@staff-of-the-king-orange|橙王的权杖 (Staff of the King Orange) + +path-under-gates +ojs-guilds +command-macro-key@|命令宏键* +realm-rpg-quests-rewards +@roadworks +unlucky-tnt@ +fastboot@ + +tardis-refined@ +ocean-villager-trader@ +@precise-manufacturing|机械动力:精制工艺 (Create: Precise Manufacturing) +@create-new-age-alexs-caves-integration +create-kryeit@ +animationoverhaul@ +starbunclemania + + +display-qien@ +@village-healthcare +cubic-villager +@morecursors|更多光标 (MoreCursors) +true-infinity +nukateams-gun-lib@ntgl +fantastic-biomes-cave@ +nukacraft@thenukacraft +enchantment-limiter +emi-ores@ +@bread-skin-mite|面包皮 (Bread Skin) +extra-gore +chassiscore@ +@spit-splat-fabric +@moderation +normalcore@ +appliede@ +waystones-teleport-pets@ +@sneaky-link +create-mortar@ +forgelin-continuous@ +@ripples-of-the-past-killer-queen-addon +ninjin-knockback-dbc-by-hedaox +wings-3 +dstathud@ +opticmanager@ +ribbits@ +@actually-camel + + + +raws-visual-keybinder + + +@scoreboardtweaks +rsinfinitewireless +rustic-engineer@ +artsandcrafts@ +mermaid-legend|人鱼传说* +endcake|末影蛋糕 (EndCake) + +@mcsudo + +scp-remake +@scp-fallen-foundation + +create-heat-js@ +createaddoncompatibility@ +more-difficulty-levels +alternacraft +sheep-squeak@ +fabric-simple-animated-guns +a-v-a-in-minecraft@a.v.a-alliance-of-valiant-arms-guns +coordinates-display@ +@acrylicraft|亚克力窗口 (AcryliCraft) +towelette@ +shc-pvz-zengarden@ +unusual-foods-delight|奇食乐事 (Unusual food's Delight) +re-fruitful +dark-rites-2 +advitam-addon-for-requiem@memento-mori +potheads + +skyfall-meteorites@ +fancyclear +pathfinders-spade +legacy-minecraft@legacy4j +festive-creepers +essential-features +piston-control-forge¨piston-control + +blahaj-restitched@|布罗艾重制版* +@tabbychat-2-reforged +lithostitched@ +pogfish +launch-time@|启动耗时* +killer-table +trading-table +winter-decorations +fancy-snowy-weather +winter-ambience +dralards-rock-candy-mod + + + +@explosion-breaks-no-block|爆炸不破坏方块 (Explosion Breaks No Block) +via-romana@ +lithic-coins|石质硬币* +dynamic-trees-for-natures-spirit@|动态的树:自然之灵附属 (Dynamic Trees for Nature's Spirit) +gore-edition +christmas-wish-in-a-bottle +chiseled-bricks +unethly-origin@ +dimensional-totem@ +placeable-gunpowder +library-for-ar-reworked + + + + +craftdev-core +costume + +borzoi-dogs@ + +nether-exorcism@nethers-exorcism +integrated-villages@ +taxdeepvillager +@voxelprints-desert +music-on-demand +leadable-bats +canes-wonderful-spiders + + +@scribble +@text-formatting-everywhere +extended-item-information +mod-sound-volume-options@mod-volume-options + +teams-hud +@tpm|传送管理器 (TeleportManager) +@camera-obscura +wzorescanner +@potion-recipes +wither-totem@wither-skeleton-totems +@player-bones + +more-apples-hyj|更多苹果 (More Apples) +fancy-enchantments|奇异附魔* +ash-of-sin-adventure-dimension|罪业余烬:冒险维度 (Ash Of Sin: Adventure Dimension) +push-forward@|猪突猛进* +ymn@|你现在是我的了! (You're Mine Now!) +thermal-endergy@ +mekanism-turrets-fences +nuka-cola-classic +draconic-machinery +@voxelprints-halloween +iap-gobber@ +iap-botania@ +iap-industrial-foregoing@ +iap-silents-gems@iap-powah + +iap-omega-craft +iap-mekanism +industrial-agriculture-plugin-silents-mechanisms + +roads-and-roofs-tfc +taxvillagearchitect +taxoceanarchitect +nethers-flora + +microcosm +chinese-flying-island-tower +@netherite-tools-for-crackers-witherstorm-mod +better-maces +jack-o-launcher +the-otherworld-mod +craftingxp@ + +dmmttba@ +fzzy-config@ +no-shield-delay@ +musicpower@|音乐之力 (MusicPower) +macrocraft@ +camerapture@ +simple-voice-radio@ + +adorned +fence-on-slab +monochromatic-blocks@ + + + + +@inventiveinventory +boxlib@ +mokels-bossfight-saphyra +resource-explorer@resource_explorer +@patcher +autoreconnectrf@ +disable-accessibility-screen@ +@fly-high + +@fly-apple|飞苹果 (Fly Apple) + +@hoyoi +rogues-and-warriors@ + + + +@tfc-support-indicator +tfc-poisoned-drinks +smartercontraptionstorage|智能动态结构存储 (SmarterContraptionStorage) +lexiconfig@ + +@advancementsfullscreen +luckys-wardrobe@ +@forkkit +@more-affordable-than-ever +what-am-i + +@camoverlay +autoplant +@skip-backup-screen +@polysprint +@crashpatch +@vanillahud +@damagetint +@polyblur +@colorsaturation +@hitbox +lains-random-creation|LAIN的随意创作 (Lain's random creation) +autochefs-delight@ + +bindcommands@ +short-grass@ +stairs-but-chairs@ +@yumo-compactmachines-por|压缩空间:产量推演 (yumo compactmachines por) +dynamic-trees-for-fruit-trees|动态的树:妙趣果园 🍊附属 (Dynamic Trees for Fruitful Fun 🍊) +dynamic-trees-for-better-end|动态的树:更好的末地附属 (Dynamic Trees for BetterEnd) +dynamic-trees-autumnity|动态的树:秋原附属 (Dynamic Trees - Autumnity) +dynamic-trees-for-bloomingnature|动态的树:BloomingNature附属 (Dynamic Trees for BloomingNature) +dynamic-trees-terralith|动态的树:Terralith附属 (Dynamic Trees - Terralith) +dynamic-trees-for-meadow|动态的树:青青草甸附属 (Dynamic Trees for Meadow) +dynamic-trees-for-beachparty|动态的树:沙滩派对附属 (Dynamic Trees for Beachparty) +dynamic-trees-for-vinery|动态的树:葡园酒香附属 (Dynamic Trees for Vinery) +tfc-aesthetics@tfc-plus-aesthetics +smooth-gui@ +offershud@ +perspektive@ +ore-harvester@ +flightassistant@ +biomefog@ +edgeless-chat-screen@|无边界聊天框* +villager-death-messages@ +@smooth-skies +clist@ +tothestarsremake@ +galacticraft-gravity +dragon-mounts-even-more-dragons|龙骑士附属:附加龙 (Dragon Mounts: Even More Dragons) +xplus-contingameime@|游戏内输入法 XPlus 版 (XPlus ContingameIME) +@watersource2|水源 2 (Water Source 2) +radomraidspawn|随机袭击生成 (Random Raid Spawn) +enigmatic-legacy-legacy|神秘²遗物* + +nco-java-legacy-lib +forge-souls-like-universe@souls-like-universe + + + +neutral-animals@ +create-upgraded-armor +fbp-renewed@ +chat-impressive-animation@|聊动魅影* + +pianocraft@ +jazzymusicality@musicality +@boids +buckshotroulette@|恶魔轮盘赌 (BuckshotRoulette) +customnpcs-unofficial@ +@fast-trading +simple-wooden-pipes +simplywalk@ +persistent-stuff@ +lan-operators@ +compatdatapacks@ +the-luminous-mod@ + + +@burst-door-open|破门而入 (Burst Door Open) + + +chain-suspension-forge@chain-suspension¨chain-suspension +cui@ +emi-enchanting@ +clientsort@ +immersive-ui@ + +curios-continuation@ +@minekimi +blind-accessibility@minecraft-access +enchanting-tree@enchantingtree +dragon-enchants +item-placer@ +expandedworld +monster-hunter-villager@ +jcraft-eyes-of-ender +@return-dirt-background + +@reset-keys-confirmation-screen +idle-boost@ +fabricbettergrass@|更好的草地 (FabricBetterGrass) +@lightweight-inventory-sorting +@stonecutter-gui-remastered +@loom-gui-remastered +@unseaworthy +@chromaanvils +thermal-and-space@ +create-curios-jetpack +epic-knights-antique-legacy +viking-samurai-knight-items +barely-simple-staffs@barely-simple-staff + + +alexs-caves-delight@ +alexs-caves-adventure@ +divine-weaponry + +hook@hoook|抓钩* +fix-guard|格挡修复 (FixGuard) +@greg-caves|格雷的洞穴 (Greg Caves) +better-mob-combat@ +mob-player-animator@ +depression@|抑郁症* +more-rpg-classes@ +minimalism-leaf-decay@minimalism_leaf_decay|极简快速落叶* +biome-modifier-for-fabric@|Fabric版群系编辑器 (Biome Modifier for Fabric) +chunkloader-simple +apollyon +worldweaver@ +netherite-compass@ +the-darkness-will-find-you@ +silent-screenshots@ +cr3stal-updatet@crestal +toggle-subtitles@ +ok-boomer-zoom@ok-boomer + +@forcegl2.0-remapped + +rendi@|重生:伤害免疫机制移除 (ReNDI) +create-questing@ +@create-train-perspective +elainalike@|魔女之绘 重生:重生 (ElainaLike Reborn:Reborn) +take-back-your-sword@|收回你的剑!* + + + +travel-friendly-food-fabric-forge@travel-friendly-food +stardew-valley-food@ +minecolonies-compatibility +bettergamma@ +more-lectern-variants@ +@ase +lush-cave-trader@ +oceans-enhancements@ +xp-jellies +aromatic +onekeyminerforge|一键连锁Forge版 (OneKeyMinerForge) + +retargetato@|约谊敌众 (ReTargetato) +iceandfire-fabric@|冰火传说Fabric版 (IceAndFire Fabric) +tomanos-vehicle-mod +ancient-sands@ +hs-bosses +chubby-mobs +repair-gem|修复宝石* +better-weaponry-compatible-with-better-combat +disable-front-perspective@ + + +thaumcraft-6-aspects-for-jei@ +@up-and-away + +@ripples-of-the-past-hermit-purple-addon +nc-steam-additions@nuclearcraft-steam-additions +aura-cascade|气场流注* +rac-compat@ +spartan-weaponry-addon-toolkit@ + +sneaky-tree-growing-forge@sneaky-tree-growing¨sneaky-tree-growing-fabric +hungry-zombies +@gravity-gourds +usa-delight +experience-farm +@ad_extendra-continuation +nebulus-juice-trader@ +cthulhu-fishing@ +large-super-potato|大型超级马铃薯* +@craft-time +the-orcs +made-in-abyss-shroombears +squinkers +mokels-bossfight-kinora +@create-high-pressure +create-framed@ +trackwork@ +oritech@ +the-impossible-library@ +perspective-mod-redux@ +more-cartography-tables@ +more-barrel-variants@ +wheelbarrow@ +simple-automation +better-paragliders@ +fallen-wizards-more-magic-series@ + +@whiffowisp +mango-cats +tax-tree-giant +taxskyvillager +compostable-rotten-flesh +villager-in-a-bucket@ +nebulus-trader-for-the-desert +nebulus-jungle-trader@nebulus-trader-for-the-jungle +mushroom-villager-trader@ +nebulus-better-portals@ +resource-ghouls + +create-legacy@ +@create-bronze-age +wind-bottle@|风瓶 (wind bottle) +lc-tech@ +minecolonies-tweaks +text-placeholder-api@placeholder-api|文本占位符 API (Text Placeholder API) +@gravity-api-fork + +@tt20 + + + +kubejs-mekanism-unofficial +@mediaplayer|媒体播放器 (MediaPlayer) +bakery-villager-trader +nebulus-trader-for-the-plains +mokels-more-spiders + +exposure-catalog@ +skinchanger + +@halflifemenu +sitting@sitting+ +forgotten-east@ +brazil-legends + +custom-item-despawn-duration@|自定义掉落物消失时间* +your-items-to-new-worlds@ +enhanced-boss-bars@enhanced-boss-bars-mod|更好的Boss血条* +cutetrade@ + +smoothmenu-refabricated@|平滑菜单:重制版 (SmoothMenu Refabricated) + +toexistingstacks|添加到现有堆叠 (ToExistingStacks) +@postmortal-particles +@give-me-a-new-splash-text +@less-annoying-fire +treasuredistance +affinity@ +chaos-moon +@healthindicator + +@auto-sprint-fix +lets-do-emi-compat@ +health-indicator@health-indicators +aiming-fix@ +compasshud@|指南针HUD (CompassHUD) +mini-boss-boss-bars@ +berserker-rpg-class@ +fromanotherlibrary@ +mounted-pearl-bring-your-mount-along-when-you +biome-id-fixer +immortal-coral@ +immersive-guns@ + +additional-rpg-jewelry@ +mekanism-ad-astra-ores@ +question-ducks-ambient-fireflies +travelerz@ +the-rise-of-minerals|矿石崛起* +gregtech-steam-additions +gregtech-nomifactory-edition +create-ethium +create-contraption-terminals@ + +strata-recipes +strayed-fates-forsaken +snowyleavesplus@ +shield-overhaul@ +g-weapons-mod-gargantuan-weapons-mods|G武器 (G-Weapons) +backtools@|工具后置/后背工具展示:重制版 (BackTools) +epic-fight-guandao-moveset|史诗战斗:关刀 (Epic Fight - Guandao Moveset) +epicfight-dual-greatsword +spell-checker@ +sparkle@ +@visible-traders +villagers-inventory +removehud@ +@orthocamera +third-person-crosshair-fabric +@hitrange +black-moon@ +dynamic-fire-overlay@ +firorize@improved-fire-overlay +smoke-extender +@nohotbarlooping +@higher-chat +mekanism-cardboard-tooltip@ +durability-notifier@ +gregtech-extended-chemistry +centrifuge-tiers +distant-friends@ +the-world-of-herobrine +primal-storage@primalstorage +@potioncorereloaded|药水核心重制 (PotionCoreReloaded) +yamazakura-reforked|山樱之刃重置版 (Yamazakura reforked) + + +apothic-spawners + +sinocore|华夏核心 (SinoCore) +tinted-dyes@ +dynamic-trees-ecologics@|动态的树:丰富的生态附属 (Dynamic Trees - Ecologics) +craftablecapes@|可合成的披风 (Craftable Capes) +tamago@ +@clickthrough2.0 +cat-jammies-fabric@cat-jammies +open-computer-resurrected +@advancements-reloaded +oc2r +eu-p2p-tunnel@eup2p|EU能源P2P通道 (EU P2P Tunnel) +@hold-onto-everything +ardagrass@ +geocluster@ + +@knives-construct + +updating-world-icon@ +shared-resources@ +tech-dimension@ +tilt-break@ +item-frament@ +water-vision@ +randomized-default-fireworks@randomizeddefaultfireworks +glowing-torchflower@glowing-torchflower#all-versions +@clock-hud-renew +cameranoclip +barriers-dont-block-rain@ +no-render + +runningshoes|跑鞋 (Running Shoes) +fluid-void-fading@fluidvoidfading +@movement-in-gui +glowing-eyes@glowing-eyes#all-versions +youarch +true-darkness-fabric@ +esf-entity-sound-features@esf|实体声音特性 (Entity Sound Features) +nomoreglowingpots@ +smooth-particles@ + +5544292@unloaded-activity +@improperui +neverenoughanimation +reds-stagger-parry +additional-placements@¨additional-placements-fabric@ +akicaters-shelves@akicaters-shelf-mod +refurbished-furniture|MrCrayfish 的家具:重制 (MrCrayfish's Furniture Mod: Refurbished) +improved-stations-forge¨improved-stations¨improved-stations-for-1-19 +elemental-wizards-rpg-class@elemental-wizards-rpg +pov-that-one-short-friend +onward-and-upward +weapon-case-loot|武器箱战利品* +mace-but-3d@ +@healthindicators +smoothcoasters@ +do-a-flip@ +@no-death-animation +veindigging@ +too-many-entities@ + + + + +datapack-breakpoint@datapack-debugger|断点调试 (Datapack Debugger) + + +frosted-heart|冬季救援:寒霜之心 (The Winter Rescue: Frosted Heart) +create-planetary-tweaks@cp-tweaks +entris@ +@sushi-bar +lumi@lumi1710 +pet-the-frog@frog-petting +ex-nihilo-extras@ +cycle-title-screen-splash@ +hide-invisible-armor@ +inventory-tweaks-refoxed +bigshot@ +more-immersive-aircraft +legendary-survival-overhaul|传说生存* +mineral-delight +not-just-sandwich@notjustsandwich +fantasyfood|幻想食物 (FantasyFood) +mc-modsthefood@allthefood +villager-names-fabric@villager-names +trial-vault-restock@trialchamberrestock +hot-green-fire +phantom-flames +darktitlebar@ +cubes-without-borders@ +block-parry-dodge +fargos-enchantments +toostrongmonster +simplystronger +tacz-durability +bigger-lightning-storms +eternal-limbo +legoman +petcreepers-mod +tugkandemans-weaponry@ + + + + + + + +@noanysus +rekusaeater@|Re艹 (ReKusaEater) +jsg@ +@potion-mixing|药水混合 (Potion Mixing) +sandfilter@|砂滤器 (Sand Filter) +resaplingslayer@|雁雅得枝 (ReSaplingslayer) +cerberu@|狱牙抵战 (Cerberus) +remoreloyaltrident@|远亦得珍 (ReMoreloyaltrident) +potionlevelfix@|药引对注 (PotionLevelFix) +reunmending@|以验垫砧 (ReUnmending) +reghostjump@|引殃髑至 (ReGhostJump) +rebroken-blade@|隐影刀珍 (Mowzie's Mobs: ReBroken Blade) +attackagain@|又御刀追/追击 (AttackAgain) +@sectionsign +@allow-chat +retro-damage-indicators@ +@impropers-3d-minimap +beddium@ +create-thermal-compat +create-lagless@ +create-ironworks@ +@create-vibrant-vaults +steam-power +kevs-library@ +remove-purpleprison-ads +timeoutfixes +forgeskyboxes@ + + +crust@ + +sc-structurecraft@structurecraft +minehop@|Minehop - 主¨minehoplite@ +placeabletools +rlfoliage@ +bc-remastered +@deepdrilling +copperworks + + +miner-villager +villager-venture +alekiships@ +alekishipsbop@ +antique-trading-ship +small-horse-stable +shrek-the-ogre@shrek + +the-anomaly +desert-behemoths-sandworms + +vermintide-rising +armor-of-the-ages@|时代铠甲 (Armor of the Ages) + + + +@betterf3-stationapi +ftb-quest-localizer|FTB Quest 本地化 (FTB Quest Localizer) +modpack-update-checker@ +minimotd-fabric +effecttimerplus@ +thaumic-concilium@ +equivalentexchange + +coral-up@ +plushie-buddies@ +@the-aethers-delight +@wheelchairs +dnt-pillager-outpost-overhaul +mage-flame@ +@totem-party-popper +@powerless-refined-storage +forgotten-graves@ +day-zombies +morecoal|更多煤炭 +jjku + +immersive-combat-feathers +ghosties-monocle +ender-dragon-loot + +oh-the-trees-youll-grow@ +oh-the-biomes-weve-gone@|我们走过的生物群系 (Oh The Biomes We've Gone) +@dblockbusterdisplays + + +@waygl +no-sneaking-over-magma@ +harmonia@wasabiwhisper-harmonia +configurable-head-drop@ +@connectored-c2me-(c2me-fork-for-connector)|C^3M 引擎 (Connectored Concurrent Chunk Management Engine) +structure-expansion@ +armored-doggo@ +the-newest-goatman +epic-mob-siege-nightmare +jupiter@ +airport +just-dandy@ +@uk-roads +my-totem-doll@my_totem_doll + + +dis-enchanting-table@ + + +gt-top-addition|格雷信息显示拓展 (GT TOP Addition) +gt-steam-tech|格雷蒸汽科技 (GT Steam Tech) +simpleanimator¨@simpleanimator +tianjin-metro@|天津地铁* +modular-flower-pots|模组化花盆* +repurposed-structures-floralis-compat-mod|结构变体:Floralis 兼容模组 (Repurposed Structures - Floralis Compat Mod) + +balanced-shield@ +@more-potion-effects|更多药水效果 (More Potion effects) +jungle-villages +truecherry +@revamped-trades +creeper-fireworks@creeper-fireworks-mod|烟花苦力怕 (Creeper Fireworks Mod) +@word-overflow +chatnotify@ + +nbt-tool + + + + +dglab-x-minecraft@ +twintails|双马尾 (TwinTails)¨twin-tails|双马尾 (TwinTails) +gt-wireless|格雷无线科技 (GT Wireless) +forcejava21@|强制 Java21 (ForceJava21) +blessings@|祝福* +crafted-core@ +call-from-the-depths@|深渊召唤* +@clover-fabric|四叶草Fabric版 (Clover Fabric) +champions-unofficial|冠军/强敌再续 (Champions-Unofficial) +aetherworks-refracted@ +eidolon-repraised@eidolonrepraised +create-northstar@ +create-pattern-schematics@ +magic-merchant +aether-villages@|天境村庄* +tricky-trials@tricky-trials-1.21 + + +abilities-the-boys|黑袍纠察队 (abilities-the boys) + + +better-creative-tabs-forge-neoforge|更好的创造标签页 (Better Creative Tabs) + + + +avaritia-unofficial +stellaris@ +command-o-matic + +realistic-physics +cia@|自定义物品属性 (Custom Item Attributes) +item-wheel@ +data-attributes-directors-cut@ +better-walls@betterwalls +the-pillager-legion +the-frozen-kingdom +stardew-fishing@ +lets-do-a-jumpscare@letsdoajumpscare + + +the-quackening +better-trial-chambers@ +coldsweat-tfc +deeper-nether-biomes +adventurers-beyond@ +mss-moogs-soaring-structures@ +goblins-tyranny@ +no-32768-limit|没有32768限制* + + + + +reairdrop-supply@|空投供应:重生 (ReAirdrop Supply) +@minequery|MC宝 (MineQuery)¨@minequery-legacy|MC宝 (MineQuery) + +@simply-create-model-mod|简单动力 (Simply Create Model)¨@simply-create-model|简单动力 (Simply Create Model) - 资源包 +mountains-poem +@playtime-reborn|游戏时长计数器:重生 (Playtime Reborn) + +moon-between-medicine|在月亮之间:药学拓展 (Moon Between : medicine) +craftable-chainmail-reborn|可制作的锁链甲:重生* + +thaumcraftfix|神秘时代6修复 (Thaumcraft Fix) + +extended-industrialization@ +small-tetra-additions +lets-do-furniture@ +tesseract-api-neoforge@tesseract-api + +spectrelib + +tfc-artisanal + +@the-real-time|现实时间 + +dragonoptifix|DragonBlockC 与 OptiFine 的兼容修复 (DragonOptiFix) +@effortless +@barriers-dont-block-rain-1.21 + +@nochathide +inventory-tweaks-extrafoamy +automatic-infinite-elytra@ +re-translator@ +yank-it-out@ +vintage-kubejs@ +emi-professions-emip@emi-professions-(emip) +grindstone-enchantments +@starlight-legacy +themetip@ +woodwalkers@ +peaceful-moon@ +to-tweaks-irons-spells@ +horde-moon@ + +laser-mod-2 +mekanism-lasers +wizards-reborn + +customnpc-contentback +debug-stick +useful-bat +runic-inscription +bamboo-stuff@ +@moai-update +junk-drawers@ +playerex-directors-cut@ +lets-do-camping@ +@startuptime-unoffical|启动时间非官方版 (StartupTime Unoffical) +serverconfig-updater +@epiczoomer + +agenta@ + +more-beehive-variants@ + +persistent-creative-inventory@ +lets-do-wildernature@ +@quitconfirm +@ressourcepackcommand + +neodymium-unofficial@nd1710|钕:非官方版* +@carbon-performance|碳 (Carbon) +coloredglowlib@ +@better-snow-coverage|更好的雪覆盖 + +trade-enchantment-display@|交易附魔显示* +eternal-starlight@|永恒星光* +astral-patch|星辉补丁* +fast-scrolling-fabric@fast-scrolling¨fast-scrolling +galoblender-updated +more-tetra-materials +ageing-mobs +warm-ice-block +smoke-signals@ +wunderreich@ + +ames-mobs-renew +refreshdisplaylists +vulkanmod-android-libs +@black-bar-concealer +building-shift@ +mob-ai-tweaks +the-masquerade-illager-boss +better-armory-x +sweetys-horse-armor-tweaks@ +fired-pots@ +under-the-moon +coffeegs-colorful-world +jeb_-wool@|jeb_羊毛 (jeb_ Wool) +illage-and-spillage-finally-ported +more-runes-more-magic-series@|更多符文 (More Runes) +battlemages-more-magic-series +eidolon-rebrewed-data-recipes +elemental-metals-magical-metallurgy-series +dragonsteel-more-magic-series +dragon-scale +scholar@ +@elytraswimfix +tacz-bullet-proof-enchant-add-on@¨tacz-bullet-proof-enchant-fabric-add-on +no-screen-bobbing@viewbobbingmod +more-spell-attributes-more-magic-series +minos-particle-presets +somewhat-hardcore-fabric-forge@you-die-you-lose-a-heart +@blurred-window +player-list-heads +@antighost-fork +environs-mod + + +unique-magic + + +epic-projectile-reflection|史诗弹射物反射 +zombie-island +@stratagems +solar-hardcore@ +i-hate-flesh-reborn-ihfr@i-hate-flesh-reborn-(ihfr) + +@particle-unlimit|粒子上限解除 (Particle Unlimit) +aaa-particles@ +@anno +compass3d@ +@clockin +diggus-maximus-reborn +satisfying-buttons@ +item-on-chest-fabric@item-on-chest +industrialreborn@ +@ntmspace|HBM的核科技航天 (HBM's Nuclear Tech Mod Space) + +several-food-craft@ +cakes-cosmetics@ +boks-butterflies@ +@immersive-winds +reef-redux@ +simple-quiver@ +too-many-paintings-forge-fabric@too-many-paintings +building-but-better@ +exchange-fuels@ +more-craftings-of-runes +mega-evolve +pixeltweaks@ +hrbs-drills +index-librorum-prohibitorum|禁书目录 (Index-Librorum-Prohibitorum) +bft +heartbond +breakerplacer@ +iron-ladders@|更多梯子* +crumbs-deepslate-button|Crumbs 的深板岩按钮 (Crumbs' Deepslate Button) + +cl0uds-paxels +unique-weaponry + +boss-keys + +mace-variants +shortswords +bbs-mod@ + +move-ui@ +terrafly +achievements-mod-200@mysticrift-achievements + +saturation-plus +mod-and-resource-pack-checker-abras-additions +createstuffadditions-fix +warden-slayer-enchantment +mods-optimizer +glowy-players-renewed@|玩家高亮:重置版 + +epic-fight-kenjis-combat-forms +mekanism-unleashed@ \ No newline at end of file diff --git a/Plain Craft Launcher 2/Resources/java-wrapper.jar b/Plain Craft Launcher 2/Resources/java-wrapper.jar index 7793ff957daf8a6573c803d271e9320b4d32bab3..29d7632b7d34e5f02cf29410dee515910cc1573f 100644 GIT binary patch delta 11265 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%0D4Qaqe4<66WJKQs_i{S_vyt;>GaL9t&83QK|zf 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 F{{Xd!_;~;T