龙腾猫跃 %!s(int64=3) %!d(string=hai) anos
pai
achega
79778490d5

+ 6 - 6
Plain Craft Launcher 2/Controls/MyHint.xaml.vb

@@ -11,17 +11,17 @@
             If _IsWarn = value Then Exit Property
             _IsWarn = value
             If _IsWarn Then
-                BorderBrush = New MyColor("#99FF4444")
-                Gradient1.Color = New MyColor("#88FFBBBB")
-                Gradient2.Color = New MyColor("#88FF8888")
+                BorderBrush = New MyColor("#CCFF4444")
+                Gradient1.Color = New MyColor("#BBFFBBBB")
+                Gradient2.Color = New MyColor("#BBFF8888")
                 Path.Fill = New MyColor("#BF0000")
                 LabText.Foreground = New MyColor("#BF0000")
                 BtnClose.Foreground = New MyColor("#BF0000")
                 Path.Data = (New GeometryConverter).ConvertFromString("F1 M 58.5832,55.4172L 17.4169,55.4171C 15.5619,53.5621 15.5619,50.5546 17.4168,48.6996L 35.201,15.8402C 37.056,13.9852 40.0635,13.9852 41.9185,15.8402L 58.5832,48.6997C 60.4382,50.5546 60.4382,53.5622 58.5832,55.4172 Z M 34.0417,25.7292L 36.0208,41.9584L 39.9791,41.9583L 41.9583,25.7292L 34.0417,25.7292 Z M 38,44.3333C 36.2511,44.3333 34.8333,45.7511 34.8333,47.5C 34.8333,49.2489 36.2511,50.6667 38,50.6667C 39.7489,50.6667 41.1666,49.2489 41.1666,47.5C 41.1666,45.7511 39.7489,44.3333 38,44.3333 Z ")
             Else
-                BorderBrush = New MyColor("#994D76FF")
-                Gradient1.Color = New MyColor("#88B0D0FF")
-                Gradient2.Color = New MyColor("#889EBAFF")
+                BorderBrush = New MyColor("#CC4D76FF")
+                Gradient1.Color = New MyColor("#BBB0D0FF")
+                Gradient2.Color = New MyColor("#BB9EBAFF")
                 Path.Fill = New MyColor("#0062BF")
                 LabText.Foreground = New MyColor("#0062BF")
                 BtnClose.Foreground = New MyColor("#0062BF")

+ 24 - 6
Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb

@@ -50,13 +50,31 @@
 
     '触发点击事件
     Private Sub Button_MouseUp(sender As Object, e As MouseButtonEventArgs) Handles Me.MouseLeftButtonUp
-        If IsMouseDown Then
-            Log("[Control] 按下图标按钮" & If(String.IsNullOrEmpty(Name), "", ":" & Name))
-            RaiseEvent Click(sender, e)
-            e.Handled = True
-            Button_MouseUp()
-        End If
+        If Not IsMouseDown Then Return
+        Log("[Control] 按下图标按钮" & If(String.IsNullOrEmpty(Name), "", ":" & Name))
+        RaiseEvent Click(sender, e)
+        e.Handled = True
+        Button_MouseUp()
+        ModEvent.TryStartEvent(EventType, EventData)
     End Sub
+    Public Property EventType As String
+        Get
+            Return GetValue(EventTypeProperty)
+        End Get
+        Set(value As String)
+            SetValue(EventTypeProperty, value)
+        End Set
+    End Property
+    Public Shared ReadOnly EventTypeProperty As DependencyProperty = DependencyProperty.Register("EventType", GetType(String), GetType(MyIconButton), New PropertyMetadata(Nothing))
+    Public Property EventData As String
+        Get
+            Return GetValue(EventDataProperty)
+        End Get
+        Set(value As String)
+            SetValue(EventDataProperty, value)
+        End Set
+    End Property
+    Public Shared ReadOnly EventDataProperty As DependencyProperty = DependencyProperty.Register("EventData", GetType(String), GetType(MyIconButton), New PropertyMetadata(Nothing))
 
     '鼠标点击判定(务必放在点击事件之后,以使得 Button_MouseUp 先于 Button_MouseLeave 执行)
     Private IsMouseDown As Boolean = False

+ 6 - 2
Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.vb

@@ -73,6 +73,10 @@
         IsMouseDown = True
         RefreshColor()
     End Sub
+    Private Sub MyIconTextButton_MouseLeave() Handles Me.MouseLeave
+        IsMouseDown = False
+        RefreshColor()
+    End Sub
     Public Property EventType As String
         Get
             Return GetValue(EventTypeProperty)
@@ -96,7 +100,7 @@
 
     Private Const AnimationTimeOfMouseIn As Integer = 100 '鼠标指向动画长度
     Private Const AnimationTimeOfMouseOut As Integer = 150 '鼠标移出动画长度
-    Private Sub RefreshColor(Optional obj = Nothing, Optional e = Nothing) Handles Me.MouseEnter, Me.MouseLeave, Me.Loaded, Me.IsEnabledChanged
+    Private Sub RefreshColor(Optional obj = Nothing, Optional e = Nothing) Handles Me.MouseEnter, Me.Loaded, Me.IsEnabledChanged
         Try
             If IsLoaded AndAlso AniControlEnabled = 0 AndAlso Not False.Equals(e) Then '防止默认属性变更触发动画,若强制不执行动画,则 e 为 False
 
@@ -173,7 +177,7 @@
 
             End If
         Catch ex As Exception
-            Log(ex, "刷新按钮颜色出错")
+            Log(ex, "刷新带图标按钮颜色出错")
         End Try
     End Sub
 

+ 2 - 0
Plain Craft Launcher 2/Controls/MyPageRight.vb

@@ -152,6 +152,7 @@
     ''' </summary>
     Public Sub PageOnExit()
         If ModeDebug Then Log("[UI] 已触发 PageOnExit")
+        RaiseEvent PageExit()
         Select Case PageState
             Case PageStates.ContentEnter, PageStates.ContentStay
                 PageState = PageStates.PageExit
@@ -168,6 +169,7 @@
             Case PageStates.PageExit, PageStates.Empty
         End Select
     End Sub
+    Public Event PageExit()
     ''' <summary>
     ''' 即将切换到其他页面,需要强制完成页面状态清理。
     ''' 需要立即切换至 Empty。

+ 1 - 1
Plain Craft Launcher 2/Controls/MyRadioButton.xaml.vb

@@ -252,7 +252,7 @@
 
             End If
         Catch ex As Exception
-            Log(ex, "刷新按钮颜色出错")
+            Log(ex, "刷新单选按钮颜色出错")
         End Try
     End Sub
 

+ 7 - 0
Plain Craft Launcher 2/FormMain.xaml.vb

@@ -116,6 +116,12 @@ Public Class FormMain
         '3:BUG+ IMP* FEAT-
         '2:BUG* IMP-
         '1:BUG-
+        If LastVersion < 299 Then 'Snapshot 2.6.5
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "支持选择多种预设的主页"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化联网获取的主页的加载与缓存"))
+            FeatureCount += 18
+            BugCount += 13
+        End If
         If LastVersion < 298 Then 'Snapshot 2.6.4
             FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "Mod 管理中允许多选 Mod 进行批量操作"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化崩溃分析,添加多种崩溃情况的判断"))
@@ -824,6 +830,7 @@ Public Class FormMain
                                        RunInUi(Sub()
                                                    Setup.Set("UiCustomType", 1)
                                                    FrmLaunchRight.ForceRefresh()
+                                                   Hint("已加载主页自定义文件!", HintType.Finish)
                                                End Sub)
                                        Exit Sub
                                    End If

+ 3 - 3
Plain Craft Launcher 2/Modules/Base/ModBase.vb

@@ -11,12 +11,12 @@ Public Module ModBase
 #Region "声明"
 
     '下列版本信息由更新器自动修改
-    Public Const VersionBaseName As String = "2.6.4" '不含分支前缀的显示用版本名
-    Public Const VersionStandardCode As String = "2.6.4." & VersionBranchCode '标准格式的四段式版本号
+    Public Const VersionBaseName As String = "2.6.5" '不含分支前缀的显示用版本名
+    Public Const VersionStandardCode As String = "2.6.5." & VersionBranchCode '标准格式的四段式版本号
 #If BETA Then
     Public Const VersionCode As Integer = 296 'Release
 #Else
-    Public Const VersionCode As Integer = 298 'Snapshot
+    Public Const VersionCode As Integer = 299 'Snapshot
 #End If
     '自动生成的版本信息
     Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName

+ 8 - 6
Plain Craft Launcher 2/Modules/Base/ModNet.vb

@@ -106,15 +106,15 @@ Retry:
 Retry:
             Select Case RetryCount
                 Case 0 '正常尝试
-                    Return NetGetCodeRequest(Url, Encode, 10000, IsJson, Accept)
+                    Return NetGetCodeByRequestOnce(Url, Encode, 10000, IsJson, Accept)
                 Case 1 '慢速重试
                     Thread.Sleep(500)
-                    Return NetGetCodeRequest(If(BackupUrl, Url), Encode, 30000, IsJson, Accept)
+                    Return NetGetCodeByRequestOnce(If(BackupUrl, Url), Encode, 30000, IsJson, Accept)
                 Case Else '快速重试
                     If GetTimeTick() - StartTime > 5500 Then
                         '若前两次加载耗费 5 秒以上,才进行重试
                         Thread.Sleep(500)
-                        Return NetGetCodeRequest(If(BackupUrl, Url), Encode, 4000, IsJson, Accept)
+                        Return NetGetCodeByRequestOnce(If(BackupUrl, Url), Encode, 4000, IsJson, Accept)
                     Else
                         Throw RetryException
                     End If
