diff --git a/Plain Craft Launcher 2/Controls/MyHint.xaml.vb b/Plain Craft Launcher 2/Controls/MyHint.xaml.vb index a04d73be..09ce3ad4 100644 --- a/Plain Craft Launcher 2/Controls/MyHint.xaml.vb +++ b/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") diff --git a/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb b/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb index d599fb4f..d3ab3722 100644 --- a/Plain Craft Launcher 2/Controls/MyIconButton.xaml.vb +++ b/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 diff --git a/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.vb b/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.vb index 6176f1ac..5fc46254 100644 --- a/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.vb +++ b/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 diff --git a/Plain Craft Launcher 2/Controls/MyPageRight.vb b/Plain Craft Launcher 2/Controls/MyPageRight.vb index b67c64f5..5f44169e 100644 --- a/Plain Craft Launcher 2/Controls/MyPageRight.vb +++ b/Plain Craft Launcher 2/Controls/MyPageRight.vb @@ -152,6 +152,7 @@ ''' 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() ''' ''' 即将切换到其他页面,需要强制完成页面状态清理。 ''' 需要立即切换至 Empty。 diff --git a/Plain Craft Launcher 2/Controls/MyRadioButton.xaml.vb b/Plain Craft Launcher 2/Controls/MyRadioButton.xaml.vb index 54e48de1..c147a2f3 100644 --- a/Plain Craft Launcher 2/Controls/MyRadioButton.xaml.vb +++ b/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 diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb index ba3bcac4..bfadf9b0 100644 --- a/Plain Craft Launcher 2/FormMain.xaml.vb +++ b/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 diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb index 5d2f6da3..0225bce5 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.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 diff --git a/Plain Craft Launcher 2/Modules/Base/ModNet.vb b/Plain Craft Launcher 2/Modules/Base/ModNet.vb index 5ffbcad0..a81b0c2b 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModNet.vb +++ b/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) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb index 81a31f96..285ca468 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb +++ b/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) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb index 1908a4ba..7ca5ca24 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb +++ b/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) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb index 7be93924..201ed358 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb +++ b/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 "文件夹" diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModWatcher.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModWatcher.vb index 5059754a..ab5859ac 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModWatcher.vb +++ b/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 diff --git a/Plain Craft Launcher 2/Modules/ModEvent.vb b/Plain Craft Launcher 2/Modules/ModEvent.vb index 51942e9f..752d5162 100644 --- a/Plain Craft Launcher 2/Modules/ModEvent.vb +++ b/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() diff --git a/Plain Craft Launcher 2/Modules/ModMusic.vb b/Plain Craft Launcher 2/Modules/ModMusic.vb index f973d7fe..ae5a191d 100644 --- a/Plain Craft Launcher 2/Modules/ModMusic.vb +++ b/Plain Craft Launcher 2/Modules/ModMusic.vb @@ -5,7 +5,7 @@ ''' ''' 接下来要播放的音乐文件路径。未初始化时为 Nothing。 ''' - Public MusicToplayList As List(Of String) = Nothing + Public MusicWaitingList As List(Of String) = Nothing ''' ''' 全部音乐文件路径。未初始化时为 Nothing。 ''' @@ -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 @@ ''' 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 @@ ''' 继续音乐播放,返回是否成功切换了状态。 ''' 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 diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb index 3e3c0d80..1526c16a 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/PageLaunch/PageLaunchRight.xaml b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml index ff0d1eea..77d82700 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml +++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml @@ -10,9 +10,12 @@ - - - + + + + diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb index 10c0ad29..fe541d9b 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb +++ b/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 "自定义主页" + ''' - ''' 刷新自定义的主页。返回是否成功。 + ''' 刷新自定义主页。 ''' - 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 = " + + + + " + Case 1 '回声洞 + Log("[Page] 主页预设:回声洞") + Content = " + + + + " + 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 = "" & FileContent & "" - 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() + ''' + ''' 立即强制刷新自定义主页。 + ''' 必须在 UI 线程调用。 + ''' + 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 + + ''' + ''' 清空自定义主页缓存信息。 + ''' + Private Sub ClearCache() + LoadedContentHash = -1 + OnlineLoader.Input = "" + Setup.Set("CacheSavedPageUrl", "") + Setup.Set("CacheSavedPageVersion", "") + Log("[Page] 已清空自定义主页缓存") End Sub + ''' + ''' 从文本内容中加载自定义主页。 + ''' 必须在 UI 线程调用。 + ''' + 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 = "" & Content & "" + 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 diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml index 4d772ffb..4a58432a 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml @@ -213,7 +213,7 @@ - + diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb index bbd3318a..b5bf4b4e 100644 --- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb +++ b/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 diff --git a/Plain Craft Launcher 2/Resources/Help.zip b/Plain Craft Launcher 2/Resources/Help.zip index d2a0c1a1..481cadec 100644 Binary files a/Plain Craft Launcher 2/Resources/Help.zip and b/Plain Craft Launcher 2/Resources/Help.zip differ diff --git a/Plain Craft Launcher 2/Resources/ModData.txt b/Plain Craft Launcher 2/Resources/ModData.txt index 36815deb..959fd26a 100644 --- a/Plain Craft Launcher 2/Resources/ModData.txt +++ b/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 \ No newline at end of file +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 \ No newline at end of file