From 79778490d5936123463d9a9e7e858c4c20f34106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E7=8C=AB=E8=B7=83?= <1043137532@qq.com> Date: Tue, 15 Aug 2023 16:38:52 +0800 Subject: [PATCH] 2.6.5 --- .../Controls/MyHint.xaml.vb | 12 +- .../Controls/MyIconButton.xaml.vb | 30 +- .../Controls/MyIconTextButton.xaml.vb | 8 +- .../Controls/MyPageRight.vb | 2 + .../Controls/MyRadioButton.xaml.vb | 2 +- Plain Craft Launcher 2/FormMain.xaml.vb | 7 + .../Modules/Base/ModBase.vb | 6 +- Plain Craft Launcher 2/Modules/Base/ModNet.vb | 14 +- .../Modules/Minecraft/ModJava.vb | 16 +- .../Modules/Minecraft/ModLaunch.vb | 16 +- .../Modules/Minecraft/ModMinecraft.vb | 5 +- .../Modules/Minecraft/ModWatcher.vb | 3 +- Plain Craft Launcher 2/Modules/ModEvent.vb | 8 +- Plain Craft Launcher 2/Modules/ModMusic.vb | 28 +- .../My Project/AssemblyInfo.vb | 4 +- .../Pages/PageLaunch/PageLaunchRight.xaml | 9 +- .../Pages/PageLaunch/PageLaunchRight.xaml.vb | 264 ++++++--- .../Pages/PageSetup/PageSetupLaunch.xaml | 2 +- .../Pages/PageVersion/PageVersionMod.xaml.vb | 13 +- Plain Craft Launcher 2/Resources/Help.zip | Bin 70960 -> 74683 bytes Plain Craft Launcher 2/Resources/ModData.txt | 535 +++++++++++++++--- 21 files changed, 753 insertions(+), 231 deletions(-) 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 d2a0c1a194fbbf0c1c2a388b4a1d01e17cfec4ca..481cadecb8a08482dbf235f8c0559895bdd8dded 100644 GIT binary patch delta 35890 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 Zy^A47xIlIcNq{8a89e|XeGLT!{69uB!u|jN delta 32346 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 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