@@ -148,7 +148,7 @@ Retry:
         For i = 1 To 4
             Dim th As New Thread(Sub()
                                      Try
-                                         RequestResult = NetGetCodeRequest(Url, Encode, 30000, IsJson, Accept)
+                                         RequestResult = NetGetCodeByRequestOnce(Url, Encode, 30000, IsJson, Accept)
                                      Catch ex As Exception
                                          FailCount += 1
                                          RequestEx = ex
@@ -182,10 +182,10 @@ RequestFinished:
         Loop
         Throw New Exception("未知错误")
     End Function
-    Private Function NetGetCodeRequest(Url As String, Encode As Encoding, Timeout As Integer, IsJson As Boolean, Accept As String)
+    Public Function NetGetCodeByRequestOnce(Url As String, Optional Encode As Encoding = Nothing, Optional Timeout As Integer = 30000, Optional IsJson As Boolean = False, Optional Accept As String = "")
         If RunInUi() AndAlso Not Url.Contains("//127.") Then Throw New Exception("在 UI 线程执行了网络请求")
         Url = SecretCdnSign(Url)
-        Log("[Net] 获取网络结果:" & Url & ",最大超时 " & Timeout)
+        Log($"[Net] 获取网络结果:{Url},超时 {Timeout}ms{If(IsJson, ",要求 json", "")}")
         Dim Request As HttpWebRequest = WebRequest.Create(Url)
         Dim Result As New List(Of Byte)
         Try
@@ -269,6 +269,8 @@ RequestFinished:
         '下载
         Using Client As New WebClient
             Try
+                Client.Headers(HttpRequestHeader.UserAgent) = "PCL2/" & VersionStandardCode & " Mozilla/5.0 AppleWebKit/537.36 Chrome/63.0.3239.132 Safari/537.36"
+                Client.Headers(HttpRequestHeader.Referer) = "http://" & VersionCode & ".pcl2.server/"
                 Client.DownloadFile(Url, LocalFile)
             Catch ex As Exception
                 Throw New WebException("直接下载文件失败(" & Url & ")。", ex)

+ 9 - 7
Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb

@@ -111,8 +111,9 @@
                 IsJre = Not File.Exists(PathFolder & "javac.exe")
                 '运行 -version
                 Output = ShellAndGetOutput(PathFolder & "java.exe", "-version", 15000).ToLower
-                If Output = "" Then Throw New Exception("尝试运行该 Java 失败")
+                If Output = "" Then Throw New ApplicationException("尝试运行该 Java 失败")
                 If ModeDebug Then Log("[Java] Java 检查输出:" & PathFolder & "java.exe" & vbCrLf & Output)
+                If Output.Contains("/lib/ext exists") Then Throw New ApplicationException("无法运行该 Java,请在删除 Java 文件夹中的 /lib/ext 文件夹后再试")
                 '获取详细信息
                 Dim VersionString = If(RegexSeek(Output, "(?<=version "")[^""]+"), If(RegexSeek(Output, "(?<=openjdk )[0-9]+"), "")).Replace("_", ".").Split("-").First
                 Do While VersionString.Split(".").Count < 4
@@ -122,6 +123,7 @@
                         VersionString = "1." & VersionString
                     End If
                 Loop
+                If VersionString = "" Then Throw New ApplicationException($"未找到该 Java 的版本号{If(Output.Length < 500, $"{vbCrLf}输出为:{vbCrLf}{Output}", "")}")
                 Version = New Version(VersionString)
                 If Version.Minor = 0 Then
                     Log("[Java] 疑似 X.0.X.X 格式版本号:" & Version.ToString)
@@ -129,10 +131,10 @@
                 End If
                 Is64Bit = Output.Contains("64-bit")
                 If Version.Minor <= 4 OrElse Version.Minor >= 25 Then Throw New Exception("分析详细信息失败,获取的版本为 " & Version.ToString)
-                '基于 #2249 发现的 JRE 17 似乎也导致了 Forge 安装失败,干脆禁用更多版本的 JRE
-                If IsJre AndAlso VersionCode >= 16 Then Throw New Exception("由于高版本 JRE 对 Minecraft 的兼容性很差,因此不再允许使用")
-                ''无论如何不允许使用 JRE 16,它完全是炸的,安 OptiFine、Forge 和启动 MC 都会炸
-                'If IsJre AndAlso VersionCode = 16 Then Throw New Exception("由于 JRE 16 对 Minecraft 的兼容性很差,因此不再允许使用")
+                '基于 #2249 发现 JRE 17 似乎也导致了 Forge 安装失败,干脆禁用更多版本的 JRE
+                If IsJre AndAlso VersionCode >= 16 Then Throw New Exception("由于高版本 JRE 对游戏的兼容性很差,因此不再允许使用。你可以使用对应版本的 JDK,而非 JRE!")
+            Catch ex As ApplicationException
+                Throw ex
             Catch ex As Exception
                 Log("[Java] 检查失败的 Java 输出:" & PathFolder & "java.exe" & vbCrLf & If(Output, "无程序输出"))
                 Throw New Exception("检查 Java 失败(" & If(PathJavaw, "Nothing") & ")", ex)
@@ -659,7 +661,7 @@ Wait:
                         SearchEntry.Contains("java") OrElse SearchEntry.Contains("jdk") OrElse SearchEntry.Contains("env") OrElse
                         SearchEntry.Contains("环境") OrElse SearchEntry.Contains("run") OrElse SearchEntry.Contains("软件") OrElse
                         SearchEntry.Contains("jre") OrElse SearchEntry = "bin" OrElse SearchEntry.Contains("mc") OrElse
-                        SearchEntry.Contains("software") OrElse SearchEntry.Contains("cache") OrElse SearchEntry.Contains("temp") OrElse
+                        SearchEntry.Contains("soft") OrElse SearchEntry.Contains("cache") OrElse SearchEntry.Contains("temp") OrElse
                         SearchEntry.Contains("corretto") OrElse SearchEntry.Contains("roaming") OrElse SearchEntry.Contains("users") OrElse
                         SearchEntry.Contains("craft") OrElse SearchEntry.Contains("program") OrElse SearchEntry.Contains("世界") OrElse
                         SearchEntry.Contains("net") OrElse SearchEntry.Contains("游戏") OrElse SearchEntry.Contains("oracle") OrElse
@@ -675,7 +677,7 @@ Wait:
                         SearchEntry.Contains("mod") OrElse SearchEntry.Contains("高清") OrElse SearchEntry.Contains("download") OrElse
                         SearchEntry.Contains("launch") OrElse SearchEntry.Contains("程序") OrElse SearchEntry.Contains("path") OrElse
                         SearchEntry.Contains("version") OrElse SearchEntry.Contains("baka") OrElse SearchEntry.Contains("pcl") OrElse
-                        SearchEntry.Contains("local") OrElse SearchEntry.Contains("packages") OrElse SearchEntry.Contains("4297127D64EC6") OrElse '官启文件夹
+                        SearchEntry.Contains("local") OrElse SearchEntry.Contains("packages") OrElse SearchEntry.Contains("4297127d64ec6") OrElse '官启文件夹
                         SearchEntry.Contains("国服") OrElse SearchEntry.Contains("网易") OrElse SearchEntry.Contains("ext") OrElse '网易 Java 文件夹名
                         SearchEntry.Contains("netease") OrElse SearchEntry.Contains("1.") OrElse SearchEntry.Contains("启动") Then
                     JavaSearchFolder(FolderInfo, Results, Source)

+ 10 - 6
Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb

@@ -1120,8 +1120,8 @@ SystemBrowser:
             ElseIf McVersionCurrent.Version.McCodeMain >= 8 AndAlso McVersionCurrent.Version.McCodeMain <= 11 Then
                 '1.8 - 1.11:必须恰好 Java 8
                 MinVer = New Version(1, 8, 0, 0) : MaxVer = New Version(1, 8, 999, 999)
-            ElseIf McVersionCurrent.Version.McCodeMain = 12 AndAlso McVersionCurrent.Version.HasForge Then
-                '1.12:若安装了 Forge,最高 Java 8
+            ElseIf McVersionCurrent.Version.McCodeMain = 12 Then
+                '1.12:最高 Java 8
                 MaxVer = New Version(1, 8, 999, 999)
             End If
         End If
@@ -1843,10 +1843,14 @@ NextVersion:
                         Else
                             PackFormat = 12
                         End If
-                    Case 20, 99 '99 是快照版
-                        PackFormat = 15
-                    Case Else
-                        PackFormat = 16
+                    Case 20
+                        If McVersionCurrent.Version.McCodeSub <= 1 Then
+                            PackFormat = 15
+                        Else
+                            PackFormat = 17
+                        End If
+                    Case Else '快照版是 99
+                        PackFormat = 17
                         'https://minecraft.fandom.com/zh/wiki/数据包#数据包版本
                 End Select
                 McLaunchLog("正在构建自定义皮肤资源包,格式为:" & PackFormat)

+ 1 - 4
Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb

@@ -1,7 +1,4 @@
-Imports System.IO.Compression
-Imports NAudio.Gui
-
-Public Module ModMinecraft
+Public Module ModMinecraft
 
 #Region "文件夹"
 

+ 2 - 1
Plain Craft Launcher 2/Modules/Minecraft/ModWatcher.vb

@@ -272,7 +272,7 @@
                 If Not MinecraftWindowName.StartsWith("FML") Then
                     '已找到 Minecraft 窗口
                     WindowHandle = MinecraftWindowHandle
-                    WatcherLog("Minecraft 窗口已加载:" & MinecraftWindowName & "(" & MinecraftWindowHandle.ToInt64 & ")")
+                    WatcherLog($"Minecraft 窗口已加载:{MinecraftWindowName}({MinecraftWindowHandle.ToInt64})")
                     IsWindowFinished = True
                     '最大化
                     If Setup.Get("LaunchArgumentWindowType") = 4 Then
@@ -282,6 +282,7 @@
                                                '……虽然我很想这样说,但总有人反馈,算了
                                                Thread.Sleep(2000)
                                                ShowWindow(WindowHandle, 3)
+                                               WatcherLog($"已最大化 Minecraft 窗口:{MinecraftWindowHandle.ToInt64}")
                                            Catch ex As Exception
                                                Log(ex, "最大化 Minecraft 窗口时出现错误")
                                            End Try

+ 4 - 4
Plain Craft Launcher 2/Modules/ModEvent.vb

@@ -23,11 +23,9 @@
                 Case "打开文件", "打开帮助"
                     RunInThread(Sub()
                                     Try
-
                                         '确认实际路径
                                         Dim ActualPaths = GetEventAbsoluteUrls(Data(0), Type)
                                         Dim Location = ActualPaths(0), WorkingDir = ActualPaths(1)
-
                                         '执行
                                         If Type = "打开文件" Then
                                             Dim Info As New ProcessStartInfo With {
@@ -39,13 +37,14 @@
                                         Else '打开帮助
                                             PageOtherHelp.EnterHelpPage(Location)
                                         End If
-
                                     Catch ex As Exception
                                         Log(ex, "执行打开类自定义事件失败", LogLevel.Msgbox)
                                     End Try
                                 End Sub)
+
                 Case "启动游戏"
-                    If McLaunchStart(New McLaunchOptions With {.ServerIp = If(Data.Length >= 2, Data(1), Nothing), .Version = New McVersion(Data(0))}) Then
+                    If McLaunchStart(New McLaunchOptions With
+                                     {.ServerIp = If(Data.Length >= 2, Data(1), Nothing), .Version = New McVersion(Data(0))}) Then
                         Hint("正在启动 " & Data(0) & "……")
                     End If
 
@@ -54,6 +53,7 @@
 
                 Case "刷新主页"
                     FrmLaunchRight.ForceRefresh()
+                    If Data(0) = "" Then Hint("已刷新主页!", HintType.Finish)
 
                 Case "刷新帮助"
                     PageOtherLeft.RefreshHelp()

+ 14 - 14
Plain Craft Launcher 2/Modules/ModMusic.vb

@@ -5,7 +5,7 @@
     ''' <summary>
     ''' 接下来要播放的音乐文件路径。未初始化时为 Nothing。
     ''' </summary>
-    Public MusicToplayList As List(Of String) = Nothing
+    Public MusicWaitingList As List(Of String) = Nothing
     ''' <summary>
     ''' 全部音乐文件路径。未初始化时为 Nothing。
     ''' </summary>
@@ -31,11 +31,11 @@
                 Next
             End If
             '打乱顺序播放
-            MusicToplayList = If(Setup.Get("UiMusicRandom"), Shuffle(New List(Of String)(MusicAllList)), New List(Of String)(MusicAllList))
-            If Not IgnoreFirst = "" AndAlso Not MusicToplayList.Count = 0 AndAlso MusicToplayList(0) = IgnoreFirst Then
+            MusicWaitingList = If(Setup.Get("UiMusicRandom"), Shuffle(New List(Of String)(MusicAllList)), New List(Of String)(MusicAllList))
+            If Not IgnoreFirst = "" AndAlso Not MusicWaitingList.Count = 0 AndAlso MusicWaitingList(0) = IgnoreFirst Then
                 '若需要避免成为第一项的为第一项,则将它放在最后
-                MusicToplayList.RemoveAt(0)
-                MusicToplayList.Add(IgnoreFirst)
+                MusicWaitingList.RemoveAt(0)
+                MusicWaitingList.Add(IgnoreFirst)
             End If
         Catch ex As Exception
             Log(ex, "初始化音乐列表失败", LogLevel.Feedback)
@@ -46,12 +46,11 @@
     ''' </summary>
     Private Function DequeueNextMusicAddress() As String
         '初始化,确保存在音乐
-        If MusicAllList Is Nothing Then MusicListInit(False)
-        If MusicAllList.Count = 0 Then Throw New Exception("在没有音乐时尝试获取音乐路径")
+        If MusicAllList Is Nothing OrElse MusicAllList.Count = 0 Then MusicListInit(False)
         '出列下一个音乐,如果出列结束则生成新列表
-        DequeueNextMusicAddress = MusicToplayList(0)
-        MusicToplayList.RemoveAt(0)
-        If MusicToplayList.Count = 0 Then MusicListInit(False, DequeueNextMusicAddress)
+        DequeueNextMusicAddress = MusicWaitingList(0)
+        MusicWaitingList.RemoveAt(0)
+        If MusicWaitingList.Count = 0 Then MusicListInit(False, DequeueNextMusicAddress)
     End Function
 
 #End Region
@@ -106,7 +105,8 @@
                 Case MusicStates.Play
                     MusicPause()
                 Case Else
-                    Hint("音乐目前为停止状态!", HintType.Critical)
+                    Log("[Music] 音乐目前为停止状态,已强制尝试开始播放", LogLevel.Debug)
+                    MusicRefreshPlay(False)
             End Select
         End If
     End Sub
@@ -212,15 +212,15 @@
     ''' 继续音乐播放,返回是否成功切换了状态。
     ''' </summary>
     Public Function MusicResume() As Boolean
-        If MusicState = MusicStates.Pause Then
+        If MusicState = MusicStates.Play Then
+            Return False
+        Else
             RunInThread(Sub()
                             MusicNAudio.Play()
                             MusicRefreshUI()
                             Log("[Music] 已恢复播放")
                         End Sub)
             Return True
-        Else
-            Return False
         End If
     End Function
 

+ 2 - 2
Plain Craft Launcher 2/My Project/AssemblyInfo.vb

@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
 ' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
 ' 方法是按如下所示使用“*”
 
-<Assembly: AssemblyVersion("2.6.4.0")>
-<Assembly: AssemblyFileVersion("2.6.4.0")>
+<Assembly: AssemblyVersion("2.6.5.0")>
+<Assembly: AssemblyFileVersion("2.6.5.0")>
 <Assembly: NeutralResourcesLanguage("")>

+ 6 - 3
Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml

@@ -10,9 +10,12 @@
             <StackPanel x:Name="PanCustom">
             </StackPanel>
             <local:MyCard Margin="0,0,0,15" Title="快照版提示" x:Name="PanHint">
-                <StackPanel Margin="25,40,23,12">
-                    <TextBlock x:Name="LabHint1" TextWrapping="Wrap" Margin="0,0,0,2" />
-                    <TextBlock x:Name="LabHint2" TextWrapping="Wrap" Margin="0,0,0,2" />
+                <local:MyIconButton LogoScale="1.1" Logo="F1 M2,0 L0,2 8,10 0,18 2,20 10,12 18,20 20,18 12,10 20,2 18,0 10,8 2,0Z"
+                                    Height="20" Margin="10" HorizontalAlignment="Right" VerticalAlignment="Top"
+                                    x:Name="BtnHintClose" />
+                <StackPanel Margin="25,38,23,15">
+                    <TextBlock x:Name="LabHint1" TextWrapping="Wrap" Margin="0,0,0,2" FontSize="13.5" />
+                    <TextBlock x:Name="LabHint2" TextWrapping="Wrap" Margin="0,0,0,2" FontSize="13.5" />
                 </StackPanel>
             </local:MyCard>
             <local:MyCard Margin="0,0,0,15" Title="启动日志" x:Name="PanLog">

+ 185 - 79
Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb

@@ -3,100 +3,206 @@
     Private Sub Init() Handles Me.Loaded
         PanBack.ScrollToHome()
         PanLog.Visibility = If(ModeDebug, Visibility.Visible, Visibility.Collapsed)
-        '刷新主页
-        If ShouldRefresh Then
-            ShouldRefresh = False
-            RefreshCustom()
-        End If
         '快照版提示
 #If BETA Then
         PanHint.Visibility = Visibility.Collapsed
 #Else
-        PanHint.Title = "快照版提示"
         PanHint.Visibility = If(ThemeCheckGold(), Visibility.Collapsed, Visibility.Visible)
-        LabHint1.Text = "快照版包含尚未在正式版发布的测试性功能,仅用于赞助者本人尝鲜。所以请不要发给其他人或者用于制作整合包哦!如果发现了 Bug,可以在 更多 → 反馈 中提交!"
-        LabHint2.Text = "你可以通过赞助¥23.33 档位换取解锁码来隐藏这个提示。"
+        LabHint1.Text = "快照版包含尚未正式发布的测试功能,仅用于赞助者本人尝鲜。请不要发给其他人或者用来制作整合包哦!"
+        LabHint2.Text = $"若已累积赞助¥23.33,在爱发电私信发送 {vbLQ}解锁码{vbRQ} 即可永久隐藏此提示。"
 #End If
     End Sub
 
-    Private LatestFileContent As String = ""
-    Private LatestFileLink As String = Nothing
-    Private IsRefreshing As Boolean = False
-    Public ShouldRefresh As Boolean = True
+    '暂时关闭快照版提示
+#If Not BETA Then
+    Private Sub BtnHintClose_Click(sender As Object, e As EventArgs) Handles BtnHintClose.Click
+        AniDispose(PanHint, True)
+    End Sub
+#End If
+
+#Region "自定义主页"
+
     ''' <summary>
-    ''' 刷新自定义的主页。返回是否成功。
+    ''' 刷新自定义主页。
     ''' </summary>
-    Private Sub RefreshCustom()
-        If IsRefreshing Then
-            ShouldRefresh = True
-            Exit Sub
-        End If
+    Private Sub Refresh() Handles Me.Loaded
+        RunInNewThread(Sub()
+                           Try
+                               SyncLock RefreshLock
+                                   RefreshReal()
+                               End SyncLock
+                           Catch ex As Exception
+                               Log(ex, "加载 PCL 主页自定义信息失败", LogLevel.Msgbox)
+                           End Try
+                       End Sub, $"刷新自定义主页 #{GetUuid()}")
+    End Sub
+    Private Sub RefreshReal()
+        Dim Content As String = ""
+        Dim Url As String
+        Select Case Setup.Get("UiCustomType")
+            Case 1
+                '加载本地文件
+                Log("[Page] 主页自定义数据来源:本地文件")
+                Content = ReadFile(Path & "PCL\Custom.xaml") 'ReadFile 会进行存在检测
+            Case 2
+                Url = Setup.Get("UiCustomNet")
+Download:
+                '加载联网文件
+                If String.IsNullOrWhiteSpace(Url) Then Exit Select
+                If Url = Setup.Get("CacheSavedPageUrl") AndAlso File.Exists(PathTemp & "Cache\Custom.xaml") Then
+                    '缓存可用
+                    Log("[Page] 主页自定义数据来源:联网缓存文件")
+                    Content = ReadFile(PathTemp & "Cache\Custom.xaml")
+                    '后台更新缓存
+                    OnlineLoader.Start(Url)
+                Else
+                    '缓存不可用
+                    Log("[Page] 主页自定义数据来源:联网全新下载")
+                    Hint("正在加载主页……")
+                    RunInUiWait(Sub() LoadContent("")) '在加载结束前清空页面
+                    Setup.Set("CacheSavedPageVersion", "")
+                    OnlineLoader.Start(Url) '下载完成后将会再次触发更新
+                    Exit Sub
+                End If
+            Case 3
+                Select Case Setup.Get("UiCustomPreset")
+                    Case 0 '你知道吗
+                        Log("[Page] 主页预设:你知道吗")
+                        Content = "
+                            <local:MyCard Title=""你知道吗?"" Margin=""0,0,0,15"">
+                                <TextBlock Margin=""25,38,23,15"" FontSize=""13.5"" IsHitTestVisible=""False"" Text=""{hint}"" TextWrapping=""Wrap"" Foreground=""{DynamicResource ColorBrush1}"" />
+                                <local:MyIconButton Height=""22"" Width=""22"" Margin=""9"" VerticalAlignment=""Top"" HorizontalAlignment=""Right"" 
+                                    EventType=""刷新主页"" EventData=""/""
+                                    Logo=""M875.52 148.48C783.36 56.32 655.36 0 512 0 291.84 0 107.52 138.24 30.72 332.8l122.88 46.08C204.8 230.4 348.16 128 512 128c107.52 0 199.68 40.96 271.36 112.64L640 384h384V0L875.52 148.48zM512 896c-107.52 0-199.68-40.96-271.36-112.64L384 640H0v384l148.48-148.48C240.64 967.68 368.64 1024 512 1024c220.16 0 404.48-138.24 481.28-332.8L870.4 645.12C819.2 793.6 675.84 896 512 896z"" />
+                            </local:MyCard>"
+                    Case 1 '回声洞
+                        Log("[Page] 主页预设:回声洞")
+                        Content = "
+                            <local:MyCard Title=""回声洞"" Margin=""0,0,0,15"">
+                                <TextBlock Margin=""25,38,23,15"" FontSize=""13.5"" IsHitTestVisible=""False"" Text=""{cave}"" TextWrapping=""Wrap"" Foreground=""{DynamicResource ColorBrush1}"" />
+                                <local:MyIconButton Height=""22"" Width=""22"" Margin=""9"" VerticalAlignment=""Top"" HorizontalAlignment=""Right"" 
+                                    EventType=""刷新主页"" EventData=""/""
+                                    Logo=""M875.52 148.48C783.36 56.32 655.36 0 512 0 291.84 0 107.52 138.24 30.72 332.8l122.88 46.08C204.8 230.4 348.16 128 512 128c107.52 0 199.68 40.96 271.36 112.64L640 384h384V0L875.52 148.48zM512 896c-107.52 0-199.68-40.96-271.36-112.64L384 640H0v384l148.48-148.48C240.64 967.68 368.64 1024 512 1024c220.16 0 404.48-138.24 481.28-332.8L870.4 645.12C819.2 793.6 675.84 896 512 896z"" />
+                            </local:MyCard>"
+                    Case 2 '新闻主页
+                        Log("[Page] 主页预设:Minecraft 新闻")
+                        Url = "https://news.bugjump.net"
+                        GoTo Download
+                End Select
+        End Select
+        RunInUi(Sub() LoadContent(Content))
+    End Sub
+    Private RefreshLock As New Object
+
+    '联网获取自定义主页文件
+    Private OnlineLoader As New LoaderTask(Of String, Integer)("自定义主页获取", AddressOf OnlineLoaderSub) With {.ReloadTimeout = 10 * 60 * 1000}
+    Private Sub OnlineLoaderSub(Task As LoaderTask(Of String, Integer))
         Try
-            IsRefreshing = True
-            PanCustom.Children.Clear()
-            RunInNewThread(Sub()
-                               Dim FileContent As String = ""
-                               Select Case Setup.Get("UiCustomType")
-                                   Case 0
-                                       '啥也不干
-                                   Case 1
-                                       '加载本地文件
-                                       FileContent = ReadFile(Path & "PCL\Custom.xaml") 'ReadFile 会进行存在检测
-                                       Log("[System] 尝试从本地文件读取主页自定义数据(" & FileContent.Length & ")")
-                                   Case 2
-                                       '加载联网文件
-                                       Try
-                                           Dim Link As String = Setup.Get("UiCustomNet")
-                                           If Link = LatestFileLink Then
-                                               FileContent = LatestFileContent
-                                               Log("[System] 尝试缓存加载主页自定义数据(" & FileContent.Length & ")")
-                                           ElseIf Not String.IsNullOrWhiteSpace(Link) Then
-                                               Log("[System] 开始从网络读取主页自定义数据(" & Link & ")")
-                                               FileContent = NetGetCodeByRequestRetry(Link)
-                                               Log("[System] 尝试从网络读取主页自定义数据(" & FileContent.Length & ")")
-                                           End If
-                                           LatestFileLink = Link
-                                           LatestFileContent = FileContent
-                                       Catch ex As Exception
-                                           Log(ex, "获取 PCL 主页自定义信息失败", LogLevel.Msgbox)
-                                           LatestFileLink = ""
-                                       End Try
-                               End Select
-                               If FileContent = "" Then
-                                   IsRefreshing = False
-                                   Exit Sub
-                               End If
-                               FileContent = "<StackPanel xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:local=""clr-namespace:PCL;assembly=Plain Craft Launcher 2"">" & FileContent & "</StackPanel>"
-                               FileContent = FileContent.Replace("{path}", Path)
-                               RunInUi(Sub()
-                                           Try
-                                               Log("[System] 加载主页自定义数据")
-                                               PanCustom.Children.Add(GetObjectFromXML(FileContent))
-                                               IsRefreshing = False
-                                           Catch ex As Exception
-                                               IsRefreshing = False
-                                               Log("[System] 自定义信息内容:" & vbCrLf & FileContent)
-                                               If MyMsgBox(ex.Message, "加载自定义主页失败", "重试", "取消") = 1 Then
-                                                   LatestFileLink = Nothing
-                                                   LatestFileContent = ""
-                                                   RefreshCustom()
-                                               End If
-                                           End Try
-                                       End Sub)
-                           End Sub, "主页自定义刷新")
+            '获取版本校验地址
+            Dim VersionAddress As String
+            If Task.Input.Contains(".xaml") Then
+                VersionAddress = Task.Input.Replace(".xaml", ".xaml.ini")
+            Else
+                VersionAddress = Task.Input.Split("?").First
+                If Not VersionAddress.EndsWith("/") Then VersionAddress += "/"
+                VersionAddress += "version"
+                If Task.Input.Contains("?") Then VersionAddress += Task.Input.Split("?").Last
+            End If
+            '校验版本
+            Dim Version As String = ""
+            Dim NeedDownload As Boolean = True
+            Try
+                Version = NetGetCodeByRequestOnce(VersionAddress, Timeout:=10000)
+                If Version.Length > 100 Then Throw New Exception($"获取的自定义主页版本过长({Version.Length} 字符)")
+                Dim CurrentVersion As String = Setup.Get("CacheSavedPageVersion")
+                If Version <> "" AndAlso CurrentVersion <> "" AndAlso Version = CurrentVersion Then
+                    Log($"[Page] 当前缓存的自定义主页已为最新,当前版本:{Version},检查源:{VersionAddress}")
+                    NeedDownload = False
+                Else
+                    Log($"[Page] 需要下载联网自定义主页,当前版本:{Version},检查源:{VersionAddress}")
+                End If
+            Catch exx As Exception
+                Log(exx, $"联网获取自定义主页版本失败", LogLevel.Developer)
+                Log($"[Page] 无法检查联网自定义主页版本,将直接下载,检查源:{VersionAddress}")
+            End Try
+            '实际下载
+            If NeedDownload Then
+                Dim FileContent As String = NetGetCodeByRequestRetry(Task.Input)
+                Log($"[Page] 已联网下载自定义主页,内容长度:{FileContent.Length},来源:{Task.Input}")
+                Setup.Set("CacheSavedPageUrl", Task.Input)
+                Setup.Set("CacheSavedPageVersion", Version)
+                WriteFile(PathTemp & "Cache\Custom.xaml", FileContent)
+            End If
+            '要求刷新
+            Refresh()
         Catch ex As Exception
-            Log(ex, "加载 PCL 主页自定义信息失败", LogLevel.Msgbox)
-            IsRefreshing = False
+            Log(ex, $"联网下载自定义主页失败({Task.Input})", LogLevel.Hint)
+            Task.Input = ""
         End Try
     End Sub
 
-    Public Sub ForceRefresh(Optional ShowHint As Boolean = True)
-        ShouldRefresh = True
-        LatestFileContent = ""
-        LatestFileLink = Nothing
-        If ShowHint Then Hint("已刷新主页!", HintType.Finish)
-        FrmMain.PageChange(FormMain.PageType.Launch)
-        Init()
+    ''' <summary>
+    ''' 立即强制刷新自定义主页。
+    ''' 必须在 UI 线程调用。
+    ''' </summary>
+    Public Sub ForceRefresh()
+        Log("[Page] 要求强制刷新自定义主页")
+        ClearCache()
+        '实际的刷新
+        If FrmMain.PageCurrent.Page = FormMain.PageType.Launch Then
+            PanBack.ScrollToHome()
+            Refresh()
+        Else
+            FrmMain.PageChange(FormMain.PageType.Launch)
+        End If
+    End Sub
+
+    ''' <summary>
+    ''' 清空自定义主页缓存信息。
+    ''' </summary>
+    Private Sub ClearCache()
+        LoadedContentHash = -1
+        OnlineLoader.Input = ""
+        Setup.Set("CacheSavedPageUrl", "")
+        Setup.Set("CacheSavedPageVersion", "")
+        Log("[Page] 已清空自定义主页缓存")
     End Sub
 
+    ''' <summary>
+    ''' 从文本内容中加载自定义主页。
+    ''' 必须在 UI 线程调用。
+    ''' </summary>
+    Private Sub LoadContent(Content As String)
+        SyncLock LoadContentLock
+            '如果加载目标内容一致则不加载
+            Dim Hash = Content.GetHashCode()
+            If Hash = LoadedContentHash Then Exit Sub
+            LoadedContentHash = Hash
+            '实际加载内容
+            PanCustom.Children.Clear()
+            If String.IsNullOrWhiteSpace(Content) Then
+                Log($"[Page] 实例化:清空自定义主页 UI,来源为空")
+                Return
+            End If
+            Content = "<StackPanel xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:local=""clr-namespace:PCL;assembly=Plain Craft Launcher 2"">" & Content & "</StackPanel>"
+            Content = Content.Replace("{path}", Path).Replace("{hint}", PageOtherTest.GetRandomHint()).Replace("{cave}", PageOtherTest.GetRandomCave())
+            Log($"[Page] 实例化:加载自定义主页 UI,最终内容长度:{Content.Count}")
+            Try
+                PanCustom.Children.Add(GetObjectFromXML(Content))
+            Catch ex As Exception
+                Log("[Page] 加载失败的自定义主页内容:" & vbCrLf & Content)
+                If MyMsgBox($"自定义主页内容编写有误,请根据下列错误信息进行检查:{vbCrLf}{ex.Message}", "加载自定义主页失败", "重试", "取消") = 1 Then
+                    GoTo Refresh '防止 SyncLock 死锁
+                End If
+            End Try
+        End SyncLock
+        Return
+Refresh:
+        ForceRefresh()
+    End Sub
+    Private LoadedContentHash As Integer = -1
+    Private LoadContentLock As New Object
+
+#End Region
+
 End Class

+ 1 - 1
Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml

@@ -213,7 +213,7 @@
                     </Grid>
                 </StackPanel>
             </local:MyCard>
-            <local:MyCard Margin="0,0,0,15" Title="高级设置" IsSwaped="True" CanSwap="True">
+            <local:MyCard Margin="0,0,0,15" Title="高级启动选项" IsSwaped="True" CanSwap="True">
                 <Grid Margin="25,40,25,15">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="Auto" SharedSizeGroup="Name" />

+ 8 - 5
Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb

@@ -1,7 +1,4 @@
-Imports System.Security.Principal
-Imports PCL.MyLoading
-
-Public Class PageVersionMod
+Public Class PageVersionMod
 
 #Region "初始化"
 
@@ -336,8 +333,14 @@ Public Class PageVersionMod
         '更新下边栏 UI
         RefreshBottomBar()
     End Sub
-    Private Sub Load_State(sender As Object, newState As MyLoadingState, oldState As MyLoadingState) Handles Load.StateChanged
+    Private Sub UnselectedAllWithAnimation() Handles Load.StateChanged, Me.PageExit
+        Dim CacheAniControlEnabled = AniControlEnabled
+        AniControlEnabled = 0
         ChangeAllSelected(False)
+        AniControlEnabled += CacheAniControlEnabled
+    End Sub
+    Private Sub PageVersionMod_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
+        If My.Computer.Keyboard.CtrlKeyDown AndAlso e.Key = Key.A Then ChangeAllSelected(True)
     End Sub
 
 #End Region

BIN=BIN
Plain Craft Launcher 2/Resources/Help.zip


+ 454 - 81
Plain Craft Launcher 2/Resources/ModData.txt

@@ -1,6 +1,6 @@
 
-industrial-craft|工业时代2 (Industrial Craft 2)|515771
-@redpower2-core|红石力量2 (RedPower2)|71843
+industrial-craft|工业时代2 (Industrial Craft 2)|515771¨@industrial-craft|工业时代2 (Industrial Craft 2)|515771
+
 buildcraft@|建筑 (BuildCraft)|884720
 forestry@|林业*|708812
 railcraft|铁路*|603270
@@ -37,7 +37,7 @@ player-api|玩家API (Player API) - 1.6-1.12.1¨playerapi|玩家API (Player API)
 
 
 
-
+ic2-classic|工业时代2经典版 (IC2 Classic)|1407663
 not-enough-items-1-8|NEI物品管理器 (Not Enough Items) - 1.8+|389937¨notenoughitems|NEI物品管理器 (Not Enough Items) - <1.8|389937
 
 
@@ -114,7 +114,7 @@ bibliocraft|收藏馆 (BiblioCraft)|644088
 natura|自然*
 atomic-science|原子科学*
 
-atum|阿图姆:沙漠之旅/亚图姆:金沙之旅 (Atum 2: Return to the Sands)|1207987
+
 blockphysics_by_id_miner|方块物理学 (BlockPhysics)
 
 
@@ -165,7 +165,7 @@ project-red-core|红石计划 (ProjectRed)¨project-red-base|红石计划 (Proje
 
 dimensionaldoors|次元门 (Dimensional Doors)|896027
 chickenchunks|区块载入器 (ChickenChunks)
-
+dlt2|动态蓄水槽 (Dynamic Liquid Tanks)
 
 webdisplays-remasterd|内置网页浏览器 (WebDisplays)|778743
 morph|变身*
@@ -257,7 +257,7 @@ redstone-arsenal|红石兵工厂*¨@redstone-arsenal|红石兵工厂 (Redstone A
 big-reactors|大型反应堆*|348989
 
 endertanks|末影水槽 (Ender Tanks) - Forge¨endertanks-fabric|末影水槽 (Ender Tanks) - Fabric
-applied-energistics-2@ae2|应用能源2*|798231
+
 hopper-ducts|漏斗管道*
 autofish|自动钓鱼*|630098
 mrcrayfish-furniture-mod|MrCrayfish 的家具 (MrCrayfish's Furniture Mod)|321693
@@ -350,7 +350,7 @@ ex-aliquo
 steves-carts-2|史蒂夫矿车2 (Steve's Carts 2)
 mariculture|海洋物语*|321251
 evilcraft|邪恶工艺 (EvilCraft)
-
+projecte|等价交换重制版 (ProjectE)|1109380
 falling-meteors-mod|陨石 (Falling Meteors)
 
 
@@ -384,7 +384,7 @@ pchan3-steamship-steamboat-pirates|飞艇与汽船 (SteamShip - SteamBoat and Pi
 
 thaumic-energistics|神秘能源*|791638
 
-chisel|凿子*|641383
+
 nuclearcraft-mod|核电工艺 (NuclearCraft)
 opencomputers|开放式电脑 (Open Computers)|618383
 elemental-stones|元素之石*
@@ -393,7 +393,7 @@ waila-nbt|万用高亮显示 (Waila NBT)
 thaumcraft-node-tracker|神秘节点追踪*
 geochests|箱载世界*
 parachutemod|降落伞 (Parachute)
-
+gem-buffs-infinite-potion-effects|宝石效果/增益宝石 (Gem Buffs)
 rftools@|RF工具箱 (RFTools)|416167
 atomicstrykers-magic-yarn|AtomicStryker的魔法线 (AtomicStryker's Magic Yarn)
 
@@ -544,7 +544,7 @@ dragonapi
 electricraft|电力工艺 (ElectriCraft)
 candycraft|糖果世界 (CandyCraft)|459723
 
-
+minefantasy2|我的幻想2 (MineFantasy2)
 
 rails-of-war|铁路战争 (Rails of War)
 actually-additions|实用拓展*|841281
@@ -574,12 +574,12 @@ llibrary
 
 
 
-projecte|等价交换重制版 (ProjectE)|1109380
 
-customthings|自定义物品 (CustomThings)
+@redpower2-core|红石力量2 (RedPower2)|71843
 
+applied-energistics-2@ae2|应用能源2*|798231
 automagy|自动化魔法*
-minefantasy2|我的幻想2 (MineFantasy2)
+
 environmental-tech@|环境科技*|644622
 
 magic-cookies|魔法饼干*|710008
@@ -613,7 +613,7 @@ worldeditcui||1013295¨worldeditcui-fabric||1013295
 ztones
 
 dummycore¨dummycore-unofficial
-extra-utilities|更多实用设备*|868981
+extra-utilities|更多实用设备*|377817
 openmodslib|开放式模组库 (OpenModsLib)
 embers|余烬*
 neat|极简血量显示* - Forge|938958¨neat-fabric-quilt|极简血量显示 (Neat) - Fabric & Quilt|938958¨@neat|极简血量显示 (Neat)|938958
@@ -832,7 +832,7 @@ re-zero-kara-hajimeru-isekai-seikatsu|RE:从零开始的异世界 (Re: Zero kara
 minewatch||730508
 thaumcraft-inventory-scanning|神秘时代物品栏扫描*
 cyclic|循环*|648189
-
+chisel|凿子*|641383
 redstoneplusplus|红石++ (Redstone++)
 ctm|连接纹理 (ConnectedTexturesMod)
 simulated-nights|夜晚模拟*
@@ -1018,7 +1018,7 @@ wrapup
 nuclear-physics
 wither-skeleton-tweaks|凋灵骷髅调整*
 heat-and-climate|热量与气候*
-
+customthings|自定义物品 (CustomThings)
 exgregilo|格雷矿筛 (ExGregilo)
 placebo
 plants
@@ -1027,7 +1027,7 @@ chinjufumod|镇守府 (ChinjufuMod +JapaneseBlock)|776626
 track-api
 immersive-railroading|沉浸铁路*|783016
 
-custom-main-menu|自定义主菜单*|769607
+
 
 wildycraft||526348
 
@@ -1050,7 +1050,7 @@ biobomb|生物炸弹 (BioBomb)|785148
 ender-hopper|末影漏斗*|784833
 mine-souls|黑魂战斗*|683570
 radixcore
-dlt2|动态蓄水槽 (Dynamic Liquid Tanks)
+
 familiar-fauna|熟悉的动物*|785558
 
 tinkers-tool-leveling|匠魂工具升级 (Tinkers' Tool Leveling)|646118
@@ -1068,7 +1068,7 @@ spawncontroller|自定义怪物生成 (SpawnController)|786558
 wearable-backpacks|可穿戴背包*|664777
 heart-drop|生命汲取*
 omlib|开放式炮台库 (OMLib)
-
+dynamictrees|动态的树/有活力的树 (Dynamic Trees)|771545
 merry-christmas|圣诞箱子 (Merry Christmas!)|786210
 cloud-control|可控制的云*|785903
 zombie-ore|矿石僵尸 (Zombie ore)|786883
@@ -1183,22 +1183,22 @@ infinity-item-editor|无尽物品编辑器*|791937
 extra-rails|更多功能铁轨*|607938
 gregtania
 origin
-minecraft-transport-simulator@immersive-vehicles|沉浸车辆 (Immersive Vehicles)
+minecraft-transport-simulator@immersive-vehicles|沉浸车辆 (Immersive Vehicles)|946737
 chest-transporter|搬箱器*|467680
 i18nupdatemod@|自动汉化更新 (I18nUpdateMod)|1424533
 realistic-item-drops|真实物品掉落*
 pixelmon|像素精灵宝可梦 重铸*|291020
-controlling|键位冲突显示* - Forge/Fabric版|713187¨controlling-for-fabric|键位冲突显示 (Controlling) - Fabric|713187
+@controlling|键位冲突显示 (Controlling)|713187
 
 
 simpleleather|腐肉烧皮革 (SimpleLeather)|660382
 sync|克隆*|300110
 chiseled-me|超级变变变*
 progressive-automation-early-miner|进阶自动化 (Progressive Automation)
-matmos|真实环境音效 (MAtmos)
+matmos|真实环境音效 (MAtmos)|805720
 ye-olde-tanks|水箱*
 improving-minecraft|改善的世界*
-wawla|Wawla高亮显示 (What Are We Looking At)
+wawla@|Wawla高亮显示 (What Are We Looking At)
 lightarea|点亮区域 (LightArea)|806149
 @replaymod|录像回放 (Replay Mod)|952909
 stellar-sky|群星璀璨*|502403
@@ -1207,7 +1207,7 @@ nei-addons|NEI扩充 (NEI Addons)
 cucumber@
 hunting-dimension|狩猎维度*|800351
 runes-of-wizardry|符文魔法 (Runes-of-Wizardry)
-dynamictrees|动态的树/有活力的树 (Dynamic Trees)|771545
+
 coffee-workshop|咖啡工坊*|808472
 in-game-account-switcher@|游戏内账号切换 (In-Game Account Switcher)|1211916
 consecration@|圣化*|849160
@@ -1237,7 +1237,7 @@ dragontech|龙之科技/龙鳞实验版 (DragonTech/Dragon Scales EX)
 gravityfalls-mod|怪诞小镇 (Gravity Falls)
 tfcbotania|TFC植物魔法 (TFCBotania)
 no-recipe-guide|没有合成指南*|811530
-takumi-craft|爬行者世界/苦力怕世界* - curseforge上的原贴,现已删除¨takumicraft|爬行者世界/苦力怕世界 (Takumi Craft) - 新贴
+takumi-craft|爬行者世界/苦力怕世界* - curseforge上的原贴,现已删除¨takumicraft|爬行者世界/苦力怕世界 (Takumi Craft) - 新贴,现已失效
 the-mists-of-riov|神秘世界 (The Mists of RioV Mod)
 
 nsr-no-respawn-screen|无重生屏幕 (No Respawn Screen)|793776
@@ -1266,7 +1266,7 @@ refraction|折射*
 librarianlib|图书馆 (LibrarianLib)
 creeper-confetti@|烟花苦力怕*|775377
 funnels|液体漏斗*
-advent-of-ascension-nevermine@adventofascension|虚无世界 (Nevermine)|325420
+advent-of-ascension-nevermine@adventofascension|虚无世界 (Nevermine)|290532
 toroquest|托罗探索 (Toro Quest)|818183
 
 rikmulds-core-mod
@@ -1287,7 +1287,7 @@ mobdrops|更多掉落 (MobDrops)
 states|城邦*|819991
 modular-machinery|模块化机械*
 compositegear|复合齿轮/复合装甲 (Composite Gear)
-kiwi¨kiwi-fabric
+kiwi¨kiwi-fabric¨@kiwi
 cuisine|料理工艺 🍳 (Cuisine 🍳)|821999
 world-control|世界控制*
 
@@ -1328,7 +1328,7 @@ shields-plus|更多盾牌*
 ghost-buster
 culinary-construct@|自定义三明治*
 armoreablemobs|怪物装备自定义 (ArmoreableMobs)
-gem-buffs-infinite-potion-effects|宝石效果/增益宝石 (Gem Buffs)
+
 
 advanced-inventory
 
@@ -1390,7 +1390,7 @@ patchouli|帕秋莉手册* - Forge¨patchouli-fabric|帕秋莉手册 (Patchouli)
 gases-framework
 ranged-pumps|范围泵*|668293
 bagginses|背包*|628505
-ic2-classic|工业时代2经典版 (IC2 Classic)|1407663
+
 
 cubicworldgen
 rally-health
@@ -1407,7 +1407,7 @@ sound-physics-fabric|物理声效 (Sound Physics)|676189
 plethora-peripherals
 simple-flight|简单的飞行*|374613
 factory-tech|工厂科技 (FactoryTech)
-block-renderer¨blockrenderer
+
 
 mysticallib
 crissaegrim
@@ -1423,7 +1423,7 @@ u-team-core
 ftb-quests|FTB任务 (FTB Quests) - Forge|849746¨ftb-quests-fabric|FTB任务 (FTB Quests) - Fabric|849746
 texfix|材质修复 (TexFix)|771588
 mapmakers-gadgets|地图作者小帮手 (Mapmaker's Gadgets)
-travellers-gear|旅者之器 (Traveller's Gear)
+
 ceramics|陶瓷器*
 slashblade-japanese-addon-pack|拔刀剑日系附属包 (SlashBlade Japanese Addon Pack)|1230741
 
@@ -1538,7 +1538,7 @@ just-enough-energistics-jee
 ironman|钢铁侠 (IronMan)
 chunk-animator|区块加载动画*
 craftstudio-api
-
+travellers-gear|旅者之器 (Traveller's Gear)
 fisks-superheroes-2|菲斯克的超级英雄 (Fisk's Superheroes)|806138
 
 aiot-botania|植物魔法全能工具 (AIOT Botania)
@@ -1744,7 +1744,7 @@ giacomos-fishing-net
 the-hospital-mod|医院Mod*|873210¨hospital-mod-facilities-pack|医院Mod (The Hospital Mod) - 设施包1.12.2|873210¨hospital-mod-theatres-pack|医院Mod (The Hospital Mod) - 墙壁和地板包1.12.2|873210¨hospital-mod-pharmacy-pack|医院Mod (The Hospital Mod) - 药房设施包1.12.2,1.14.4|873210
 more-charcoal|更多木炭*
 born-in-a-barn
-
+aqua-acrobatics|水游技艺*
 better-animations-collection@|更好的动物动作*
 
 quality-tools|工具品质*
@@ -1753,7 +1753,7 @@ pollutant-pump|污染泵*
 infinite-pollution-filter|无限污染过滤器*
 jei-hider
 fastflyblockbreaking|飞行速破 (Fast Fly Block Breaking)
-
+exhausted-stamina|竭力攻击*
 planttech-2|植物科技2 (PlantTech 2)|905616
 toast-control|消息框控制*
 
@@ -1774,7 +1774,7 @@ up-and-down-and-all-around|颠倒世界*
 lost-souls@|失落的灵魂*
 intelligent-energistics|智能能源*
 ender-compass|末影指南针*|785069
-
+ic2-tweaker
 thaumic-gadgets|神秘宝具*
 multi-mine|多人开采*
 extra-foam-for-liteloader|Liteloader修复 (Extra Foam For LiteLoader)|982739
@@ -1797,7 +1797,7 @@ touhou-little-maid|车万女仆*|882845
 
 eureka
 lazy-ae2|懒人AE2 (Lazy AE2)
-
+libnine
 equaldragons
 berries
 infinity-gauntlet-mod|无限手套 (Infinity Gauntlet)
@@ -1810,7 +1810,7 @@ the-ultimate-dimension|究极次元*|885906
 advanced-mortars|更好的研钵*
 
 crafttweaker-utils
-
+atum|阿图姆:沙漠之旅/亚图姆:金沙之旅 (Atum 2: Return to the Sands)|1207987
 
 fps-reducer|FPS减速器 (FPS Reducer)
 freelook|自由视角 (FreeLook)
@@ -1930,7 +1930,7 @@ damage-control|伤害控制*
 prestige|成就点*
 
 yukarilib
-energy-converters|能量桥接器*
+
 signpost|路标*
 diagonal-panes|对角线玻璃板*
 forgelin
@@ -2094,7 +2094,7 @@ healing-campfire|治愈营火* - Forge¨healing-campfire-fabric|治愈营火 (He
 jetif|物品丢入流体 (Just Enough Throwing In Fluids)
 rftools-base@|RF工具:基础 (RFTools Base)
 flopper|流体漏斗*
-exhausted-stamina|竭力攻击*
+
 staminaplus|耐力值 (StaminaPlus)
 enhanced-armaments|增强装备*|898546
 spatialcompat|空间兼容 (SpatialCompat)
@@ -2284,7 +2284,7 @@ mahou-tsukai@|魔法使*|929252
 moar-tinkers
 baubley-heart-canisters|心之容器*|795294
 jaopcasingularities|JAOPCA的奇点 (JAOPCA Singularities)|958964
-
+energy-converters|能量桥接器*
 
 
 
@@ -2301,8 +2301,8 @@ incorporeal|幻想多媒体*
 amun-ra
 
 mysterious-mountain-lib|妖怪之山通用库 (MysteriousMountainLib)
-
-
+loottweaker
+rediscovered|特性重现*|359096
 kitchen-mod|厨房 (The Kitchen Mod)|295019
 
 baubles-reborn|饰品栏重置版*
@@ -2322,7 +2322,7 @@ spartan-and-fire|斯巴达之冰与火 (Spartan and Fire)
 beacons-for-all¨beacons-for-all-fabric¨@beacons-for-all
 
 more-flowers|更多功能花*
-
+enchanting-with-thaumcraft|神秘附魔学*
 buzzier-bees
 
 lollipop|棒棒糖*
@@ -2331,7 +2331,7 @@ thaumic-restoration|神秘复辟*
 
 
 primal-boat|原始船舶*
-
+eyes-in-the-darkness
 thaumic-augmentation|神秘进阶*|1063250
 lost-magic|失落的魔法*
 thaumic-arcana
@@ -2441,7 +2441,7 @@ gottschcore
 not-enough-crashes|崩溃优化* - Fabric|1097535¨not-enough-crashes-forge|崩溃优化 (Not Enough Crashes) - Forge|1097535¨@notenoughcrashes|崩溃优化 (Not Enough Crashes)|1097535
 crash-to-main-menu|崩溃返回主菜单*
 tinkers-jei
-loottweaker
+
 better-questing-quest-book|更好的任务-任务书 (Better Questing - Quest Book)
 engineers-doors|工程师的门 (Engineer's Doors)
 tps-generator|TPS发电机 (TPS Generator)
@@ -2464,7 +2464,7 @@ moddirector
 function-api
 targetingapi
 re-targetingapi
-libnine
+
 dominionlib
 
 endergetic|末地拓展 (The Endergetic Expansion)
@@ -2554,7 +2554,7 @@ bloomful
 pick-pocketer|扒手*
 terraforged||1157666
 rad-metabolosis
-mmd-orespawn
+
 tragicmc3|悲惨世界3 (TragicMC 3)|1233212
 
 not-enough-rtgs|更多RTG (Not Enough RTGs)
@@ -2723,7 +2723,7 @@ nocurse|不诅咒 (NoCurse)|1066483
 pretty-beaches||1113121¨pretty-beaches-fabric||1113121
 qing_gong|轻功 (qing_gong)|1065957
 remnants|腐败*
-rediscovered|特性重现*|359096
+
 pane-in-the-glass
 dynamic-dynamos|能源炉动画*
 trophy-slots
@@ -2784,7 +2784,7 @@ mekanism-fluxified|“通量”机械*
 stepup|平滑自动上坡 (StepUp)
 @sodium|钠 (Sodium)|1079347¨sodium|钠*|1079347
 
-netherlicious||1104913
+
 yungs-better-mineshafts-forge|YUNG的矿井优化 (YUNG's Better Mineshafts) - Forge¨yungs-better-mineshafts-fabric|YUNG的矿井优化 (YUNG's Better Mineshafts) - Fabric¨@yungs-better-mineshafts|YUNG的矿井优化 (YUNG's Better Mineshafts)
 terrible-chest|可怕的箱子/可怖箱子*|922554
 spartan-shields|斯巴达之盾*|672959
@@ -2819,7 +2819,7 @@ crash-utilities
 eldritch-mobs
 farmers-delight@|农夫乐事 (Farmer's Delight) - Forge¨farmers-delight-fabric@|农夫乐事 (Farmer's Delight) - Fabric
 artifacts|奇异饰品* - Forge¨artifacts-fabric|奇异饰品 (Artifacts) - Fabric¨@artifacts|奇异饰品 (Artifacts)
-mechanized-steam-power|机械化蒸汽动力*
+
 dynamictreestfc|动态的树:群峦传说附属 (Dynamic Trees-TFC)
 
 dynamic-trees-the-twilight-forest|动态的树:暮色森林附属 (Dynamic Trees-The Twilight Forest)
@@ -2843,7 +2843,7 @@ survival-utilities|生存工具*
 slashblade|拔刀剑 (SlashBlade)|726664
 portal-blocks-2-0|传送门方块 (Portal Blocks)|1077770
 slimecraft-add-tools-etc
-
+mechanized-steam-power|机械化蒸汽动力*
 moreswordonline|动漫神域 (SwordCraftOnline)
 camera-mod|照相机*|1162901
 heartdrops|生命汲取 (Heart Drops)
@@ -2860,7 +2860,7 @@ project-red-illumination|红石计划:照明 (Project Red - Illumination)¨pro
 project-red-world|红石计划:探索 (Project Red - World)
 project-red-compat|红石计划:兼容性 (Project Red - Compat)
 canvas-renderer|Canvas渲染器*|1211675¨@canvas|Canvas渲染器 (Canvas Renderer)|1211675
-
+custom-main-menu|自定义主菜单*|769607
 coolfood|冷饮 (CoolFood)
 infinitevillagertrading@|无限村民交易 (InfiniteVillagerTrading)
 infinite-trading|无限交易* - Forge¨infinite-trading-fabric|无限交易 (Infinite Trading) - Fabric¨@infinite-trading|无限交易 (Infinite Trading)
@@ -2908,7 +2908,7 @@ drcyanos-lootable-bodies|可拾取尸体 (DrCyano's Lootable Bodies)|406482
 simply-cats
 pams-harvestcraft-2-crops|潘马斯农场2 - 作物 (Pam's HarvestCraft 2 - Crops)|1000336
 base-metals|基础金属*
-
+mmd-orespawn
 mmdlib
 just-poop-mod|屎! (Poop Mod!)
 costumes|服装*
@@ -2932,7 +2932,7 @@ pams-harvestcraft-2-food-extended|潘马斯农场2 - 食物拓展 (Pam's Harvest
 pams-harvestcraft-2-trees|潘马斯农场2 - 果树 (Pam's HarvestCraft 2 - Trees)|1000336
 minecart-direction-follow¨better-minecart-rotation-forge
 modern-metals|现代金属*
-
+block-renderer¨blockrenderer
 blockus
 conjurers-cookbook
 color-unchained
@@ -2955,7 +2955,7 @@ lambdynamiclights@|Lambda的动态光源 (LambDynamicLights)|1082100
 realistic-torches|真实火把*|566201
 
 durability-viewer|耐久显示器*|1086168
-
+netherlicious||1104913
 
 
 ground-item-highlighting|地面物品高光显示*|1084931
@@ -2976,7 +2976,7 @@ packagedexcrafting|封包合成拓展 (PackagedExCrafting)
 
 compactstorage|紧凑存储 (compactstorage)
 useful-backpacks|实用背包*
-@conquest-reforged|征服者 (ConquestReforged)|1431287
+conquest-reforged|征服者 (ConquestReforged)|1431287
 steelseries-gamesense
 pizzaatimes-timber-mod
 tellme
@@ -3059,7 +3059,7 @@ entity-culling|实体渲染机制优化*
 hammerandvil|锻造锤与锤锻台 (HammerAndVil)
 
 simply-backpacks|简易背包*
-@mermod
+mermod-fabric¨mermod-forge|Mermod / Mermaid Tail Mod - 1.19.2~1.18.2 Forge版本
 better-placement|更好的放置*|730136
 fat-cat|大资本家*
 waystones2waypoints|传送石碑路径点 (Waystones2Waypoints)
@@ -3143,7 +3143,7 @@ demagnetize|消磁*
 
 
 
-
+controlling|键位冲突显示* - Forge/Fabric版|713187¨controlling-for-fabric|键位冲突显示 (Controlling) - Fabric|713187
 cinderscapes|余烬奇景*
 tfc-homestead
 tfctinkers|群峦与匠魂 (TFC Tinkers)
@@ -3190,7 +3190,7 @@ ambience-extras|环境音乐:附加 (Ambience - Extras)
 additions-mod
 extracpus|更多CPU (Extra CPUs)
 extra-crafting-storage
-conquest-reforged|征服者 (ConquestReforged)|1431287
+@conquest-reforged|征服者 (ConquestReforged)|1431287
 underground-city-engineering@|地下城市工程*|943842
 essentials
 soul-shards-respawn
@@ -3246,7 +3246,7 @@ randompatches-integration
 bubble-column-elevator-backport|1.13水域机制 (1.13 Water Mechanics)
 basic-nether-ores|基础下界矿石*|1136294
 nuclearcraft-reactor-builder|核电工艺反应堆建造机 (NuclearCraft Reactor Builder)
-pams-harvestcraft-2-food-core|潘马斯农场2 - 食物核心 (Pam's HarvestCraft 2 - Food Core)|1000336
+pams-harvestcraft-2-food-core|潘马斯农场2 - 食物核心 (Pam's HarvestCraft 2 - Food Core)|1313245
 eki-lib
 
 nodami|伤害免疫机制移除 (No Damage Immunity)
@@ -3265,7 +3265,7 @@ devtech|GTCEu-CrT开发套件*
 jurassic-world-reborn-mod|侏罗纪世界重生*
 
 cardboard@
-enchanting-with-thaumcraft|神秘附魔学*
+
 crimson-revelations|血腥启示 (Crimson Revelation)
 environmental-core@
 bigger-crafting-tables
@@ -3303,7 +3303,7 @@ suspended-server|挂起服务器*
 starlight@|星光* - Fabric|1216316¨starlight-forge@|星光 (Starlight) - Forge|1216316
 research-table|研究台 🔬 (Research Table 🔬)|871188
 shoulder-surfing-reloaded|越肩视角重制*|985499
-aqua-acrobatics|水游技艺*
+
 silents-mechanisms|寂静机械 (Silent Mechanisms)
 project-potman|背锅人计划 (ProjectPotman)
 nbt-crafting@|数据包NBT合并*
@@ -3358,7 +3358,7 @@ vanilla-hammers|原版材质锤* - Fabric¨vanilla-hammers-forge|原版材质锤
 imblocker|输入法冲突修复 (IMBlocker)|935619
 hardcore-map-reset
 tfc-aged-drinks|群峦陈酿 (TFC Aged Drinks)
-buildcraft-rf
+
 youtubers-lucky-blocks|Youtuber的幸运方块 (Youtuber's Lucky Blocks)
 wandering-trapper|流浪猎人*
 chocolate-fix
@@ -3757,7 +3757,7 @@ loading-timer@|加载时长显示*
 ocrocketry
 chime-fabric@chime
 witherite@|凋灵合金*
-mermod-fabric¨mermaid-tail-mod|人鱼尾*¨mermod-forge|Mermod / Mermaid Tail Mod - 1.19.2~1.18.2 Forge版本
+mermaid-tail-mod|人鱼尾*¨@mermod
 astromine-core|天体矿工:核心 (Astromine: Core)
 dungeondq
 dynamic-trees-integrated-dynamics|动态的树:动态联合/集成动力附属 (Dynamic Trees - Integrated Dynamics)
@@ -4085,7 +4085,7 @@ ticktock@servertick
 
 fps-reducre-for-fabric|FPS减速器(Fabric) (FPS Reducer (For Fabric))
 art-artillery|艺术?火炮! (Art? Artillery!)
-minemenufabric@|我的菜单 Fabric 版 (MineMenuFabric)
+minemenu-refabricated@minemenufabric|我的菜单 Fabric 版 (MineMenuFabric)
 @tabtps
 @afkpeace¨afkpeace
 
@@ -4099,7 +4099,7 @@ searchable-containers|可搜索容器*
 
 
 integrated-additions|集成扩展*
-matchlock-guns|火绳枪*
+
 fabric-autoswitch@autoswitch|自动切换工具 (AutoSwitch)
 inventory-profiles-next@|一键背包整理Next*
 drill|钻头*
@@ -4112,7 +4112,7 @@ village-employment|村庄就业*
 
 deathlog@|死亡日志*
 automatic-elytra|自动鞘翅*
-axolotl-bucket-fix|美西螈桶修复*
+
 xks-decoration|XK的装饰 (XK's Deco)|1214362
 endgame-materials-addons|更多终局材料*
 ravage-and-cabbage
@@ -4556,7 +4556,7 @@ multi-world
 
 terralith¨@terralith
 overworld-two¨overworld-two-forge
-xl-packets|XL数据包 (XL Packets) - Forge¨xl-packets-fabric|XL数据包 (XL Packets) - Fabric
+
 rftools-storage@|RF工具:存储 (RFTools Storage)
 rftools-builder@|RF工具:建造机 (RFTools Builder)
 
@@ -4604,7 +4604,7 @@ morevanillaarmor|更多原版盔甲 (MoreVanillaArmor)
 eternal-tales@
 oh-the-biomes-youll-go-fixes|“你将去的生物群系”修复模组 (Oh The Biomes You'll Go Fixes)
 wild-world
-eyes-in-the-darkness
+
 miskatonic-mysteries¨miskatonic-mysteries-legacy|Miskatonic Mysteries - Forge,未完成且已停更
 harvesters-night|收割者之夜 (Harvester's Night)
 slotlock@|锁定槽 (SlotLock)
@@ -4963,7 +4963,7 @@ one-block-forge
 human-reborn
 @addadd|额外扩展 (Additional Additions)|1427321¨additional-additions|额外扩展* - Fabric|1427321¨additional-additions-forge|额外扩展 (Additional Additions) - Forge|1427321
 earlygame@
-
+happiness-is-a-warm-gun@
 
 kvc-blocks|蛋挞君的原版补全方块篇 (KVCBlocks)|1239534
 enigtech2-util
@@ -5581,7 +5581,7 @@ radium-reforged|镭*
 backpackmod@
 
 untamedwilds|不羁野性 (Untamed Wilds)|1211422
-
+advancements-tracker@|进度追踪器概览 (Advancements Tracker and Overview)
 no-null-processors
 
 ma-enchants|Ma 附魔*
@@ -5952,7 +5952,7 @@ fabricskyboxes@
 @fvt
 blue_skies_tcon
 tdv-tweaks
-ic2-tweaker
+
 picture-in-picture-pip
 guilt-trip
 parcool|跑酷! (ParCool!)
@@ -6659,7 +6659,7 @@ astemirs-fireflies
 ender-crop¨@ender-crop
 modupdater
 fivehead
-
+axolotl-bucket-fix|美西螈桶修复*
 attained-drops|可种植掉落物*
 attained-drops-2|可种植掉落物2*
 
@@ -6823,7 +6823,7 @@ dumplings-delight@|饺子乐事*
 thermal_extra
 nether-sky-block@|下界空岛*
 arte-magicum
-
+tinkers-craft|工匠创意 (Tinkers' Craft)
 ocean-blender|海洋搅拌机 (OceanBlender)
 buildcraft-fluxified
 brewin-and-chewin|饮酒作乐 (Brewin' And Chewin')
@@ -7815,7 +7815,7 @@ advancedshader|光影前向兼容 (AdvancedShader)
 the-wools|羊毛! (The Wools!)¨@the-wools|羊毛! (The Wools!)
 fabric-enchantments
 glued
-tinkers-craft|工匠创意 (Tinkers' Craft)
+
 tinker-leveling
 gtce-tj-edition|格雷科技社区版:TJ版 (GregTech Community Edition: TJ Edition)
 upc
@@ -8090,7 +8090,7 @@ mob-catcher
 
 guns-rpg-waystone-addon
 biospheres-fabric|现代生物圈 (Modern Biospheres)
-better-snowball-fight-2@better-snowball-fight|更好的打雪仗 (Better Snowball Fight)|1323495
+better-snowball-fight-2@better-snowball-fight|更好的打雪仗 (Better Snowball Fight)|1396154
 feathers
 brb@|更好的配方书 (Better Recipe Book)
 boatoverhaul-forge|行船机制修改 (Boat Overhaul) - Forge¨boatoverhaul-fabric|行船机制修改 (Boat Overhaul) - Fabric
@@ -8833,7 +8833,7 @@ kubejs-offline|KubeJS离线文档 (KubeJS Offline Documentation)
 
 
 
-advancements-tracker@|进度追踪器概览 (Advancements Tracker and Overview)
+
 memory-settings|内存设置*
 tiny-item-animations@
 more-plates-revamped@|更多金属板重置版*
@@ -9078,7 +9078,7 @@ commandspy
 slimyfloor
 daily-dad@|每日冷笑话*¨daily-dad-server@|每日冷笑话 (Daily Dad) - Daily Dad - Server
 good-ending
-
+xl-packets|XL数据包 (XL Packets) - Forge¨xl-packets-fabric|XL数据包 (XL Packets) - Fabric
 creeper-nuggets
 coherent-villages
 
@@ -9960,7 +9960,7 @@ enderio-unofficial|末影接口非官方版 (EnderIO Unofficial)
 
 dimensional-gravity
 
-happiness-is-a-warm-gun@
+
 bring-color-to-my-skies
 portal-dungeons
 
@@ -10571,7 +10571,7 @@ warrior-rage@
 
 pokefood
 armor-souls-reforged
-
+matchlock-guns|火绳枪*
 @the-aether-redux|天境:新生代 (The Aether: Redux)
 @banner||1447687
 staaaaaaaaaaaack@
@@ -11197,4 +11197,377 @@ hunger-reworked
 armor-status-hud-renewed|耐久信息显示:重生 (Armor Status HUD Renewed)
 boblib
 placeable-mobs
-potion-blender
+potion-blender
+t6-auto-attack-mod@t6-auto-attack
+forceasciifont-backport
+@vmupdate|VM汉化更新 (VMTranslationUpdate)
+trample-no-more@
+
+directional-damage-indicator
+
+digs-dnd-origins
+superior-flat
+fungal-infection-spore
+@easy-tweak
+
+netherless-quartz
+@maple-api
+@reforged-fabric-api
+caffeinated
+buildcraft-rf
+gilded-ingot
+chatpatches@|聊天补丁 (Chat Patches)
+@burning-furnace
+shadowizardlib@
+ants-unleashed
+@seaborgium
+gold-fish
+pipeplus@
+
+
+deuf-refabricated
+
+runic-items@
+twist|诡变*
+@serverlistbufferfixer
+oil-refinery
+themangonewadvent
+@worthy-food
+
+
+better-nether-continuation|更好的下界延续 (BetterNether Continuing)
+stygian-end-continuation|末地:生物群系扩展延续*
+skill-slots¨skill-slots-fabric
+novam-terram-continuation
+@jade-feet|玉足 (Jade Feet)
+
+cutting-edge
+xp-from-harvest-forked
+
+
+mob-options
+mod-sets@|模组集*
+
+
+hold-that-chunk@
+dark-matter@
+@steal_dogs|偷狗 (Steal Dogs)
+@faster-random
+
+
+simply-steel-continued@
+simple-corinthium
+chidori-origins-collection
+enhancedp2p|增强的P2P (EnhancedP2P)
+custom-de-upgrade-recipes|自定义 DE 升级配方 (Custom DE Upgrade Recipes)
+mode-switch
+better-clouds-forge
+@better-clouds
+@easymapdownload
+
+client-crafting
+anvil-repairing@
+headcrabs
+kubejs-industrial-foregoing
+
+recipe-book-delight@|配方书乐事*
+chest-hoppers
+@gravy-delight
+@ubes-delight
+torcherino-unofficial
+more-bows-and-arrows
+xp-shop
+acclaimed-origins@
+replanter
+zombie-infection-vaccine
+simple-achievements
+achievement-books
+
+invocore-utility-mod
+saljus-quill
+
+derelict
+@charged-charms
+custom-villagers|自定义村民*
+turtlematic
+remove-base-origins
+@cobblemon-delights|方块宝可梦乐事 (Cobblemon Delights)
+redirectionor|异引定址*
+villager-mantle-fix|村民帽子修复*
+rechiseled-create@
+xaeroplus@|Xaero的地图增强 (XaeroPlus)
+cosmetic-nametags@
+thirdlife-rts@
+@real-peaceful-mode|真正的和平模式 (Real Peaceful Mode)
+niftyblocks
+elfs-dark-dimension
+xaeros-minimap-world-map-waystones-compability
+jagms-kiwis@
+@masaadditions
+@improved-trident-enchantments
+mystic-bows
+forgiving-world
+@skillcloaks
+swordinthestone@
+lazy-ae2-patch|懒人AE2补丁 (Lazy AE2 Patch)
+
+yamato-gun-mod@yamato-gun
+
+ars-mage-fight
+
+epicfight-pirates
+kubejs-entity-events-extension
+mc-dungeons-enchantments@
+rei-custom-command
+copperative@|铜心协力*
+growable-storage-cells
+growable-cells-2
+cinchcraft
+day-counter@ag-day-counter
+
+
+
+sculk-redstone-components@sculkredstonecomponents
+toggle-enchantments
+unbreakable-enchantment-forge@unbreakable-enchantment
+immersive-portal-gun@portal-gun|沉浸式传送枪*
+tac-craft-tactical-armor-pack
+@flexible-arms|灵巧双手 (Flexible Arms)
+boat-tweaks
+@effect-descriptions
+@diagonal-windows
+
+illager-invasion@
+
+
+@touhou-origins-blessings
+
+altorigingui@
+dynamic-trees-pams-harvestcraft-2
+dynamic-trees-hexerei
+@minium-stone
+
+@fastrtp
+@tech-decorators|科技装饰商 (Tech Decorators)
+dynamic-trees-ars-nouveau
+
+@kazzmons-magecraft
+@metal-bundles
+
+
+
+
+
+cute-kiwi-birds-new-animal
+moremobheads
+@ouchies
+@traditional-asphalt
+@thaumic_boots
+carpeted-stairs@
+just-enough-archaeology
+bedrock_world
+
+@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)
+pelagic-prehistory
+@minerally
+better-jukeboxes
+patboxs-brewery@brewery
+
+stackable-stew-and-soup
+mindful-darkness@
+@sbet
+nature-arise@
+
+more-beautiful-torches
+quality-crops
+@individual-keep-inventory
+permanent-sponges@
+hang-glider@
+@auto-twerk
+block-beams@
+adorabuild-structures
+
+moogs-end-structures
+@brew-guide
+@oneclickcrafting
+@genshin-ui
+fenomena-structures@phenomena-structures
+first-join-message
+expansive-weaponry
+wabi-sabi-structures-forge¨wabi-sabi-structures-fabric
+@jobsaddon
+@partyaddon
+
+loading-backgrounds
+cuisine-delight@|料理乐事*
+iron-bookshelves@
+@dimensional-expansion
+danger-close
+hardcore-wither
+get-off-my-lawn-reserved@goml-reserved
+
+dangerousstonecutter@
+normal-damage
+
+crabbers-delight
+slot-cycler
+resource-pack-overrides@
+
+arcane-lanterns
+
+@crashma
+
+blackwolf-library¨blackwolf-library-fabric
+blues-scape-and-run-bosses
+gigeresque
+lookaround
+projectileimmunityfix
+@betterzoom
+@player-visibility
+bag-of-holding-forge@bag-of-holding
+
+
+
+fish-of-thieves@
+qualitys-delight
+arrows-info
+godly-vampirism
+itemlocks
+pick-block-pro@|选择方块专业版*
+skin-and-bones
+@pet-armor
+
+@more-nugget|更多矿物粒 (More Nugget)
+dual-swords@
+organizable-play-screens@
+labelling-containers@
+inventory-pause-forge@
+ready-player-fun
+condensed-creative@
+leaves-us-in-peace@
+yellow-snow@
+no-tnt-griefing@
+monster-plus
+ilmusu-enchantments@ilmusuenchantments
+
+desired-servers@
+attributizer@
+reactive@
+simple-deepslate
+minunrpg
+more-sheep-wools
+maturi-delight@
+
+forgified-fabric-api@
+artisanat
+devmode
+better-trims@bettertrims
+@doggo-mod-overhauled
+traders-nightmare
+command-block-ide@
+
+green-thing-mod
+lmft@
+peripheralium@
+@resource-switcher|资源切换器 (ResourceSwitcher)|1460184
+
+clutter@
+no-enchantment-cap-1-12-2-backport
+
+dimension-viewer@
+@more-food|更多食物 (More Food)
+tfcgyres-orehints
+badstdout@
+
+multiworld-mod
+miaooo
+pipeblocker@
+moa-decor-lights
+craft-saddles-forge-1-16-5
+
+@elytra-fix
+@ho-library
+
+riskofrainmod|雨中冒险 (Risk of Rain Mod)
+
+baddie-mobs-uwu
+beacons-revisioned
+silence-mobs@
+
+utilitix@
+
+tiny-coal@
+replay-mod-for-forge-reborn
+flib
+
+copper-revisioned
+
+fine-tuned-calibration@finetunedcalibration
+third-person-maps@
+carpet-minitweaks@minitweaks
+
+time-in-a-bottle-forge
+seared-ladder-backport@seared-ladder-(backport)
+wall-jumped@
+red-core@
+
+record-days-survived@
+veinminer-companion
+
+@leashable-players
+snowballs-freeze-mobs@
+guinea-pigs
+
+
+vault-research
+the-chaser
+bandaging
+enchanted-charms
+@nether-api
+mother-silverfish
+
+
+little-botanics
+ex-pattern-provider
+@integrated-circuit
+creative-disk
+engineers-construct
+@botools|假人映射 (Botools)
+witch-mobility
+gravestones-die-classy||530045
+
+
+
+@pebbles-begone
+eternal-eats
+zombiegame|僵尸游戏 (Zombie Game)
+effect-overhaul
+
+
+eidolon-patches
+fruity-random-teleport|紫颂果味随机传送*
+pipe-master-2000|管道专家 2000 (Pipe Master 2000 / Pipe Googles)
+@command-macros|命令宏 (Command Macros)
+@shwetro|上海地铁装饰组件 (The Shanghai Wetro Mod)
+
+tactical-aid|战术医疗*
+@clear-enchanting
+fishing-bobber-detector
+
+create-balanced-flight
+brewin-and-chewin-remastered
+cupboard
+mcinstance-loader@
+pre-fish-feed|打窝*
+armor-trim-item-fix@
+waffles-moss
+delightful-cuisine-for-woodheads
+towers-of-the-wild-modded|旷野之息高塔:再重制 (Towers of the Wild Modded)
+
+waffles-terracotta-plaster
+watermedia@
+@inverse-phantoms
+@cactus-storage