diff --git a/Plain Craft Launcher 2/Controls/MyCard.vb b/Plain Craft Launcher 2/Controls/MyCard.vb
index d441c53..cfd6e48 100644
--- a/Plain Craft Launcher 2/Controls/MyCard.vb
+++ b/Plain Craft Launcher 2/Controls/MyCard.vb
@@ -96,8 +96,8 @@
Return VersionSortBoolean(Left.Version, Right.Version)
End Function)
Case 8, 9
- Stack.Tag = Sort(CType(Stack.Tag, List(Of DlCfFile)), Function(Left As DlCfFile, Right As DlCfFile) As Boolean
- Return Left.Date > Right.Date
+ Stack.Tag = Sort(CType(Stack.Tag, List(Of CompFile)), Function(Left As CompFile, Right As CompFile) As Boolean
+ Return Left.ReleaseDate > Right.ReleaseDate
End Function)
End Select
'控件转换
@@ -113,7 +113,7 @@
Case 6
ForgeDownloadListItemPreload(Stack, Stack.Tag, AddressOf ForgeSave_Click, True)
Case 8
- DlCfFilesPreload(Stack, Stack.Tag, AddressOf FrmDownloadMod.ProjectClick)
+ CompFilesCardPreload(Stack, Stack.Tag, AddressOf FrmDownloadMod.ProjectClick)
End Select
'实现控件虚拟化
For Each Data As Object In Stack.Tag
@@ -134,9 +134,9 @@
FrmDownloadInstall.MinecraftSelected(sender, e)
End Sub, False))
Case 8
- Stack.Children.Add(CType(Data, DlCfFile).ToListItem(AddressOf FrmDownloadCfDetail.Save_Click))
+ Stack.Children.Add(CType(Data, CompFile).ToListItem(AddressOf FrmDownloadCompDetail.Save_Click))
Case 9
- Stack.Children.Add(CType(Data, DlCfFile).ToListItem(AddressOf FrmDownloadCfDetail.Install_Click, AddressOf FrmDownloadCfDetail.Save_Click))
+ Stack.Children.Add(CType(Data, CompFile).ToListItem(AddressOf FrmDownloadCompDetail.Install_Click, AddressOf FrmDownloadCompDetail.Save_Click))
Case 10
Stack.Children.Add(LiteLoaderDownloadListItem(Data, AddressOf LiteLoaderSave_Click, True))
Case 11
@@ -173,7 +173,11 @@
AniStart(AniList, "MyCard Mouse " & Uuid)
End Sub
- '高度改变动画
+#Region "高度改变动画"
+
+ '''
+ ''' 是否启用高度改变动画。
+ '''
Public Property UseAnimation As Boolean = True
Private IsHeightAnimating As Boolean = False
Private ActualUsedHeight As Double '回滚实际高度(例如 NaN)
@@ -221,6 +225,8 @@
IsHeightAnimating = False
End Sub
+#End Region
+
'折叠
'若设置了 CanSwap,或 SwapControl 不为空,则判定为会进行折叠
'这是因为不能直接在 XAML 中设置 SwapControl
@@ -237,7 +243,7 @@
Get
Return _IsSwaped
End Get
- Set(ByVal value As Boolean)
+ Set(value As Boolean)
If _IsSwaped = value Then Exit Property
_IsSwaped = value
If SwapControl Is Nothing Then Exit Property
diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb
index 0b61669..58a9526 100644
--- a/Plain Craft Launcher 2/FormMain.xaml.vb
+++ b/Plain Craft Launcher 2/FormMain.xaml.vb
@@ -126,6 +126,13 @@ Public Class FormMain
'3:BUG+ IMP* FEAT-
'2:BUG* IMP-
'1:BUG-
+ If LastVersion < 283 Then 'Snapshot 2.5.0
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "支持搜索、下载 Modrinth 中的 Mod 与整合包"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "资源搜索页面支持翻页"))
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "支持安装 Modrinth 整合包"))
+ FeatureCount += 5
+ BugCount += 5
+ End If
If LastVersion < 282 Then 'Snapshot 2.4.9
FeatureCount += 1
BugCount += 5
@@ -507,7 +514,7 @@ Reopen:
Dim UnlockedTheme As New List(Of String) From {"2"}
UnlockedTheme.AddRange(New List(Of String)(Setup.Get("UiLauncherThemeHide").ToString.Split("|")))
UnlockedTheme.AddRange(New List(Of String)(Setup.Get("UiLauncherThemeHide2").ToString.Split("|")))
- Setup.Set("UiLauncherThemeHide2", Join(ArrayNoDouble(UnlockedTheme), "|"))
+ Setup.Set("UiLauncherThemeHide2", Join(UnlockedTheme.Distinct.ToList, "|"))
End If
'重置欧皇彩
If LastVersionCode <= 115 AndAlso Setup.Get("UiLauncherThemeHide2").ToString.Split("|").Contains("13") Then
@@ -866,7 +873,7 @@ Install:
Exit Sub
End If
'安装整合包
- If {"zip", "rar"}.Contains(Extension) Then '部分压缩包是 zip 格式但后缀为 rar,总之试一试
+ If {"zip", "rar", "mrpack"}.Contains(Extension) Then '部分压缩包是 zip 格式但后缀为 rar,总之试一试
Log("[System] 文件为压缩包,尝试作为整合包安装")
If ModpackInstall(FilePath, ShowHint:=False) Then Exit Sub
End If
@@ -1010,9 +1017,9 @@ Install:
'''
VersionSetup
'''
- ''' CurseForge 工程详情。这是一个副页面。
+ ''' 资源工程详情。这是一个副页面。
'''
- CfDetail
+ CompDetail
'''
''' 帮助详情。这是一个副页面。
'''
@@ -1059,13 +1066,20 @@ Install:
Return "下载管理"
Case PageType.VersionSetup
Return "版本设置 - " & If(PageVersionLeft.Version Is Nothing, "未知版本", PageVersionLeft.Version.Name)
- Case PageType.CfDetail
+ Case PageType.CompDetail
If Stack.Additional Is Nothing Then
- Log("[Control] CurseForge 工程详情页面未提供关键项", LogLevel.Feedback)
+ Log("[Control] 资源工程详情页面未提供关键项", LogLevel.Feedback)
Return "未知页面"
Else
- Dim Project As DlCfProject = Stack.Additional
- Return If(Project.IsModPack, "整合包下载 - ", "Mod 下载 - ") & Project.ChineseName
+ Dim Project As CompProject = Stack.Additional
+ Select Case Project.Type
+ Case CompType.Mod
+ Return "Mod 下载 - " & Project.TranslatedName
+ Case CompType.ModPack
+ Return "整合包下载 - " & Project.TranslatedName
+ Case Else 'CompType.ResourcePack
+ Return "资源包下载 - " & Project.TranslatedName
+ End Select
End If
Case PageType.HelpDetail
If Stack.Additional Is Nothing Then
@@ -1303,9 +1317,9 @@ Install:
Case PageType.VersionSetup '版本设置
If FrmVersionLeft Is Nothing Then FrmVersionLeft = New PageVersionLeft
PageChangeAnim(FrmVersionLeft, FrmVersionLeft.PageGet(SubType))
- Case PageType.CfDetail 'Mod 信息
- If FrmDownloadCfDetail Is Nothing Then FrmDownloadCfDetail = New PageDownloadCfDetail
- PageChangeAnim(New MyPageLeft, FrmDownloadCfDetail)
+ Case PageType.CompDetail 'Mod 信息
+ If FrmDownloadCompDetail Is Nothing Then FrmDownloadCompDetail = New PageDownloadCompDetail
+ PageChangeAnim(New MyPageLeft, FrmDownloadCompDetail)
Case PageType.HelpDetail '帮助详情
PageChangeAnim(New MyPageLeft, Stack.Additional(1))
End Select
@@ -1505,14 +1519,16 @@ Install:
Return HasRunningMinecraft
End Function
- '返回顶部
- Private Sub BtnExtraBack_Click(sender As Object, e As EventArgs) Handles BtnExtraBack.Click
+ '''
+ ''' 返回顶部。
+ '''
+ Public Sub BackToTop() Handles BtnExtraBack.Click
Dim RealScroll As MyScrollViewer = BtnExtraBack_GetRealChild()
RealScroll.PerformVerticalOffsetDelta(-RealScroll.VerticalOffset)
End Sub
Private Function BtnExtraBack_ShowCheck() As Boolean
Dim RealScroll As MyScrollViewer = BtnExtraBack_GetRealChild()
- Return RealScroll IsNot Nothing AndAlso RealScroll.Visibility = Visibility.Visible AndAlso RealScroll.VerticalOffset > Height + If(BtnExtraBack.Show, 0, 1500)
+ Return RealScroll IsNot Nothing AndAlso RealScroll.Visibility = Visibility.Visible AndAlso RealScroll.VerticalOffset > Height + If(BtnExtraBack.Show, 0, 700)
End Function
Private Function BtnExtraBack_GetRealChild() As MyScrollViewer
If PanMainRight.Child Is Nothing Then Return Nothing
diff --git a/Plain Craft Launcher 2/Images/Icons/NoIcon.png b/Plain Craft Launcher 2/Images/Icons/NoIcon.png
index cf4a0ce..556e72b 100644
Binary files a/Plain Craft Launcher 2/Images/Icons/NoIcon.png and b/Plain Craft Launcher 2/Images/Icons/NoIcon.png differ
diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
index 7ff014b..a98dad5 100644
--- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb
+++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
@@ -10,12 +10,12 @@ Public Module ModBase
#Region "声明"
'下列版本信息由更新器自动修改
- Public Const VersionBaseName As String = "2.4.9" '不含分支前缀的显示用版本名
- Public Const VersionStandardCode As String = "2.4.9." & VersionBranchCode '标准格式的四段式版本号
+ Public Const VersionBaseName As String = "2.5.0" '不含分支前缀的显示用版本名
+ Public Const VersionStandardCode As String = "2.5.0." & VersionBranchCode '标准格式的四段式版本号
#If BETA Then
Public Const VersionCode As Integer = 281 'Release
#Else
- Public Const VersionCode As Integer = 282 'Snapshot
+ Public Const VersionCode As Integer = 283 'Snapshot
#End If
'自动生成的版本信息
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -1241,7 +1241,7 @@ Re:
Public Function ExtractFile(CompressFilePath As String, DestDirectory As String, Optional Encode As Encoding = Nothing) As Boolean
Try
Directory.CreateDirectory(DestDirectory)
- If CompressFilePath.EndsWith(".zip") OrElse CompressFilePath.EndsWith(".jar") Then
+ If CompressFilePath.EndsWith(".zip") OrElse CompressFilePath.EndsWith(".jar") OrElse CompressFilePath.EndsWith(".mrpack") Then
'以 zip 方式解压
ZipFile.ExtractToDirectory(CompressFilePath, DestDirectory, If(Encode, Encoding.GetEncoding("GB18030")))
Return True
@@ -1757,25 +1757,7 @@ Re:
'''
''' 数组去重。
'''
- Public Function ArrayNoDouble(Of T)(Arr As T(), Optional IsEqual As CompareThreadStart = Nothing) As T()
- Dim ResultArray As New List(Of T)
- For i = 0 To UBound(Arr)
- For ii = i + 1 To UBound(Arr)
- If IsEqual Is Nothing Then
- If Arr(i).Equals(Arr(ii)) Then GoTo NextElement
- Else
- If IsEqual(Arr(i), Arr(ii)) Then GoTo NextElement
- End If
- Next
- ResultArray.Add(Arr(i))
-NextElement:
- Next i
- Return ResultArray.ToArray
- End Function
- '''
- ''' 数组去重。
- '''
- Public Function ArrayNoDouble(Of T)(Arr As List(Of T), Optional IsEqual As CompareThreadStart = Nothing) As List(Of T)
+ Public Function Distinct(Of T)(Arr As ICollection(Of T), Optional IsEqual As CompareThreadStart(Of T) = Nothing) As List(Of T)
Dim ResultArray As New List(Of T)
For i = 0 To Arr.Count - 1
For ii = i + 1 To Arr.Count - 1
@@ -1790,17 +1772,6 @@ NextElement:
Next i
Return ResultArray
End Function
- '''
- ''' 若 Key 不存在于辞典,则加入辞典。
- ''' 若 Key 已存在于辞典,则更新 Value。
- '''
- Public Sub DictionaryAdd(Of TKey, TValue)(ByRef Dict As Dictionary(Of TKey, TValue), Key As TKey, Value As TValue)
- If Dict.ContainsKey(Key) Then
- Dict(Key) = Value
- Else
- Dict.Add(Key, Value)
- End If
- End Sub
'''
''' 获取格式类似于“11:08:52.037”的当前时间的字符串。
@@ -2016,7 +1987,7 @@ NextElement:
''' 按照既定的函数进行选择排序。
'''
''' 传入两个对象,若第一个对象应该排在前面,则返回 True。
- Public Function Sort(Of T)(List As IList(Of T), SortRule As CompareThreadStart) As List(Of T)
+ Public Function Sort(Of T)(List As IList(Of T), SortRule As CompareThreadStart(Of T)) As List(Of T)
Dim NewList As New List(Of T)
While List.Count > 0
Dim Highest = List(0)
@@ -2028,7 +1999,7 @@ NextElement:
End While
Return NewList
End Function
- Public Delegate Function CompareThreadStart(Left, Right) As Boolean
+ Public Delegate Function CompareThreadStart(Of T)(Left As T, Right As T) As Boolean
'''
''' 获取程序启动参数。
diff --git a/Plain Craft Launcher 2/Modules/Base/ModLoader.vb b/Plain Craft Launcher 2/Modules/Base/ModLoader.vb
index af23207..21d90bb 100644
--- a/Plain Craft Launcher 2/Modules/Base/ModLoader.vb
+++ b/Plain Craft Launcher 2/Modules/Base/ModLoader.vb
@@ -679,7 +679,7 @@ Restart:
Log(ex, "文件夹加载器启动检测出错")
End Try
'写入检查数据
- DictionaryAdd(LoaderFolderDictionary, Loader, Value)
+ LoaderFolderDictionary(Loader) = Value
'开始检查
If Type = LoaderFolderRunType.UpdateOnly Then Return False
If WaitForExit Then
diff --git a/Plain Craft Launcher 2/Modules/Base/ModNet.vb b/Plain Craft Launcher 2/Modules/Base/ModNet.vb
index eab6ec7..b8d33ae 100644
--- a/Plain Craft Launcher 2/Modules/Base/ModNet.vb
+++ b/Plain Craft Launcher 2/Modules/Base/ModNet.vb
@@ -891,7 +891,7 @@ RequestFinished:
Public Sub New(Urls As String(), LocalPath As String, Optional Check As FileChecker = Nothing)
Dim Sources As New List(Of NetSource)
Dim Count As Integer = 0
- Urls = ArrayNoDouble(Urls)
+ Urls = Urls.Distinct.ToArray
For Each Source As String In Urls
Sources.Add(New NetSource With {.FailCount = 0, .Url = SecretCdnSign(Source.Replace(vbCr, "").Replace(vbLf, "").Trim), .Id = Count, .IsFailed = False, .Ex = Nothing})
Count += 1
@@ -1585,7 +1585,7 @@ NextElement:
For Each Folder In McFolderList
Folders.Add(Folder.Path)
Next
- Folders = ArrayNoDouble(Folders)
+ Folders = Folders.Distinct.ToList
For Each Folder In Folders
If Folder <> PathMcFolder AndAlso Directory.Exists(Folder) Then FoldersFinal.Add(Folder)
Next
@@ -1725,7 +1725,7 @@ Retry:
For Each Ex As Exception In ExList
ErrOutput.Add(GetExceptionDetail(Ex))
Next
- Log("[Download] " & Join(ArrayNoDouble(ErrOutput.ToArray), vbCrLf))
+ Log("[Download] " & Join(ErrOutput.Distinct.ToArray, vbCrLf))
End Sub
Public Overrides Sub Abort()
SyncLock LockState
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
new file mode 100644
index 0000000..5eb980e
--- /dev/null
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
@@ -0,0 +1,1216 @@
+Public Module ModComp
+
+ Public Enum CompType
+ '''
+ ''' Mod。
+ '''
+ [Mod]
+ '''
+ ''' 整合包。
+ '''
+ ModPack
+ '''
+ ''' 资源包。
+ '''
+ ResourcePack
+ End Enum
+ Public Enum CompModLoaderType
+ 'https://docs.curseforge.com/?http#tocS_ModLoaderType
+ Any = 0
+ Forge = 1
+ Fabric = 4
+ Quilt = 5
+ End Enum
+
+#Region "CompDatabase | Mod 数据库"
+
+ Private _CompDatabase As List(Of CompDatabaseEntry) = Nothing
+ Private ReadOnly Property CompDatabase As List(Of CompDatabaseEntry)
+ Get
+ If _CompDatabase IsNot Nothing Then Return _CompDatabase
+ '初始化数据库
+ _CompDatabase = New List(Of CompDatabaseEntry)
+ Dim i As Integer = 0
+ For Each Line In DecodeBytes(GetResources("ModData")).Replace(vbCrLf, vbLf).Replace(vbCr, "").Split(vbLf)
+ i += 1
+ If Line = "" Then Continue For
+ For Each EntryData As String In Line.Split("¨")
+ Dim Entry = New CompDatabaseEntry
+ Dim SplitedLine = EntryData.Split("|")
+ If SplitedLine(0).StartsWith("@") Then
+ Entry.CurseForgeSlug = Nothing
+ Entry.ModrinthSlug = SplitedLine(0).Replace("@", "")
+ ElseIf SplitedLine(0).EndsWith("@") Then
+ Entry.CurseForgeSlug = SplitedLine(0).TrimEnd("@")
+ Entry.ModrinthSlug = Entry.CurseForgeSlug
+ ElseIf SplitedLine(0).Contains("@") Then
+ Entry.CurseForgeSlug = SplitedLine(0).Split("@")(0)
+ Entry.ModrinthSlug = SplitedLine(0).Split("@")(1)
+ Else
+ Entry.CurseForgeSlug = SplitedLine(0)
+ Entry.ModrinthSlug = Nothing
+ End If
+ Entry.WikiId = i
+ If SplitedLine.Count >= 2 Then
+ Entry.ChineseName = SplitedLine(1)
+ Entry.MCBBS = If(SplitedLine.Count >= 3, SplitedLine(2), Nothing)
+ If Entry.ChineseName.Contains("*") Then '处理 *
+ Entry.ChineseName = Entry.ChineseName.Replace("*", " (" &
+ String.Join(" ", If(Entry.CurseForgeSlug, Entry.ModrinthSlug).Split("-").Select(Function(w) w.Substring(0, 1).ToUpper & w.Substring(1, w.Length - 1))) & ")")
+ End If
+ End If
+ _CompDatabase.Add(Entry)
+ Next
+ Next
+ Return _CompDatabase
+ End Get
+ End Property
+
+ Private Class CompDatabaseEntry
+ '''
+ ''' McMod 的对应 ID。
+ '''
+ Public WikiId As Integer
+ '''
+ ''' 中文译名。空字符串代表没有翻译。
+ '''
+ Public ChineseName As String = ""
+ '''
+ ''' MCBBS 发布帖编号(例如 195107)。若为 Nothing 则没有发布帖。
+ '''
+ Public MCBBS As Integer?
+ '''
+ ''' CurseForge Slug(例如 advanced-solar-panels)。
+ '''
+ Public CurseForgeSlug As String = Nothing
+ '''
+ ''' Modrinth Slug(例如 advanced-solar-panels)。
+ '''
+ Public ModrinthSlug As String = Nothing
+
+ Public Overrides Function ToString() As String
+ Return If(CurseForgeSlug, "") & "&" & If(ModrinthSlug, "") & "|" & WikiId & "|" & ChineseName & If(MCBBS Is Nothing, "", "|" & MCBBS)
+ End Function
+ End Class
+
+#End Region
+
+#Region "CompProject | 工程信息"
+
+ '类定义
+
+ Public Class CompProject
+
+ '源信息
+
+ '''
+ ''' 该工程信息来自 CurseForge 还是 Modrinth。
+ '''
+ Public ReadOnly FromCurseForge As Boolean
+ '''
+ ''' 工程的种类。
+ '''
+ Public ReadOnly Type As CompType
+ '''
+ ''' 工程的短名。例如 technical-enchant。
+ '''
+ Public ReadOnly Slug As String
+ '''
+ ''' CurseForge 工程的数字 ID。Modrinth 工程的乱码 ID。
+ '''
+ Public ReadOnly Id As String
+ '''
+ ''' CurseForge 文件列表的数字 ID。Modrinth 工程的此项无效。
+ '''
+ Public ReadOnly CurseForgeFileIds As List(Of Integer)
+
+ '描述性信息
+
+ '''
+ ''' 原始的英文名称。
+ '''
+ Public ReadOnly RawName As String
+ '''
+ ''' 英文描述。
+ '''
+ Public ReadOnly Description As String
+ '''
+ ''' 来源网站的工程页面网址。确保格式一定标准。
+ ''' CurseForge:https://www.curseforge.com/minecraft/mc-mods/jei
+ ''' Modrinth:https://modrinth.com/mod/technical-enchant
+ '''
+ Public ReadOnly Website As String
+ '''
+ ''' 最后一次更新的时间。可能为 Nothing。
+ '''
+ Public ReadOnly LastUpdate As Date? = Nothing
+ '''
+ ''' 下载量计数。注意,该计数仅为一个来源,无法反应两边加起来的下载量!
+ '''
+ Public ReadOnly DownloadCount As Integer
+ '''
+ ''' 支持的 Mod 加载器列表。可能为空。
+ '''
+ Public ReadOnly ModLoaders As List(Of CompModLoaderType)
+ '''
+ ''' 描述性标签的内容。已转换为中文。
+ '''
+ Public ReadOnly Tags As List(Of String)
+ '''
+ ''' Logo 图片的下载地址。若为 Nothing 则没有。
+ '''
+ Public ReadOnly LogoUrl As String = Nothing
+ '''
+ ''' 游戏大版本列表。例如:18, 16, 15……
+ '''
+ Public ReadOnly GameVersions As List(Of Integer)
+
+ '数据库信息
+
+ Private LoadedDatabase As Boolean = False
+ Private _DatabaseEntry As CompDatabaseEntry = Nothing
+ '''
+ ''' 关联的数据库条目。若为 Nothing 则没有。
+ '''
+ Private Property DatabaseEntry As CompDatabaseEntry
+ Get
+ If Not LoadedDatabase Then
+ LoadedDatabase = True
+ _DatabaseEntry = CompDatabase.FirstOrDefault(Function(c) If(FromCurseForge, c.CurseForgeSlug, c.ModrinthSlug) = Slug)
+ End If
+ Return _DatabaseEntry
+ End Get
+ Set(value As CompDatabaseEntry)
+ LoadedDatabase = True
+ _DatabaseEntry = value
+ End Set
+ End Property
+ '''
+ ''' MC 百科的页面 ID。若为 0 则没有。
+ '''
+ Public ReadOnly Property WikiId As Integer
+ Get
+ Return If(DatabaseEntry Is Nothing, 0, DatabaseEntry.WikiId)
+ End Get
+ End Property
+ '''
+ ''' MCBBS 的帖子 ID。若为 0 则没有。
+ '''
+ Public ReadOnly Property MCBBS As Integer
+ Get
+ Return If(DatabaseEntry Is Nothing, 0, If(DatabaseEntry.MCBBS, 0))
+ End Get
+ End Property
+ '''
+ ''' 翻译后的中文名。若数据库没有则等同于 RawName。
+ '''
+ Public ReadOnly Property TranslatedName As String
+ Get
+ Return If(DatabaseEntry Is Nothing OrElse DatabaseEntry.ChineseName = "", RawName, DatabaseEntry.ChineseName)
+ End Get
+ End Property
+
+ '实例化
+
+ '''
+ ''' 从工程 Json 中初始化实例。若出错会抛出异常。
+ '''
+ Public Sub New(Data As JObject)
+ FromCurseForge = Data.ContainsKey("gameId")
+ If FromCurseForge Then
+#Region "CurseForge"
+ '简单信息
+ Id = Data("id")
+ Slug = Data("slug")
+ RawName = Data("name")
+ Description = Data("summary")
+ Website = Data("links")("websiteUrl").ToString.TrimEnd("/")
+ LastUpdate = Data("dateModified")
+ DownloadCount = Data("downloadCount")
+ 'Logo
+ If Data("logo").Count > 0 Then
+ If GetPixelSize(1) > 1.25 Then
+ LogoUrl = Data("logo")("thumbnailUrl").ToString '使用 256x256 图标
+ Else
+ LogoUrl = Data("logo")("thumbnailUrl").ToString.Replace("/256/256/", "/64/64/") '使用 64x64 图标
+ End If
+ End If
+ 'FileIndexes / GameVersions
+ Dim Files = If(CType(Data("latestFilesIndexes"), JArray), New JArray).
+ Where(Function(i) i("gameVersion").ToString.Contains("1."))
+ CurseForgeFileIds = Files.Select(Of Integer)(Function(v) v("fileId")).ToList
+ GameVersions = Files.Select(Of Integer)(Function(v) Val(v("gameVersion").ToString.Split(".")(1).Split("-").First)).Where(Function(v) v > 0).
+ Distinct.OrderByDescending(Function(v) v).ToList
+ 'Type
+ If Website.Contains("/mc-mods/") OrElse Website.Contains("/mod/") Then
+ Type = CompType.Mod
+ ElseIf Website.Contains("/modpacks/") Then
+ Type = CompType.ModPack
+ Else
+ Type = CompType.ResourcePack
+ End If
+ 'Tags
+ Tags = New List(Of String)
+ For Each Category In Data("categories").Select(Of Integer)(Function(t) t("id")).Distinct.OrderByDescending(Function(c) c)
+ Select Case Category
+ 'Mod
+ Case 406 : Tags.Add("世界元素")
+ Case 407 : Tags.Add("生物群系")
+ Case 410 : Tags.Add("维度")
+ Case 408 : Tags.Add("矿物和资源")
+ Case 409 : Tags.Add("天然结构")
+ Case 412 : Tags.Add("科技")
+ Case 415 : Tags.Add("管道与物流")
+ Case 4843 : Tags.Add("自动化")
+ Case 417 : Tags.Add("能源")
+ Case 4558 : Tags.Add("红石")
+ Case 436 : Tags.Add("食物与烹饪")
+ Case 416 : Tags.Add("农业")
+ Case 414 : Tags.Add("运输")
+ Case 420 : Tags.Add("仓储")
+ Case 419 : Tags.Add("魔法")
+ Case 422 : Tags.Add("冒险")
+ Case 424 : Tags.Add("装饰")
+ Case 411 : Tags.Add("生物")
+ Case 434 : Tags.Add("装备")
+ Case 423 : Tags.Add("信息显示")
+ Case 435 : Tags.Add("多人")
+ Case 5191 : Tags.Add("改良")
+ Case 421 : Tags.Add("支持库")
+ '整合包
+ Case 4484 : Tags.Add("多人")
+ Case 4479 : Tags.Add("硬核")
+ Case 4483 : Tags.Add("战斗")
+ Case 4478 : Tags.Add("任务")
+ Case 4472 : Tags.Add("科技")
+ Case 4473 : Tags.Add("魔法")
+ Case 4475 : Tags.Add("冒险")
+ Case 4476 : Tags.Add("探索")
+ Case 4477 : Tags.Add("小游戏")
+ Case 4471 : Tags.Add("科幻")
+ Case 4736 : Tags.Add("空岛")
+ Case 5128 : Tags.Add("原版改良")
+ Case 4487 : Tags.Add("FTB")
+ Case 4480 : Tags.Add("基于地图")
+ Case 4481 : Tags.Add("轻量整合")
+ Case 4482 : Tags.Add("大型整合")
+ 'FUTURE: Res
+ End Select
+ Next
+ If Tags.Count = 0 Then Tags.Add("杂项")
+ 'ModLoaders
+ ModLoaders = New List(Of CompModLoaderType)
+ For Each File In If(Data("latestFiles"), {})
+ Dim NewFile As New CompFile(File, Type)
+ ModLoaders.AddRange(NewFile.ModLoaders)
+ Next
+ ModLoaders = ModLoaders.Distinct.OrderBy(Of Integer)(Function(t) t).ToList
+#End Region
+ Else
+#Region "Modrinth"
+ '简单信息
+ Id = If(Data("project_id"), Data("id")) '两个 API 会返回的 key 不一样
+ Slug = Data("slug")
+ RawName = Data("title")
+ Description = Data("description")
+ LastUpdate = Data("date_modified")
+ DownloadCount = Data("downloads")
+ LogoUrl = Data("icon_url")
+ If LogoUrl = "" Then LogoUrl = Nothing
+ Website = $"https://modrinth.com/{Data("project_type")}/{Slug}"
+ 'GameVersions
+ GameVersions = If(CType(Data("versions"), JArray), New JArray).
+ Select(Function(v) v.ToString).Where(Function(v) v.Contains("1.")).
+ Select(Of Integer)(Function(v) Val(v.Split(".")(1).Split("-").First)).Where(Function(v) v > 0).
+ Distinct.OrderByDescending(Function(v) v).ToList
+ 'Type
+ Select Case Data("project_type").ToString
+ Case "mod" : Type = CompType.Mod
+ Case "modpack" : Type = CompType.ModPack
+ Case "resourcepack" : Type = CompType.ResourcePack
+ End Select
+ 'Tags & ModLoaders
+ Tags = New List(Of String)
+ ModLoaders = New List(Of CompModLoaderType)
+ For Each Category In Data("categories").Select(Function(t) t.ToString)
+ Select Case Category
+ '加载器
+ Case "forge" : ModLoaders.Add(CompModLoaderType.Forge)
+ Case "fabric" : ModLoaders.Add(CompModLoaderType.Fabric)
+ Case "quilt" : ModLoaders.Add(CompModLoaderType.Quilt)
+ 'Mod
+ Case "worldgen" : Tags.Add("世界元素")
+ Case "technology" : Tags.Add("科技")
+ Case "food" : Tags.Add("食物与烹饪")
+ Case "game-mechanics" : Tags.Add("游戏机制")
+ Case "transportation" : Tags.Add("运输")
+ Case "storage" : Tags.Add("仓储")
+ Case "magic" : Tags.Add("魔法")
+ Case "adventure" : Tags.Add("冒险")
+ Case "decoration" : Tags.Add("装饰")
+ Case "mobs" : Tags.Add("生物")
+ Case "equipment" : Tags.Add("装备")
+ Case "optimization" : Tags.Add("性能优化")
+ Case "social" : Tags.Add("多人")
+ Case "utility" : Tags.Add("改良")
+ Case "library" : Tags.Add("支持库")
+ '整合包
+ Case "multiplayer" : Tags.Add("多人")
+ Case "optimization" : Tags.Add("性能优化")
+ Case "challenging" : Tags.Add("硬核")
+ Case "combat" : Tags.Add("战斗")
+ Case "quests" : Tags.Add("任务")
+ Case "technology" : Tags.Add("科技")
+ Case "magic" : Tags.Add("魔法")
+ Case "adventure" : Tags.Add("冒险")
+ Case "kitchen-sink" : Tags.Add("烹饪")
+ Case "lightweight" : Tags.Add("轻量整合")
+ 'FUTURE: Res
+ End Select
+ Next
+ If Tags.Count = 0 Then Tags.Add("杂项")
+ ModLoaders.Sort()
+#End Region
+ End If
+ '保存缓存
+ CompProjectCache(Id) = Me
+ End Sub
+ '''
+ ''' 将当前工程信息实例化为控件。
+ '''
+ Public Function ToCompItem(ShowMcVersionDesc As Boolean, ShowLoaderDesc As Boolean, Optional OnClick As MyCompItem.ClickEventHandler = Nothing) As MyCompItem
+ '获取版本描述
+ Dim GameVersionDescription As String
+ If GameVersions Is Nothing OrElse GameVersions.Count = 0 Then
+ GameVersionDescription = ""
+ Else
+ Dim SpaVersions As New List(Of String)
+ For i = 0 To GameVersions.Count - 1
+ Dim StartVersion As Integer = GameVersions(i), EndVersion As Integer = GameVersions(i)
+ For ii = i + 1 To GameVersions.Count - 1
+ If GameVersions(ii) = EndVersion - 1 Then
+ EndVersion = GameVersions(ii)
+ i = ii
+ Else
+ Exit For
+ End If
+ Next
+ If StartVersion = EndVersion Then
+ SpaVersions.Add("1." & StartVersion)
+ ElseIf McVersionHighest > -1 AndAlso StartVersion >= McVersionHighest Then
+ SpaVersions.Add("1." & EndVersion & "+")
+ ElseIf EndVersion <= 7 Then
+ SpaVersions.Add("1." & StartVersion & "-")
+ Exit For
+ ElseIf StartVersion - EndVersion = 1 Then
+ SpaVersions.Add("1." & StartVersion & ", 1." & EndVersion)
+ Else
+ SpaVersions.Add("1." & StartVersion & "~1." & EndVersion)
+ End If
+ Next
+ GameVersionDescription = "[" & Join(SpaVersions, ", ") & "] "
+ End If
+ '实例化 UI
+ Dim NewItem As New MyCompItem With {.Tag = Me}
+ NewItem.LabTitle.Text = TranslatedName
+ NewItem.LabInfo.Text = Description.Replace(vbCr, "").Replace(vbLf, "")
+ NewItem.LabLeft.Text = If(ModeDebug, If(FromCurseForge, "[CurseForge] ", "[Modrinth] "), "") &
+ (If(ModLoaders.Count > 0 AndAlso ShowLoaderDesc, "[" & Join(ModLoaders.Select(Function(m) GetStringFromEnum(m)).ToList, "/") & "] ", "") &
+ If(ShowMcVersionDesc, GameVersionDescription, "")).Replace("] [", " ") &
+ Join(Tags, ",") &
+ If(LastUpdate IsNot Nothing, " (" & GetTimeSpanString(LastUpdate - Date.Now) & "更新)", "")
+ If LogoUrl Is Nothing Then
+ NewItem.Logo = "pack://application:,,,/images/Icons/NoIcon.png"
+ Else
+ NewItem.Logo = LogoUrl
+ End If
+ If OnClick IsNot Nothing Then
+ AddHandler NewItem.Click, OnClick
+ NewItem.HasAnimation = True
+ Else
+ NewItem.HasAnimation = False
+ End If
+ Return NewItem
+ End Function
+
+ '辅助函数
+
+ '''
+ ''' 检查是否与某个 Project 是相同的工程,只是在不同的网站。
+ '''
+ Public Function IsLike(Project As CompProject) As Boolean
+ '提取字符串中的字母和数字
+ Dim GetRaw =
+ Function(Data As String) As String
+ Dim Result As New StringBuilder()
+ For Each r As Char In Data.Where(Function(c) Char.IsLetterOrDigit(c))
+ Result.Append(r)
+ Next
+ Return Result.ToString.ToLower
+ End Function
+ '具体的检查
+ '精准匹配:相同实例 或 MCMOD 指定的相同内容
+ '模糊匹配:支持的 Mod 加载器一致,且 (原名、描述文本或 Slug 的英文部分相同)
+ If Id = Project.Id OrElse TranslatedName = Project.TranslatedName OrElse '精准匹配
+ ((RawName = Project.RawName OrElse Description = Project.Description OrElse GetRaw(Slug) = GetRaw(Project.Slug)) AndAlso
+ ModLoaders.Count = Project.ModLoaders.Count AndAlso ModLoaders.Except(Project.ModLoaders).Count = 0) Then '模糊匹配
+ '如果只有一个有 DatabaseEntry,设置给另外一个
+ If DatabaseEntry Is Nothing AndAlso Project.DatabaseEntry IsNot Nothing Then DatabaseEntry = Project.DatabaseEntry
+ If DatabaseEntry IsNot Nothing AndAlso Project.DatabaseEntry Is Nothing Then Project.DatabaseEntry = DatabaseEntry
+ Return True
+ End If
+ Return False
+ End Function
+
+ Public Overrides Function ToString() As String
+ Return $"{Id} ({Slug}): {RawName}"
+ End Function
+ Public Overrides Function Equals(obj As Object) As Boolean
+ Dim project = TryCast(obj, CompProject)
+ Return project IsNot Nothing AndAlso Id = project.Id
+ End Function
+ Public Shared Operator =(left As CompProject, right As CompProject) As Boolean
+ Return EqualityComparer(Of CompProject).Default.Equals(left, right)
+ End Operator
+ Public Shared Operator <>(left As CompProject, right As CompProject) As Boolean
+ Return Not left = right
+ End Operator
+
+ End Class
+
+ '输入与输出
+
+ Public Class CompProjectRequest
+
+ '结果要求
+
+ '''
+ ''' 加载后应输出到的结果存储器。
+ '''
+ Public Storage As CompProjectStorage
+ '''
+ ''' 应当尽量达成的结果数量。
+ '''
+ Public TargetResultCount As Integer
+ '''
+ ''' 根据加载位置记录,是否还可以继续获取内容。
+ '''
+ Public ReadOnly Property CanContinue As Boolean
+ Get
+ If Tag.StartsWith("/") Then Storage.CurseForgeTotal = 0
+ If Tag.EndsWith("/") Then Storage.ModrinthTotal = 0
+ If Storage.CurseForgeTotal = -1 OrElse Storage.ModrinthTotal = -1 Then Return True
+ Return Storage.CurseForgeOffset < Storage.CurseForgeTotal OrElse Storage.ModrinthOffset < Storage.ModrinthTotal
+ End Get
+ End Property
+
+ '输入内容
+
+ '''
+ ''' 筛选资源种类。
+ '''
+ Public Type As CompType
+ '''
+ ''' 筛选资源标签。空字符串代表不限制。格式例如 "406/worldgen",分别是 CurseForge 和 Modrinth 的 ID。
+ '''
+ Public Tag As String = ""
+ '''
+ ''' 筛选 Mod 加载器类别。
+ '''
+ Public ModLoader As CompModLoaderType = CompModLoaderType.Any
+ '''
+ ''' 筛选 MC 版本。
+ '''
+ Public GameVersion As String = Nothing
+ '''
+ ''' 搜索的文本内容。
+ '''
+ Public SearchText As String = Nothing
+ '''
+ ''' 构造函数。
+ '''
+ Public Sub New(Type As CompType, Storage As CompProjectStorage, TargetResultCount As Integer)
+ Me.Type = Type
+ Me.Storage = Storage
+ Me.TargetResultCount = TargetResultCount
+ End Sub
+
+ '构造请求
+
+ '''
+ ''' 获取对应的 CurseForge API 请求链接。若返回 Nothing 则为不进行 CurseForge 请求。
+ '''
+ Public Function GetCurseForgeAddress() As String
+ If Tag.StartsWith("/") Then Storage.CurseForgeTotal = 0
+ If Storage.CurseForgeTotal > -1 AndAlso Storage.CurseForgeTotal <= Storage.CurseForgeOffset Then Return Nothing
+ '应用筛选参数
+ Dim Address As String = $"https://api.curseforge.com/v1/mods/search?gameId=432&sortField=Featured&sortOrder=desc&pageSize={CompPageSize}"
+ Select Case Type
+ Case CompType.Mod
+ Address += "&classId=6"
+ Case CompType.ModPack
+ Address += "&classId=4471"
+ Case CompType.ResourcePack
+ 'FUTURE: Res
+ End Select
+ Address += "&categoryId=" & If(Tag = "", "0", Tag.Split("/").First)
+ If ModLoader <> CompModLoaderType.Any Then Address += "&modLoaderType=" & CType(ModLoader, Integer)
+ If Not String.IsNullOrEmpty(GameVersion) Then Address += "&gameVersion=" & GameVersion
+ If Not String.IsNullOrEmpty(SearchText) Then Address += "&searchFilter=" & Net.WebUtility.UrlEncode(SearchText)
+ If Storage.CurseForgeOffset > 0 Then Address += "&index=" & Storage.CurseForgeOffset
+ Return Address
+ End Function
+ '''
+ ''' 获取对应的 Modrinth API 请求链接。若返回 Nothing 则为不进行 Modrinth 请求。
+ '''
+ Public Function GetModrinthAddress() As String
+ If Tag.EndsWith("/") Then Storage.ModrinthTotal = 0
+ If Storage.ModrinthTotal > -1 AndAlso Storage.ModrinthTotal <= Storage.ModrinthOffset Then Return Nothing
+ '应用筛选参数
+ Dim Address As String = $"https://api.modrinth.com/v2/search?limit={CompPageSize}&index=relevance"
+ If Not String.IsNullOrEmpty(SearchText) Then Address += "&query=" & Net.WebUtility.UrlEncode(SearchText)
+ If Storage.ModrinthOffset > 0 Then Address += "&offset=" & Storage.ModrinthOffset
+ 'facets=[["categories:'game-mechanics'"],["categories:'forge'"],["versions:1.19.3"],["project_type:mod"]]
+ Dim Facets As New List(Of String)
+ Facets.Add($"[""project_type:{GetStringFromEnum(Type).ToLower}""]")
+ If Not String.IsNullOrEmpty(Tag) Then Facets.Add($"[""categories:'{Tag.Split("/").Last}'""]")
+ If ModLoader <> CompModLoaderType.Any Then Facets.Add($"[""categories:'{GetStringFromEnum(ModLoader).ToLower}'""]")
+ If Not String.IsNullOrEmpty(GameVersion) Then Facets.Add($"[""versions:'{GameVersion}'""]")
+ Address += "&facets=[" & String.Join(",", Facets) & "]"
+ Return Address
+ End Function
+
+ '相同判断
+ Public Overrides Function Equals(obj As Object) As Boolean
+ Dim request = TryCast(obj, CompProjectRequest)
+ Return request IsNot Nothing AndAlso
+ Type = request.Type AndAlso TargetResultCount = request.TargetResultCount AndAlso
+ Tag = request.Tag AndAlso ModLoader = request.ModLoader AndAlso
+ GameVersion = request.GameVersion AndAlso SearchText = request.SearchText
+ End Function
+ Public Shared Operator =(left As CompProjectRequest, right As CompProjectRequest) As Boolean
+ Return EqualityComparer(Of CompProjectRequest).Default.Equals(left, right)
+ End Operator
+ Public Shared Operator <>(left As CompProjectRequest, right As CompProjectRequest) As Boolean
+ Return Not left = right
+ End Operator
+
+ End Class
+ Public Class CompProjectStorage
+
+ '加载位置记录
+
+ Public CurseForgeOffset As Integer = 0
+ Public CurseForgeTotal As Integer = -1
+
+ Public ModrinthOffset As Integer = 0
+ Public ModrinthTotal As Integer = -1
+
+ '结果列表
+
+ '''
+ ''' 可供展示的所有工程的列表。
+ '''
+ Public Results As New List(Of CompProject)
+
+ End Class
+
+ '实际的获取
+
+ Private Const CompPageSize = 40
+ '''
+ ''' 已知工程信息的缓存。
+ '''
+ Private CompProjectCache As New Dictionary(Of String, CompProject)
+ '''
+ ''' 根据搜索请求获取一系列的工程列表。需要基于加载器运行。
+ '''
+ Public Sub CompProjectsGet(Task As LoaderTask(Of CompProjectRequest, Integer))
+
+ If Task.Input.Storage.Results.Count >= Task.Input.TargetResultCount Then
+ Log($"[Comp] 已有 {Task.Input.Storage.Results.Count} 个结果,多于所需的 {Task.Input.TargetResultCount} 个结果,结束处理")
+ Exit Sub
+ ElseIf Not Task.Input.CanContinue Then
+ Log($"[Comp] 已有 {Task.Input.Storage.Results.Count} 个结果,少于所需的 {Task.Input.TargetResultCount} 个结果,但无法继续获取,结束处理")
+ Exit Sub
+ End If
+
+#Region "拒绝 1.13- Quilt(这个版本根本没有 Quilt)"
+
+ If Task.Input.ModLoader = CompModLoaderType.Quilt AndAlso VersionSortInteger(If(Task.Input.GameVersion, "1.15"), "1.14") = -1 Then
+ Throw New Exception("Quilt 不支持 Minecraft " & Task.Input.GameVersion)
+ End If
+
+#End Region
+
+#Region "处理搜索文本,赋值回 Task.Input.SearchText"
+
+ Dim RawFilter As String = If(Task.Input.SearchText, "").Trim
+ Task.Input.SearchText = RawFilter
+ RawFilter = RawFilter.ToLower
+ Log("[Comp] 工程列表搜索原始文本:" & RawFilter)
+
+ '中文请求关键字处理
+ Dim IsChineseSearch As Boolean = RegexCheck(RawFilter, "[\u4e00-\u9fbb]")
+ If IsChineseSearch AndAlso Not String.IsNullOrEmpty(RawFilter) Then
+ If Task.Input.Type <> CompType.Mod Then Throw New Exception($"{If(Task.Input.Type = CompType.ModPack, "整合包", "资源包")}搜索仅支持英文")
+ '构造搜索请求
+ Dim SearchEntries As New List(Of SearchEntry(Of CompDatabaseEntry))
+ For Each Entry In CompDatabase
+ If Entry.ChineseName.Contains("动态的树") Then Continue For '这玩意儿附属太多了
+ SearchEntries.Add(New SearchEntry(Of CompDatabaseEntry) With {
+ .Item = Entry,
+ .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
+ New KeyValuePair(Of String, Double)(Entry.ChineseName & If(Entry.CurseForgeSlug, "") & If(Entry.ModrinthSlug, ""), 1)
+ }
+ })
+ Next
+ '获取搜索结果
+ Dim SearchResults = Search(SearchEntries, Task.Input.SearchText, 3)
+ If SearchResults.Count = 0 Then Throw New Exception("无搜索结果,请尝试搜索英文名称")
+ Dim SearchResult As String = ""
+ For i = 0 To Math.Min(4, SearchResults.Count - 1) '就算全是准确的,也最多只要 5 个
+ If Not SearchResults(i).AbsoluteRight AndAlso i >= Math.Min(2, SearchResults.Count - 1) Then Exit For '把 3 个结果拼合以提高准确度
+ If SearchResults(i).Item.CurseForgeSlug IsNot Nothing Then SearchResult += SearchResults(i).Item.CurseForgeSlug.Replace("-", " ") & " "
+ If SearchResults(i).Item.ModrinthSlug IsNot Nothing Then SearchResult += SearchResults(i).Item.ModrinthSlug.Replace("-", " ") & " "
+ SearchResult += SearchResults(i).Item.ChineseName.Replace(" (", "|").Split("|").Last.TrimEnd(") ").Replace(" - ", "§").Split("§").First.
+ Replace(":", "").Replace("(", "").Replace(")", "").ToLower & " "
+ Next
+ Log("[Comp] 中文搜索原始关键词:" & SearchResult, LogLevel.Developer)
+ '去除常见连接词
+ Dim RealFilter As String = ""
+ For Each Word In SearchResult.Split(" ")
+ If {"the", "of", "a", "mod"}.Contains(Word.ToLower) OrElse Val(Word) > 0 Then Continue For
+ If SearchResult.Split(" ").Count > 3 AndAlso {"ftb"}.Contains(Word.ToLower) Then Continue For
+ RealFilter += Word.TrimStart("{[(").TrimEnd("}])") & " "
+ Next
+ Task.Input.SearchText = RealFilter
+ Log("[Comp] 中文搜索最终关键词:" & RealFilter, LogLevel.Developer)
+ End If
+
+ '驼峰英文请求关键字处理
+ Dim SpacedKeywords = RegexReplace(Task.Input.SearchText, "$& ", "([A-Z]+|[a-z]+?)(?=[A-Z]+[a-z]+[a-z ]*)")
+ Dim ConnectedKeywords = Task.Input.SearchText.Replace(" ", "")
+ Dim AllPossibleKeywords = (SpacedKeywords & " " & If(IsChineseSearch, Task.Input.SearchText, ConnectedKeywords & " " & RawFilter)).ToLower
+
+ '最终处理关键字:分割、去重
+ Dim RightKeywords As New List(Of String)
+ For Each Keyword In AllPossibleKeywords.Split(" ")
+ If Keyword.Trim = "" Then Continue For
+ If {"forge", "fabric", "for", "mod",
+ "forge/fabric", "fabric/forge", "fabric/quilt", "quilt/fabric"}.Contains(Keyword) Then '#208
+ Log("[Comp] 已跳过搜索关键词:" & Keyword)
+ Continue For
+ End If
+ RightKeywords.Add(Keyword)
+ Next
+ If RawFilter.Length > 0 AndAlso RightKeywords.Count = 0 Then
+ Task.Input.SearchText = RawFilter '全都被过滤掉了
+ Else
+ Task.Input.SearchText = Join(RightKeywords.Distinct.ToList, " ").ToLower
+ End If
+
+ '例外项:OptiForge、OptiFabric(拆词后因为包含 Forge/Fabric 导致无法搜到实际的 Mod)
+ If RawFilter.Replace(" ", "").ToLower.Contains("optiforge") Then Task.Input.SearchText = "optiforge"
+ If RawFilter.Replace(" ", "").ToLower.Contains("optifabric") Then Task.Input.SearchText = "optifabric"
+ Log("[Comp] 工程列表搜索最终文本:" & Task.Input.SearchText, LogLevel.Developer)
+ Task.Progress = 0.1
+
+#End Region
+
+ Dim RealResults As New List(Of CompProject)
+Retry:
+ Dim RawResults As New List(Of CompProject)
+
+#Region "从 CurseForge 和 Modrinth 获取结果列表,存储于 RawResults"
+
+ Dim CurseForgeThread As Thread = Nothing
+ Dim ModrinthThread As Thread = Nothing
+ Dim ResultsLock As New Object
+ Dim [Error] As Exception = Nothing
+
+ Try
+
+ '启动 CurseForge 线程
+ Dim CurseForgeUrl As String = Task.Input.GetCurseForgeAddress()
+ If CurseForgeUrl IsNot Nothing Then
+ CurseForgeThread = RunInNewThread(
+ Sub()
+ Try
+ '获取工程列表
+ Log("[Comp] 开始从 CurseForge 获取工程列表:" & CurseForgeUrl)
+ Dim RequestResult As JObject = NetGetCodeByRequestRetry(CurseForgeUrl, IsJson:=True, Encode:=Encoding.UTF8)
+ Task.Progress += 0.2
+ Dim ProjectList As New List(Of CompProject)
+ For Each JsonEntry As JObject In RequestResult("data")
+ ProjectList.Add(New CompProject(JsonEntry))
+ Next
+ '更新结果
+ SyncLock ResultsLock
+ RawResults.AddRange(ProjectList)
+ End SyncLock
+ Task.Input.Storage.CurseForgeOffset += ProjectList.Count
+ Task.Input.Storage.CurseForgeTotal = RequestResult("pagination")("totalCount").ToObject(Of Integer)
+ Log($"[Comp] 从 CurseForge 获取到了 {ProjectList.Count} 个工程(已获取 {Task.Input.Storage.CurseForgeOffset} 个,共 {Task.Input.Storage.CurseForgeTotal} 个)")
+ Catch ex As Exception
+ Log(ex, "从 CurseForge 获取工程列表失败")
+ [Error] = ex
+ End Try
+ End Sub, "CurseForge Project Request")
+ End If
+
+ '启动 Modrinth 线程
+ Dim ModrinthUrl As String = Task.Input.GetModrinthAddress()
+ If ModrinthUrl IsNot Nothing Then
+ ModrinthThread = RunInNewThread(
+ Sub()
+ Try
+ Log("[Comp] 开始从 Modrinth 获取工程列表:" & ModrinthUrl)
+ Dim RequestResult As JObject = NetGetCodeByRequestRetry(ModrinthUrl, IsJson:=True, Encode:=Encoding.UTF8)
+ Task.Progress += 0.2
+ Dim ProjectList As New List(Of CompProject)
+ For Each JsonEntry As JObject In RequestResult("hits")
+ ProjectList.Add(New CompProject(JsonEntry))
+ Next
+ '更新结果
+ SyncLock ResultsLock
+ RawResults.AddRange(ProjectList)
+ End SyncLock
+ Task.Input.Storage.ModrinthOffset += ProjectList.Count
+ Task.Input.Storage.ModrinthTotal = RequestResult("total_hits").ToObject(Of Integer)
+ Log($"[Comp] 从 Modrinth 获取到了 {ProjectList.Count} 个工程(已获取 {Task.Input.Storage.ModrinthOffset} 个,共 {Task.Input.Storage.ModrinthTotal} 个)")
+ Catch ex As Exception
+ Log(ex, "从 Modrinth 获取工程列表失败")
+ [Error] = ex
+ End Try
+ End Sub, "Modrinth Project Request")
+ End If
+
+ '等待线程结束
+ If CurseForgeThread IsNot Nothing Then CurseForgeThread.Join()
+ If Task.IsAborted Then Exit Sub '会自动触发 Finally
+ If ModrinthThread IsNot Nothing Then ModrinthThread.Join()
+
+ '确认存在结果
+ If RawResults.Count = 0 Then
+ If [Error] IsNot Nothing Then
+ Throw [Error]
+ Else
+ Throw New Exception("没有符合条件的结果")
+ End If
+ End If
+
+ Finally
+ If CurseForgeThread IsNot Nothing Then CurseForgeThread.Interrupt()
+ If ModrinthThread IsNot Nothing Then ModrinthThread.Interrupt()
+ End Try
+
+#End Region
+
+#Region "提取非重复项,存储于 RealResults"
+
+ '将 CurseForge 排在 Modrinth 的前面,避免加载结束顺序不同导致排名不同
+ RawResults = RawResults.Where(Function(x) x.FromCurseForge).Concat(RawResults.Where(Function(x) Not x.FromCurseForge)).ToList
+ 'RawResults 去重
+ RawResults = Distinct(RawResults, Function(a, b) a.IsLike(b))
+ '已有内容去重
+ RawResults = RawResults.Where(Function(r) Not RealResults.Any(Function(b) r.IsLike(b)) AndAlso
+ Not Task.Input.Storage.Results.Any(Function(b) r.IsLike(b))).ToList
+ '加入列表
+ RealResults.AddRange(RawResults)
+ Log($"[Comp] 去重后累计新增结果 {RealResults.Count} 个")
+
+#End Region
+
+#Region "检查结果数量,如果不足且可继续,会继续加载下一页"
+
+ If RealResults.Count + Task.Input.Storage.Results.Count < Task.Input.TargetResultCount Then
+ Log($"[Comp] 总结果数需求最少 {Task.Input.TargetResultCount} 个,仅获得了 {RealResults.Count + Task.Input.Storage.Results.Count} 个")
+ If Task.Input.CanContinue Then
+ Log("[Comp] 将继续尝试加载下一页")
+ GoTo Retry
+ Else
+ Log("[Comp] 无法继续加载,将强制结束")
+ End If
+ End If
+
+#End Region
+
+#Region "将结果排序并添加"
+
+ Dim Scores As New Dictionary(Of CompProject, Double) '排序分
+ If String.IsNullOrEmpty(Task.Input.SearchText) Then
+ '如果没有搜索文本,按下载量将结果排序
+ For Each Result As CompProject In RealResults
+ Scores.Add(Result, Result.DownloadCount * If(Result.FromCurseForge, 1, 30))
+ Next
+ Else
+ '如果有搜索文本,按关联度将结果排序
+ '排序分 = 搜索相对相似度 (1) + 下载量权重 (对数,10 亿时为 1) + 有中文名 (0.2)
+ Dim Entry As New List(Of SearchEntry(Of CompProject))
+ For Each Result As CompProject In RealResults
+ Scores.Add(Result, If(Result.WikiId > 0, 0.2, 0) +
+ Math.Log10(Math.Max(Result.DownloadCount, 1) * If(Result.FromCurseForge, 1, 30)) / 9)
+ Entry.Add(New SearchEntry(Of CompProject) With {.Item = Result, .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
+ New KeyValuePair(Of String, Double)(If(IsChineseSearch, Result.TranslatedName, Result.RawName), 1),
+ New KeyValuePair(Of String, Double)(Result.Description, 0.05)}})
+ Next
+ Dim SearchResult = Search(Entry, RawFilter, 101, -1)
+ For Each OneResult In SearchResult
+ Scores(OneResult.Item) += OneResult.Similarity / SearchResult(0).Similarity '最高 1 分的相似度分
+ Next
+ End If
+ '根据排序分得出结果并添加
+ Task.Input.Storage.Results.AddRange(
+ Sort(Scores.ToList, Function(a, b) a.Value > b.Value).Select(Function(r) r.Key).ToList)
+
+#End Region
+
+ End Sub
+
+#End Region
+
+#Region "CompFile | 文件信息"
+
+ '类定义
+
+ Public Enum CompFileStatus
+ Release = 1 '枚举值来源:https://docs.curseforge.com/#tocS_FileReleaseType
+ Beta = 2
+ Alpha = 3
+ End Enum
+ Public Class CompFile
+
+ '源信息
+
+ '''
+ ''' 文件的种类。
+ '''
+ Public ReadOnly Type As CompType
+ '''
+ ''' 该文件来自 CurseForge 还是 Modrinth。
+ '''
+ Public ReadOnly FromCurseForge As Boolean
+ '''
+ ''' 用于唯一性鉴别该文件的 ID。CurseForge 中为 123456 的大整数,Modrinth 中为英文乱码的 Version 字段。
+ '''
+ Public ReadOnly Id As String
+
+ '描述性信息
+
+ '''
+ ''' 文件描述名(并非文件名,是自定义的字段)。
+ '''
+ Public DisplayName As String
+ '''
+ ''' 发布时间。
+ '''
+ Public ReadOnly ReleaseDate As Date
+ '''
+ ''' 下载量计数。注意,该计数仅为一个来源,无法反应两边加起来的下载量,且 CurseForge 可能错误地返回 0。
+ '''
+ Public ReadOnly DownloadCount As Integer
+ '''
+ ''' 支持的 Mod 加载器列表。可能为空。
+ '''
+ Public ReadOnly ModLoaders As List(Of CompModLoaderType)
+ '''
+ ''' 支持的游戏版本列表。类型包括:"1.18.5","1.18","1.18 快照","21w15a","未知版本"。
+ '''
+ Public ReadOnly GameVersions As List(Of String)
+ '''
+ ''' 发布状态:Release/Beta/Alpha。
+ '''
+ Public ReadOnly Status As CompFileStatus
+ '''
+ ''' 发布状态的友好描述。例如:"正式版","Beta 版"。
+ '''
+ Public ReadOnly Property StatusDescription As String
+ Get
+ Select Case Status
+ Case CompFileStatus.Release
+ Return "正式版"
+ Case CompFileStatus.Beta
+ Return If(ModeDebug, "Beta 版", "测试版")
+ Case Else
+ Return If(ModeDebug, "Alpha 版", "测试版")
+ End Select
+ End Get
+ End Property
+
+ '下载信息
+
+ '''
+ ''' 下载的文件名。
+ '''
+ Public ReadOnly FileName As String
+ '''
+ ''' 文件所有可能的下载源。
+ '''
+ Private ReadOnly DownloadAddress As String()
+ '''
+ ''' 该文件的所有依赖工程的原始 ID。
+ ''' 这些 ID 可能没有加载,在加载后会添加到 Dependencies 中(主要是因为 Modrinth 返回的是字符串 ID 而非 Slug,导致 Project.Id 查询不到)。
+ '''
+ Public ReadOnly RawDependencies As New List(Of String)
+ '''
+ ''' 该文件的所有依赖工程的 Project.Id。
+ '''
+ Public ReadOnly Dependencies As New List(Of String)
+ '''
+ ''' 获取下载信息。
+ '''
+ ''' 目标本地文件夹,或完整的文件路径。会自动判断类型。
+ Public Function ToNetFile(LocalAddress As String) As NetFile
+ Return New NetFile(DownloadAddress, LocalAddress & If(LocalAddress.EndsWith("\"), FileName, ""))
+ End Function
+
+ '实例化
+
+ '''
+ ''' 从文件 Json 中初始化实例。若出错会抛出异常。
+ '''
+ Public Sub New(Data As JObject, Type As CompType)
+ Me.Type = Type
+ FromCurseForge = Data.ContainsKey("gameId")
+ If FromCurseForge Then
+#Region "CurseForge"
+ '简单信息
+ Id = Data("id")
+ DisplayName = Data("displayName").ToString.Replace(" ", "").Trim(" ")
+ ReleaseDate = Data("fileDate")
+ Status = CType(Data("releaseType").ToObject(Of Integer), CompFileStatus)
+ DownloadCount = Data("downloadCount")
+ FileName = Data("fileName")
+ 'DownloadAddress
+ Dim Url = Data("downloadUrl").ToString
+ If Url = "" Then Url = "https://media.forgecdn.net/files/" & Id.ToString.Substring(0, 4) & "/" & Id.ToString.Substring(4).TrimStart("0") & "/" & FileName
+ Url = Url.Replace(FileName, Net.WebUtility.UrlEncode(FileName)) '对文件名进行编码
+ DownloadAddress = {Url.Replace("-service.overwolf.wtf", ".forgecdn.net").Replace("://edge", "://media"),
+ Url.Replace("-service.overwolf.wtf", ".forgecdn.net"),
+ Url.Replace("://edge", "://media"),
+ Url}.Distinct.ToArray
+ 'Dependencies
+ If Type = CompType.Mod Then
+ RawDependencies = Data("dependencies").
+ Where(Function(d) d("relationType").ToObject(Of Integer) = 3 AndAlso '种类为依赖
+ d("modId").ToObject(Of Integer) <> 306612 AndAlso d("modId").ToObject(Of Integer) <> 634179). '排除 Fabric API 和 Quilt API
+ Select(Function(d) d("modId").ToString).ToList
+ End If
+ 'GameVersions
+ Dim RawVersions As List(Of String) = Data("gameVersions").Select(Function(t) t.ToString.Trim.ToLower).ToList
+ GameVersions = RawVersions.Where(Function(v) v.StartsWith("1.")).Select(Function(v) v.Replace("-snapshot", " 快照")).ToList
+ If GameVersions.Count > 1 Then
+ GameVersions = Sort(GameVersions, AddressOf VersionSortBoolean).ToList
+ If Type = CompType.ModPack Then GameVersions = New List(Of String) From {GameVersions(0)}
+ ElseIf GameVersions.Count = 1 Then
+ GameVersions = GameVersions.ToList
+ Else
+ GameVersions = New List(Of String) From {"未知版本"}
+ End If
+ 'ModLoaders
+ ModLoaders = New List(Of CompModLoaderType)
+ If RawVersions.Contains("forge") Then ModLoaders.Add(CompModLoaderType.Forge)
+ If RawVersions.Contains("fabric") Then ModLoaders.Add(CompModLoaderType.Fabric)
+ If RawVersions.Contains("quilt") Then ModLoaders.Add(CompModLoaderType.Quilt)
+#End Region
+ Else
+#Region "Modrinth"
+ '简单信息
+ Id = Data("id")
+ DisplayName = Data("name").ToString.Replace(" ", "").Trim(" ")
+ ReleaseDate = Data("date_published")
+ Status = If(Data("version_type").ToString = "release", CompFileStatus.Release, If(Data("version_type").ToString = "beta", CompFileStatus.Beta, CompFileStatus.Alpha))
+ DownloadCount = Data("downloads")
+ FileName = Data("files")(0)("filename")
+ DownloadAddress = {Data("files")(0)("url").ToString.Replace(FileName, Net.WebUtility.UrlEncode(FileName))}
+ 'Dependencies
+ If Type = CompType.Mod Then
+ RawDependencies = Data("dependencies").
+ Where(Function(d) d("dependency_type") = "required" AndAlso '种类为依赖
+ d("project_id") <> "P7dR8mSH" AndAlso d("project_id") <> "qvIfYCYJ" AndAlso '排除 Fabric API 和 Quilt API
+ d("project_id").ToString.Length > 0). '有时候真的会空……
+ Select(Function(d) d("project_id").ToString).ToList
+ End If
+ 'GameVersions
+ Dim RawVersions As List(Of String) = Data("game_versions").Select(Function(t) t.ToString.Trim.ToLower).ToList
+ GameVersions = RawVersions.Where(Function(v) v.StartsWith("1.")).
+ Select(Function(v) If(v.Contains("-"), v.Split("-").First & " 快照", v)).ToList
+ If GameVersions.Count > 1 Then
+ GameVersions = Sort(GameVersions, AddressOf VersionSortBoolean).ToList
+ If Type = CompType.ModPack Then GameVersions = New List(Of String) From {GameVersions(0)}
+ ElseIf GameVersions.Count = 1 Then
+ GameVersions = GameVersions.ToList
+ ElseIf RawVersions.Any(Function(v) RegexCheck(v, "[0-9]{2}w[0-9]{2}[a-z]{1}")) Then
+ GameVersions = RawVersions.Where(Function(v) RegexCheck(v, "[0-9]{2}w[0-9]{2}[a-z]{1}")).ToList
+ Else
+ GameVersions = New List(Of String) From {"未知版本"}
+ End If
+ 'ModLoaders
+ Dim RawLoaders As List(Of String) = Data("loaders").Select(Function(v) v.ToString).ToList
+ ModLoaders = New List(Of CompModLoaderType)
+ If RawLoaders.Contains("forge") Then ModLoaders.Add(CompModLoaderType.Forge)
+ If RawLoaders.Contains("fabric") Then ModLoaders.Add(CompModLoaderType.Fabric)
+ If RawLoaders.Contains("quilt") Then ModLoaders.Add(CompModLoaderType.Quilt)
+#End Region
+ End If
+ End Sub
+ '''
+ ''' 将当前文件信息实例化为控件。
+ '''
+ Public Function ToListItem(OnClick As MyListItem.ClickEventHandler, Optional OnSaveClick As MyIconButton.ClickEventHandler = Nothing) As MyListItem
+
+ '获取描述信息
+ Dim Info As String = ""
+ Select Case Type
+ Case CompType.Mod
+ Info += If(ModLoaders.Count > 0, Join(ModLoaders.Select(Function(m) GetStringFromEnum(m)).ToList, "/"), "") &
+ If(GameVersions.Count > 1 AndAlso GameVersions.Count < 10, If(ModLoaders.Count > 0, " ", "") & Join(GameVersions, "、").Replace("-snapshot", " 快照"), "")
+ If Info <> "" Then Info = "适用于 " & Info & ","
+ Info += If(ModeDebug AndAlso Dependencies.Count > 0, Dependencies.Count & " 个前置 Mod,", "")
+ Case CompType.ModPack
+ If GameVersions.All(Function(v) v.Contains("w")) Then
+ Info += $"游戏版本 {Join(GameVersions, "、")},"
+ End If
+ End Select
+ If DownloadCount > 0 Then 'CurseForge 的下载次数经常错误地返回 0
+ Info += If(DownloadCount > 100000, Math.Round(DownloadCount / 10000) & " 万次下载,", DownloadCount & " 次下载,")
+ End If
+ Info += GetTimeSpanString(ReleaseDate - Date.Now) & "更新"
+ Info += If(Status = CompFileStatus.Release, "", "," & StatusDescription)
+
+ '建立控件
+ Dim NewItem As New MyListItem With {
+ .Title = DisplayName, .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Me,
+ .Info = Info
+ }
+ Select Case Status
+ Case CompFileStatus.Release
+ NewItem.Logo = "pack://application:,,,/images/Icons/R.png"
+ Case CompFileStatus.Beta
+ NewItem.Logo = "pack://application:,,,/images/Icons/B.png"
+ Case Else 'Alpha
+ NewItem.Logo = "pack://application:,,,/images/Icons/A.png"
+ End Select
+ AddHandler NewItem.Click, OnClick
+
+ '建立另存为按钮
+ If OnSaveClick IsNot Nothing Then
+ Dim BtnSave As New MyIconButton With {.Logo = Logo.IconButtonSave, .ToolTip = "另存为"}
+ ToolTipService.SetPlacement(BtnSave, Primitives.PlacementMode.Center)
+ ToolTipService.SetVerticalOffset(BtnSave, 30)
+ ToolTipService.SetHorizontalOffset(BtnSave, 2)
+ AddHandler BtnSave.Click, OnSaveClick
+ NewItem.Buttons = {BtnSave}
+ NewItem.PaddingRight = 35
+ End If
+
+ '结束
+ Return NewItem
+ End Function
+
+ '辅助函数
+
+ Public Overrides Function ToString() As String
+ Return $"{Id}: {DisplayName}"
+ End Function
+
+ End Class
+
+ '获取
+
+ '''
+ ''' 已知文件信息的缓存。
+ '''
+ Private CompFilesCache As New Dictionary(Of String, List(Of CompFile))
+ '''
+ ''' 获取某个工程下的全部文件列表。
+ ''' 必须在工作线程执行,失败会抛出异常。
+ '''
+ Public Function CompFilesGet(ProjectId As String, FromCurseForge As Boolean) As List(Of CompFile)
+ '使用缓存
+ If CompFilesCache.ContainsKey(ProjectId) Then Return CompFilesCache(ProjectId)
+ '获取工程对象
+ Dim TargetProject As CompProject
+ If CompProjectCache.ContainsKey(ProjectId) Then '存在缓存
+ TargetProject = CompProjectCache(ProjectId)
+ ElseIf FromCurseForge Then 'CurseForge
+ TargetProject = New CompProject(NetGetCodeByRequestRetry("https://api.curseforge.com/v1/mods/" & ProjectId, IsJson:=True, Encode:=Encoding.UTF8)("data"))
+ Else 'Modrinth
+ TargetProject = New CompProject(NetGetCodeByRequestRetry("https://api.modrinth.com/v2/project/" & ProjectId, IsJson:=True, Encode:=Encoding.UTF8))
+ End If
+ '获取工程对象的文件列表
+ Log("[Comp] 开始获取文件列表:" & ProjectId)
+ Dim ResultJsonArray As JArray
+ If FromCurseForge Then
+ 'CurseForge
+ If TargetProject.Type = CompType.Mod Then 'Mod 使用每个版本最新的文件
+ ResultJsonArray = GetJson(NetRequestRetry("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(TargetProject.CurseForgeFileIds, ",") & "]}", "application/json"))("data")
+ Else '否则使用全部文件
+ ResultJsonArray = NetGetCodeByRequestRetry($"https://api.curseforge.com/v1/mods/{ProjectId}/files?pageSize=999", Accept:="application/json", IsJson:=True)("data")
+ End If
+ Else
+ 'Modrinth
+ ResultJsonArray = NetGetCodeByRequestRetry($"https://api.modrinth.com/v2/project/{ProjectId}/version", Accept:="application/json", IsJson:=True)
+ End If
+ CompFilesCache(ProjectId) = ResultJsonArray.Select(Function(a) New CompFile(a, TargetProject.Type)).ToList
+ '获取前置 Mod 列表
+ If TargetProject.Type <> CompType.Mod Then Return CompFilesCache(ProjectId)
+ Dim Deps As List(Of String) = CompFilesCache(ProjectId).
+ SelectMany(Function(f) f.RawDependencies).Distinct().ToList
+ Dim UndoneDeps = Deps.Where(Function(f) Not CompProjectCache.ContainsKey(f)).ToList
+ '获取前置 Mod 工程信息
+ If UndoneDeps.Count > 0 Then
+ Log($"[Comp] {ProjectId} 文件列表中还需要获取信息的前置 Mod:{Join(UndoneDeps, ",")}")
+ Dim Projects As JArray
+ If TargetProject.FromCurseForge Then
+ Projects = GetJson(NetRequestRetry("https://api.curseforge.com/v1/mods",
+ "POST", "{""modIds"": [" & Join(UndoneDeps, ",") & "]}", "application/json"))("data")
+ Else
+ Projects = NetGetCodeByRequestRetry($"https://api.modrinth.com/v2/projects?ids=[""{Join(UndoneDeps, """,""")}""]",
+ Accept:="application/json", IsJson:=True)
+ End If
+ For Each Project In Projects
+ Dim NewProject As New CompProject(Project) '在 New 的时候就添加了缓存
+ Next
+ End If
+ '更新前置 Mod 信息
+ If Deps.Count > 0 Then
+ For Each DepProject In Deps.Select(Function(id) CompProjectCache(id))
+ For Each File In CompFilesCache(ProjectId)
+ If File.RawDependencies.Contains(DepProject.Id) AndAlso DepProject.Id <> ProjectId Then
+ File.Dependencies.Add(DepProject.Id)
+ End If
+ Next
+ Next
+ End If
+ Return CompFilesCache(ProjectId)
+ End Function
+
+ '''
+ ''' 预载包含大量 CompFile 的卡片,添加必要的元素和前置 Mod 列表。
+ '''
+ Public Sub CompFilesCardPreload(Stack As StackPanel, Files As List(Of CompFile), OnClick As MyListItem.ClickEventHandler)
+ '获取卡片对应的前置 ID
+ '如果为整合包就不会有 Dependencies 信息,所以不用管
+ Dim Deps As List(Of String) = Files.SelectMany(Function(f) f.Dependencies).Distinct.ToList()
+ Deps.Sort()
+ If Deps.Count = 0 Then Exit Sub
+ Deps = Deps.Where(Function(dep)
+ If Not CompProjectCache.ContainsKey(dep) Then Log($"[Comp] 未找到 ID {dep} 的前置 Mod 信息", LogLevel.Debug)
+ Return CompProjectCache.ContainsKey(dep)
+ End Function).ToList
+ '添加开头间隔
+ Stack.Children.Add(New TextBlock With {.Text = "前置 Mod", .FontSize = 14, .HorizontalAlignment = HorizontalAlignment.Left, .Margin = New Thickness(6, 2, 0, 5)})
+ '添加前置 Mod 列表
+ For Each Dep In Deps
+ Dim Item = CompProjectCache(Dep).ToCompItem(False, True, AddressOf FrmDownloadMod.ProjectClick)
+ Stack.Children.Add(Item)
+ Next
+ '添加结尾间隔
+ Stack.Children.Add(New TextBlock With {.Text = "可选版本", .FontSize = 14, .HorizontalAlignment = HorizontalAlignment.Left, .Margin = New Thickness(6, 12, 0, 5)})
+ End Sub
+
+#End Region
+
+End Module
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
index e69025d..fd5ae5e 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
@@ -63,7 +63,7 @@
End Try
PossibleLogs.Add(VersionPathIndie & "logs\latest.log") 'Minecraft 日志
PossibleLogs.Add(VersionPathIndie & "logs\debug.log") 'Minecraft Debug 日志
- PossibleLogs = ArrayNoDouble(PossibleLogs)
+ PossibleLogs = PossibleLogs.Distinct.ToList
'确定最新的日志文件
Dim RightLogs As New List(Of String)
@@ -238,7 +238,7 @@
'创建文件名词典
Dim FileNameDict As New Dictionary(Of String, KeyValuePair(Of String, String()))
For Each SelectedFile In SelectedFiles
- DictionaryAdd(FileNameDict, GetFileNameFromPath(SelectedFile.Key).ToLower, SelectedFile)
+ FileNameDict(GetFileNameFromPath(SelectedFile.Key).ToLower) = SelectedFile
OutputFiles.Add(SelectedFile.Key)
Log("[Crash] 输出报告:" & SelectedFile.Key & ",作为 Minecraft 或启动器日志")
Next
@@ -399,7 +399,7 @@
Keywords.AddRange(AnalyzeStackKeyword(Fatal))
Next
If Keywords.Count > 0 Then
- AppendReason(CrashReason.MC日志堆栈分析发现关键字, ArrayNoDouble(Keywords))
+ AppendReason(CrashReason.MC日志堆栈分析发现关键字, Keywords.Distinct.ToList)
GoTo Done
End If
End If
@@ -429,7 +429,7 @@ Done:
If CrashReasons.ContainsKey(Reason) Then
If Additional IsNot Nothing Then
CrashReasons(Reason).AddRange(Additional)
- CrashReasons(Reason) = ArrayNoDouble(CrashReasons(Reason))
+ CrashReasons(Reason) = CrashReasons(Reason).Distinct.ToList
End If
Else
CrashReasons.Add(Reason, New List(Of String)(If(Additional, {})))
@@ -464,6 +464,8 @@ Done:
If LogMc.Contains("java.lang.ClassCastException: java.base/jdk") Then AppendReason(CrashReason.使用JDK)
If LogMc.Contains("java.lang.ClassCastException: class jdk.") Then AppendReason(CrashReason.使用JDK)
If LogMc.Contains("TRANSFORMER/net.optifine/net.optifine.reflect.Reflector.(Reflector.java") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
+ If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.client.renderer.block.model.BakedQuad.(int[], int, net.minecraft.core.Direction, net.minecraft.client.renderer.texture.TextureAtlasSprite, boolean, boolean)'") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
+ If LogMc.Contains("java.lang.NoSuchMethodError: 'void net.minecraft.server.level.DistanceManager.addRegionTicket(net.minecraft.server.level.TicketType, net.minecraft.world.level.ChunkPos, int, java.lang.Object, boolean)'") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
If LogMc.Contains("Open J9 is not supported") OrElse LogMc.Contains("OpenJ9 is incompatible") OrElse LogMc.Contains(".J9VMInternals.") Then AppendReason(CrashReason.使用OpenJ9)
If LogMc.Contains("java.lang.NoSuchFieldException: ucp") Then AppendReason(CrashReason.Java版本过高)
If LogMc.Contains("because module java.base does not export") Then AppendReason(CrashReason.Java版本过高)
@@ -584,7 +586,7 @@ Done:
PossibleStacks.Add(Stack.Trim) '.Split("$").First)
NextStack:
Next
- PossibleStacks = ArrayNoDouble(PossibleStacks)
+ PossibleStacks = PossibleStacks.Distinct.ToList
Log("[Crash] 找到 " & PossibleStacks.Count & " 条可能的堆栈信息")
If PossibleStacks.Count = 0 Then Return New List(Of String)
For Each Stack As String In PossibleStacks
@@ -608,7 +610,7 @@ NextStack:
PossibleWords.Add(Word.Trim)
Next
Next
- PossibleWords = ArrayNoDouble(PossibleWords)
+ PossibleWords = PossibleWords.Distinct.ToList
Log("[Crash] 从堆栈信息中找到 " & PossibleWords.Count & " 个可能的 Mod ID 关键词")
If PossibleWords.Count > 0 Then Log("[Crash] - " & Join(PossibleWords, ", "))
If PossibleWords.Count > 10 Then
@@ -666,7 +668,7 @@ NextStack:
Exit For
Next
Next
- HintLines = ArrayNoDouble(HintLines)
+ HintLines = HintLines.Distinct.ToList
Log("[Crash] 找到 " & HintLines.Count & " 个可能的崩溃 Mod 匹配行")
For Each ModName As String In HintLines
Log("[Crash] - " & ModName)
@@ -682,7 +684,7 @@ NextStack:
End If
If Name IsNot Nothing Then ModFileNames.Add(Name)
Next
- ModFileNames = ArrayNoDouble(ModFileNames)
+ ModFileNames = ModFileNames.Distinct.ToList
Log("[Crash] 找到 " & ModFileNames.Count & " 个可能的崩溃 Mod 文件名")
For Each ModFileName As String In ModFileNames
Log("[Crash] - " & ModFileName)
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
index 6ee955c..576195c 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
@@ -335,7 +335,7 @@
'''
Public ReleaseTime As String
'''
- ''' 需要的最低 Forge 版本。空字符串为无限制,“28.1.56” 表示版本号,“1161” 表示版本号的最后一位。
+ ''' 需要的最低 Forge 版本。空字符串为无限制,Nothing 为不兼容,“28.1.56” 表示版本号,“1161” 表示版本号的最后一位。
'''
Public RequiredForgeVersion As String
End Class
@@ -389,6 +389,7 @@
.Inherit = Name(i).ToString.Split(" ")(0),
.NameFile = If(Name(i).ToLower.Contains("pre"), "preview_", "") & "OptiFine_" & Name(i).Replace(" ", "_") & ".jar",
.RequiredForgeVersion = Forge(i).Replace("Forge ", "").Replace("#", "")}
+ If Entry.RequiredForgeVersion.Contains("N/A") Then Entry.RequiredForgeVersion = Nothing
Entry.NameVersion = Entry.Inherit & "-OptiFine_" & Name(i).ToString.Replace(" ", "_").Replace(Entry.Inherit & "_", "")
Versions.Add(Entry)
Next
@@ -413,6 +414,7 @@
.NameFile = Token("filename").ToString,
.RequiredForgeVersion = If(Token("forge"), "").ToString.Replace("Forge ", "").Replace("#", "")
}
+ If Entry.RequiredForgeVersion.Contains("N/A") Then Entry.RequiredForgeVersion = Nothing
Entry.NameVersion = Entry.Inherit & "-OptiFine_" & (Token("type").ToString & " " & Token("patch").ToString).Replace(".0 ", " ").Replace(" ", "_").Replace(Entry.Inherit & "_", "")
Versions.Add(Entry)
Next
@@ -944,719 +946,14 @@
'''
''' Fabric API 列表,官方源。
'''
- Public DlFabricApiLoader As New LoaderTask(Of Integer, List(Of DlCfFile))("Fabric API List Loader",
- Sub(Task As LoaderTask(Of Integer, List(Of DlCfFile))) Task.Output = DlCfGetFiles(306612, False))
+ Public DlFabricApiLoader As New LoaderTask(Of Integer, List(Of CompFile))("Fabric API List Loader",
+ Sub(Task As LoaderTask(Of Integer, List(Of CompFile))) Task.Output = CompFilesGet("fabric-api", False))
'''
''' OptiFabric 列表,官方源。
'''
- Public DlOptiFabricLoader As New LoaderTask(Of Integer, List(Of DlCfFile))("OptiFabric List Loader",
- Sub(Task As LoaderTask(Of Integer, List(Of DlCfFile))) Task.Output = DlCfGetFiles(322385, False))
-
-#End Region
-
-#Region "DlCfProject | CurseForge 工程"
-
- Private DlCfProjectDb As Dictionary(Of String, DlCfDbEntry) = Nothing
- Private DlCfProjectCache As New Dictionary(Of Integer, DlCfProject)
-
- '''
- ''' CurseForge 工程列表获取、搜索请求。
- '''
- Public Class DlCfProjectRequest
- Public CategoryId As Integer = 0 '421: Mod(?), 4780: Fabric
- Public IsModPack As Boolean = False
- Public GameVersion As String = Nothing
- Public PageSize As Integer = 50
- Public SearchFilter As String = Nothing
- Public Index As Integer? = Nothing
- Public ModLoader As Integer? = Nothing
- Public Function GetAddress() As String
- GetAddress = "https://api.curseforge.com/v1/mods/search?gameId=432&sortField=Featured&sortOrder=desc" &
- "&pageSize=" & PageSize &
- "&categoryId=" & CategoryId &
- If(IsModPack, "&classId=4471", "&classId=6") &
- If(String.IsNullOrEmpty(GameVersion), "", "&gameVersion=" & GameVersion) &
- If(String.IsNullOrEmpty(SearchFilter), "", "&searchFilter=" & Net.WebUtility.UrlEncode(SearchFilter)) &
- If(Index IsNot Nothing, "&index=" & Index, "") &
- If(ModLoader IsNot Nothing AndAlso ModLoader > 0, "&modLoaderType=" & ModLoader, "")
- End Function
-
-#Region "相同判断"
-
- Public Overrides Function Equals(obj As Object) As Boolean
- Dim request = TryCast(obj, DlCfProjectRequest)
- Return request IsNot Nothing AndAlso request.GetAddress = GetAddress()
- End Function
- Public Shared Operator =(left As DlCfProjectRequest, right As DlCfProjectRequest) As Boolean
- Return EqualityComparer(Of DlCfProjectRequest).Default.Equals(left, right)
- End Operator
- Public Shared Operator <>(left As DlCfProjectRequest, right As DlCfProjectRequest) As Boolean
- Return Not left = right
- End Operator
-
-#End Region
-
- End Class
-
- '''
- ''' CurseForge 工程信息。
- '''
- Public Class DlCfProject
-
- Public Id As Integer
- Public Name As String
- Public Description As String
- Public Website As String
- Public DateUpdate As Date
- Public DownloadCount As Integer
- Public ModLoaders As New List(Of String)
- Public GameVersionDesc As String
- Private CategoryDesc As List(Of String)
- Private Thumb As String
- Public IsModPack As Boolean
- Public FileIndexes As New List(Of Integer)
- Public Files As List(Of DlCfFile)
- Private _MCBBS As Integer?
- Public Property MCBBS As Integer?
- Get
- ReleaseCfDatabase()
- If _MCBBS Is Nothing Then
- If Website IsNot Nothing Then
- Dim Keyword As String = Website.TrimEnd("/").Split("/").Last
- If DlCfProjectDb.ContainsKey(Keyword) Then _MCBBS = DlCfProjectDb(Keyword).MCBBS
- End If
- End If
- Return _MCBBS
- End Get
- Set(value As Integer?)
- _MCBBS = value
- End Set
- End Property
- Private _ChineseName As String
- Public Property ChineseName As String
- Get
- ReleaseCfDatabase()
- If _ChineseName Is Nothing Then
- _ChineseName = Name
- If Website IsNot Nothing Then
- Dim Keyword As String = Website.TrimEnd("/").Split("/").Last
- If DlCfProjectDb.ContainsKey(Keyword) Then
- Dim Result = DlCfProjectDb(Keyword)
- If Not String.IsNullOrEmpty(Result.ChineseName) Then '使用原名
- _ChineseName = Result.ChineseName
- End If
- End If
- End If
- End If
- Return _ChineseName
- End Get
- Set(value As String)
- _ChineseName = value
- End Set
- End Property
- Private _WikiId As Integer = -1
- '''
- ''' MCMOD 的页面 ID。若为 0 则代表没有对应页面。
- '''
- Public Property WikiId As Integer
- Get
- ReleaseCfDatabase()
- If _WikiId = -1 Then
- If Website IsNot Nothing Then
- Dim Keyword As String = Website.TrimEnd("/").Split("/").Last
- If DlCfProjectDb.ContainsKey(Keyword) Then
- _WikiId = DlCfProjectDb(Keyword).WikiId
- Else
- _WikiId = 0
- End If
- End If
- End If
- Return _WikiId
- End Get
- Set(value As Integer)
- _WikiId = value
- End Set
- End Property
-
- '''
- ''' 从 CurseForge 工程 Json 项中初始化实例。若出错会抛出异常。
- '''
- Public Sub New(Data As JObject)
- 'https://api.curseforge.com/v1/mods/search?gameId=432&pageSize=5&categoryID=421
- Id = Data("id")
- Name = Data("name")
- Description = Data("summary")
- Website = Data("links")("websiteUrl")
- DateUpdate = Data("dateModified")
- DownloadCount = Data("downloadCount")
- IsModPack = Not Website.Contains("/mc-mods/")
- '获取 Mod Loader 列表
- ModLoaders = New List(Of String)
- For Each File In If(Data("latestFiles"), {})
- Dim NewFile As New DlCfFile(File, IsModPack)
- If Not NewFile.IsAvailable Then Continue For
- ModLoaders.AddRange(NewFile.ModLoaders)
- Next
- ModLoaders = ModLoaders.Distinct.ToList
- '用一个偷懒的方式让 Forge 排在 Fabric 的前面
- ModLoaders = ModLoaders.Select(Function(s) s.Replace("Forge", "Aorge")).ToList()
- ModLoaders.Sort()
- ModLoaders = ModLoaders.Select(Function(s) s.Replace("Aorge", "Forge")).ToList()
- '获取游戏版本
- Dim GameVersions As New List(Of Integer)
- For Each File In If(Data("latestFilesIndexes"), {})
- Dim Version As String = File("gameVersion")
- If Not Version.Contains("1.") Then Continue For
- GameVersions.Add(Version.Split(".")(1).Split("-").First)
- FileIndexes.Add(File("fileId"))
- Next
- GameVersions = Sort(GameVersions.Distinct.ToList, AddressOf VersionSortBoolean)
- If GameVersions.Count = 0 Then
- GameVersionDesc = ""
- Else
- Dim SpaVersions As New List(Of String)
- For i = 0 To GameVersions.Count - 1
- Dim StartVersion As Integer = GameVersions(i), EndVersion As Integer = GameVersions(i)
- For ii = i + 1 To GameVersions.Count - 1
- If GameVersions(ii) = EndVersion - 1 Then
- EndVersion = GameVersions(ii)
- i = ii
- Else
- Exit For
- End If
- Next
- If StartVersion = EndVersion Then
- SpaVersions.Add("1." & StartVersion)
- ElseIf StartVersion >= McVersionHighest Then
- SpaVersions.Add("1." & EndVersion & "+")
- ElseIf EndVersion <= 7 Then
- SpaVersions.Add("1." & StartVersion & "-")
- Exit For
- ElseIf StartVersion - EndVersion = 1 Then
- SpaVersions.Add("1." & StartVersion & ", 1." & EndVersion)
- Else
- SpaVersions.Add("1." & StartVersion & "~1." & EndVersion)
- End If
- Next
- GameVersionDesc = "[" & Join(SpaVersions, ", ") & "] "
- End If
- '获取分类
- Dim Categories = Data("categories")
- Dim CategoryId As New List(Of Integer)
- For Each CategoryToken In Categories
- CategoryId.Add(CategoryToken("id"))
- Next
- CategoryId = ArrayNoDouble(CategoryId)
- CategoryId.Sort()
- CategoryDesc = New List(Of String)
- For Each Category In CategoryId
- Dim Desc As String
- Select Case Category
-
- Case 406 : Desc = "世界生成"
- Case 407 : Desc = "生物群系"
- Case 409 : Desc = "天然结构"
- Case 410 : Desc = "维度"
- Case 411 : Desc = "生物"
- Case 412 : Desc = "科技"
- Case 414 : Desc = "交通与移动"
- Case 415 : Desc = "管道与物流"
- Case 417 : Desc = "能源"
- Case 4558 : Desc = "红石"
- Case 420 : Desc = "仓储"
- Case 416 : Desc = "农业"
- Case 436 : Desc = "食物"
- Case 419 : Desc = "魔法"
- Case 434 : Desc = "装备与工具"
- Case 422 : Desc = "冒险与探索"
- Case 424 : Desc = "建筑与装饰"
- Case 423 : Desc = "信息显示"
- Case 425 : Desc = "杂项"
- Case 421 : Desc = "支持库"
- Case 435 : Desc = "服务器"
-
- Case 4471 : Desc = "科幻"
- Case 4483 : Desc = "战斗"
- Case 4477 : Desc = "小游戏"
- Case 4478 : Desc = "任务"
- Case 4484 : Desc = "多人"
- Case 4476 : Desc = "探索"
- Case 4736 : Desc = "空岛"
- Case 4475 : Desc = "冒险"
- Case 4487 : Desc = "FTB"
- Case 4480 : Desc = "基于地图"
- Case 4479 : Desc = "硬核"
- Case 4472 : Desc = "科技"
- Case 4473 : Desc = "魔法"
- Case 4481 : Desc = "小型整合"
- Case 4482 : Desc = "大型整合"
-
- Case Else : Continue For
- End Select
- CategoryDesc.Add(Desc)
- Next
- If CategoryDesc.Count = 0 Then CategoryDesc.Add("杂类")
- '获取图片
- If Data("logo").Count > 0 Then
- If GetPixelSize(1) > 1.25 Then
- Thumb = Data("logo")("thumbnailUrl").ToString '使用 256x256 图标
- Else
- Thumb = Data("logo")("thumbnailUrl").ToString.Replace("/256/256/", "/64/64/") '使用 64x64 图标
- End If
- End If
- '保存缓存
- If Not DlCfProjectCache.ContainsKey(Id) OrElse DlCfProjectCache(Id).Files Is Nothing Then DictionaryAdd(DlCfProjectCache, Id, Me)
- End Sub
-
- Public Function ToCfItem(ShowVersionDesc As Boolean, ShowLoaderDesc As Boolean, Optional OnClick As MyCfItem.ClickEventHandler = Nothing) As MyCfItem
- Dim NewItem As New MyCfItem With {.Tag = Me}
- NewItem.LabTitle.Text = ChineseName
- NewItem.LabInfo.Text = Description.Replace(vbCr, "").Replace(vbLf, "")
- NewItem.LabLeft.Text = (If(ModLoaders.Count > 0 AndAlso ShowLoaderDesc, "[" & Join(ModLoaders, "/") & "] ", "") &
- If(ShowVersionDesc, GameVersionDesc, "")).Replace("] [", " ") &
- Join(CategoryDesc, ",") & " (" &
- GetTimeSpanString(DateUpdate - Date.Now) & "更新," &
- If(DownloadCount > 100000, Math.Round(DownloadCount / 10000) & " 万次下载", DownloadCount & " 次下载") & ")"
- If Thumb Is Nothing Then
- NewItem.Logo = "pack://application:,,,/images/Icons/NoIcon.png"
- Else
- NewItem.Logo = Thumb
- End If
- If OnClick IsNot Nothing Then
- AddHandler NewItem.Click, OnClick
- NewItem.HasAnimation = True
- Else
- NewItem.HasAnimation = False
- End If
- '结束
- Return NewItem
- End Function
-
- Public Overrides Function Equals(obj As Object) As Boolean
- Dim project = TryCast(obj, DlCfProject)
- Return project IsNot Nothing AndAlso Id = project.Id
- End Function
- Public Shared Operator =(left As DlCfProject, right As DlCfProject) As Boolean
- Return EqualityComparer(Of DlCfProject).Default.Equals(left, right)
- End Operator
- Public Shared Operator <>(left As DlCfProject, right As DlCfProject) As Boolean
- Return Not left = right
- End Operator
- End Class
-
- Public Class DlCfProjectResult
- Public Projects As List(Of DlCfProject)
- Public Index As Integer
- Public RealCount As Long
- End Class
- '''
- ''' CurseForge 工程列表获取事件。
- '''
- Public Sub DlCfProjectSub(Task As LoaderTask(Of DlCfProjectRequest, DlCfProjectResult))
- '拒绝 1.13- Quilt(这个版本根本没有 Quilt)
- If Not Task.Input.IsModPack AndAlso
- If(Task.Input.ModLoader, 0) = 5 AndAlso VersionSortInteger(If(Task.Input.GameVersion, "1.15"), "1.14") = -1 Then
- Throw New Exception("Quilt 不支持 Minecraft " & Task.Input.GameVersion)
- End If
-
- Dim RawFilter As String = If(Task.Input.SearchFilter, "").Trim
- Task.Input.SearchFilter = RawFilter
- RawFilter = RawFilter.ToLower
- Log("[Download] CurseForge 工程列表搜索原始文本:" & RawFilter)
- '中文请求关键字处理
- Dim IsChineseSearch As Boolean = RegexCheck(RawFilter, "[\u4e00-\u9fbb]")
- If IsChineseSearch AndAlso Not String.IsNullOrEmpty(RawFilter) Then
- If Task.Input.IsModPack Then Throw New Exception("整合包搜索仅支持英文")
- ReleaseCfDatabase()
- '构造搜索请求
- Dim SearchEntries As New List(Of SearchEntry(Of DlCfDbEntry))
- For Each Entry In DlCfProjectDb.Values
- If Entry.ChineseName.Contains("动态的树") Then Continue For '傻逼 Mod 的附属太多了
- SearchEntries.Add(New SearchEntry(Of DlCfDbEntry) With {
- .Item = Entry,
- .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
- New KeyValuePair(Of String, Double)(Entry.ChineseName & Entry.CurseForgeId, 1)
- }
- })
- Next
- '获取搜索结果
- Dim SearchResults = Search(SearchEntries, Task.Input.SearchFilter, 3)
- If SearchResults.Count = 0 Then Throw New Exception("无搜索结果,请尝试搜索英文名称")
- Dim SearchResult As String = ""
- For i = 0 To Math.Min(4, SearchResults.Count - 1) '就算全是准确的,也最多只要 5 个
- If Not SearchResults(i).AbsoluteRight AndAlso i >= Math.Min(2, SearchResults.Count - 1) Then Exit For '把 3 个结果拼合以提高准确度
- SearchResult += SearchResults(i).Item.CurseForgeId.Replace("-", " ") & " "
- SearchResult += SearchResults(i).Item.ChineseName.Replace(" (", "|").Split("|").Last.TrimEnd(") ").Replace(" - ", "§").Split("§").First & " "
- Next
- Log("[Download] CurseForge 中文搜索原始关键词:" & SearchResult, LogLevel.Developer)
- '去除常见连接词
- Dim RealFilter As String = ""
- For Each Word In SearchResult.Split(" ")
- If {"the", "of", "a", "mod"}.Contains(Word.ToLower) OrElse Val(Word) > 0 Then Continue For
- If SearchResult.Split(" ").Count > 3 AndAlso {"ftb"}.Contains(Word.ToLower) Then Continue For
- RealFilter += Word.TrimStart("{[(").TrimEnd("}])") & " "
- Next
- Task.Input.SearchFilter = RealFilter
- Log("[Download] CurseForge 中文搜索最终关键词:" & RealFilter, LogLevel.Developer)
- End If
- '驼峰英文请求关键字处理
- Dim SpacedKeywords = RegexReplace(Task.Input.SearchFilter, "$& ", "([A-Z]+|[a-z]+?)(?=[A-Z]+[a-z]+[a-z ]*)")
- Dim ConnectedKeywords = Task.Input.SearchFilter.Replace(" ", "")
- Dim AllPossibleKeywords = (SpacedKeywords & " " & If(IsChineseSearch, Task.Input.SearchFilter, ConnectedKeywords & " " & RawFilter)).ToLower
- '最终处理关键字:分割、去重
- Dim RightKeywords As New List(Of String)
- For Each Keyword In AllPossibleKeywords.Split(" ")
- If Keyword.Trim = "" Then Continue For
- If {"forge", "fabric", "for", "mod",
- "forge/fabric", "fabric/forge", "fabric/quilt", "quilt/fabric"}.Contains(Keyword) Then 'https://github.com/Hex-Dragon/PCL2/issues/208
- Log("[Download] 已跳过搜索关键词:" & Keyword, LogLevel.Developer)
- Continue For
- End If
- RightKeywords.Add(Keyword)
- Next
- If RawFilter.Length > 0 AndAlso RightKeywords.Count = 0 Then
- Task.Input.SearchFilter = RawFilter '全都被过滤掉了
- Else
- Task.Input.SearchFilter = Join(ArrayNoDouble(RightKeywords), " ").ToLower
- End If
- '例外项:OptiForge、OptiFabric(拆词后因为包含 Forge/Fabric 导致无法搜到实际的 Mod)
- If RawFilter.Replace(" ", "").ToLower.Contains("optiforge") Then Task.Input.SearchFilter = "optiforge"
- If RawFilter.Replace(" ", "").ToLower.Contains("optifabric") Then Task.Input.SearchFilter = "optifabric"
- Log("[Download] CurseForge 工程列表搜索最终文本:" & Task.Input.SearchFilter, LogLevel.Developer)
- '正式获取
- Dim Url = Task.Input.GetAddress()
- Log("[Download] 开始获取 CurseForge 工程列表:" & Url)
- Dim RequestResult As JObject = NetGetCodeByRequestRetry(Url, IsJson:=True, Encode:=Encoding.UTF8)
- Dim FileList = GetCfProjectListFromJson(RequestResult("data"), Task.Input.IsModPack)
- If FileList.Count = 0 Then Throw New Exception("无搜索结果")
- '重新排序
- If Not String.IsNullOrEmpty(Task.Input.SearchFilter) Then
- '排序分 = 搜索相对相似度 + 默认排序相对活跃度
- Dim Scores As New Dictionary(Of DlCfProject, Double)
- Dim Entry As New List(Of SearchEntry(Of DlCfProject))
- For i = 1 To FileList.Count
- Dim File = FileList(i - 1)
- Scores.Add(File, (1 - (i / FileList.Count)))
- Entry.Add(New SearchEntry(Of DlCfProject) With {.Item = File, .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
- New KeyValuePair(Of String, Double)(If(IsChineseSearch, File.ChineseName, File.Name), 1),
- New KeyValuePair(Of String, Double)(File.Description, 0.05)}})
- Next
- Dim SearchResult = Search(Entry, RawFilter, 101, -1)
- For Each OneResult In SearchResult
- Scores(OneResult.Item) += OneResult.Similarity / SearchResult(0).Similarity
- Next
- '根据排序分得出结果
- Dim ResultList = Sort(Scores.ToList, Function(Left As KeyValuePair(Of DlCfProject, Double), Right As KeyValuePair(Of DlCfProject, Double))
- Return Left.Value > Right.Value
- End Function)
- FileList = New List(Of DlCfProject)
- For Each Result In ResultList
- FileList.Add(Result.Key)
- Next
- End If
- Task.Output = New DlCfProjectResult With {.Projects = FileList, .Index = RequestResult("pagination")("index"), .RealCount = RequestResult("pagination")("totalCount")}
- End Sub
- '''
- ''' 从 API 返回的 Json 数组中获取工程信息数组。
- '''
- Private Function GetCfProjectListFromJson(Json As JArray, IsModPack As Boolean) As List(Of DlCfProject)
- Dim FileList As New List(Of DlCfProject)
- For Each JsonEntry As JObject In Json
- Dim Result = GetCfProjectFromJson(JsonEntry, IsModPack)
- If Result IsNot Nothing Then FileList.Add(Result)
- Next
- Return FileList
- End Function
- '''
- ''' 从 API 返回的 Json 中获取工程信息。
- '''
- Private Function GetCfProjectFromJson(Json As JObject, IsModPack As Boolean) As DlCfProject
- If Json("links")("websiteUrl") Is Nothing Then
- Log("[Download] 发现关键项为 Nothing 的工程:" & If(Json, "").ToString, LogLevel.Debug)
- Return Nothing
- End If
- If IsModPack = Json("links")("websiteUrl").ToString.Contains("curseforge.com/minecraft/mc-mods") Then
- Log("[Download] 返回的工程与要求的类别不一致:" & Json("links")("websiteUrl").ToString, LogLevel.Debug)
- Return Nothing
- End If
- Return New DlCfProject(Json)
- End Function
-
- '''
- ''' 读取 Mod 数据库。
- '''
- Private Sub ReleaseCfDatabase()
- If DlCfProjectDb IsNot Nothing Then Exit Sub
- DlCfProjectDb = New Dictionary(Of String, DlCfDbEntry)
- Dim i As Integer = 0
- For Each Line In DecodeBytes(GetResources("ModData")).Split(vbLf)
- i += 1
- If Line = "" Then Continue For
- For Each EntryData As String In Line.Split("¨")
- Dim Entry = New DlCfDbEntry
- Dim SplitedLine = EntryData.Split("|")
- Entry.CurseForgeId = SplitedLine(0)
- Entry.WikiId = i
- If SplitedLine.Count >= 2 Then
- Entry.ChineseName = SplitedLine(1)
- Entry.MCBBS = If(SplitedLine.Count >= 3, SplitedLine(2), Nothing)
- If Entry.ChineseName.Contains("*") Then '处理 *
- Entry.ChineseName = Entry.ChineseName.Replace("*", " (" &
- String.Join(" ", Entry.CurseForgeId.Split("-").Select(Function(w) w.Substring(0, 1).ToUpper & w.Substring(1, w.Length - 1))) & ")")
- End If
- End If
- DlCfProjectDb(Entry.CurseForgeId) = Entry
- Next
- Next
- End Sub
- Public Class DlCfDbEntry
- '''
- ''' McMod 的 ID。
- '''
- Public WikiId As Integer
- '''
- ''' 中文译名。若为空字符串则使用英文名。
- '''
- Public ChineseName As String = ""
- '''
- ''' MCBBS 发布帖编号(例如 195107)。若为 Nothing 则没有发布帖。
- '''
- Public MCBBS As Integer?
- '''
- ''' CurseForge ID(例如 advanced-solar-panels)。
- '''
- Public CurseForgeId As String
- Public Overrides Function ToString() As String
- Return CurseForgeId & "|" & WikiId & "|" & ChineseName & If(MCBBS Is Nothing, "", "|" & MCBBS)
- End Function
- End Class
-
-#End Region
-
-#Region "DlCfFile | CurseForge Files"
-
- Public DlCfFileLoader As New LoaderTask(Of KeyValuePair(Of Integer, Boolean), List(Of DlCfFile))("DlCfFile Main", Sub(Task As LoaderTask(Of KeyValuePair(Of Integer, Boolean), List(Of DlCfFile))) Task.Output = DlCfGetFiles(Task.Input.Key, Task.Input.Value))
-
- '''
- ''' CurseForge 工程下的单一版本文件。
- '''
- Public Class DlCfFile
-
- Public IsModPack As Boolean
- Public FileId As Integer
- Public DisplayName As String
- Public [Date] As Date
- Public GameVersion As String()
- Public ModLoaders As New List(Of String)
- Public ReleaseType As Integer
- Public FileName As String
- Public DownloadCount As Integer
- Public Dependencies As New List(Of Integer)
- Private DownloadAddress As String()
-
- Public ReadOnly Property ReleaseTypeString As String
- Get
- Select Case ReleaseType
- Case 1
- Return "正式版"
- Case 2
- Return If(ModeDebug, "Beta 测试版", "测试版")
- Case Else
- Return If(ModeDebug, "Alpha 测试版", "测试版")
- End Select
- End Get
- End Property
- Public ReadOnly Property IsAvailable As Boolean
- Get
- Return DisplayName IsNot Nothing AndAlso GameVersion IsNot Nothing AndAlso FileName IsNot Nothing AndAlso DownloadAddress(0).StartsWith("http")
- End Get
- End Property
-
- '''
- ''' 从 CurseForge 文件 Json 项中初始化实例。若出错会抛出异常。
- '''
- Public Sub New(Data As JObject, IsModPack As Boolean)
- FileId = Data("id")
- DisplayName = Data("displayName").ToString.Replace(" ", "").Trim(" ")
- [Date] = Data("fileDate")
- ReleaseType = Data("releaseType")
- DownloadCount = Data("downloadCount")
- FileName = Data("fileName")
- Me.IsModPack = IsModPack
- '获取下载地址
- Dim Url = Data("downloadUrl").ToString
- If Url = "" Then Url = "https://media.forgecdn.net/files/" & FileId.ToString.Substring(0, 4) & "/" & FileId.ToString.Substring(4).TrimStart("0") & "/" & FileName
- Url = Url.Replace(FileName, Net.WebUtility.UrlEncode(FileName)) '对文件名进行编码
- DownloadAddress = ArrayNoDouble({Url.Replace("-service.overwolf.wtf", ".forgecdn.net").Replace("://edge", "://media"), Url.Replace("-service.overwolf.wtf", ".forgecdn.net"), Url.Replace("://edge", "://media"), Url})
- '获取前置 Mod 的 Addon ID
- If Not IsModPack Then
- For Each Dep In Data("dependencies")
- If Dep("relationType").ToObject(Of Integer) = 3 AndAlso '是一个依赖
- Dep("modId").ToObject(Of Integer) <> 306612 Then '排除 Fabric API
- Dependencies.Add(Dep("modId"))
- End If
- Next
- End If
- '获取游戏版本与 Mod 加载器列表
- Dim Versions As New List(Of String)
- For Each Version In Data("gameVersions").Select(Function(t) t.ToString.Trim.ToLower)
- If Version.StartsWith("1.") OrElse Version.Contains("w") Then
- Versions.Add(Version.Replace("-snapshot", " 快照"))
- ElseIf Version = "forge" OrElse Version = "fabric" OrElse Version = "quilt" OrElse Version = "rift" Then
- ModLoaders.Add(Version.First.ToString.ToUpper & Version.Substring(1))
- End If
- Next
- If Versions.Count > 1 Then
- GameVersion = Sort(Versions, AddressOf VersionSortBoolean).ToArray
- If IsModPack Then GameVersion = {GameVersion(0)}
- ElseIf Versions.Count = 1 Then
- GameVersion = Versions.ToArray
- Else
- GameVersion = {"未知版本"}
- End If
- '用一个偷懒的方式让 Forge 排在 Fabric 的前面
- ModLoaders = ModLoaders.Select(Function(s) s.Replace("Forge", "Aorge")).ToList()
- ModLoaders.Sort()
- ModLoaders = ModLoaders.Select(Function(s) s.Replace("Aorge", "Forge")).ToList()
- End Sub
-
- '''
- ''' 获取对应的下载文件信息。
- '''
- ''' 本地文件夹或文件地址。
- Public Function GetDownloadFile(LocalAddress As String, IsFullPath As Boolean) As NetFile
- Return New NetFile(DownloadAddress, LocalAddress & If(IsFullPath, "", FileName))
- End Function
-
- Public Function ToListItem(OnClick As MyListItem.ClickEventHandler, Optional OnSaveClick As MyIconButton.ClickEventHandler = Nothing) As MyListItem
-
- '获取描述信息
- Dim Info As String = ""
- If Not IsModPack Then
- Info += If(ModLoaders.Count > 0, Join(ModLoaders, "/"), "") &
- If(GameVersion.Count > 1, If(ModLoaders.Count > 0, " ", "") & Join(GameVersion, "、").Replace("-snapshot", " 快照"), "")
- If Info <> "" Then Info = "适用于 " & Info & ","
- Info += If(ModeDebug AndAlso Dependencies.Count > 0, Dependencies.Count & " 个前置 Mod,", "")
- End If
- 'If DownloadCount > 0 Then 'DownloadCount 目前的返回内容完全不正确,经常是 0,干脆不显示了
- ' Info += If(DownloadCount > 100000, Math.Round(DownloadCount / 10000) & " 万次下载,", DownloadCount & " 次下载,")
- 'End If
- Info += GetTimeSpanString([Date] - Date.Now) & "更新"
- Info += If(ReleaseType <> 1, "," & ReleaseTypeString, "")
-
- '建立控件
- Dim NewItem As New MyListItem With {
- .Title = DisplayName, .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Me,
- .Info = Info
- }
- Select Case ReleaseType
- Case 1 'R
- NewItem.Logo = "pack://application:,,,/images/Icons/R.png"
- Case 2 'B
- NewItem.Logo = "pack://application:,,,/images/Icons/B.png"
- Case Else 'A
- NewItem.Logo = "pack://application:,,,/images/Icons/A.png"
- End Select
- AddHandler NewItem.Click, OnClick
-
- '建立另存为按钮
- If OnSaveClick IsNot Nothing Then
- Dim BtnSave As New MyIconButton With {.Logo = Logo.IconButtonSave, .ToolTip = "另存为"}
- ToolTipService.SetPlacement(BtnSave, Primitives.PlacementMode.Center)
- ToolTipService.SetVerticalOffset(BtnSave, 30)
- ToolTipService.SetHorizontalOffset(BtnSave, 2)
- AddHandler BtnSave.Click, OnSaveClick
- NewItem.Buttons = {BtnSave}
- NewItem.PaddingRight = 35
- End If
-
- '结束
- Return NewItem
- End Function
- Public Overrides Function ToString() As String
- Return DisplayName
- End Function
-
- End Class
-
- '''
- ''' 获取某个 CurseForge 工程下的全部文件列表。
- ''' 必须在工作线程执行,失败会抛出异常。
- '''
- Public Function DlCfGetFiles(ProjectId As Integer, IsModPack As Boolean) As List(Of DlCfFile)
- '获取工程对象
- Dim TargetProject As DlCfProject
- If DlCfProjectCache.ContainsKey(ProjectId) Then
- TargetProject = DlCfProjectCache(ProjectId)
- Else
- TargetProject = GetCfProjectFromJson(NetGetCodeByRequestRetry("https://api.curseforge.com/v1/mods/" & ProjectId, IsJson:=True, Encode:=Encoding.UTF8)("data"), IsModPack)
- End If
- '获取工程对象的文件列表
- If TargetProject.Files Is Nothing Then
- Log("[Download] 开始获取 CurseForge 工程 ID 为 " & ProjectId & " 的文件列表")
- Dim Json As JArray
- If TargetProject.IsModPack Then
- '整合包使用全部文件
- Json = NetGetCodeByRequestRetry("https://api.curseforge.com/v1/mods/" & ProjectId & "/files?pageSize=999", Accept:="application/json", IsJson:=True)("data")
- Else
- 'Mod 使用每个版本最新的文件
- Json = GetJson(NetRequestRetry("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(TargetProject.FileIndexes, ",") & "]}", "application/json"))("data")
- End If
- Dim Files As New Dictionary(Of Integer, DlCfFile)
- For Each JsonEntry As JObject In Json
- Dim NewFile As New DlCfFile(JsonEntry, IsModPack)
- If NewFile.IsAvailable AndAlso Not Files.ContainsKey(NewFile.FileId) Then Files.Add(NewFile.FileId, NewFile)
- Next
- TargetProject.Files = Files.Values.ToList
- End If
- '获取前置 Mod 列表
- If IsModPack Then GoTo ExitSub
- Dim Deps As New List(Of Integer)
- For Each File In TargetProject.Files
- For Each AddonId In File.Dependencies
- If Not Deps.Contains(AddonId) AndAlso Not DlCfProjectCache.ContainsKey(AddonId) Then Deps.Add(AddonId)
- Next
- Next
- If Deps.Count > 0 Then
- '获取前置 Mod 工程信息
- Log("[Download] 文件列表中需要获取的前置 Mod:" & Join(Deps, ","))
- GetCfProjectListFromJson(GetJson(NetRequestRetry("https://api.curseforge.com/v1/mods", "POST", "{""modIds"": [" & Join(Deps, ",") & "]}", "application/json"))("data"), False)
- End If
- '返回
-ExitSub:
- Return TargetProject.Files
- End Function
-
- Public Sub DlCfFilesPreload(Stack As StackPanel, Entrys As List(Of DlCfFile), OnClick As MyListItem.ClickEventHandler)
- '获取卡片对应的前置 ID
- '如果为整合包就不会有 Dependencies 信息,所以不用管
- Dim Deps As New List(Of Integer)
- For Each File In Entrys
- For Each AddonId In If(File.Dependencies, New List(Of Integer))
- If Not Deps.Contains(AddonId) Then
- If Not DlCfProjectCache.ContainsKey(AddonId) Then
- Log("[Download] 未找到 ID 为 " & AddonId & " 的前置 Mod 信息", LogLevel.Developer)
- Continue For
- End If
- Deps.Add(AddonId)
- End If
- Next
- Next
- Deps.Remove(306612) '移除 Fabric API
- If Deps.Count = 0 Then Exit Sub
- Deps.Sort()
- '添加开头间隔
- Stack.Children.Add(New TextBlock With {.Text = "前置 Mod", .FontSize = 14, .HorizontalAlignment = HorizontalAlignment.Left, .Margin = New Thickness(6, 2, 0, 5)})
- '添加前置 Mod 列表
- For Each Dep In Deps
- Dim Item = DlCfProjectCache(Dep).ToCfItem(False, True, AddressOf FrmDownloadMod.ProjectClick)
- 'Item.Margin = New Thickness(5, 0, 0, 0)
- Stack.Children.Add(Item)
- Next
- '添加结尾间隔
- Stack.Children.Add(New TextBlock With {.Text = "可选版本", .FontSize = 14, .HorizontalAlignment = HorizontalAlignment.Left, .Margin = New Thickness(6, 12, 0, 5)})
- End Sub
+ Public DlOptiFabricLoader As New LoaderTask(Of Integer, List(Of CompFile))("OptiFabric List Loader",
+ Sub(Task As LoaderTask(Of Integer, List(Of CompFile))) Task.Output = CompFilesGet("322385", True))
#End Region
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
index 5b8820e..0b1a90d 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
@@ -1457,7 +1457,7 @@ NextVersion:
Next
'去重
- Dim Result As String = Join(ArrayNoDouble(DeDuplicateDataList), " ")
+ Dim Result As String = Join(DeDuplicateDataList.Distinct.ToList, " ")
'添加 MainClass
If Version.JsonObject("mainClass") Is Nothing Then
@@ -1549,7 +1549,7 @@ NextVersion:
DeDuplicateDataList.Add(CurrentEntry)
Next
'去重
- McLaunchArgumentsGameNew = Join(ArrayNoDouble(DeDuplicateDataList), " ")
+ McLaunchArgumentsGameNew = Join(DeDuplicateDataList.Distinct.ToList, " ")
'特别改变 OptiFineTweaker
If (Version.Version.HasForge OrElse Version.Version.HasLiteLoader) AndAlso Version.Version.HasOptiFine Then
@@ -1592,7 +1592,7 @@ NextVersion:
GameArguments.Add("${auth_access_token}", McLoginLoader.Output.AccessToken)
GameArguments.Add("${access_token}", McLoginLoader.Output.AccessToken)
GameArguments.Add("${auth_session}", McLoginLoader.Output.AccessToken)
- GameArguments.Add("${user_type}", If(McLoginLoader.Output.Type = "Legacy", "Legacy", "Mojang"))
+ GameArguments.Add("${user_type}", "msa") '#1221
Dim GameSize As Size = Setup.GetLaunchArgumentWindowSize()
GameArguments.Add("${resolution_width}", GameSize.Width)
GameArguments.Add("${resolution_height}", GameSize.Height)
@@ -1982,7 +1982,7 @@ IgnoreCustomSkin:
End If
Dim Paths As New List(Of String)(StartInfo.EnvironmentVariables("Path").Split(";"))
Paths.Add(McLaunchJavaSelected.PathFolder)
- StartInfo.EnvironmentVariables("Path") = Join(ArrayNoDouble(Paths), ";")
+ StartInfo.EnvironmentVariables("Path") = Join(Paths.Distinct.ToList, ";")
'设置其他参数
StartInfo.WorkingDirectory = McVersionCurrent.PathIndie
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
index 62f62e3..c629c63 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
@@ -220,7 +220,7 @@ Public Module ModMinecraft
PathInEnv = PathInEnv.Trim(" """.ToCharArray())
If Not PathInEnv.EndsWith("\") Then PathInEnv += "\"
'粗略检查有效性
- If File.Exists(PathInEnv & "javaw.exe") Then DictionaryAdd(JavaPreList, PathInEnv, False)
+ If File.Exists(PathInEnv & "javaw.exe") Then JavaPreList(PathInEnv) = False
Next
'查找磁盘中的 Java
For Each Disk As DriveInfo In DriveInfo.GetDrives()
@@ -272,7 +272,7 @@ Public Module ModMinecraft
Try
For Each JavaJsonObject In GetJson(ImportedJava)
Dim Entry = JavaEntry.FromJson(JavaJsonObject)
- If Entry.IsUserImport Then DictionaryAdd(JavaPreList, Entry.PathFolder, True)
+ If Entry.IsUserImport Then JavaPreList(Entry.PathFolder) = True
Next
Catch ex As Exception
Log(ex, "Java 列表已损坏", LogLevel.Feedback)
@@ -283,10 +283,7 @@ Public Module ModMinecraft
'确保可用并获取详细信息,转入正式列表
Dim NewJavaList As New List(Of JavaEntry)
- For Each Entry In ArrayNoDouble(JavaPreList.ToList,
- Function(a As KeyValuePair(Of String, Boolean), b As KeyValuePair(Of String, Boolean))
- Return a.Key.ToLower = b.Key.ToLower '#794
- End Function)
+ For Each Entry In Distinct(JavaPreList.ToList, Function(a, b) a.Key.ToLower = b.Key.ToLower) '#794
NewJavaList.Add(New JavaEntry(Entry.Key, Entry.Value))
Next
NewJavaList = Sort(JavaCheckList(NewJavaList), AddressOf JavaSorter)
@@ -373,7 +370,7 @@ Wait:
Dim Path As String = OriginalPath.FullName.Replace("\\", "\")
If Not Path.EndsWith("\") Then Path += "\"
'若该目录有 Java,则加入结果
- If File.Exists(Path & "javaw.exe") Then DictionaryAdd(Results, Path, Source)
+ If File.Exists(Path & "javaw.exe") Then Results(Path) = Source
'查找其下的所有文件夹
For Each FolderInfo As DirectoryInfo In OriginalPath.EnumerateDirectories
If FolderInfo.Attributes.HasFlag(FileAttributes.ReparsePoint) Then Continue For '跳过符号链接
@@ -473,7 +470,7 @@ RetryGet:
Dim UserJava As JavaEntry = Nothing
'获取版本独立设置中指定的 Java
- If RelatedVersion IsNot Nothing AndAlso Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion) <> "使用全局设置" Then
+ If RelatedVersion IsNot Nothing AndAlso Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion).ToString.StartsWith("{") Then
Try
UserJava = JavaEntry.FromJson(GetJson(Setup.Get("VersionArgumentJavaSelect", Version:=RelatedVersion)))
'确保版本独立设置中指定的 Java 在 Java 列表中(#978)
@@ -533,6 +530,7 @@ RetryGet:
Else
Select Case MyMsgBox("你在设置中手动指定了使用 Java " & JavaCurrent & ",但当前" & Requirement & "。" & vbCrLf &
"如果强制使用该 Java,可能会导致出现异常。" & vbCrLf &
+ "你可以将 游戏 Java 设置修改为 自动选择合适的 Java 来避免这一提示。" & vbCrLf &
vbCrLf &
" - 指定的 Java:" & UserJava.ToString,
"Java 兼容性警告", "让 PCL2 自动选择", "强制使用该 Java", "取消")
@@ -853,7 +851,7 @@ NoUserJava:
_McVersionLast = value
If value Is Nothing Then Exit Property
'重置缓存的 Mod 文件夹
- PageDownloadCfDetail.CachedFolder = Nothing
+ PageDownloadCompDetail.CachedFolder = Nothing
'统一通行证重判
If AniControlEnabled = 0 AndAlso
Setup.Get("VersionServerNide", Version:=value) <> Setup.Get("CacheNideServer") AndAlso
@@ -2644,12 +2642,10 @@ NextVersion:
'普通文件
Urls.AddRange(DlSourceLibraryGet("https://libraries.minecraft.net" & Token.LocalPath.Replace(If(Token.IsJumpLoader, JumpLoaderFolder, CustomMcFolder) & "libraries", "").Replace("\", "/")))
End If
- Result.Add(New NetFile(ArrayNoDouble(Urls.ToArray()), Token.LocalPath, Checker))
+ Result.Add(New NetFile(Urls.Distinct.ToArray, Token.LocalPath, Checker))
Next
'去重并返回
- Return ArrayNoDouble(Result, Function(Left As NetFile, Right As NetFile)
- Return Left.LocalPath = Right.LocalPath
- End Function)
+ Return Distinct(Result, Function(a, b) a.LocalPath = b.LocalPath)
End Function
'''
''' 获取对应的支持库文件地址。
@@ -3268,7 +3264,7 @@ NextVersion:
'不知道是个啥玩意儿,直接存储
Value = RawValue
End If
- DictionaryAdd(TomlData.Last.Value, Key, Value)
+ TomlData.Last.Value(Key) = Value
Else
'不知道是个啥玩意儿
Exit Try
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb
index 464fbb7..fe23ef2 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb
@@ -5,7 +5,7 @@
''' 弹窗要求选择一个整合包文件并进行安装。
'''
Public Sub ModpackInstall()
- Dim File As String = SelectFile("压缩包文件(*.rar;*.zip)|*.rar;*.zip", "选择整合包压缩文件") '选择整合包文件
+ Dim File As String = SelectFile("整合包文件(*.rar;*.zip;*.mrpack)|*.rar;*.zip;*.mrpack", "选择整合包压缩文件") '选择整合包文件
If String.IsNullOrEmpty(File) Then Exit Sub
RunInThread(Sub() ModpackInstall(File))
End Sub
@@ -23,6 +23,7 @@
Archive = New Compression.ZipArchive(New FileStream(File, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
'从根目录判断整合包类型
If Archive.GetEntry("mcbbs.packmeta") IsNot Nothing Then PackType = 3 : Exit Try 'MCBBS 整合包(优先于 manifest.json 判断)
+ If Archive.GetEntry("modrinth.index.json") IsNot Nothing Then PackType = 4 : Exit Try 'Modrinth 整合包
If Archive.GetEntry("manifest.json") IsNot Nothing Then
Dim Json As JObject = GetJson(ReadFile(Archive.GetEntry("manifest.json").Open, Encoding.UTF8))
If Json("addons") Is Nothing Then
@@ -42,6 +43,7 @@
If FullNames.Count <> 2 Then Continue For
'判断是否为关键文件
If FullNames(1) = "mcbbs.packmeta" Then PackType = 3 : Exit Try 'MCBBS 整合包(优先于 manifest.json 判断)
+ If FullNames(1) = "modrinth.index.json" Then PackType = 4 : Exit Try 'Modrinth 整合包
If FullNames(1) = "manifest.json" Then
Dim Json As JObject = GetJson(ReadFile(Entry.Open, Encoding.UTF8))
If Json("addons") Is Nothing Then
@@ -79,6 +81,9 @@
Case 3
Log("[ModPack] 整合包种类:MCBBS")
InstallPackMCBBS(File, Archive, ArchiveBaseFolder)
+ Case 4
+ Log("[ModPack] 整合包种类:Modrinth")
+ InstallPackModrinth(File, Archive, ArchiveBaseFolder, VersionName, Logo)
Case 9
Log("[ModPack] 整合包种类:压缩包")
Archive.Dispose()
@@ -152,11 +157,8 @@ Retry:
#Region "不同类型整合包的安装方法"
'CurseForge
- '''
- ''' 获取安装 CurseForge 整合包的加载器,若失败或跳过则返回 Nothing。
- ''' 加载器以安装目标版本文件夹为输入。
- '''
- Private Function InstallPackCurseForgeLoader(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, VersionName As String, Optional Logo As String = Nothing) As LoaderCombo(Of String)
+ Private Sub InstallPackCurseForge(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, Optional VersionName As String = Nothing, Optional Logo As String = Nothing)
+
'读取 Json 文件
Dim Json As JObject
Try
@@ -164,8 +166,19 @@ Retry:
If Json("minecraft") Is Nothing OrElse Json("minecraft")("version") Is Nothing Then Throw New Exception("整合包未提供 Minecraft 版本信息")
Catch ex As Exception
Log(ex, "整合包安装信息存在问题", LogLevel.Hint)
- Return Nothing
+ Exit Sub
End Try
+
+ '获取版本名
+ Dim ShowRibble As Boolean = VersionName Is Nothing
+ If VersionName Is Nothing Then
+ Dim PackName As String = If(Json("name"), "")
+ Dim Validate As New ValidateFolderName(PathMcFolder & "versions")
+ If Validate.Validate(PackName) <> "" Then PackName = ""
+ VersionName = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate})
+ If String.IsNullOrEmpty(VersionName) Then Exit Sub
+ End If
+
'获取 Mod API 版本信息
Dim ForgeVersion As String = Nothing
Dim FabricVersion As String = Nothing
@@ -175,7 +188,7 @@ Retry:
'Forge 指定
If Id.Contains("recommended") Then
Log("[ModPack] 该整合包版本过老,已不支持进行安装!", LogLevel.Hint)
- Return Nothing
+ Exit Sub
End If
Try
Log("[ModPack] 整合包 Forge 版本:" & Id)
@@ -250,8 +263,8 @@ Retry:
IsResourcePack = False
End If
'实际的添加
- FileList.Add(ModJson("id"), New DlCfFile(ModJson, False).GetDownloadFile(
- PathMcFolder & "versions\" & VersionName & "\" & If(IsResourcePack, "resourcepacks", "mods") & "\", False))
+ FileList.Add(ModJson("id"), New CompFile(ModJson, CompType.Mod).ToNetFile(
+ PathMcFolder & "versions\" & VersionName & "\" & If(IsResourcePack, "resourcepacks", "mods") & "\"))
Task.Progress += 1 / (1 + ModFileList.Count)
Next
Task.Output = FileList.Values.ToList
@@ -259,6 +272,7 @@ Retry:
'下载 Mod 文件
InstallLoaders.Add(New LoaderDownload("下载 Mod", New List(Of NetFile)) With {.ProgressWeight = ModFileList.Count * 1.5}) '每个 Mod 需要 1.5s
End If
+
'构造加载器
Dim Request As New McInstallRequest With {
.TargetVersionName = VersionName,
@@ -271,7 +285,7 @@ Retry:
InstallExpectTime += InstallLoader.ProgressWeight
Next
Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True)
- If MergeLoaders Is Nothing Then Return Nothing
+ If MergeLoaders Is Nothing Then Exit Sub
Dim MergeExpectTime As Double = 0
For Each MergeLoader In MergeLoaders
MergeExpectTime += MergeLoader.ProgressWeight
@@ -293,14 +307,15 @@ Retry:
File.Copy(Logo, VersionFolder & "PCL\Logo.png", True)
WriteIni(VersionFolder & "PCL\Setup.ini", "Logo", "PCL\Logo.png")
WriteIni(VersionFolder & "PCL\Setup.ini", "LogoCustom", "True")
- Log("[Download] 已设置整合包 Logo:" & Logo)
+ Log("[ModPack] 已设置整合包 Logo:" & Logo)
End If
'删除原始整合包文件
- Dim Target As String = VersionFolder & "原始整合包.zip"
- If Not Setup.Get("ToolDownloadKeepModpack") AndAlso File.Exists(Target) Then
- Log("[Download] 根据设置要求删除原始整合包文件:" & Target)
- File.Delete(Target)
- End If
+ For Each Target As String In {VersionFolder & "原始整合包.zip", VersionFolder & "原始整合包.mrpack"}
+ If Not Setup.Get("ToolDownloadKeepModpack") AndAlso File.Exists(Target) Then
+ Log("[ModPack] 根据设置要求删除原始整合包文件:" & Target)
+ File.Delete(Target)
+ End If
+ Next
End Sub) With {.ProgressWeight = 0.1, .Show = False})
'重复任务检查
@@ -309,38 +324,166 @@ Retry:
For i = 0 To LoaderTaskbar.Count - 1
If LoaderTaskbar(i).Name = LoaderName Then
Hint("该整合包正在安装中!", HintType.Critical)
- Return Nothing
+ Exit Sub
End If
Next
End SyncLock
'启动
Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = AddressOf McInstallState}
- Return Loader
- End Function
- Private Sub InstallPackCurseForge(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, Optional VersionName As String = Nothing, Optional Logo As String = Nothing)
+ Loader.Start(PathMcFolder & "versions\" & VersionName & "\")
+ LoaderTaskbarAdd(Loader)
+ FrmMain.BtnExtraDownload.ShowRefresh()
+ If ShowRibble Then FrmMain.BtnExtraDownload.Ribble()
+ End Sub
+
+ 'Modrinth
+ Private Sub InstallPackModrinth(FileAddress As String, Archive As Compression.ZipArchive, ArchiveBaseFolder As String, Optional VersionName As String = Nothing, Optional Logo As String = Nothing)
+
+ '读取 Json 文件
+ Dim Json As JObject
+ Try
+ Json = GetJson(ReadFile(Archive.GetEntry(ArchiveBaseFolder & "modrinth.index.json").Open))
+ If Json("dependencies") Is Nothing OrElse Json("dependencies")("minecraft") Is Nothing Then Throw New Exception("整合包未提供 Minecraft 版本信息")
+ Catch ex As Exception
+ Log(ex, "整合包安装信息存在问题", LogLevel.Hint)
+ Exit Sub
+ End Try
+ '获取 Mod API 版本信息
+ Dim MinecraftVersion As String = Nothing
+ Dim ForgeVersion As String = Nothing
+ Dim FabricVersion As String = Nothing
+ For Each Entry As JProperty In If(Json("dependencies"), {})
+ Select Case Entry.Name.ToLower
+ Case "minecraft"
+ MinecraftVersion = Entry.Value.ToString
+ Case "forge" 'eg. 14.23.5.2859
+ ForgeVersion = Entry.Value.ToString
+ Log("[ModPack] 整合包 Forge 版本:" & ForgeVersion)
+ Case "fabric-loader" 'eg. 0.14.14
+ FabricVersion = Entry.Value.ToString
+ Log("[ModPack] 整合包 Fabric 版本:" & FabricVersion)
+ Case "quilt-loader" 'eg. 1.0.0
+ Hint("PCL 暂不支持安装需要 Quilt 的整合包!", HintType.Critical)
+ Exit Sub
+ Case Else
+ Hint($"无法安装整合包,其中出现了未知的 Mod 加载器 {Entry.Value}!", HintType.Critical)
+ Exit Sub
+ End Select
+ Next
'获取版本名
Dim ShowRibble As Boolean = VersionName Is Nothing
If VersionName Is Nothing Then
- Dim Json As JObject
- Try
- Json = GetJson(ReadFile(Archive.GetEntry(ArchiveBaseFolder & "manifest.json").Open))
- If Json("minecraft") Is Nothing OrElse Json("minecraft")("version") Is Nothing Then Throw New Exception("整合包未提供 Minecraft 版本信息")
- Catch ex As Exception
- Log(ex, "整合包安装信息存在问题", LogLevel.Hint)
- Exit Sub
- End Try
Dim PackName As String = If(Json("name"), "")
Dim Validate As New ValidateFolderName(PathMcFolder & "versions")
If Validate.Validate(PackName) <> "" Then PackName = ""
VersionName = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate})
If String.IsNullOrEmpty(VersionName) Then Exit Sub
End If
+ '解压和配置文件
+ Dim InstallTemp As String = PathTemp & "PackInstall\" & RandomInteger(0, 100000) & "\"
+ Dim InstallLoaders As New List(Of LoaderBase)
+ InstallLoaders.Add(New LoaderTask(Of String, Integer)("解压整合包文件",
+ Sub(Task As LoaderTask(Of String, Integer))
+ UnpackFiles(InstallTemp, FileAddress)
+ Task.Progress = 0.5
+ '复制 overrides 文件夹和 client-overrides 文件夹
+ If Directory.Exists(InstallTemp & ArchiveBaseFolder & "overrides") Then
+ CopyDirectory(InstallTemp & ArchiveBaseFolder & "overrides", PathMcFolder & "versions\" & VersionName)
+ Else
+ Log("[ModPack] 整合包中未找到 override 目录,已跳过")
+ End If
+ Task.Progress = 0.8
+ If Directory.Exists(InstallTemp & ArchiveBaseFolder & "client-overrides") Then
+ CopyDirectory(InstallTemp & ArchiveBaseFolder & "client-overrides", PathMcFolder & "versions\" & VersionName)
+ End If
+ Task.Progress = 0.9
+ '开启版本隔离
+ WriteIni(PathMcFolder & "versions\" & VersionName & "\PCL\Setup.ini", "VersionArgumentIndie", 1)
+ End Sub) With {.ProgressWeight = New FileInfo(FileAddress).Length / 1024 / 1024 / 6, .Block = False}) '每 6M 需要 1s
+ '获取下载文件列表
+ Dim FileList As New List(Of NetFile)
+ For Each File In If(Json("files"), {})
+ '检查是否需要该文件
+ If File("env") IsNot Nothing Then
+ Select Case File("env")("client").ToString
+ Case "optional"
+ If MyMsgBox("是否要下载整合包中的可选文件 " & GetFileNameFromPath(File("path").ToString) & "?",
+ "下载可选文件", "是", "否") = 2 Then
+ Continue For
+ End If
+ Case "unsupported"
+ Continue For
+ End Select
+ End If
+ '添加下载文件
+ FileList.Add(New NetFile(File("downloads").Select(Function(t) t.ToString).ToArray,
+ PathMcFolder & "versions\" & VersionName & "\" & File("path").ToString,
+ New FileChecker(ActualSize:=File("fileSize").ToObject(Of Long), Hash:=File("hashes")("sha1").ToString)))
+ Next
+ If FileList.Count > 0 Then
+ InstallLoaders.Add(New LoaderDownload("下载额外文件", FileList) With {.ProgressWeight = FileList.Count * 1.5}) '每个 Mod 需要 1.5s
+ End If
- '启动加载器
- Dim Loader = InstallPackCurseForgeLoader(FileAddress, Archive, ArchiveBaseFolder, VersionName, Logo)
- If Loader Is Nothing Then Exit Sub
+ '构造加载器
+ Dim Request As New McInstallRequest With {
+ .TargetVersionName = VersionName,
+ .MinecraftName = MinecraftVersion,
+ .ForgeVersion = ForgeVersion,
+ .FabricVersion = FabricVersion
+ }
+ Dim InstallExpectTime As Double = 0
+ For Each InstallLoader In InstallLoaders
+ InstallExpectTime += InstallLoader.ProgressWeight
+ Next
+ Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True)
+ If MergeLoaders Is Nothing Then Exit Sub
+ Dim MergeExpectTime As Double = 0
+ For Each MergeLoader In MergeLoaders
+ MergeExpectTime += MergeLoader.ProgressWeight
+ Next
+ '构造 Libraries 加载器(为了使得 Mods 下载结束后再构造,这样才会下载 JumpLoader 文件)
+ Dim LoadersLib As New List(Of LoaderBase)
+ LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionName))) With {.ProgressWeight = 1, .Show = False})
+ LoadersLib.Add(New LoaderDownload("下载游戏支持库文件(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 7, .Show = False})
+ '构造总加载器
+ Dim Loaders As New List(Of LoaderBase)
+ Loaders.Add(New LoaderCombo(Of String)("整合包安装", InstallLoaders) With {.Show = False, .Block = False, .ProgressWeight = InstallExpectTime})
+ Loaders.Add(New LoaderCombo(Of String)("游戏安装", MergeLoaders) With {.Show = False, .ProgressWeight = MergeExpectTime})
+ Loaders.Add(New LoaderCombo(Of String)("下载游戏支持库文件", LoadersLib) With {.ProgressWeight = 8})
+ Loaders.Add(New LoaderTask(Of String, String)("最终整理文件",
+ Sub(Task As LoaderTask(Of String, String))
+ '设置图标
+ Dim VersionFolder As String = PathMcFolder & "versions\" & VersionName & "\"
+ If Logo IsNot Nothing AndAlso File.Exists(Logo) Then
+ File.Copy(Logo, VersionFolder & "PCL\Logo.png", True)
+ WriteIni(VersionFolder & "PCL\Setup.ini", "Logo", "PCL\Logo.png")
+ WriteIni(VersionFolder & "PCL\Setup.ini", "LogoCustom", "True")
+ Log("[ModPack] 已设置整合包 Logo:" & Logo)
+ End If
+ '删除原始整合包文件
+ For Each Target As String In {VersionFolder & "原始整合包.zip", VersionFolder & "原始整合包.mrpack"}
+ If Not Setup.Get("ToolDownloadKeepModpack") AndAlso File.Exists(Target) Then
+ Log("[ModPack] 根据设置要求删除原始整合包文件:" & Target)
+ File.Delete(Target)
+ End If
+ Next
+ End Sub) With {.ProgressWeight = 0.1, .Show = False})
+
+ '重复任务检查
+ Dim LoaderName As String = "Modrinth 整合包安装:" & VersionName & " "
+ SyncLock LoaderTaskbarLock
+ For i = 0 To LoaderTaskbar.Count - 1
+ If LoaderTaskbar(i).Name = LoaderName Then
+ Hint("该整合包正在安装中!", HintType.Critical)
+ Exit Sub
+ End If
+ Next
+ End SyncLock
+
+ '启动
+ Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = AddressOf McInstallState}
Loader.Start(PathMcFolder & "versions\" & VersionName & "\")
LoaderTaskbarAdd(Loader)
FrmMain.BtnExtraDownload.ShowRefresh()
@@ -382,7 +525,10 @@ Retry:
WriteIni(PathMcFolder & "versions\" & VersionName & "\PCL\Setup.ini", "VersionArgumentIndie", 1)
End Sub) With {.ProgressWeight = New FileInfo(FileAddress).Length / 1024 / 1024 / 6, .Block = False}) '每 6M 需要 1s
'构造加载器
- If Json("gameVersion") Is Nothing Then Throw New Exception("整合包未提供游戏版本信息")
+ If Json("gameVersion") Is Nothing Then
+ Hint("该整合包未提供游戏版本信息,无法安装!", HintType.Critical)
+ Exit Sub
+ End If
Dim Request As New McInstallRequest With {
.TargetVersionName = VersionName,
.MinecraftName = Json("gameVersion").ToString
@@ -477,7 +623,10 @@ Retry:
WriteIni(PathMcFolder & "versions\" & VersionName & "\PCL\Setup.ini", "VersionArgumentIndie", 1)
End Sub) With {.ProgressWeight = New FileInfo(FileAddress).Length / 1024 / 1024 / 6, .Block = False}) '每 6M 需要 1s
'构造版本安装请求
- If PackJson("components") Is Nothing Then Throw New Exception("整合包未提供游戏版本信息")
+ If PackJson("components") Is Nothing Then
+ Hint("该整合包未提供游戏版本信息,无法安装!", HintType.Critical)
+ Exit Sub
+ End If
Dim Request As New McInstallRequest With {.TargetVersionName = VersionName}
For Each Component In PackJson("components")
Select Case If(Component("uid"), "").ToString
@@ -564,12 +713,18 @@ Retry:
WriteIni(PathMcFolder & "versions\" & VersionName & "\PCL\Setup.ini", "VersionArgumentIndie", 1)
End Sub) With {.ProgressWeight = New FileInfo(FileAddress).Length / 1024 / 1024 / 6, .Block = False}) '每 6M 需要 1s
'构造加载器
- If Json("addons") Is Nothing Then Throw New Exception("整合包未提供游戏版本信息")
+ If Json("addons") Is Nothing Then
+ Hint("该整合包未提供游戏版本附加信息,无法安装!", HintType.Critical)
+ Exit Sub
+ End If
Dim Addons As New Dictionary(Of String, String)
For Each Entry In Json("addons")
Addons.Add(Entry("id"), Entry("version"))
Next
- If Not Addons.ContainsKey("game") Then Throw New Exception("整合包未提供游戏版本信息")
+ If Not Addons.ContainsKey("game") Then
+ Hint("该整合包未提供游戏版本信息,无法安装!", HintType.Critical)
+ Exit Sub
+ End If
Dim Request As New McInstallRequest With {
.TargetVersionName = VersionName,
.MinecraftName = Addons("game"),
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/MyCfItem.xaml b/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml
similarity index 96%
rename from Plain Craft Launcher 2/Pages/PageDownload/MyCfItem.xaml
rename to Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml
index 45138ce..8254a36 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/MyCfItem.xaml
+++ b/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml
@@ -1,10 +1,10 @@
-
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/MyCfItem.xaml.vb b/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml.vb
similarity index 81%
rename from Plain Craft Launcher 2/Pages/PageDownload/MyCfItem.xaml.vb
rename to Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml.vb
index 6b10240..e550361 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/MyCfItem.xaml.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml.vb
@@ -1,4 +1,4 @@
-Public Class MyCfItem
+Public Class MyCompItem
Public Uuid As Integer = GetUuid()
#Region "Logo"
@@ -11,33 +11,36 @@
Set(value As String)
If _Logo = value OrElse value Is Nothing Then Exit Property
_Logo = value
- Dim FileAddress = PathTemp & "CFLogo\" & GetHash(_Logo) & ".png"
+ Dim FileAddress = PathTemp & "CompLogo\" & GetHash(_Logo) & ".png"
Try
If _Logo.ToLower.StartsWith("http") Then
'网络图片
If File.Exists(FileAddress) Then
PathLogo.Source = New MyBitmap(FileAddress)
+ ElseIf _Logo.ToLower.EndsWith(".webp") Then 'Modrinth 林业 Mod 使用了不支持的 WebP 格式 Logo
+ Log($"[Comp] 发现不支持的 WebP 格式图标,已更改为默认图标:{_Logo}")
+ PathLogo.Source = New MyBitmap("pack://application:,,,/images/Icons/NoIcon.png")
Else
PathLogo.Source = New MyBitmap("pack://application:,,,/images/Icons/NoIcon.png")
- RunInNewThread(Sub() LogoLoader(FileAddress), "CurseForge Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal)
+ RunInNewThread(Sub() LogoLoader(FileAddress), "Comp Logo Loader " & Uuid & "#", ThreadPriority.BelowNormal)
End If
Else
'位图
PathLogo.Source = New MyBitmap(_Logo)
End If
Catch ex As IOException
- Log(ex, "加载 CurseForge 工程图标时读取失败(" & FileAddress & ")")
+ Log(ex, "加载资源工程图标时读取失败(" & FileAddress & ")")
Catch ex As ArgumentException
'考虑缓存的图片本身可能有误
- Log(ex, "可视化 CurseForge 工程图标失败(" & FileAddress & ")")
+ Log(ex, "可视化资源工程图标失败(" & FileAddress & ")")
Try
File.Delete(FileAddress)
- Log("[Download] 已清理损坏的 CurseForge 工程图标:" & FileAddress)
+ Log("[Comp] 已清理损坏的资源工程图标:" & FileAddress)
Catch exx As Exception
- Log(exx, "清理损坏的 CurseForge 工程图标缓存失败(" & FileAddress & ")", LogLevel.Hint)
+ Log(exx, "清理损坏的资源工程图标缓存失败(" & FileAddress & ")", LogLevel.Hint)
End Try
Catch ex As Exception
- Log(ex, "加载 CurseForge 工程图标失败(" & value & ")")
+ Log(ex, "加载资源工程图标失败(" & value & ")")
End Try
End Set
End Property
@@ -48,16 +51,20 @@
RetryStart:
Try
NetDownload(_Logo, Address & DownloadEnd)
+ Dim LoadError As Exception = Nothing
RunInUiWait(Sub()
Try
'在地址更换时取消加载
- If Not Address = PathTemp & "CFLogo\" & GetHash(_Logo) & ".png" Then Exit Sub
+ If Not Address = PathTemp & "CompLogo\" & GetHash(_Logo) & ".png" Then Exit Sub
'在完成正常加载后才保存缓存图片
PathLogo.Source = New MyBitmap(Address & DownloadEnd)
Catch ex As Exception
- Log(ex, "读取 CurseForge 工程图标失败(" & Address & ")", LogLevel.Hint)
+ Log(ex, "读取资源工程图标失败(" & Address & ")")
+ File.Delete(Address & DownloadEnd)
+ LoadError = ex
End Try
End Sub)
+ If LoadError IsNot Nothing Then Throw LoadError
If File.Exists(Address) Then
File.Delete(Address & DownloadEnd)
Else
@@ -68,7 +75,8 @@ RetryStart:
Retry = True
GoTo RetryStart
Else
- Log(ex, "下载 CurseForge 工程图标失败")
+ Log(ex, $"下载资源工程图标失败({_Logo})")
+ RunInUi(Sub() PathLogo.Source = New MyBitmap("pack://application:,,,/images/Icons/NoIcon.png"))
End If
End Try
End Sub
@@ -83,7 +91,7 @@ RetryStart:
If IsMouseDown Then
RaiseEvent Click(sender, e)
If e.Handled Then Exit Sub
- Log("[Control] 按下 CurseForge 工程列表项:" & LabTitle.Text)
+ Log("[Control] 按下资源工程列表项:" & LabTitle.Text)
End If
End Sub
@@ -172,10 +180,10 @@ RetryStart:
AaScaleTransform(RectBack, -0.196, 1,,, True)
})
End If
- AniStart(Ani, "CfItem Color " & Uuid)
+ AniStart(Ani, "CompItem Color " & Uuid)
Else
'无动画
- AniStop("CfItem Color " & Uuid)
+ AniStop("CompItem Color " & Uuid)
If _RectBack IsNot Nothing Then RectBack.Opacity = 0
End If
End Sub
diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
index a704fb4..3b27ac5 100644
--- a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
+++ b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
' 方法是按如下所示使用“*”
-
-
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
index 69746db..8d3bb4b 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
@@ -690,7 +690,7 @@ Public Module ModDownloadLib
.Title = Entry.NameDisplay, .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry, .PaddingRight = 60,
.Info = If(Entry.IsPreview, "测试版", "正式版") &
If(Entry.ReleaseTime = "", "", ",发布于 " & Entry.ReleaseTime) &
- If(Entry.RequiredForgeVersion = "", "", ",推荐 Forge 版本:" & Entry.RequiredForgeVersion),
+ If(Entry.RequiredForgeVersion Is Nothing, ",不兼容 Forge", If(Entry.RequiredForgeVersion = "", "", ",推荐 Forge 版本:" & Entry.RequiredForgeVersion)),
.Logo = "pack://application:,,,/images/Blocks/GrassPath.png"
}
AddHandler NewItem.Click, OnClick
@@ -1730,22 +1730,22 @@ Public Module ModDownloadLib
'结束
Return NewItem
End Function
- Public Function FabricApiDownloadListItem(Entry As DlCfFile, OnClick As MyListItem.ClickEventHandler) As MyListItem
+ Public Function FabricApiDownloadListItem(Entry As CompFile, OnClick As MyListItem.ClickEventHandler) As MyListItem
'建立控件
Dim NewItem As New MyListItem With {
.Title = Entry.DisplayName.Split("]")(1).Replace("Fabric API ", "").Replace(" build ", ".").Split("+").First.Trim, .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry, .PaddingRight = 60,
- .Info = Entry.ReleaseTypeString & ",发布于 " & Entry.Date.ToString("yyyy/MM/dd HH:mm"),
+ .Info = Entry.StatusDescription & ",发布于 " & Entry.ReleaseDate.ToString("yyyy/MM/dd HH:mm"),
.Logo = "pack://application:,,,/images/Blocks/Fabric.png"
}
AddHandler NewItem.Click, OnClick
'结束
Return NewItem
End Function
- Public Function OptiFabricDownloadListItem(Entry As DlCfFile, OnClick As MyListItem.ClickEventHandler) As MyListItem
+ Public Function OptiFabricDownloadListItem(Entry As CompFile, OnClick As MyListItem.ClickEventHandler) As MyListItem
'建立控件
Dim NewItem As New MyListItem With {
.Title = Entry.DisplayName.ToLower.Replace("optifabric-", "").Replace(".jar", "").Trim.TrimStart("v"), .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry, .PaddingRight = 60,
- .Info = Entry.ReleaseTypeString & ",发布于 " & Entry.Date.ToString("yyyy/MM/dd HH:mm"),
+ .Info = Entry.StatusDescription & ",发布于 " & Entry.ReleaseDate.ToString("yyyy/MM/dd HH:mm"),
.Logo = "pack://application:,,,/images/Blocks/OptiFabric.png"
}
AddHandler NewItem.Click, OnClick
@@ -1804,12 +1804,12 @@ Public Module ModDownloadLib
'''
''' 欲下载的 Fabric API 信息。
'''
- Public FabricApi As DlCfFile = Nothing
+ Public FabricApi As CompFile = Nothing
'''
''' 欲下载的 OptiFabric 信息。
'''
- Public OptiFabric As DlCfFile = Nothing
+ Public OptiFabric As CompFile = Nothing
'''
''' 欲下载的 LiteLoader 详细信息。
@@ -1962,11 +1962,11 @@ Public Module ModDownloadLib
Dim LoaderList As New List(Of LoaderBase)
'Fabric API
If Request.FabricApi IsNot Nothing Then
- LoaderList.Add(New LoaderDownload("下载 Fabric API", New List(Of NetFile) From {Request.FabricApi.GetDownloadFile(New McVersion(OutputFolder).GetPathIndie(True) & "mods\", False)}) With {.ProgressWeight = 3, .Block = False})
+ LoaderList.Add(New LoaderDownload("下载 Fabric API", New List(Of NetFile) From {Request.FabricApi.ToNetFile(New McVersion(OutputFolder).GetPathIndie(True) & "mods\")}) With {.ProgressWeight = 3, .Block = False})
End If
'OptiFabric
If Request.OptiFabric IsNot Nothing Then
- LoaderList.Add(New LoaderDownload("下载 OptiFabric", New List(Of NetFile) From {Request.OptiFabric.GetDownloadFile(New McVersion(OutputFolder).GetPathIndie(True) & "mods\", False)}) With {.ProgressWeight = 3, .Block = False})
+ LoaderList.Add(New LoaderDownload("下载 OptiFabric", New List(Of NetFile) From {Request.OptiFabric.ToNetFile(New McVersion(OutputFolder).GetPathIndie(True) & "mods\")}) With {.ProgressWeight = 3, .Block = False})
End If
'原版
Dim ClientLoader = New LoaderCombo(Of String)("下载原版 " & Request.MinecraftName, McDownloadClientLoader(Request.MinecraftName, Request.MinecraftJson, Request.TargetVersionName)) With {.Show = False, .ProgressWeight = 39, .Block = Request.ForgeVersion Is Nothing AndAlso Request.OptiFineEntry Is Nothing AndAlso Request.FabricVersion Is Nothing AndAlso Request.LiteLoaderEntry Is Nothing}
@@ -2112,7 +2112,7 @@ Public Module ModDownloadLib
SplitArguments.Add(RawArguments(i))
End If
Next
- Dim RealArguments As String = Join(ArrayNoDouble(SplitArguments), " ")
+ Dim RealArguments As String = Join(SplitArguments.Distinct.ToList, " ")
'合并
OutputJson = MinecraftJson
If HasOptiFine Then
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCfDetail.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml
similarity index 84%
rename from Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCfDetail.xaml
rename to Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml
index 8b00dae..cc34e4a 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCfDetail.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml
@@ -2,7 +2,7 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PCL" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d" x:Class="PageDownloadCfDetail"
+ mc:Ignorable="d" x:Class="PageDownloadCompDetail"
d:DesignWidth="778.571" d:DesignHeight="90.857">
@@ -14,9 +14,9 @@
-
-
-
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCfDetail.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
similarity index 62%
rename from Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCfDetail.xaml.vb
rename to Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
index 9429dd0..1eb7373 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCfDetail.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
@@ -1,25 +1,25 @@
-Public Class PageDownloadCfDetail
- Private CfItem As MyCfItem = Nothing
- Private Project As DlCfProject
+Public Class PageDownloadCompDetail
+ Private CompItem As MyCompItem = Nothing
+ Private Project As CompProject
#Region "加载器"
+ Private CompFileLoader As New LoaderTask(Of Integer, List(Of CompFile))(
+ "Comp File", Sub(Task As LoaderTask(Of Integer, List(Of CompFile))) Task.Output = CompFilesGet(Project.Id, Project.FromCurseForge))
+
'初始化加载器信息
- Private Sub PageDownloadCfDetail_Inited(sender As Object, e As EventArgs) Handles Me.Initialized
+ Private Sub PageDownloadCompDetail_Inited(sender As Object, e As EventArgs) Handles Me.Initialized
Project = FrmMain.PageCurrent.Additional
- PageLoaderInit(Load, PanLoad, PanMain, CardIntro, DlCfFileLoader, AddressOf Load_OnFinish, AddressOf LoaderInput)
+ PageLoaderInit(Load, PanLoad, PanMain, CardIntro, CompFileLoader, AddressOf Load_OnFinish)
End Sub
- Private Function LoaderInput() As KeyValuePair(Of Integer, Boolean)
- Return New KeyValuePair(Of Integer, Boolean)(Project.Id, Project.IsModPack)
- End Function
'自动重试
Private Sub Load_State(sender As Object, state As MyLoading.MyLoadingState, oldState As MyLoading.MyLoadingState) Handles Load.StateChanged
- Select Case DlCfFileLoader.State
+ Select Case CompFileLoader.State
Case LoadState.Failed
Dim ErrorMessage As String = ""
- If DlCfFileLoader.Error IsNot Nothing Then ErrorMessage = DlCfFileLoader.Error.Message
+ If CompFileLoader.Error IsNot Nothing Then ErrorMessage = CompFileLoader.Error.Message
If ErrorMessage.Contains("不是有效的 Json 文件") Then
- Log("[Download] 下载的 Mod 列表 Json 文件损坏,已自动重试", LogLevel.Debug)
+ Log("[Comp] 下载的文件 Json 列表损坏,已自动重试", LogLevel.Debug)
PageLoaderRestart()
End If
End Select
@@ -42,38 +42,42 @@
'初始化字典,并将当前版本排在最上面
Dim TopVersion As String
- If Project.IsModPack Then
- TopVersion = If(PageDownloadPack.Loader.Input.GameVersion, "")
- Else
- TopVersion = If(PageDownloadMod.Loader.Input.GameVersion, "")
- End If
- Dim Dict As New SortedDictionary(Of String, List(Of DlCfFile))(New VersionSorterWithSelect(TopVersion))
- 'PCL#8826 汇报了奇怪的这个 Try 块里出现 NPE 的问题,但实在找不到,就瞎加点检测
+ Select Case Project.Type
+ Case CompType.Mod
+ TopVersion = If(PageDownloadMod.Loader.Input.GameVersion, "")
+ Case CompType.ModPack
+ TopVersion = If(PageDownloadPack.Loader.Input.GameVersion, "")
+ Case Else 'CompType.ResourcePack
+ 'FUTURE: Res
+ TopVersion = Nothing 'If(PageDownloadResource.Loader.Input.GameVersion, "")
+ End Select
+ Dim Dict As New SortedDictionary(Of String, List(Of CompFile))(New VersionSorterWithSelect(TopVersion))
+ '#8826 汇报了奇怪的这个 Try 块里出现 NPE 的问题,但实在找不到,就瞎加点检测
Try
- Dict.Add("未知版本", New List(Of DlCfFile))
- If DlCfFileLoader.Output Is Nothing Then
- Log("[Download] 列表加载输出为 Nothing,请反馈此问题", LogLevel.Feedback)
+ Dict.Add("未知版本", New List(Of CompFile))
+ If CompFileLoader.Output Is Nothing Then
+ Log("[Comp] 列表加载输出为 Nothing,请反馈此问题", LogLevel.Feedback)
Exit Try
End If
- For Each Version As DlCfFile In DlCfFileLoader.Output
+ For Each Version As CompFile In CompFileLoader.Output
If Version Is Nothing Then
- Log("[Download] 列表中的一个版本为 Nothing,请反馈此问题", LogLevel.Feedback)
+ Log("[Comp] 列表中的一个版本为 Nothing,请反馈此问题", LogLevel.Feedback)
Continue For
End If
- If Version.GameVersion Is Nothing Then
- Log("[Download] 列表中的一个版本没有任何适配的游戏版本,返回为 Nothing,请反馈此问题", LogLevel.Feedback)
- Continue For
- End If
- For Each GameVersion In Version.GameVersion
+ For Each GameVersion In Version.GameVersions
'决定添加到哪个版本
Dim TargetVersion As String
- If GameVersion Is Nothing OrElse GameVersion.Split(".").Count < 2 Then
+ If GameVersion Is Nothing Then
TargetVersion = "未知版本"
- Else
+ ElseIf GameVersion.Contains("w") Then
+ TargetVersion = "快照版本"
+ ElseIf GameVersion.Split(".").Count >= 2 Then
TargetVersion = GameVersion
+ Else
+ TargetVersion = "未知版本"
End If
'实际进行添加
- If Not Dict.ContainsKey(TargetVersion) Then Dict.Add(TargetVersion, New List(Of DlCfFile))
+ If Not Dict.ContainsKey(TargetVersion) Then Dict.Add(TargetVersion, New List(Of CompFile))
If Not Dict(TargetVersion).Contains(Version) Then Dict(TargetVersion).Add(Version)
Next
Next
@@ -86,17 +90,17 @@
'清空当前
PanMain.Children.Clear()
'转化为 UI
- For Each Pair As KeyValuePair(Of String, List(Of DlCfFile)) In Dict
+ For Each Pair As KeyValuePair(Of String, List(Of CompFile)) In Dict
If Pair.Value.Count = 0 Then Continue For
'增加卡片
- Dim NewCard As New MyCard With {.Title = Pair.Key, .Margin = New Thickness(0, 0, 0, 15), .SwapType = If(Project.IsModPack, 9, 8)}
+ Dim NewCard As New MyCard With {.Title = Pair.Key, .Margin = New Thickness(0, 0, 0, 15), .SwapType = If(Project.Type = CompType.ModPack, 9, 8)} 'FUTURE: Res
Dim NewStack As New StackPanel With {.Margin = New Thickness(20, MyCard.SwapedHeight, 18, 0), .VerticalAlignment = VerticalAlignment.Top, .RenderTransform = New TranslateTransform(0, 0), .Tag = Pair.Value}
NewCard.Children.Add(NewStack)
NewCard.SwapControl = NewStack
PanMain.Children.Add(NewCard)
'确定卡片是否展开
If Pair.Key = TopVersion Then
- MyCard.StackInstall(NewStack, If(Project.IsModPack, 9, 8), Pair.Key)
+ MyCard.StackInstall(NewStack, If(Project.Type = CompType.ModPack, 9, 8), Pair.Key) 'FUTURE: Res
Else
NewCard.IsSwaped = True
End If
@@ -133,14 +137,15 @@
End If
'放置当前工程
- If CfItem IsNot Nothing Then PanIntro.Children.Remove(CfItem)
- CfItem = Project.ToCfItem(True, True)
- CfItem.Margin = New Thickness(-7, -7, 0, 8)
- PanIntro.Children.Insert(0, CfItem)
+ If CompItem IsNot Nothing Then PanIntro.Children.Remove(CompItem)
+ CompItem = Project.ToCompItem(True, True)
+ CompItem.Margin = New Thickness(-7, -7, 0, 8)
+ PanIntro.Children.Insert(0, CompItem)
'决定按钮显示
+ BtnIntroWeb.Text = If(Project.FromCurseForge, "转到 CurseForge", "转到 Modrinth")
BtnIntroWiki.Visibility = If(Project.WikiId = 0, Visibility.Collapsed, Visibility.Visible)
- BtnIntroMCBBS.Visibility = If(Project.MCBBS Is Nothing, Visibility.Collapsed, Visibility.Visible)
+ BtnIntroMCBBS.Visibility = If(Project.MCBBS = 0, Visibility.Collapsed, Visibility.Visible)
AniControlEnabled -= 1
End Sub
@@ -150,11 +155,11 @@
Try
'获取基本信息
- Dim File As DlCfFile = sender.Tag
- Dim LoaderName As String = "CurseForge 整合包下载:" & Project.ChineseName & " "
+ Dim File As CompFile = sender.Tag
+ Dim LoaderName As String = $"{If(Project.FromCurseForge, "CurseForge", "Modrinth")} 整合包下载:{Project.TranslatedName} "
'获取版本名
- Dim PackName As String = Project.ChineseName.Replace(".zip", "").Replace(".rar", "").Replace("\", "\").Replace("/", "/").Replace("|", "|").Replace(":", ":").Replace("<", "<").Replace(">", ">").Replace("*", "*").Replace("?", "?").Replace("""", "").Replace(": ", ":")
+ Dim PackName As String = Project.TranslatedName.Replace(".zip", "").Replace(".rar", "").Replace(".mrpack", "").Replace("\", "\").Replace("/", "/").Replace("|", "|").Replace(":", ":").Replace("<", "<").Replace(">", ">").Replace("*", "*").Replace("?", "?").Replace("""", "").Replace(": ", ":")
Dim Validate As New ValidateFolderName(PathMcFolder & "versions")
If Validate.Validate(PackName) <> "" Then PackName = ""
Dim VersionName As String = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate})
@@ -162,15 +167,15 @@
'构造步骤加载器
Dim Loaders As New List(Of LoaderBase)
- Dim Target As String = PathMcFolder & "versions\" & VersionName & "\原始整合包.zip"
- Dim LogoFileAddress As String = PathTemp & "CFLogo\" & GetHash(CfItem.Logo) & ".png"
- Loaders.Add(New LoaderDownload("下载整合包文件", New List(Of NetFile) From {File.GetDownloadFile(Target, True)}) With {.ProgressWeight = 10, .Block = True})
+ Dim Target As String = $"{PathMcFolder}versions\{VersionName}\原始整合包.{If(Project.FromCurseForge, "zip", "mrpack")}"
+ Dim LogoFileAddress As String = PathTemp & "CompLogo\" & GetHash(CompItem.Logo) & ".png"
+ Loaders.Add(New LoaderDownload("下载整合包文件", New List(Of NetFile) From {File.ToNetFile(Target)}) With {.ProgressWeight = 10, .Block = True})
Loaders.Add(New LoaderTask(Of Integer, Integer)("准备安装整合包",
- Sub()
- If Not ModpackInstall(Target, VersionName, Logo:=If(IO.File.Exists(LogoFileAddress), LogoFileAddress, Nothing)) Then
- Throw New Exception("整合包安装出现异常!")
- End If
- End Sub) With {.ProgressWeight = 0.1})
+ Sub()
+ If Not ModpackInstall(Target, VersionName, Logo:=If(IO.File.Exists(LogoFileAddress), LogoFileAddress, Nothing)) Then
+ Throw New Exception("整合包安装出现异常!")
+ End If
+ End Sub) With {.ProgressWeight = 0.1})
'启动
Dim Loader As New LoaderCombo(Of String)(LoaderName, Loaders) With {.OnStateChanged = Sub(MyLoader)
@@ -190,60 +195,54 @@
FrmMain.BtnExtraDownload.Ribble()
Catch ex As Exception
- Log(ex, "下载 CurseForge 整合包失败", LogLevel.Feedback)
+ Log(ex, "下载资源整合包失败", LogLevel.Feedback)
End Try
End Sub
'Mod 下载;整合包另存为
Public Shared CachedFolder As String = Nothing '仅在本次缓存的下载文件夹
Public Sub Save_Click(sender As Object, e As EventArgs)
- Dim File As DlCfFile = If(TypeOf sender Is MyListItem, sender, sender.Parent).Tag
+ Dim File As CompFile = If(TypeOf sender Is MyListItem, sender, sender.Parent).Tag
RunInNewThread(
Sub()
Try
- Dim Desc As String = If(Project.IsModPack, "整合包", "Mod ")
+ Dim Desc As String = If(Project.Type = CompType.ModPack, "整合包", If(Project.Type = CompType.Mod, "Mod ", "资源包"))
'确认默认保存位置
Dim DefaultFolder As String = Nothing
- If Not Project.IsModPack Then
+ If Project.Type = CompType.Mod Then
'获取 Mod 所需的加载器种类
Dim AllowForge As Boolean? = Nothing, AllowFabric As Boolean? = Nothing
If File.ModLoaders.Count > 0 Then '从文件中获取
- AllowForge = False : AllowFabric = False
- For Each LoaderType In File.ModLoaders
- If LoaderType = "Forge" Then AllowForge = True
- If LoaderType = "Fabric" Then AllowFabric = True
- Next
+ AllowForge = File.ModLoaders.Contains(CompModLoaderType.Forge)
+ AllowFabric = File.ModLoaders.Contains(CompModLoaderType.Fabric)
ElseIf Project.ModLoaders.Count > 0 Then '从工程中获取
- AllowForge = False : AllowFabric = False
- For Each LoaderType In Project.ModLoaders
- If LoaderType = "Forge" Then AllowForge = True
- If LoaderType = "Fabric" Then AllowFabric = True
- Next
+ AllowForge = Project.ModLoaders.Contains(CompModLoaderType.Forge)
+ AllowFabric = Project.ModLoaders.Contains(CompModLoaderType.Fabric)
End If
If AllowForge IsNot Nothing AndAlso Not AllowForge AndAlso
AllowFabric IsNot Nothing AndAlso Not AllowFabric Then
AllowForge = Nothing : AllowFabric = Nothing
End If
- Log("[Download] 允许 Forge:" & If(AllowForge, "未知") & ",允许 Fabric:" & If(AllowFabric, "未知"))
+ Log("[Comp] 允许 Forge:" & If(AllowForge, "未知") & ",允许 Fabric:" & If(AllowFabric, "未知"))
'判断某个版本是否符合要求
Dim IsVersionSuitable As Func(Of McVersion, Boolean) =
- Function(Version)
- If Not Version.IsLoaded Then Version.Load()
- If Not Version.Modable Then Return False
- If File.GameVersion.Any(Function(v) v.Contains(".")) AndAlso
- Not File.GameVersion.Any(Function(v) v.Contains(".") AndAlso v.Split(".")(1) = Version.Version.McCodeMain.ToString) Then Return False
- If AllowForge Is Nothing OrElse AllowFabric Is Nothing Then Return True
- If AllowForge AndAlso Version.Version.HasForge Then Return True
- If AllowFabric AndAlso Version.Version.HasFabric Then Return True
- Return False
- End Function
+ Function(Version)
+ If Not Version.IsLoaded Then Version.Load()
+ If Not Version.Modable Then Return False
+ If File.GameVersions.Any(Function(v) v.Contains(".")) AndAlso
+ Not File.GameVersions.Any(Function(v) v.Contains(".") AndAlso v.Split(".")(1) = Version.Version.McCodeMain.ToString) Then Return False
+ If AllowForge Is Nothing OrElse AllowFabric Is Nothing Then Return True
+ If AllowForge AndAlso Version.Version.HasForge Then Return True
+ If AllowFabric AndAlso Version.Version.HasFabric Then Return True
+ Return False
+ End Function
'获取 Mod 默认下载位置
If CachedFolder IsNot Nothing Then
DefaultFolder = CachedFolder
- Log("[Download] 使用上次下载时的文件夹作为默认下载位置")
+ Log("[Comp] 使用上次下载时的文件夹作为默认下载位置")
ElseIf McVersionCurrent IsNot Nothing AndAlso IsVersionSuitable(McVersionCurrent) Then
DefaultFolder = McVersionCurrent.PathIndie & "mods\"
Directory.CreateDirectory(DefaultFolder)
- Log("[Download] 使用当前版本的 mods 文件夹作为默认下载位置(" & McVersionCurrent.Name & ")")
+ Log("[Comp] 使用当前版本的 mods 文件夹作为默认下载位置(" & McVersionCurrent.Name & ")")
Else
Dim NeedLoad As Boolean = McVersionListLoader.State <> LoadState.Finished
If NeedLoad Then
@@ -259,7 +258,7 @@
If NeedLoad Then
Hint("当前 MC 文件夹中没有找到适合这个 Mod 的版本!")
Else
- Log("[Download] 由于当前版本不兼容,使用当前的 MC 文件夹作为默认下载位置")
+ Log("[Comp] 由于当前版本不兼容,使用当前的 MC 文件夹作为默认下载位置")
End If
Else '选择 Mod 数量最多的版本
Dim SelectedVersion = SuitableVersions.OrderBy(Function(v)
@@ -268,13 +267,13 @@
End Function).LastOrDefault()
DefaultFolder = SelectedVersion.PathIndie & "mods\"
Directory.CreateDirectory(DefaultFolder)
- Log("[Download] 使用适合的游戏版本作为默认下载位置(" & SelectedVersion.Name & ")")
+ Log("[Comp] 使用适合的游戏版本作为默认下载位置(" & SelectedVersion.Name & ")")
End If
End If
End If
'获取基本信息
- Dim ChineseName As String = If(Project.ChineseName = Project.Name, "",
- Project.ChineseName.Replace(" (", "Å").Split("Å").First.Replace("\", "\").Replace("/", "/").Replace("|", "|").Replace(":", ":").Replace("<", "<").Replace(">", ">").Replace("*", "*").Replace("?", "?").Replace("""", "").Replace(": ", ":"))
+ Dim ChineseName As String = If(Project.TranslatedName = Project.RawName, "",
+ Project.TranslatedName.Replace(" (", "Å").Split("Å").First.Replace("\", "\").Replace("/", "/").Replace("|", "|").Replace(":", ":").Replace("<", "<").Replace(">", ">").Replace("*", "*").Replace("?", "?").Replace("""", "").Replace(": ", ":"))
Dim FileName As String
Select Case Setup.Get("ToolDownloadTranslate")
Case 0
@@ -290,17 +289,17 @@
Sub()
'弹窗要求选择保存位置
Dim Target As String
- If File.FileName.EndsWith(".litemod") Then
- Target = SelectAs("选择保存位置", FileName, Desc & "文件|" & If(Project.IsModPack, "*.zip", "*.litemod"), DefaultFolder)
- Else
- Target = SelectAs("选择保存位置", FileName, Desc & "文件|" & If(Project.IsModPack, "*.zip", "*.jar"), DefaultFolder)
- End If
+ Target = SelectAs("选择保存位置", FileName,
+ Desc & "文件|" &
+ If(Project.Type = CompType.Mod,
+ If(File.FileName.EndsWith(".litemod"), "*.litemod", "*.jar"),
+ If(File.FileName.EndsWith(".mrpack"), "*.mrpack", "*.zip")), DefaultFolder)
If Not Target.Contains("\") Then Exit Sub
'构造步骤加载器
Dim LoaderName As String = Desc & "下载:" & File.DisplayName & " "
- If Target <> DefaultFolder AndAlso Not Project.IsModPack Then CachedFolder = GetPathFromFullPath(Target)
+ If Target <> DefaultFolder AndAlso Project.Type = CompType.Mod Then CachedFolder = GetPathFromFullPath(Target)
Dim Loaders As New List(Of LoaderBase)
- Loaders.Add(New LoaderDownload("下载文件", New List(Of NetFile) From {File.GetDownloadFile(Target, True)}) With {.ProgressWeight = 6, .Block = True})
+ Loaders.Add(New LoaderDownload("下载文件", New List(Of NetFile) From {File.ToNetFile(Target)}) With {.ProgressWeight = 6, .Block = True})
'启动
Dim Loader As New LoaderCombo(Of Integer)(LoaderName, Loaders) With {.OnStateChanged = AddressOf DownloadStateSave}
Loader.Start(1)
@@ -309,12 +308,12 @@
FrmMain.BtnExtraDownload.Ribble()
End Sub)
Catch ex As Exception
- Log(ex, "保存 CurseForge 文件失败", LogLevel.Feedback)
+ Log(ex, "保存资源文件失败", LogLevel.Feedback)
End Try
- End Sub, "Download CFDetail Save")
+ End Sub, "Download CompDetail Save")
End Sub
- Private Sub BtnIntroCf_Click(sender As Object, e As EventArgs) Handles BtnIntroCf.Click
+ Private Sub BtnIntroWeb_Click(sender As Object, e As EventArgs) Handles BtnIntroWeb.Click
OpenWebsite(Project.Website)
End Sub
Private Sub BtnIntroWiki_Click(sender As Object, e As EventArgs) Handles BtnIntroWiki.Click
@@ -324,7 +323,7 @@
OpenWebsite("https://www.mcbbs.net/thread-" & Project.MCBBS & "-1-1.html")
End Sub
Private Sub BtnIntroCopy_Click(sender As Object, e As EventArgs) Handles BtnIntroCopy.Click
- ClipboardSet(CfItem.LabTitle.Text)
+ ClipboardSet(CompItem.LabTitle.Text)
End Sub
End Class
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb
index 99b1ae3..f95588b 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb
@@ -232,7 +232,7 @@
End Sub
'FabricApi
- Private SelectedFabricApi As DlCfFile = Nothing
+ Private SelectedFabricApi As CompFile = Nothing
Private Sub SetFabricApiInfoShow(IsShow As String)
If PanFabricApiInfo.Tag = IsShow Then Exit Sub
PanFabricApiInfo.Tag = IsShow
@@ -252,7 +252,7 @@
End Sub
'OptiFabric
- Private SelectedOptiFabric As DlCfFile = Nothing
+ Private SelectedOptiFabric As CompFile = Nothing
Private Sub SetOptiFabricInfoShow(IsShow As String)
If PanOptiFabricInfo.Tag = IsShow Then Exit Sub
PanOptiFabricInfo.Tag = IsShow
@@ -591,18 +591,23 @@
End If
'检查最低 Forge 版本
Dim MinimalForgeVersion As String = "9999.9999"
+ Dim NotSuitForForge As Boolean = False
For Each OptiFineVersion As DlOptiFineListEntry In DlOptiFineListLoader.Output.Value
If Not OptiFineVersion.NameDisplay.StartsWith(SelectedMinecraftId & " ") Then Continue For '不是同一个大版本
- If SelectedForge Is Nothing OrElse IsOptiFineSuitForForge(OptiFineVersion, SelectedForge) Then
- Return Nothing
+ If SelectedForge Is Nothing Then Return Nothing '该版本可用
+ If IsOptiFineSuitForForge(OptiFineVersion, SelectedForge) Then
+ Return Nothing '该版本可用
Else
- '设置用于显示的最低 Forge 版本
- MinimalForgeVersion = If(VersionSortBoolean(MinimalForgeVersion, OptiFineVersion.RequiredForgeVersion),
- OptiFineVersion.RequiredForgeVersion, MinimalForgeVersion)
+ NotSuitForForge = True
+ If OptiFineVersion.RequiredForgeVersion IsNot Nothing Then
+ '设置用于显示的最低允许的 Forge 版本
+ MinimalForgeVersion = If(VersionSortBoolean(MinimalForgeVersion, OptiFineVersion.RequiredForgeVersion),
+ OptiFineVersion.RequiredForgeVersion, MinimalForgeVersion)
+ End If
End If
Next
If MinimalForgeVersion = "9999.9999" Then
- Return "没有可用版本"
+ Return If(NotSuitForForge, "与 Forge 不兼容", "没有可用版本")
Else
Return "需要 Forge " & If(MinimalForgeVersion.Contains("."), "", "#") & MinimalForgeVersion & " 或更高版本"
End If
@@ -611,6 +616,7 @@
'检查某个 OptiFine 是否与某个 Forge 兼容(最低 Forge 版本是否达到需求)
Private Function IsOptiFineSuitForForge(OptiFine As DlOptiFineListEntry, Forge As DlForgeVersionEntry)
If Forge.Inherit <> OptiFine.Inherit Then Return False '不是同一个大版本
+ If OptiFine.RequiredForgeVersion Is Nothing Then Return False '不兼容 Forge
Return (OptiFine.RequiredForgeVersion.Contains(".") AndAlso 'XX.X.XXX
VersionSortInteger(Forge.Version, OptiFine.RequiredForgeVersion) >= 0) OrElse
(Not OptiFine.RequiredForgeVersion.Contains(".") AndAlso '#XXXX
@@ -749,13 +755,21 @@
End If
End If
If Loader.State <> LoadState.Finished Then Return "获取版本列表失败:未知错误,状态为 " & GetStringFromEnum(Loader.State)
+ Dim NotSuitForOptiFine As Boolean = False
For Each Version In Loader.Output
If Version.Category = "universal" OrElse Version.Category = "client" Then Continue For '跳过无法自动安装的版本
If SelectedFabric IsNot Nothing Then Return "与 Fabric 不兼容"
- If SelectedOptiFine IsNot Nothing AndAlso VersionSortInteger(SelectedMinecraftId, "1.13") >= 0 AndAlso VersionSortInteger("1.14.3", SelectedMinecraftId) >= 0 Then Return "与 OptiFine 不兼容"
+ If SelectedOptiFine IsNot Nothing AndAlso
+ VersionSortInteger(SelectedMinecraftId, "1.13") >= 0 AndAlso VersionSortInteger("1.14.3", SelectedMinecraftId) >= 0 Then
+ Return "与 OptiFine 不兼容" '1.13 ~ 1.14.3 OptiFine 检查
+ End If
+ If SelectedOptiFine IsNot Nothing AndAlso Not IsOptiFineSuitForForge(SelectedOptiFine, Version) Then
+ NotSuitForOptiFine = True '与 OptiFine 不兼容
+ Continue For
+ End If
Return Nothing
Next
- Return "该版本不支持自动安装"
+ Return If(NotSuitForOptiFine, "与 OptiFine 不兼容", "该版本不支持自动安装")
End Function
'限制展开
@@ -772,18 +786,19 @@
Dim Loader As LoaderTask(Of String, List(Of DlForgeVersionEntry)) = LoadForge.State
If SelectedMinecraftId <> Loader.Input Then Exit Sub
If Loader.State <> LoadState.Finished Then Exit Sub
- '可视化
+ '获取要显示的版本
Dim Versions As New List(Of DlForgeVersionEntry)
Versions.AddRange(Loader.Output) '复制数组,以免 Output 在实例化后变空
If Loader.Output.Count = 0 Then Exit Sub
PanForge.Children.Clear()
- Versions = Sort(Versions, Function(Left As DlForgeVersionEntry, Right As DlForgeVersionEntry) As Boolean
- Return New Version(Left.Version) > New Version(Right.Version)
- End Function)
+ Versions = Sort(Versions, Function(a, b) New Version(a.Version) > New Version(b.Version)).
+ Where(Function(v)
+ If v.Category = "universal" OrElse v.Category = "client" Then Return False '跳过无法自动安装的版本
+ If SelectedOptiFine IsNot Nothing AndAlso Not IsOptiFineSuitForForge(SelectedOptiFine, v) Then Return False
+ Return True
+ End Function).ToList
ForgeDownloadListItemPreload(PanForge, Versions, AddressOf Forge_Selected, False)
For Each Version In Versions
- If Version.Category = "universal" OrElse Version.Category = "client" Then Continue For '跳过无法自动安装的版本
- If SelectedOptiFine IsNot Nothing AndAlso Not IsOptiFineSuitForForge(SelectedOptiFine, Version) Then Continue For
PanForge.Children.Add(ForgeDownloadListItem(Version, AddressOf Forge_Selected, False))
Next
Catch ex As Exception
@@ -941,7 +956,7 @@
If DlFabricApiLoader.State <> LoadState.Finished Then Exit Sub
If SelectedMinecraftId Is Nothing OrElse SelectedFabric Is Nothing Then Exit Sub
'获取版本列表
- Dim Versions As New List(Of DlCfFile)
+ Dim Versions As New List(Of CompFile)
For Each Version In DlFabricApiLoader.Output
If IsSuitableFabricApi(Version.DisplayName, SelectedMinecraftId) Then
If Not Version.DisplayName.StartsWith("[") Then
@@ -953,8 +968,8 @@
Next
If Versions.Count = 0 Then Exit Sub
'排序
- Versions = Sort(Versions, Function(Left As DlCfFile, Right As DlCfFile) As Boolean
- Return Left.Date > Right.Date
+ Versions = Sort(Versions, Function(Left As CompFile, Right As CompFile) As Boolean
+ Return Left.ReleaseDate > Right.ReleaseDate
End Function)
'可视化
PanFabricApi.Children.Clear()
@@ -987,10 +1002,10 @@
'''
''' 从显示名判断该 Mod 是否与某版本适配。
'''
- Private Function IsSuitableOptiFabric(ModFile As DlCfFile, MinecraftVersion As String) As Boolean
+ Private Function IsSuitableOptiFabric(ModFile As CompFile, MinecraftVersion As String) As Boolean
Try
If MinecraftVersion Is Nothing Then Return False
- Return ModFile.GameVersion.Contains(MinecraftVersion)
+ Return ModFile.GameVersions.Contains(MinecraftVersion)
Catch ex As Exception
Log(ex, "判断 OptiFabric 版本适配性出错(" & MinecraftVersion & ")")
Return False
@@ -1026,14 +1041,14 @@
If DlOptiFabricLoader.State <> LoadState.Finished Then Exit Sub
If SelectedMinecraftId Is Nothing OrElse SelectedFabric Is Nothing OrElse SelectedOptiFine Is Nothing Then Exit Sub
'获取版本列表
- Dim Versions As New List(Of DlCfFile)
+ Dim Versions As New List(Of CompFile)
For Each Version In DlOptiFabricLoader.Output
If IsSuitableOptiFabric(Version, SelectedMinecraftId) Then Versions.Add(Version)
Next
If Versions.Count = 0 Then Exit Sub
'排序
- Versions = Sort(Versions, Function(Left As DlCfFile, Right As DlCfFile) As Boolean
- Return Left.Date > Right.Date
+ Versions = Sort(Versions, Function(Left As CompFile, Right As CompFile) As Boolean
+ Return Left.ReleaseDate > Right.ReleaseDate
End Function)
'可视化
PanOptiFabric.Children.Clear()
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml
index 114fc92..dec4df6 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml
@@ -4,7 +4,7 @@
xmlns:local="clr-namespace:PCL" AnimatedControl="{Binding ElementName=PanItem, Mode=OneWay}">
-
+
@@ -59,7 +59,7 @@
-
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.vb
index ebb9116..539be47 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadLeft.xaml.vb
@@ -97,9 +97,11 @@
DlOptiFabricLoader.Start(IsForceRestart:=True)
ItemInstall.Checked = True
Case FormMain.PageSubType.DownloadMod
+ PageDownloadMod.Storage = New CompProjectStorage
If FrmDownloadMod IsNot Nothing Then FrmDownloadMod.PageLoaderRestart()
ItemMod.Checked = True
Case FormMain.PageSubType.DownloadPack
+ PageDownloadPack.Storage = New CompProjectStorage
If FrmDownloadPack IsNot Nothing Then FrmDownloadPack.PageLoaderRestart()
ItemPack.Checked = True
Case FormMain.PageSubType.DownloadClient
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
index bc31c15..7e4f054 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
@@ -26,27 +26,32 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -88,9 +93,21 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
index d163ffb..f7f0657 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
@@ -1,46 +1,61 @@
Public Class PageDownloadMod
- '初始化加载器信息
+ Public Const PageSize = 40
+
+ '加载器信息
+ Public Shared Loader As New LoaderTask(Of CompProjectRequest, Integer)("CompProject Mod", AddressOf CompProjectsGet, AddressOf LoaderInput) With {.ReloadTimeout = 60 * 1000}
+ Public Shared Storage As New CompProjectStorage
+ Public Shared Page As Integer = 0
Private Sub PageDownloadMod_Inited(sender As Object, e As EventArgs) Handles Me.Initialized
- PageLoaderInit(Load, PanLoad, CardProjects, PanAlways, Loader, AddressOf Load_OnFinish, AddressOf LoaderInput)
+ PageLoaderInit(Load, PanLoad, PanContent, PanAlways, Loader, AddressOf Load_OnFinish, AddressOf LoaderInput)
McVersionHighest = Math.Max(McVersionHighest, Integer.Parse(CType(TextSearchVersion.Items(1), MyComboBoxItem).Content.ToString.Split(".")(1)))
End Sub
- Public Shared Loader As New LoaderTask(Of DlCfProjectRequest, DlCfProjectResult)("DlCfProject Mod", AddressOf DlCfProjectSub, AddressOf LoaderInput) With {.ReloadTimeout = 60 * 1000}
- Private Shared Function LoaderInput() As DlCfProjectRequest
+ Private Shared Function LoaderInput() As CompProjectRequest
+ Dim Request As New CompProjectRequest(CompType.Mod, Storage, (Page + 1) * PageSize)
If FrmDownloadMod IsNot Nothing AndAlso FrmDownloadMod.IsLoaded Then
- Return New DlCfProjectRequest With {
- .SearchFilter = FrmDownloadMod.TextSearchName.Text,
- .GameVersion = If(FrmDownloadMod.TextSearchVersion.Text.Contains("."), FrmDownloadMod.TextSearchVersion.Text, Nothing),
- .CategoryId = Val(FrmDownloadMod.ComboSearchTag.SelectedItem.Tag),
- .IsModPack = False,
+ With Request
+ .SearchText = FrmDownloadMod.TextSearchName.Text
+ .GameVersion = If(FrmDownloadMod.TextSearchVersion.Text.Contains("."), FrmDownloadMod.TextSearchVersion.Text, Nothing)
+ .Tag = FrmDownloadMod.ComboSearchTag.SelectedItem.Tag
.ModLoader = Val(FrmDownloadMod.ComboSearchLoader.SelectedItem.Tag)
- } '处理列表加载失败后的点击加载器重试
- Else
- Return New DlCfProjectRequest With {.IsModPack = False}
+ End With
End If
+ Return Request
End Function
+
'结果 UI 化
Private Sub Load_OnFinish()
Try
+ '列表项
PanProjects.Children.Clear()
- If Loader.Input.SearchFilter = "" Then
- CardProjects.Title = "热门 Mod"
- Else
- CardProjects.Title = "搜索结果 (" & Loader.Output.Projects.Count & If(Loader.Output.Projects.Count < Loader.Output.RealCount, "+", "") & ")"
- End If
- For Each Project In Loader.Output.Projects
- PanProjects.Children.Add(Project.ToCfItem(Loader.Input.GameVersion Is Nothing, Loader.Input.ModLoader Is Nothing OrElse Loader.Input.ModLoader = 0, AddressOf ProjectClick))
+ For i = Math.Min(Page * PageSize, Storage.Results.Count - 1) To Math.Min((Page + 1) * PageSize - 1, Storage.Results.Count - 1)
+ PanProjects.Children.Add(
+ Storage.Results(i).ToCompItem(Loader.Input.GameVersion Is Nothing,
+ Loader.Input.ModLoader = CompModLoaderType.Any, AddressOf ProjectClick))
Next
+ '页码
+ CardPages.Visibility = If(Storage.Results.Count > 40 OrElse
+ Storage.CurseForgeOffset < Storage.CurseForgeTotal OrElse Storage.ModrinthOffset < Storage.ModrinthTotal,
+ Visibility.Visible, Visibility.Collapsed)
+ LabPage.Text = Page + 1
+ BtnPageLeft.IsEnabled = Page > 0
+ BtnPageLeft.Opacity = If(BtnPageLeft.IsEnabled, 1, 0.5)
+ BtnPageRight.IsEnabled = Storage.Results.Count > PageSize * (Page + 1) OrElse
+ Storage.CurseForgeOffset < Storage.CurseForgeTotal OrElse Storage.ModrinthOffset < Storage.ModrinthTotal
+ BtnPageRight.Opacity = If(BtnPageRight.IsEnabled, 1, 0.5)
+ '强制返回顶部
+ PanBack.ScrollToTop()
Catch ex As Exception
Log(ex, "可视化 Mod 列表出错", LogLevel.Feedback)
End Try
End Sub
+
'自动重试
Private Sub Load_State(sender As Object, state As MyLoading.MyLoadingState, oldState As MyLoading.MyLoadingState) Handles Load.StateChanged
Select Case Loader.State
Case LoadState.Failed
Dim ErrorMessage As String = ""
- If DlCfFileLoader.Error IsNot Nothing Then ErrorMessage = DlCfFileLoader.Error.Message
+ If Loader.Error IsNot Nothing Then ErrorMessage = Loader.Error.Message
If ErrorMessage.Contains("不是有效的 Json 文件") Then
Log("[Download] 下载的 Mod 列表 Json 文件损坏,已自动重试", LogLevel.Debug)
PageLoaderRestart()
@@ -50,18 +65,43 @@
'进入详情页面
- Public Sub ProjectClick(sender As MyCfItem, e As EventArgs)
- FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CfDetail, .Additional = sender.Tag})
+ Public Sub ProjectClick(sender As MyCompItem, e As EventArgs)
+ FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CompDetail, .Additional = sender.Tag})
End Sub
- '搜索
+ '切换页码
- Private Sub TextSearchName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyUp, TextSearchVersion.KeyUp
- If e.Key = Key.Enter Then StartSearch()
+ Private Sub BtnPageLeft_Click(sender As Object, e As RoutedEventArgs) Handles BtnPageLeft.Click
+ ChangePage(Page - 1)
End Sub
- Private Shared Sub StartSearch() Handles BtnSearchRun.Click
+ Private Sub BtnPageRight_Click(sender As Object, e As RoutedEventArgs) Handles BtnPageRight.Click
+ ChangePage(Page + 1)
+ End Sub
+ Private Sub ChangePage(NewPage As Integer)
+ CardPages.IsEnabled = False
+ Page = NewPage
+ FrmMain.BackToTop()
+ Log($"[Download] Mod 切换到第 {Page + 1} 页")
+ RunInThread(Sub()
+ Thread.Sleep(100) '等待向上滚的动画结束
+ RunInUi(Sub() CardPages.IsEnabled = True)
+ Loader.Start()
+ End Sub)
+ End Sub
+
+#Region "搜索"
+
+ '搜索按钮
+ Private Sub StartNewSearch() Handles BtnSearchRun.Click
+ Page = 0
+ Storage = New CompProjectStorage
Loader.Start()
End Sub
+ Private Sub TextSearchName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyUp, TextSearchVersion.KeyUp
+ If e.Key = Key.Enter Then StartNewSearch()
+ End Sub
+
+ '重置按钮
Private Sub BtnSearchReset_Click(sender As Object, e As EventArgs) Handles BtnSearchReset.Click
TextSearchName.Text = ""
TextSearchVersion.SelectedIndex = 0
@@ -70,6 +110,8 @@
ComboSearchLoader.SelectedIndex = 0
Loader.LastFinishedTime = 0 '要求强制重新开始
End Sub
+
+ '版本选择
Private Sub TextSearchVersion_TextChanged(sender As Object, e As TextChangedEventArgs) Handles TextSearchVersion.TextChanged
If TextSearchVersion.Text = "" Then
ComboSearchLoader.Visibility = Visibility.Collapsed
@@ -81,4 +123,6 @@
End If
End Sub
+#End Region
+
End Class
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
index 670f25d..57618a6 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
@@ -25,24 +25,25 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -81,9 +82,21 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
index af91ed7..8c6cf25 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
@@ -1,45 +1,59 @@
Public Class PageDownloadPack
- '初始化加载器信息
+ Public Const PageSize = 40
+
+ '加载器信息
+ Public Shared Loader As New LoaderTask(Of CompProjectRequest, Integer)("CompProject ModPack", AddressOf CompProjectsGet, AddressOf LoaderInput) With {.ReloadTimeout = 60 * 1000}
+ Public Shared Storage As New CompProjectStorage
+ Public Shared Page As Integer = 0
Private Sub PageDownloadMod_Inited(sender As Object, e As EventArgs) Handles Me.Initialized
- PageLoaderInit(Load, PanLoad, CardProjects, PanAlways, Loader, AddressOf Load_OnFinish, AddressOf LoaderInput)
+ PageLoaderInit(Load, PanLoad, PanContent, PanAlways, Loader, AddressOf Load_OnFinish, AddressOf LoaderInput)
McVersionHighest = Math.Max(McVersionHighest, Integer.Parse(CType(TextSearchVersion.Items(1), MyComboBoxItem).Content.ToString.Split(".")(1)))
End Sub
- Public Shared Loader As New LoaderTask(Of DlCfProjectRequest, DlCfProjectResult)("DlCfProject ModPack", AddressOf DlCfProjectSub, AddressOf LoaderInput) With {.ReloadTimeout = 60 * 1000}
- Private Shared Function LoaderInput() As DlCfProjectRequest
+ Private Shared Function LoaderInput() As CompProjectRequest
+ Dim Request As New CompProjectRequest(CompType.ModPack, Storage, (Page + 1) * PageSize)
If FrmDownloadPack IsNot Nothing AndAlso FrmDownloadPack.IsLoaded Then
- Return New DlCfProjectRequest With {
- .SearchFilter = FrmDownloadPack.TextSearchName.Text,
- .GameVersion = If(FrmDownloadPack.TextSearchVersion.Text.Contains("."), FrmDownloadPack.TextSearchVersion.Text, Nothing),
- .CategoryId = Val(FrmDownloadPack.ComboSearchTag.SelectedItem.Tag),
- .IsModPack = True
- } '处理列表加载失败后的点击加载器重试
- Else
- Return New DlCfProjectRequest With {.IsModPack = True}
+ With Request
+ .SearchText = FrmDownloadPack.TextSearchName.Text
+ .GameVersion = If(FrmDownloadPack.TextSearchVersion.Text.Contains("."), FrmDownloadPack.TextSearchVersion.Text, Nothing)
+ .Tag = FrmDownloadPack.ComboSearchTag.SelectedItem.Tag
+ End With
End If
+ Return Request
End Function
+
'结果 UI 化
Private Sub Load_OnFinish()
Try
+ '列表项
PanProjects.Children.Clear()
- If Loader.Input.SearchFilter = "" Then
- CardProjects.Title = "热门整合包"
- Else
- CardProjects.Title = "搜索结果 (" & Loader.Output.Projects.Count & If(Loader.Output.Projects.Count < Loader.Output.RealCount, "+", "") & ")"
- End If
- For Each Project In Loader.Output.Projects
- PanProjects.Children.Add(Project.ToCfItem(Loader.Input.GameVersion Is Nothing, Loader.Input.ModLoader Is Nothing OrElse Loader.Input.ModLoader = 0, AddressOf ProjectClick))
+ For i = Math.Min(Page * PageSize, Storage.Results.Count - 1) To Math.Min((Page + 1) * PageSize - 1, Storage.Results.Count - 1)
+ PanProjects.Children.Add(
+ Storage.Results(i).ToCompItem(Loader.Input.GameVersion Is Nothing, True, AddressOf ProjectClick))
Next
+ '页码
+ CardPages.Visibility = If(Storage.Results.Count > 40 OrElse
+ Storage.CurseForgeOffset < Storage.CurseForgeTotal OrElse Storage.ModrinthOffset < Storage.ModrinthTotal,
+ Visibility.Visible, Visibility.Collapsed)
+ LabPage.Text = Page + 1
+ BtnPageLeft.IsEnabled = Page > 0
+ BtnPageLeft.Opacity = If(BtnPageLeft.IsEnabled, 1, 0.5)
+ BtnPageRight.IsEnabled = Storage.Results.Count > PageSize * (Page + 1) OrElse
+ Storage.CurseForgeOffset < Storage.CurseForgeTotal OrElse Storage.ModrinthOffset < Storage.ModrinthTotal
+ BtnPageRight.Opacity = If(BtnPageRight.IsEnabled, 1, 0.5)
+ '强制返回顶部
+ PanBack.ScrollToTop()
Catch ex As Exception
Log(ex, "可视化整合包列表出错", LogLevel.Feedback)
End Try
End Sub
+
'自动重试
Private Sub Load_State(sender As Object, state As MyLoading.MyLoadingState, oldState As MyLoading.MyLoadingState) Handles Load.StateChanged
Select Case Loader.State
Case LoadState.Failed
Dim ErrorMessage As String = ""
- If DlCfFileLoader.Error IsNot Nothing Then ErrorMessage = DlCfFileLoader.Error.Message
+ If Loader.Error IsNot Nothing Then ErrorMessage = Loader.Error.Message
If ErrorMessage.Contains("不是有效的 Json 文件") Then
Log("[Download] 下载的整合包列表 Json 文件损坏,已自动重试", LogLevel.Debug)
PageLoaderRestart()
@@ -47,28 +61,49 @@
End Select
End Sub
- Private Sub Load_OnStart()
- PanLoad.Visibility = Visibility.Visible
- AniStart({
- AaOpacity(PanLoad, 1 - PanLoad.Opacity, 150),
- AaOpacity(CardProjects, -CardProjects.Opacity, 150),
- AaCode(Sub()
- CardProjects.Visibility = Visibility.Collapsed
- PanProjects.Children.Clear()
- End Sub,, True)
- }, "FrmDownloadPack Load Switch")
+ '进入详情页面
+
+ Public Sub ProjectClick(sender As MyCompItem, e As EventArgs)
+ FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CompDetail, .Additional = sender.Tag})
End Sub
- Public Sub ProjectClick(sender As MyCfItem, e As EventArgs)
- FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CfDetail, .Additional = sender.Tag})
+ '切换页码
+
+ Private Sub BtnPageLeft_Click(sender As Object, e As RoutedEventArgs) Handles BtnPageLeft.Click
+ ChangePage(Page - 1)
+ End Sub
+ Private Sub BtnPageRight_Click(sender As Object, e As RoutedEventArgs) Handles BtnPageRight.Click
+ ChangePage(Page + 1)
+ End Sub
+ Private Sub ChangePage(NewPage As Integer)
+ CardPages.IsEnabled = False
+ Page = NewPage
+ FrmMain.BackToTop()
+ Log($"[Download] 整合包切换到第 {Page + 1} 页")
+ RunInThread(Sub()
+ Thread.Sleep(100) '等待向上滚的动画结束
+ RunInUi(Sub() CardPages.IsEnabled = True)
+ Loader.Start()
+ End Sub)
End Sub
- Private Sub TextSearchName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyUp, TextSearchVersion.KeyUp
- If e.Key = Key.Enter Then StartSearch()
+ Private Sub BtnSearchInstall_Click(sender As Object, e As EventArgs) Handles BtnSearchInstall.Click
+ ModpackInstall()
End Sub
- Private Shared Sub StartSearch() Handles BtnSearchRun.Click
+
+#Region "搜索"
+
+ '搜索按钮
+ Private Sub StartNewSearch() Handles BtnSearchRun.Click
+ Page = 0
+ Storage = New CompProjectStorage
Loader.Start()
End Sub
+ Private Sub TextSearchName_KeyUp(sender As Object, e As KeyEventArgs) Handles TextSearchName.KeyUp, TextSearchVersion.KeyUp
+ If e.Key = Key.Enter Then StartNewSearch()
+ End Sub
+
+ '重置按钮
Private Sub BtnSearchReset_Click(sender As Object, e As EventArgs) Handles BtnSearchReset.Click
TextSearchName.Text = ""
TextSearchVersion.SelectedIndex = 0
@@ -76,8 +111,7 @@
ComboSearchTag.SelectedIndex = 0
Loader.LastFinishedTime = 0 '要求强制重新开始
End Sub
- Private Sub BtnSearchInstall_Click(sender As Object, e As EventArgs) Handles BtnSearchInstall.Click
- ModpackInstall()
- End Sub
+
+#End Region
End Class
diff --git a/Plain Craft Launcher 2/Pages/PageLink/PageLinkIoi.xaml.vb b/Plain Craft Launcher 2/Pages/PageLink/PageLinkIoi.xaml.vb
index 75663b9..f79feb6 100644
--- a/Plain Craft Launcher 2/Pages/PageLink/PageLinkIoi.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLink/PageLinkIoi.xaml.vb
@@ -347,7 +347,7 @@ StartDownload:
If Content.Contains("'portssub' from ") Then LastPortsId = Content.Split(" ").Last
If Content.Contains("Listening tcp ") Then
If UserList.ContainsKey(LastPortsId) Then
- DictionaryAdd(UserList(LastPortsId).Ports, Content.Split(" ").Last, RegexSeek(Content, "(?<=Listening tcp )[^:]+"))
+ UserList(LastPortsId).Ports(Content.Split(" ").Last) = RegexSeek(Content, "(?<=Listening tcp )[^:]+")
Else
Log("[IOI] 未在列表中的用户出现意料外的连接信息")
NetRequestOnce("http://127.0.0.1:55555/api/link?id=" & LastPortsId & "&password=" & IoiPassword, "DELETE", "", "", 500)
@@ -574,7 +574,7 @@ Done:
Rooms.Add(RoomObject)
Next
RawJson("rooms") = Rooms
- DictionaryAdd(User.PingPending, Unique, Date.Now)
+ User.PingPending(Unique) = Date.Now
End If
User.Send(RawJson)
End Sub
@@ -1179,7 +1179,7 @@ Done:
If Id > IoiId Then
Log("[IOI] 双向连接,应当抛弃当前用户(" & DisplayName & ")")
For Each Pair In UserList(User.Id).Ports.ToList
- DictionaryAdd(User.Ports, Pair.Key, Pair.Value)
+ User.Ports(Pair.Key) = Pair.Value
Next
UserList(Id).Dispose()
Else
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
index d9db609..a7f49d5 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
@@ -417,7 +417,7 @@ PreFin:
If ComboArgumentJava Is Nothing Then Exit Sub
'初始化列表
ComboArgumentJava.Items.Clear()
- ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择适合所选游戏版本的 Java", .Tag = "自动选择"})
+ ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择合适的 Java", .Tag = "自动选择"})
'更新列表
Dim SelectedItem As MyComboBoxItem = Nothing
Dim SelectedBySetup As String = Setup.Get("LaunchArgumentJavaSelect")
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml
index 6244a75..4b72c35 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml
@@ -47,9 +47,9 @@
-
+ ToolTip="安装整合包时,在版本文件夹下保留用于安装的原始整合包压缩包文件" />
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
index 27d1fcb..a2793fa 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
@@ -412,7 +412,7 @@ PreFin:
'初始化列表
ComboArgumentJava.Items.Clear()
ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "使用全局设置", .Tag = "使用全局设置"})
- ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择适合所选游戏版本的 Java", .Tag = "自动选择"})
+ ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择合适的 Java", .Tag = "自动选择"})
'更新列表
Dim SelectedItem As MyComboBoxItem = Nothing
Dim SelectedBySetup As String = Setup.Get("VersionArgumentJavaSelect", Version:=PageVersionLeft.Version)
diff --git a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
index 2febf81..137aabe 100644
--- a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
+++ b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj
@@ -182,6 +182,7 @@
+
@@ -217,8 +218,8 @@
Component
-
- MyCfItem.xaml
+
+ MyCompItem.xaml
PageDownloadMod.xaml
@@ -229,8 +230,8 @@
PageDownloadInstall.xaml
-
- PageDownloadCfDetail.xaml
+
+ PageDownloadCompDetail.xaml
PageDownloadPack.xaml
@@ -459,7 +460,7 @@
FormMain.xaml
Code
-
+
MSBuild:Compile
Designer
@@ -475,7 +476,7 @@
MSBuild:Compile
Designer
-
+
Designer
MSBuild:Compile
diff --git a/Plain Craft Launcher 2/Resources/ModData.txt b/Plain Craft Launcher 2/Resources/ModData.txt
index 20ecb19..57df4f7 100644
--- a/Plain Craft Launcher 2/Resources/ModData.txt
+++ b/Plain Craft Launcher 2/Resources/ModData.txt
@@ -1,8 +1,8 @@
industrial-craft|工业时代2 (Industrial Craft 2)|515771
-
+@redpower2-core|红石力量2 (RedPower2)|71843
buildcraft|建筑 (BuildCraft)|884720
-forestry|林业*|708812
+forestry@|林业*|708812
railcraft|铁路*|603270
@@ -17,7 +17,7 @@ powerconverters-portablejims-fork|能源转换 (PowerConverters)
modular-forcefield-system|模块化力场系统*
-iron-chests|更多箱子*|372723¨iron-chests-for-fabric|更多箱子 (Iron Chests) - 由 cyberanner 制作的 Fabric 版本|372723
+iron-chests-fabric@|更多箱子 (Iron Chests)|372723¨iron-chests|更多箱子*|372723¨iron-chests-for-fabric@cyberanner-ironchest|更多箱子 (Iron Chests) - 由 cyberanner 制作的 Fabric 版本|372723
balkons-weaponmod|更多武器 (Balkon's WeaponMod)
advanced-machines|高级机械 (AdvancedMachines)
advanced-solar-panels|高级太阳能*
@@ -91,7 +91,7 @@ applied-energistics-1|应用能源 (Applied Energistics)|378640
Universal-Electricity|通用电力*|405261
-the-aether|天境*|797941
+the-aether@aether|天境*|797941
assassincraft-assassins-creed-mod|刺客信条 (AssassinCraft)|334358
@@ -156,7 +156,7 @@ minechess|国际象棋 (MineChess)
-
+@factorization|因式分解 (Factorization)
@@ -165,7 +165,7 @@ project-red-base|红石计划 (ProjectRed) - 基础¨project-red-core|红石计
dimensionaldoors|次元门 (Dimensional Doors)|896027
chickenchunks|区块载入器 (ChickenChunks)
-dlt2|动态蓄水槽 (Dynamic Liquid Tanks)
+
webdisplays-remasterd|内置网页浏览器 (WebDisplays)|778743
morph|变身*
@@ -178,27 +178,27 @@ billund-223258|乐高 (Billund)
better-bows|更好弓箭系统 (Better Archery Mod)
mumblelink|Mumble语音链接*
-ender-io|末影接口 (Ender IO)|677063
+ender-io@enderio|末影接口 (Ender IO)|677063
electrodynamics|电动力学*
-mc-1-6-4-solar-apocalypse¨elite-armageddon
-mekanism|通用机械*|654082
+mc-1-6-4-solar-apocalypse
+mekanism@|通用机械*|654082
magic-crusade-rpg-mod|魔法远征:魔法十字军 (Magic Crusade)
invasions|入侵 (Invasion)
mb-battlegear-2|挖矿与砍杀:双持与战备2 (Mine & Blade: Battlegear 2)
-galacticraft-legacy|星系 (GalactiCraft)|802464
+galacticraft-legacy@|星系 (GalactiCraft)|802464
-journeymap|旅行地图 (Journey Map)|612917
+journeymap@|旅行地图 (Journey Map)|612917
-underground-biomes|科学地质*¨undergroundbiomesconstructs|科学地质 (Underground Biomes)
+underground-biomes|科学地质*
fpsplus-lagfixes|FPS优化 (FPS Plus)
ars-magica-2|魔法艺术2*
@@ -221,7 +221,7 @@ opis
openblocks|开放式方块 (OpenBlocks)
-water-power|水力科技*|190676
+
randomcraft-v0-1-0|随机工艺 (RandomCraft)
@@ -253,11 +253,11 @@ bctools|BC扩展:更多工具 (Buildcraft Tools)
additional-buildcraft-objects|更多管道*
foundry|金属工坊*
gravitation-suite|重力装甲*|734193
-redstone-arsenal|红石兵工厂*
+redstone-arsenal|红石兵工厂*¨@redstone-arsenal|红石兵工厂 (Redstone Arsenal)
big-reactors|大型反应堆*|348989
endertanks|末影水槽 (Ender Tanks)
-applied-energistics-2|应用能源2*|798231
+applied-energistics-2@ae2|应用能源2*|798231
hopper-ducts|漏斗管道*
autofish|自动钓鱼*|630098
mrcrayfish-furniture-mod|MrCrayfish 的家具 (MrCrayfish's Furniture Mod)|321693
@@ -329,7 +329,7 @@ gregtech-5-unofficial|格雷科技5 (GregTech 5)|352465
mantle|地幔*
customoregen|自定义矿物生成 (Custom Ore Generation)
littlemaidmobx|女仆 (LittleMaidMob)|367058
-botania|植物魔法* - Forge|722470¨botania-fabric|植物魔法 (Botania) - Fabric|722470
+botania|植物魔法* - Forge|722470¨botania-fabric|植物魔法 (Botania) - Fabric|722470¨@botania|植物魔法 (Botania)|722470
alternate-terrain-generation|交替性地形生成*
gendustry|基因工业*|441078
@@ -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)
@@ -358,7 +358,7 @@ falling-meteors-mod|陨石 (Falling Meteors)
glacia-dimension|冰河时代 (Glacia)
-
+water-power|水力科技*|190676
realtrainmod|真实火车 (RealTrainMod)|781058
applemilktea2|苹果奶茶2 (AppleMilkTea2)|466114
@@ -384,7 +384,7 @@ applecore|苹果核 (AppleCore)|808141
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)
@@ -404,7 +404,7 @@ academycraft|超能力/学园都市 (AcademyCraft)|421967
the-spice-of-life|生活调味料 (The Spice of Life)|722595
-automagy|自动化魔法*
+
storage-drawers|储物抽屉*|798307
wintercraft-gruntpie224|冬天的世界 (Wintercraft)
@@ -422,7 +422,7 @@ multi-page-chest|多页箱子 (Multi-Page Chest)|101511
draconic-evolution|龙之进化/龙之研究*|724610
galacticraft-add-on-more-planets|更多行星 (More Planets)|453885
-thermal-foundation|热力基本*
+thermal-foundation@|热力基本*
ding|界面进入提醒*
@@ -434,13 +434,13 @@ xelitez-frostcraft|冰冻工艺 (FrostCraft)
hardcore-ender-expansion|极限末地生存*|456093
more-fun-quicksand-mod|更多流沙*|449666
fastcraft|快速工艺 (FastCraft)|343542
-forgeautoshutdown-1-12-2
+forgeautoshutdown-1-12-2@forgeautoshutdown
sao-ui|刀剑神域UI (Sword Art Online UI)|473756
extratic|匠魂扩展 (Extra TiC)
dimensional-pockets|四次元口袋 (DimensionalPockets)
-security-craft|安全工艺*|774616
+security-craft@|安全工艺*|774616
buildcraft-additions|建筑扩充*
bedrockium-mod|基岩工艺*
blocksteps
@@ -460,14 +460,14 @@ jei|JEI物品管理器 (Just Enough Items)|1175372
jeiaddons
magneticraft|磁场工艺 (MagnetiCraft)
chromaticraft|缤纷纪元 (ChromatiCraft)
-immersive-engineering|沉浸工程*|450097
+immersive-engineering@immersiveengineering|沉浸工程*|450097
armourers-workshop|时装工坊 (Armourer's Workshop)|382319
slash|命令强化*
et-futurum|把未来带回现实*|459404
cooking-for-blockheads|懒人厨房 (Cooking for Blockheads) - Forge|545680¨cooking-for-blockheads-fabric|懒人厨房 (Cooking for Blockheads) - Fabric|545680
-psi
+psi@
good-nights-sleep|夜眠梦境/晚安的梦境 (Good Night's Sleep)|965322
binnies-mods|宾尼的模组合集 (Binnie's Mods)
baubles|饰品栏*
@@ -509,7 +509,7 @@ abyssalcraft|深渊国度 (AbyssalCraft)|664279
calculator|运算工艺*|440074
sextiarysector2
warpdrive|曲率驱动 (WarpDrive)|713261
-futurepack|飞向未来 (Futurepack Mod)|1102237
+futurepack|飞向未来 (Futurepack Mod)|1102237¨@futurepack|飞向未来 (Futurepack Mod)|1102237
hbms-nuclear-tech-mod|HBM的核科技 (HBM's Nuclear Tech)
agricraft|农业工艺 (AgriCraft)|1315462
arcane-engineering|奥法工程学*
@@ -533,7 +533,7 @@ non-update|不再有更新*
clayium|粘土工业*
better-storage|更好的储存*
davincis-vessels|达芬奇之舟/达芬奇的船*|475292
-bspkrscore|bspkrs核心 (bspkrsCore)|430478¨bspkrscore-updated|bspkrs核心 (bspkrsCore)|430478
+bspkrscore|bspkrs核心 (bspkrsCore)|430478¨bspkrscore-updated|bspkrs核心 (bspkrsCore)
techguns|科技枪*|631578
Iron-Backpacks|特殊背包*
openmodularturrets|开放式炮台 (OpenModularTurrets)
@@ -544,7 +544,7 @@ dragonapi
electricraft|电力工艺 (ElectriCraft)
candycraft|糖果世界 (CandyCraft)|459723
-minefantasy2|我的幻想2 (MineFantasy2)
+
rails-of-war|铁路战争 (Rails of War)
actually-additions|实用拓展*|841281
@@ -562,7 +562,7 @@ eternal-singularity|永恒奇点*
codechicken-lib-1-8
codechicken-core-1-8|鸡块核心 (CodeChickenCore) - 1.8+版本¨codechickencore|鸡块核心 (CodeChickenCore) - 1.8前版本
-
+aobd-singularities
universal-singularities|通用奇点*
academy-monster|超能力怪物*|677849
sonar-core|声呐核心*
@@ -574,12 +574,12 @@ llibrary
-
-
-customthings|自定义物品 (CustomThings)
+projecte|等价交换重制版 (ProjectE)|1109380
+automagy|自动化魔法*
+minefantasy2|我的幻想2 (MineFantasy2)
environmental-tech|环境科技*|644622
magic-cookies|魔法饼干*|710008
@@ -590,14 +590,14 @@ veinminer|连锁采矿/矿脉矿工 (Vein Miner)|387183
another-one-bites-the-dust
mcef-remastered|Minecraft Chromium嵌入式框架 (Minecraft Chromium Embedded Framework)
-mine-mine-no-mi|恶魔果实 (Mine Mine no Mi)|828931
+mine-mine-no-mi@|恶魔果实 (Mine Mine no Mi)|828931
advanced-rocketry|高级火箭*|671760
-vics-modern-warfare-mod|维克的现代战争 (Vic's Modern Warfare Mod)|692842
+vics-modern-warfare-mod|维克的现代战争 (Vic's Modern Warfare Mod)|575936
chance-cubes|机会方块*
gun-customization
-endercore|末影核心 (EnderCore)
+endercore@|末影核心 (EnderCore)
brandons-core
-cofh-core|CoFH核心 (CoFH Core)
+cofh-core@|CoFH核心 (CoFH Core)
statuseffecthud|状态信息显示 (StatusEffectHUD)|63123
lambdalib
redstonic|红石电子*|623471
@@ -613,10 +613,10 @@ worldeditcui||1013295¨worldeditcui-fabric||1013295
ztones
dummycore¨dummycore-unofficial
-extra-utilities|更多实用设备*|377817
+extra-utilities|更多实用设备*|868981
openmodslib|开放式模组库 (OpenModsLib)
embers|余烬*
-neat|极简血量显示* - Forge|938958¨neat-fabric-quilt|极简血量显示 (Neat) - fabric和quilt版本|938958
+neat|极简血量显示* - Forge|938958¨neat-fabric-quilt|极简血量显示 (Neat) - fabric和quilt版本|938958¨@neat|极简血量显示 (Neat)|938958
mob-properties|怪物属性*
ganys-surface|Gany的世界 (Gany's Surface)|450171
@@ -662,7 +662,7 @@ jaffa-foods-a-harvestcraft-addon|更多有趣的食物 (Just Another Fun Food Ad
thermal-smeltery|热力冶炼厂*
malisiscore
-valkyrielib
+valkyrielib@
waila-harvestability||608318
mixed-magic|混合魔法*
hwyla||648893
@@ -687,7 +687,7 @@ aroma1997s-dimensional-world|Aroma1997的维度世界 (Aroma1997's Dimensional W
akashic-tome|阿卡什宝典*|805606
morph-o-tool|变形工具 (Morph-o-Tool)
-decocraft|装饰工艺*
+decocraft@|装饰工艺*
refined-storage|精致存储*|1303245
deep-resonance|深度共振*
@@ -741,7 +741,7 @@ one-click-crafting|一键合成 (One click crafting)|943364
essential-thaumaturgy-unofficial|源质神秘学(非官方版)*
wireless-crafting-terminal|无线合成终端*
waila-plugins|Waila插件*
-appleskin|苹果皮 (AppleSkin)|1141428
+appleskin@|苹果皮 (AppleSkin)|1141428
tcbotaniaexoflame|奥术投射 (TCBotaniaExoflame)
thaumic-equivalence|奥法置换*
thaumcraft-research-helper|神秘研究小助手*
@@ -798,7 +798,7 @@ open-glider|滑翔翼*
mputils
shadowfacts-forgelin
eleccore
-infinitylib
+infinitylib@
dark-utilities
flux-networks|通量网络*
flat-colored-blocks|平滑色块*
@@ -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|夜晚模拟*
@@ -842,9 +842,9 @@ just-enough-characters|通用拼音搜索*|639271
redstone-flux
cofh-world
ancient-warfare-2|古代战争2 (Ancient Warfare2)|665422
-integrated-dynamics|动态联合/集成动力*
+integrated-dynamics@|动态联合/集成动力*
common-capabilities
-jingames-dragon-block-c|龙珠 C (Dragon Block C)|715486
+
tan-campfire-spit|意志坚定-篝火烤架 (TAN Campfire Spit)
super-solar-panels|超级太阳能发电机*|699953
ngtlib
@@ -864,23 +864,23 @@ mystic-divination|秘契占星术*
cofh-lib
tabula-rasa
cofhtweaks
-ender-io-zoo|末影动物园 (Ender IO Zoo/Ender Zoo) - 作为末影接口拓展模组的 Ender IO Zoo¨ender-zoo|末影动物园 (Ender IO Zoo/Ender Zoo) - 独立的 Ender Zoo
+ender-io-zoo|末影动物园 (Ender IO Zoo/Ender Zoo) - 作为末影接口拓展模组的 Ender IO Zoo¨ender-zoo|末影动物园 (Ender IO Zoo/Ender Zoo) - 独立的 Ender Zoo¨@enderio-zoo|末影动物园 (Ender IO Zoo/Ender Zoo)
simple-usage-log|简易日志*
omnis-core
auto-paths|自动路径*
react
-shared-resource-packs|共享材质包*
+shared-resource-packs|共享资源包*
i-know-what-im-doing|我知道我在干什么 (I Know What I'm Doing)
Leather-Works|皮革加工厂*
cyberware|机械改造*|618353
-thermal-cultivation|热力农业*
+thermal-cultivation@|热力农业*
better-builders-wands|更好的建筑之杖 (Better Builder's Wands)|831822
jaopca
chickens|更多鸡*|570570
tragicmc2|悲惨世界2 (TragicMC2)|643050
mobdrip
-customskinloader|万用皮肤补丁 (CustomSkinLoader)|102922
+customskinloader@|万用皮肤补丁 (CustomSkinLoader)|102922
saltymod|盐 (SaltyMod)|562144
immersive-tech|沉浸科技 (Immersive Technology) - 已停更|724918¨mct-immersive-technology|沉浸科技 (Immersive Technology) - 非官方版|724918
@@ -927,9 +927,9 @@ mcmusicplayer#t1:description
obsidian-suite
wizards-of-lua|Lua魔导师 (Wizards of Lua)
mystical-agriculture|神秘农业*|707360
-vampirism-become-a-vampire|吸血鬼/血族传说 (Vampirism)|982006
+vampirism-become-a-vampire@vampirism|吸血鬼/血族传说 (Vampirism)|982006
-itemphysic-lite|物品物理掉落 (ItemPhysic) - 轻量版|638455¨itemphysic|物品物理掉落 (ItemPhysic) - 完整版|638455
+itemphysic-lite@|物品物理掉落 (ItemPhysic) - 轻量版|638455¨itemphysic@|物品物理掉落 (ItemPhysic) - 完整版|638455
minenautica
improved-extraction|矿物获取改进*
ecology-mod|生态*
@@ -975,7 +975,7 @@ blockcraftery|方块工匠*
bedrockores|基岩矿簇 (Bedrock Ores)|776822
chat-bubbles|聊天泡泡*
refined-storage-addons|精致存储附属*
-foamfix-for-minecraft|泡沫修复 (FoamFix)|678442
+foamfix-for-minecraft@foamfix|泡沫修复 (FoamFix)|678442
industrial-foregoing|工业先锋*|774112
expanded-armory|扩展装备*
voxelmap|体素地图 (VoxelMap)|177583
@@ -986,13 +986,13 @@ thaumcraft-mob-aspects
magical-psi
starcraft-mod-scmc|星际争霸2 (StarCraft II in MineCraft)
covens-reborn
-grappling-hook-mod|抓钩*
+grappling-hook-mod@|抓钩*
tabbychat-2
yoyos|悠悠球*|932192
cd4017be-library
iberia
-reforged|重铸*|774739
+reforged@|重铸*|774739
cavern|洞穴*|775036
block-drops-jei-addon
iron-tanks|更多储罐*|776893
@@ -1018,7 +1018,7 @@ wrapup
nuclear-physics
wither-skeleton-tweaks|凋灵骷髅调整*
heat-and-climate|热量与气候*
-
+customthings|自定义物品 (CustomThings)
exgregilo|格雷矿筛 (ExGregilo)
placebo
plants
@@ -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
@@ -1080,7 +1080,7 @@ rough-tweaks|难度调整*
the-disenchanter-mod|祛魔台 (The Disenchanter)
carry-on|搬运*
better-than-llamas|更好看的羊驼*
-dynamic-surroundings|动态环境/动态环绕* - Forge|813490¨dynamic-surroundings-fabric-edition|动态环境/动态环绕 (Dynamic Surroundings) - Fabric|813490
+dynamic-surroundings|动态环境/动态环绕* - Forge|813490¨dynamic-surroundings-fabric-edition@dynamicsurroundingsfabric|动态环境/动态环绕 (Dynamic Surroundings)|813490
alfheim|亚尔夫海姆*|809440
mob-battle-mod|怪物大乱斗* - Forge|582695¨mob-battle-mod-fabric|怪物大乱斗 (Mob Battle Mod) - Fabric|582695
smooth-font|平滑字体*|781290
@@ -1123,7 +1123,7 @@ inspirations|灵感*|940567
tree-growing-simulator|跳舞树成长*|769525
personal-cars
-thermal-innovation|热力革新*
+thermal-innovation@|热力革新*
bewitchment-legacy|巫师之路 (Bewitchment) - 1.12¨bewitchment|巫师之路* - 1.16+
better-foliage|更好的树叶*
creative-plus|创造+*
@@ -1159,17 +1159,17 @@ server-properties-for-lan|简单联机 (Server.Properties for LAN)|781904
jaopcaadditions|JAOPCA附属 (JAOPCAAdditions)
cloche-call
-mouse-tweaks|鼠标手势*|69677
+mouse-tweaks@|鼠标手势*|69677
jaopcaagriculture|JAOPCA神秘农业附属 (JAOPCA Agriculture)
sky-resources|空岛资源*|817623
hexxit-gear|Hexxit装备*
magic-clover#t1:other-downloads|幸运四叶草 (Magic Clover)
inventory-crafting-grid|背包工作台*
-kleeslabs|更好地破坏半砖 (KleeSlabs) - Forge¨kleeslabs-fabric|更好地破坏半砖 (KleeSlabs) - Fabric
+kleeslabs|更好地破坏半砖 (KleeSlabs) - Forge¨kleeslabs-fabric|更好地破坏半砖 (KleeSlabs) - Fabric¨@kleeslabs|更好地破坏半砖 (KleeSlabs)
opencubicchunks
gregtechce|格雷科技社区版 (GregTech Community Edition)|818575
-blur|界面背景模糊* - Forge¨blur-fabric|界面背景模糊 (Blur) - Fabric
+blur|界面背景模糊* - Forge¨blur-fabric@|界面背景模糊 (Blur)
fast-leaf-decay|树叶快速腐烂*
enable-cheats|开启作弊模式*|798217
findit|找到它 (Findit!)|798212
@@ -1185,10 +1185,10 @@ gregtania
origin
minecraft-transport-simulator|沉浸车辆 (Immersive Vehicles)
chest-transporter|搬箱器*|467680
-i18nupdatemod|自动汉化更新 (I18nUpdateMod)|805273
+i18nupdatemod@|自动汉化更新 (I18nUpdateMod)|805273
realistic-item-drops|真实物品掉落*
pixelmon|像素精灵宝可梦 重铸*|291020
-controlling|键位冲突显示* - Forge/Fabric版|713187¨controlling-for-fabric|键位冲突显示 (Controlling) - 旧Fabric地址|713187
+
simpleleather|腐肉烧皮革 (SimpleLeather)|660382
@@ -1200,7 +1200,7 @@ ye-olde-tanks|水箱*
improving-minecraft|改善的世界*
wawla|Wawla高亮显示 (What Are We Looking At)
lightarea|点亮区域 (LightArea)|806149
-
+@replaymod|录像回放 (Replay Mod)|952909
stellar-sky|群星璀璨*|502403
stellar-api|恒星API (Stellar API)
nei-addons|NEI扩充 (NEI Addons)
@@ -1209,7 +1209,7 @@ hunting-dimension|狩猎维度*|800351
runes-of-wizardry|符文魔法 (Runes-of-Wizardry)
coffee-workshop|咖啡工坊*|808472
-in-game-account-switcher|游戏内账号切换 (In-Game Account Switcher)|1211916
+in-game-account-switcher@|游戏内账号切换 (In-Game Account Switcher)|1211916
consecration|圣化*|849160
ignite-hud|燃点HUD (Ignite HUD)
mrcrayfishs-gun-mod|MrCrayfish的枪 (MrCrayfish's Gun Mod)
@@ -1254,7 +1254,7 @@ numina|模块化动力装甲前置*
tinkers-complement|匠魂补充 (Tinkers' Complement)
everlastingabilities|永恒能力 (EverlastingAbilities)
abyssalcraft-heads|深渊国度头颅 (AbyssalCraft Heads)|673330
-overlord|不死者之王*|657071
+overlord|不死者之王*|657071¨@overlord|不死者之王 (Overlord)|657071
multifarm-crops|多功能农场兼容*
forestry-fermenter-addon|更多生物质*
dakimakura-mod|抱枕*|816801
@@ -1264,9 +1264,9 @@ crop-eating-animals|动物自动喂食 (Crop-Eating Animals)
refraction|折射*
librarianlib|图书馆 (LibrarianLib)
-creeper-confetti|烟花苦力怕*|775377
+creeper-confetti@|烟花苦力怕*|775377
funnels|液体漏斗*
-advent-of-ascension-nevermine|虚无世界 (Nevermine)|325420
+advent-of-ascension-nevermine@adventofascension|虚无世界 (Nevermine)|290532
toroquest|托罗探索 (Toro Quest)|818183
rikmulds-core-mod
@@ -1280,7 +1280,7 @@ stockpile|储物桶*|818298
loot-slash-conquer||805062
candy-world|糖果世界*|812603
-creativecore
+creativecore@
instantunify|瞬间统一 (InstantUnify)|816966
mobdrops|更多掉落 (MobDrops)
@@ -1305,7 +1305,7 @@ animationapi
realbench|更好的工作台 (RealBench)
primalcore|原始核心 (PrimalCore)
primal-tech|原始科技*
-antique-atlas|古式地图*
+antique-atlas@|古式地图*
xray-1-13-rift-modloader
overloaded|超限存储*|817115
@@ -1320,7 +1320,7 @@ constructs-armory|匠魂盔甲 (Construct's Armory)|786419
undertale-mod|传说之下 (UNDERTALE Mod)
globe|水晶球*|789706
super-stick-sword|超级木棍剑 (Super Stick sword)
-mekanism-generators|通用机械发电机*
+mekanism-generators@|通用机械发电机*
spider-queen|蜘蛛女王*|525087
baublelicious|美妙饰品*|553597
void-monster
@@ -1328,7 +1328,7 @@ shields-plus|更多盾牌*
ghost-buster
culinary-construct|自定义三明治*
armoreablemobs|怪物装备自定义 (ArmoreableMobs)
-
+gem-buffs-infinite-potion-effects|宝石效果/增益宝石 (Gem Buffs)
advanced-inventory
@@ -1336,7 +1336,7 @@ advanced-inventory
pollution-of-the-realms|环境污染/领域的污染 (Pollution of the Realms)|1410539
heat-and-climate-lib
-waystones|传送石碑/指路石* - Forge|1095026¨waystones-fabric|传送石碑/指路石 (Waystones) - Fabric|1095026
+waystones|传送石碑/指路石* - Forge|1095026¨waystones-fabric|传送石碑/指路石 (Waystones) - Fabric|1095026¨@waystones|传送石碑/指路石 (Waystones)|1095026
thaumic-calculations|神秘计算器*
pams-weee-flowers|潘马斯花园 (Pam's Weee! Flowers)|110931
@@ -1347,7 +1347,7 @@ bwm-suite
ambience-music-mod|环境音乐 (Ambience)|711711
almost-enough-items|AEI物品管理器*|812644
mtutils
-gravestone-mod|墓碑 (GraveStone)|772774
+gravestone-mod@|墓碑 (GraveStone)|772774
atlas-extras
horse-power|马力*
better-with-addons
@@ -1370,7 +1370,7 @@ solar-furnaces|简易太阳能 (Simple Solar Panels)
vanilladeathchest|原版死亡箱子 (Vanilla Death Chest) - Forge|825450¨vanilladeathchest-fabric|原版死亡箱子 (Vanilla Death Chest) - Fabric|825450
arachnophobia|蜘蛛恐惧症*|784755
abyssalcraft-integration|深渊国度联动 (AbyssalCraft Integration)|672323
-prefab|预制建筑* - Forge¨prefab-fabric|预制建筑 (Prefab) - Fabric
+prefab|预制建筑* - Forge¨prefab-fabric@prefab|预制建筑 (Prefab)
haunch-hud||818937
absent-by-design
no-nv-flash|无夜视闪烁 (No Night Vision Flashing)|984741
@@ -1383,18 +1383,18 @@ middle-earth-thaumaturgy|中土神秘学 (Middle-Earth Thaumaturgy)|867665
structpro-mod-fast-schematic-spawning-system|自然神殿 (Structpro)|827204
betterfps|更好的FPS (BetterFPS)|539780
sky-compression
-reap-mod|收获 (Reap)
+reap-mod@|收获 (Reap)
geolosys|地质矿脉*|935361
-patchouli|帕秋莉手册* - Forge¨patchouli-fabric|帕秋莉手册 (Patchouli) - Fabric/Quilt
-jeid
+patchouli|帕秋莉手册* - Forge¨patchouli-fabric|帕秋莉手册 (Patchouli) - Fabric/Quilt¨@patchouli|帕秋莉手册 (Patchouli)
+
gases-framework
ranged-pumps|范围泵*|668293
bagginses|背包*|628505
-ic2-classic|工业时代2经典版 (IC2 Classic)|810416
+ic2-classic|工业时代2经典版 (IC2 Classic)|1407663
cubicworldgen
rally-health
-open-terrain-generator|开放地形生成器*
+open-terrain-generator|开放式地形生成器*
noshelter|无庇护所 (NoShelter)
epic-siege-mod|史诗攻城 (Epic Siege)|725125
@@ -1407,14 +1407,14 @@ sound-physics-fabric|物理声效 (Sound Physics)|676189
plethora-peripherals
simple-flight|简单的飞行*|374613
factory-tech|工厂科技 (FactoryTech)
-block-renderer¨blockrenderer
+
mysticallib
crissaegrim
-traverse-reforged|遍历 (Traverse) - Forge版[1.12.X~1.16.5]¨traverse|遍历* - Fabric版[1.14.X~1.19.3]
-winter-wonder-land|霏雪寄语之地*
+traverse-reforged|遍历 (Traverse) - Forge版[1.12.X~1.16.5]¨traverse|遍历* - Fabric版[1.14.X~1.19.3]¨@traverse-legacy|遍历 (Traverse) - 仅Forge 1.11.2 和 1.12.2¨@traverse|遍历 (Traverse) - 仅提供Fabric
+
road-stuff|道路2 (Road Stuff2)|609045
ae2wtlib
real-filing-cabinet|仿真档案柜*
@@ -1423,14 +1423,14 @@ 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
planet-progression|星球研究*
space-advanced-addon-for-galactic-craft-3
decimation-zombie-apocalypse|僵尸启示录 (Decimation)|878571
-rift-mod-list
+rift-mod-list@
forgeendertech
new-tardis-mod
@@ -1488,7 +1488,7 @@ unbreaken|工具保护 (UnbreakEn)
bitcoin|比特币*
hungering-darkness
roots-classic|根源魔法经典版*
-embers-rekindled|余烬复刻版*|681929
+
vending-machines-revamped|自动贩卖机 (VendingMachinesRevamped)|482613
thaumic-alchemy|神秘炼金学*|713264
@@ -1498,7 +1498,7 @@ contenttweaker
from-the-ground-up|白手起家*|830883
clumps|经验机制改革*|769015
dynamic-surroundings-huds|动态环境:信息显示 (Dynamic Surroundings: HUDs)
-crafting-tweaks|合成辅助* - Forge|682072¨crafting-tweaks-fabric|合成辅助 (Crafting Tweaks) - Fabric|682072
+crafting-tweaks|合成辅助* - Forge|682072¨crafting-tweaks-fabric|合成辅助 (Crafting Tweaks) - Fabric|682072¨@crafting-tweaks|合成辅助 (Crafting Tweaks)|682072
limelib
sparks-hammers|重锤火花*|658384
deadly-monsters|致命怪物*|666749
@@ -1525,7 +1525,7 @@ better-questing-standard-expansion|更好的任务-基础扩展 (Better Questing
exchangers|方块交换器*
flexible-tools|灵活的工具*
dimensional-control|维度控制*
-valkyrien-warfare|瓦尔基里天空/瓦尔基里战争 (Valkyrien Skies/Valkyrien Warfare)|804503
+valkyrien-warfare@valkyrien-skies|瓦尔基里天空/瓦尔基里战争 (Valkyrien Skies/Valkyrien Warfare)|804503
item-scroller|物品滚轮*|1409907
better-advancements|更好的进度*|1109188
lucraft-core
@@ -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)
@@ -1605,14 +1605,14 @@ prodigy-tech|奇才妙械*|909679
item-filters|物品过滤器 (Item Filters) - NEW¨item-filters-fabric|物品过滤器 (Item Filters) - OLD
eblib
notenoughcodecs
-future-mc|未来的MC (Future MC)|913598
+future-mc|未来的MC (Future MC)|913598¨@future-mc|未来的MC (Future MC)|913598
rope-bridge|索桥*
sbm-oil-ore|油矿石 (Oil Ore)
redstone-minus-redstone|红石减红石*
more-furnaces|更多熔炉*
integrated-crafting|集成合成学*
integrated-terminals|集成终端*
-mekanism-tools|通用机械工具*
+mekanism-tools@|通用机械工具*
roboticparts|机械改造1.12+ (Robotic Parts)
rewired
oh-the-biomes-youll-go|你将去的生物群系 (Oh The Biomes You'll Go) - Forge¨oh-the-biomes-youll-go-fabric|你将去的生物群系 (Oh The Biomes You'll Go) - Fabric
@@ -1632,7 +1632,7 @@ deep-mob-learning|深度怪物学习*
tofucraftreload|豆腐工艺重制版 (TofuCraftReload)|946310
electroblobs-wizardry|巫术学 (Electroblob's Wizardry)|894070
-moarsigns|更多牌子 (MoarSigns)|547700
+moarsigns|更多告示牌 (MoarSigns)|547700
kamen-rider-craft|假面骑士工艺 (KamenRiderCraft)
avaritia-io|无尽贪婪:接口 (Avaritia IO)
dense-neutron-collectors|致密中子态素收集器* - 1.12.2¨dense-neutron-collectors-1-7|致密中子态素收集器 (Dense Neutron Collectors) - 1.7.10
@@ -1644,7 +1644,7 @@ thutcore
resource-pack-organizer|资源包管理器*|721005
morcant-ore|莫桑矿石*
force-void-world|强制虚空世界*
-i-am-very-smart|我很聪明* - Fabric¨i-am-very-smart-forge|我很聪明 (I Am Very Smart) - Forge
+i-am-very-smart-forge|我很聪明 (I Am Very Smart) - Forge¨i-am-very-smart|我很聪明* - Fabric
far-from-home|背井离乡*
cotton
oxygen-teleportation
@@ -1671,13 +1671,13 @@ backstab|背刺 (BackStab)
dynamic-stealth|动态潜行*|840795
-roughly-enough-items|REI物品管理器*|1265546
-modmenu|模组菜单 (Mod Menu)
+roughly-enough-items@|REI物品管理器*|1265546
+modmenu@|模组菜单 (Mod Menu)
architectury-quilt
illuminations¨illuminations-forge
mappy
-mouse-wheelie|急速滚轮*
-mrcrayfishs-vehicle-mod|MrCrayfish的载具 (MrCrayfish`s Vehicle Mod)|867766
+mouse-wheelie@|急速滚轮*
+mrcrayfishs-vehicle-mod|MrCrayfish的载具 (MrCrayfish's Vehicle Mod)|867766
cc-tweaked
aliensvspredator|异形大战铁血战士 (AliensVsPredator)
dragon-murder
@@ -1696,7 +1696,7 @@ informed-load-fabric|更多加载信息 (Informed Load)
huajiage-infinite-galaxy|滑稽纪元II:无尽星河 (Huaji Age II:Infinite Galaxy)|862800
cqrepoured|寻找巧克力重铸版 (Chocolate Quest Repoured)
-fabricproxy|Fabric群组支持 (FabricProxy)
+fabricproxy@|Fabric群组支持 (FabricProxy)
ex-sartagine|锅具*|780936
xaeros-minimap|Xaero的小地图 (Xaero's Minimap)|545145
everlastingabilities-potioncore|永恒能力-药水核心 (EverlastingAbilities-PotionCore)
@@ -1729,7 +1729,7 @@ soulus
sanlib
-travelers-backpack|旅行者背包 (Traveler's Backpack) - Forge¨travelers-backpack-fabric|旅行者背包 (Traveler's Backpack) - Fabric
+travelers-backpack@travelersbackpack|旅行者背包 (Traveler's Backpack)¨travelers-backpack-fabric|旅行者背包 (Traveler's Backpack) - Fabric
gregtech-classic|格雷科技经典版 (GregTech Classic)|968064
aperture||705836
combo-armors|组合装甲 (IC2ComboArmors)|86941
@@ -1741,10 +1741,10 @@ ping
the-legends-mod
bad-wither-no-cookie-reloaded||734965¨bad-wither-no-cookie-reloaded-fabric||734965
giacomos-fishing-net
-hospital-mod-pharmacy-pack|医院Mod (The Hospital Mod)|873210¨hospital-mod-facilities-pack|医院Mod (The Hospital Mod)|873210¨hospital-mod-theatres-pack|医院Mod (The Hospital Mod)|873210
+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|消息框控制*
@@ -1763,7 +1763,7 @@ classic-combat|经典战斗*
less-lag|较少的滞后*|785968
goodbye-grass|没有草丛 (Grassta la Vista)
-phosphor|磷* - Fabric|1081821¨phosphor-forge|磷 (Phosphor) - Forge|1081821
+phosphor@|磷*|1081821¨phosphor-forge|磷 (Phosphor) - Forge|1081821
clay-bucket|粘土桶*|632083
extra-anvils|更多铁砧/更多砧 (Extra anvils)
glassential|精致玻璃* - Forge|1098398¨glassential-fabric|精致玻璃 (Glassential) - Fabric|1098398
@@ -1791,7 +1791,7 @@ dm2|龙骑士2 (Dragon Mounts 2)
tiquality
loot-capacitor-tooltips|电容信息显示*|888624
classic-bars|经典状态条*
-
+@biomesyougo|你将去的生物群系 (Oh The Biomes You'll Go)
overground-ores|地表矿石*
touhou-little-maid|车万女仆*|882845
@@ -1823,7 +1823,7 @@ antipotionmod-1-12-2|无药水效果 (AntiPotionMod)
quark-oddities|夸克-奇思妙想*
fast-food|快餐*
more-carrots|更多的萝卜*
-d-maneuver-gear|3D立体机动装置 (3D Maneuver Gear)
+d-maneuver-gear@3d_maneuver_gear|3D立体机动装置 (3D Maneuver Gear)
weapon-craftery|武器工匠*
bobos-supermarket|Bobo的超市 (Bobo's supermarket)
even-more-apples|更多的苹果 (More Apples)
@@ -1841,17 +1841,17 @@ super-factory-manager|超级工厂管理*
sakura|樱*|895337
sips|更多液体容器*
gregs-construct|格雷与匠魂 (Greg's Construct)
-
+ultra-awesome-tools-mod|超级工具 (Super Tools)|887912
locks|锁*
special-mobs|特殊怪物*
-adorn-for-forge¨adorn
+adorn-for-forge¨adorn¨@adorn
missingbits
-
+@quickcarpet
locky
baubleshud
-
+winter-wonder-land|霏雪寄语之地*
mystical-world|魔幻世界*|991631
@@ -1861,12 +1861,12 @@ ruins-structure-spawning-system|遗迹 (Ruins)|771602
armory-expansion|匠魂盔甲扩展*
wg-block-replacer|方块生成替换器 (WorldGen Block Replacer)|785486
multi-mob-core
-
+jeid
structurize|结构化*
improvable-skills|技能进阶 (Improvable Skills 3)
-bounding-box-outline-reloaded|自然生成建筑结构显示*
+bounding-box-outline-reloaded@bbor|自然生成建筑结构显示*
sauceconstruct
health-overlay-fabric|更美观的血条 (Health Overlay) - Fabric¨health-overlay|更美观的血条* - Forge
auto-feeder-helmet|自动进食头盔*
@@ -1930,7 +1930,7 @@ damage-control|伤害控制*
prestige|成就点*
yukarilib
-energy-converters|能量桥接器*
+
signpost|路标*
diagonal-panes|对角线玻璃板*
forgelin
@@ -1960,11 +1960,11 @@ nether-chest|下界箱子*
mob-kill-messages|击杀信息通知*
betterdispenser|能喂食的发射器 (Better Dispenser)
-shulkerboxdisplay|潜影盒显示器 (ShulkerBoxDisplay)|912440
+
mycommands|我的命令 (MyCommands)|588293
-
+embers-rekindled|余烬复刻版*|681929
hearth-well||909385
tea-and-biscuits|茶和饼干*|820208
@@ -2000,7 +2000,7 @@ mine-and-slash-reloaded|挖矿与砍杀 (Mine and Slash)|869674
monster-swarm|怪物云集*|439839
SimplePipes
-amecs
+amecs@
world-primer
bookworm
@@ -2009,7 +2009,7 @@ let-sleeping-dogs-lie|嘘,别吵醒狗狗*
super-ores|超级矿石*|704620
gravelminer|沙砾终结者 (GravelMiner) - Forge|1126578¨gravelminer-fabric|沙砾终结者 (GravelMiner) - Fabric|1126578
-client-tweaks|客户端微调* - Forge|915029¨client-tweaks-fabric|客户端微调 (Client Tweaks) - Fabric|915029
+client-tweaks|客户端微调* - Forge|915029¨client-tweaks-fabric|客户端微调 (Client Tweaks) - Fabric|915029¨@client-tweaks|客户端微调 (Client Tweaks)|915029
single-use-crafting-table-mod|一次性工作台 (Single-Use Crafting Table Mod)
get-back-to-home|回家 (Get Back to Home)
expanded-equivalence|等价扩展*
@@ -2018,19 +2018,19 @@ scp-craft-decline|SCPCraft - 下降 (SCPCraft - Decline)
tetra||804377
minestrappolation-5
underwater-biome|深海生态*|923907
-create|机械动力* - Forge|1088970¨create-fabric|机械动力 (Create) - Fabric/Quilt|1088970
+create-fabric@|机械动力 (Create)|1088970¨create|机械动力* - Forge|1088970
energeticsheep|脉冲羊 (EnergeticSheep)
-ensorcellation|万象*|1016362
+
inventory-sorter|物品分拣*
speedster-heroes|闪电侠*|685240
curios¨curios-fabric
-village-spawn-point|村庄出生点* - Forge¨village-spawn-point-fabric|村庄出生点 (Village Spawn Point) - Fabric
+village-spawn-point|村庄出生点* - Forge¨village-spawn-point-fabric|村庄出生点 (Village Spawn Point) - Fabric¨@village-spawn-point|村庄出生点 (Village Spawn Point)
spawnercraft|刷怪笼合成 (SpawnerCraft)|692662
openfm|开放电台 (OpenFM)|522352
-the-dalek-mod|神秘博士*
+the-dalek-mod
modular-diversity|模块化多样性*
botanic-bonsai|植物魔法盆栽*
modular-magic|模块化魔法*
@@ -2066,7 +2066,7 @@ reactor-stuff|反应堆材料*|927559
traitors-better-swampland-mod|更好的沼泽 (Traitor's Better Swamplands Mod)
soviet-abandoned-lab-mod|苏维埃风格装饰 (Soviet Era Mod(earlier Soviet Lab))
-charm¨charm-reforged|Charm - 重置版 Forge 1.16+
+charm¨charm-reforged|Charm - 重置版 Forge 1.16+¨@charm
village-names|村庄名字* - Forge¨villager-names-fabric|村庄名字 (Village Names) - Fabric
advanced-rocketry-tweaker
alternating-flux|交变磁通*
@@ -2074,7 +2074,7 @@ projectextended|等价交换扩展 (ProjectExtended)
tfc-metallum|群峦合金 (TFC:Metallum)
reactor-turbines-mod-for-ic2
mutant-beasts|突变生物重置版*
-jei-integration|JEI扩展 (JEI Integration)|1101324
+jei-integration@|JEI扩展 (JEI Integration)|1101324
funny-fruit|滑稽果 (FunnyFruit)
life-tech|生命工艺*
exponential-power|指数能源*
@@ -2088,13 +2088,13 @@ bee-angry-est|愤怒的蜜蜂 (Bee Angry-est)
titanium|钛*
chemlib¨chemlib-fabric
carrots-lib|胡萝卜库 (Carrots Library)
-no-hostiles-around-campfire|围火无怪* - Forge¨no-hostiles-around-campfire-fabric|围火无怪 (No Hostiles Around Campfire) - Fabric
-healing-campfire|治愈营火* - Forge¨healing-campfire-fabric|治愈营火 (Healing Campfire) - Fabric
+no-hostiles-around-campfire|围火无怪* - Forge¨no-hostiles-around-campfire-fabric|围火无怪 (No Hostiles Around Campfire) - Fabric¨@no-hostiles-around-campfire|围火无怪 (No Hostiles Around Campfire)
+healing-campfire|治愈营火* - Forge¨healing-campfire-fabric|治愈营火 (Healing Campfire) - Fabric¨@healing-campfire|治愈营火 (Healing Campfire)
231455-minetunes
jetif|物品丢入流体 (Just Enough Throwing In Fluids)
rftools-base|RF工具:基础 (RFTools Base)
flopper|流体漏斗*
-
+exhausted-stamina|竭力攻击*
staminaplus|耐力值 (StaminaPlus)
enhanced-armaments|增强装备*|898546
spatialcompat|空间兼容 (SpatialCompat)
@@ -2110,20 +2110,20 @@ plasmaengines|等离子引擎 (PlasmaEngines)|930034
bonny-food
emerging-technology-hydroponics|新兴技术 (Emerging Technology)|934929
-
+shulkerboxdisplay|潜影盒显示器 (ShulkerBoxDisplay)|912440
twilightopia-phantasy|暮托邦之梦 (Twilightopia)|977230
engineers-decor|工程师的装饰 (Engineer's Decor)
engineers-tools|工程师的工具 (Engineer's Tools)
wesleys-roguelike-dungeons|Wesley的冒险地牢 (Wesley's Roguelike Dungeons)
-xp-tome|经验之书*
+xp-tome@|经验之书*
varied-commodities
tinkers-things|匠魂扩增 (Tinkers' Things)
just-enough-buttons|更多的按钮*|678566
clock-hud|时间显示器 (Clock HUD)
tektopia|桃花源记/特克托皮亚 (TekTopia)|980572
-muya1-7-10|姆亚核心 (MuyaCore)
-fabric-language-kotlin
+
+fabric-language-kotlin@
ftb-backups|FTB备份 (FTB Backups)
cyclopstek|独眼巨人 (CyclopsTek)
@@ -2154,7 +2154,7 @@ usefultnt|更有用的TNT (UsefulTNT)
crow-flight|乌鸦坐飞机*
findme|东寻西觅 (FindMe)
-minecraft-transit-railway|我的世界铁路*|1173523
+minecraft-transit-railway@|我的世界铁路*|1173523
random-loot-mod|随机战利品*
tinkers-aether|天境工匠*¨tinkers-aether-dman-edition|天境工匠 (Tinkers Aether) - 非官方的Fork版本 可兼容天境1.5.0
@@ -2250,7 +2250,7 @@ OpenSecurity|开放式防卫*
the-legend-era|传说纪元*
level-up-hp|生命提升 (Level Up HP) - Fabric|1036332¨level-up-hp-forge|生命提升 (Level Up HP) - Forge|1036332
more-planet-extras
-randompatches|随意修复 (RandomPatches) - Forge¨randompatches-fabric|随意修复 (RandomPatches) - Fabric
+randompatches|随意修复 (RandomPatches) - Forge¨randompatches-fabric|随意修复 (RandomPatches) - Fabric¨@randompatches|随意修复 (RandomPatches)
ships-mod|船*
tfc-metric|公制重量转换 (TFC Metric)
@@ -2258,7 +2258,7 @@ tfc-metric|公制重量转换 (TFC Metric)
tfc-additions|群峦附加 (TFC-Additions)
raolcraft-w
-litematica-forge|投影 (Litematica) - Forge地址(长期但非稳定更新)|1394747¨litematica|投影* - Fabric地址(长期稳定更新)|1394747
+litematica-forge|投影 (Litematica) - Forge(长期但非稳定更新)|1394747¨litematica|投影* - Fabric(长期稳定更新)|1394747
telepastries|传送蛋糕 (TelePastries)
heroesexpansion|超级英雄拓展 (HeroesExpansion)|963046
attributefix|属性修复 (AttributeFix)|939188
@@ -2279,17 +2279,17 @@ rainbow-oak-trees|彩虹橡树*
spawntabletweaker|生成调整 (SpawnTableTweaker)
large-ore-deposits|大型矿床*
gregtech6-unofficial|格雷科技6非官方版 (GregTech 6 Unofficial)|1038500
-mahou-tsukai|魔法使*|929252
+mahou-tsukai@|魔法使*|929252
moar-tinkers
baubley-heart-canisters|心之容器*|795294
jaopcasingularities|JAOPCA的奇点 (JAOPCA Singularities)|958964
-
+energy-converters|能量桥接器*
guidebook
-lithium|锂* - Fabric|1080959¨lithium-forge|锂 (Lithium) - Forge|1080959
+lithium@|锂*|1080959¨lithium-forge|锂 (Lithium) - Forge|1080959
left-2-mine|求生之路*
worldeditcui-forge-edition-2
world-book
@@ -2302,7 +2302,7 @@ 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
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
@@ -2343,7 +2343,7 @@ multiverse-pouch|多元宇宙袋*
electroblobs-wizardry-twilight-forest-spell-pack|巫术学:暮色森林法术包 (Electroblob's Wizardry: Twilight Forest Spell Pack)|1001020
blockbuster
fishs-undead-rising|Fish的不死崛起 (Fish's Undead Rising)|984184
-cloth-config
+@cloth-config¨cloth-config
just-map
too-realistic-inventory|真实背包 (Realistic Inventory)
mob-farm|生物农场 (Mob farm)
@@ -2371,7 +2371,7 @@ additional-events
artemislib
easy-retrogen|简易重生成*|793640
-extraplayerrenderer|额外玩家渲染 (ExtraPlayerRenderer)
+extraplayerrenderer|额外玩家渲染 (Extra Player Renderer)
rwbym||998968
libnonymous
shattered-moon
@@ -2385,13 +2385,13 @@ egg-auto-hatch|鸡蛋自动孵化*
performant|性能优化*
tube-transport-system|管道传输系统*
-transmutation-alchemy¨transmutation-alchemy-revival
+transmutation-alchemy
extra-spells-electroblobs-wizardry|额外咒语 (Extra Spells)
ancient-spellcraft|古代咒法*
moving-elevators||1009680
interstellar-exoplanets|星际:系外行星 (Interstellar: Exoplanets)|1105540
infini-tic
-extra-disks|更多磁盘*
+extra-disks@|更多磁盘*
optiforge
magic-seeds-for-electroblobs-wizardry|巫术学魔法种子 (Magic seeds for Electroblobs Wizardry)
extra-alchemy|扩展炼药*|871236
@@ -2407,7 +2407,7 @@ hypnotics|安眠药 (hypnotics)
villager-market|村民市场*
linear|线性放置*|817264
-immersive-portals-for-forge|沉浸式传送门 (Immersive Portals) - Forge|1177771¨immersive-portals-mod|沉浸式传送门 (Immersive Portals) - Fabric|1177771
+immersive-portals-for-forge|沉浸式传送门 (Immersive Portals) - Forge|1177771¨immersive-portals-mod@immersiveportals|沉浸式传送门 (Immersive Portals)|1177771
universalbestiary
autumnity|秋原*|1021372
worldgeneration-profiler
@@ -2434,11 +2434,11 @@ tooltweaks|禁用原版工具 (ToolTweaks)|773523
atop|超多生物群系护甲 (Armor for Biomes O' Plenty)
tinkers-forging|工匠锻造 (Tinker's Forging)
gravity-gun|重力枪*
-mekanism-additions|通用机械附加 (Mekanism Addition)
-signpicture|木牌图片 (Sign Picture)|698600
-vampirism-integrations|吸血鬼联动*
+mekanism-additions@|通用机械附加 (Mekanism Addition)
+signpicture|告示牌图片 (Sign Picture)|698600
+vampirism-integrations@|吸血鬼联动*
gottschcore
-not-enough-crashes|崩溃优化* - Fabric|1097535¨not-enough-crashes-forge|崩溃优化 (Not Enough Crashes) - Forge|1097535
+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
@@ -2454,7 +2454,7 @@ redlib
modern-ui|现代化 UI (Modern UI)
auto-config-updated-api
medieval-madness|中世纪的疯狂*
-unionlib
+
caelus¨caelus-fabric
xeocore
wtbw_lib
@@ -2486,7 +2486,7 @@ nei-lotr|魔戒NEI插件 (LotR Mod NEI Plugin/NEI LotR)
adventure-backpack|探索者背包*
speed-illusion
supertic|匠魂药水效果 (SuperTiC)
-the-bumblezone-forge|蜜蜂领域/黄蜂领域 (The Bumblezone) - Forge|998154¨the-bumblezone-fabric|蜜蜂领域/黄蜂领域 (The Bumblezone) - Fabric|998154
+the-bumblezone-forge@the-bumblezone|蜜蜂领域/黄蜂领域 (The Bumblezone) - Forge|998154¨the-bumblezone-fabric@|蜜蜂领域/黄蜂领域 (The Bumblezone) - Fabric/Quilt|998154
beesourceful
middle-earth-industry
thut-wearables
@@ -2504,7 +2504,7 @@ gkolivers-super-tic
songs-of-war-mod|战争之歌 (Songs of War)|1003372
fluidict
-squidcraft|鱿鱼工艺 (SquidCraft)|1025201
+squidcraft@|鱿鱼工艺 (SquidCraft)|1025201
clothesline|晾衣绳 (ClothesLine) - Forge|1037838¨clothesline-fabric|晾衣绳 (ClothesLine) - Fabric|1037838
siege
fermion-core
@@ -2537,8 +2537,8 @@ counter-guns
gregtech-chill-edition|格雷科技轻松版 (GregTech: Chill Edition)
custom-player-model-cpm|自定义玩家模型 (Custom Player Model)|950601¨custom-player-model-cpm-remake|自定义玩家模型 (Custom Player Model) - 重置版(包含1.16.5)|950601
roughly-enough-resources||1046041
-so-many-enchantments|更多附魔*|927418
-
+so-many-enchantments|更多附魔*|927418¨@so-many-enchantments|更多附魔 (So Many Enchantments)|927418
+ensorcellation|万象*|1016362
sisser
hxcenchants|多样化附魔 (HxCEnchants)
better-dropped-items|更好的掉落物*|1125352
@@ -2569,7 +2569,7 @@ large-enchants
angrysun|炙热太阳 (AngrySun)|797244
its-not-long-enough|与现实相同的昼夜交替 (It's Not Long Enough)|807281
sunscreen-gel|防晒霜*|797343
-
+muya1-7-10|姆亚核心 (MuyaCore)
macaws-furniture|Macaw的家具 (Macaw's Furniture)
macaws-doors|Macaw的门 (Macaw's Doors)|1098241
blueprint
@@ -2599,7 +2599,7 @@ stefinus-3d-guns-mod|3D枪械 (New Stefinus Guns) - 1.7.10|441094¨stefinus-3d-g
moderncraft-core
lang_magic|言灵 (lang_magic)
-noexpensive|不昂贵 (NoExpensive)|1055512
+noexpensive@|不昂贵 (NoExpensive)|1055512
rough-mobs-revamped|粗暴的怪物重置版*
fullbright|充满光明*|803202
backpacks|背包! (backpacks!)|423986
@@ -2608,7 +2608,7 @@ living-enchantment|生命附魔*|932961
karat-garden|克拉的花园*|663378
bard-mania
-shulkerboxtooltip|潜影盒工具提示 (Shulker Box Tooltip)
+shulkerboxtooltip@|潜影盒工具提示 (Shulker Box Tooltip)
crafting-dead-official|行尸走肉 (Crafting Dead)
lord-craft
@@ -2622,7 +2622,7 @@ combined-potions|组合药水*|785942
plusticminusbad
baileys-dailies||1047464
joshuas-christmas-mod
-enderio-fluxified
+enderio-fluxified@
skizzik
@@ -2648,9 +2648,9 @@ insects|昆虫*
sound-reloader|声音重载*|732142
tool-belt|工具皮带*|677629
argentina-food-mod|阿根廷的食物*
-pet-names|宠物名字* - Forge¨pet-names-fabric|宠物名字 (Pet Names) - Fabric
-collective¨collective-fabric
-giselbaers-durability-viewer|耐久信息显示 (Durability Viewer)|1007803
+pet-names|宠物名字* - Forge¨pet-names-fabric|宠物名字 (Pet Names) - Fabric¨@pet-names|宠物名字 (Pet Names)
+collective¨collective-fabric¨@collective
+giselbaers-durability-viewer@durabilityviewer|耐久信息显示 (Durability Viewer)|1007803
more-cookies|更多饼干*
apple-carrot|苹果胡萝卜*
eat-yo-veg
@@ -2677,7 +2677,7 @@ eat-eggs
wool-plates|羊毛压力板*
more-berry-uses|更多浆果用途*
elemental-blades|元素之刃*|1012675
-beyond-earth|飞越地球 (Beyond Earth/Space-BossTools)
+beyond-earth|飞越地球 (Beyond Earth/Space-BossTools)¨@beyond-earth|飞越地球 (Beyond Earth/Space-BossTools)
simple-planes|简单飞机* - Forge¨simple-planes-fabric|简单飞机 (Simple Planes) - Fabric
world-tooltips|显示掉落信息*|678452
extra-arcane-knowledge-electroblobs-wizardry|额外巫术知识 (Extra Arcane Knowledge)
@@ -2695,8 +2695,8 @@ banana-decor-forge
immersive-metal|沉浸金属*
coffee-time
drink-mod|饮料模组*
-more-zombie-villagers|更多僵尸村民* - Forge¨more-zombie-villagers-fabric|更多僵尸村民 (More Zombie Villagers) - Fabric
-naturally-charged-creepers|自然生成闪电苦力怕* - Forge¨naturally-charged-creepers-fabric|自然生成闪电苦力怕 (Naturally Charged Creepers) - Fabric
+more-zombie-villagers|更多僵尸村民* - Forge¨more-zombie-villagers-fabric|更多僵尸村民 (More Zombie Villagers) - Fabric¨@more-zombie-villagers|更多僵尸村民 (More Zombie Villagers)
+naturally-charged-creepers|自然生成闪电苦力怕* - Forge¨naturally-charged-creepers-fabric|自然生成闪电苦力怕 (Naturally Charged Creepers) - Fabric¨@naturally-charged-creepers|自然生成闪电苦力怕 (Naturally Charged Creepers)
skinport
dynamic-surroundings-soundcontrol|动态环境:音效控制 (Dynamic Surroundings: SoundControl)
@@ -2723,16 +2723,16 @@ 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
-replanting-crops|补种农作物* - Forge¨replanting-crops-fabric|补种农作物 (Replanting Crops) - Fabric
+replanting-crops|补种农作物* - Forge¨replanting-crops-fabric|补种农作物 (Replanting Crops) - Fabric¨@replanting-crops|补种农作物 (Replanting Crops)
complex-crops||873934
screenshot-to-clipboard|截图到剪贴板 (Screenshot to Clipboard) - Forge¨screenshot-to-clipboard-fabric|截图到剪贴板 (Screenshot to Clipboard) - Fabric
hide-armor|隐藏盔甲*
-hunterillager|邪猎者 (HunterIllager)|936480
+hunterillager@hunter-illager|邪猎者 (HunterIllager)|936480
pocket-apocalypse-mod|便携式天灾 (Pocket Apocalypse mod)
compass|指南针 (compass)|1067220
@@ -2755,7 +2755,7 @@ lan-server-properties|自定义局域网联机*|1056335
immersive-intelligence|沉浸智能*
analyzeio
-wool-buttons|羊毛按钮*
+wool-buttons@|羊毛按钮*
total-tinkers|统合匠艺*
thaumic-wands|神秘法杖*|1082168
@@ -2782,10 +2782,10 @@ compact-void-miners|紧凑型虚空采矿机*
probe
mekanism-fluxified|“通量”机械*
stepup|平滑自动上坡 (StepUp)
-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-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
silent-gear|寂静装备*
@@ -2806,7 +2806,7 @@ simpledifficulty|坚定意志 (SimpleDifficulty)|1105340
minema
tfctech-unofficial|群峦工业非官方版 (TFCTech Unofficial)
-invmove|边拿边走 (InvMove) - 重置版(1.16-1.19.2+)¨invmove-fabric|边拿边走 (InvMove) - 旧版Fabric(~1.18.2)¨invmove-forge|边拿边走 (InvMove) - 旧版Forge(~1.18.2)
+invmove|边拿边走 (InvMove) - 重置版(1.16-1.19.2+)¨invmove-fabric|边拿边走 (InvMove) - 旧版Fabric(~1.18.2)¨invmove-forge|边拿边走 (InvMove) - 旧版Forge(~1.18.2)¨@invmove|边拿边走 (InvMove)
autofish-for-forge|自动钓鱼Forge版 (AutoFish for Forge)
industrial-upgrade|工业升级*|1038987
rpgstats
@@ -2817,13 +2817,13 @@ ama-damage-indicator
magic-circle|阵法*|929326
crash-utilities
eldritch-mobs
-farmers-delight|农夫乐事 (Farmer's Delight) - Forge¨farmers-delight-fabric|农夫乐事 (Farmer's Delight) - Fabric
+farmers-delight@|农夫乐事 (Farmer's Delight) - Forge¨farmers-delight-fabric@|农夫乐事 (Farmer's Delight) - Fabric
artifacts|奇异饰品* - Forge¨artifacts-fabric|奇异饰品 (Artifacts) - Fabric
mechanized-steam-power|机械化蒸汽动力*
dynamictreestfc|动态的树:群峦传说附属 (Dynamic Trees-TFC)
dynamic-trees-the-twilight-forest|动态的树:暮色森林附属 (Dynamic Trees-The Twilight Forest)
-drp-global-datapack|全局数据包 (DRP - Global Data Pack)
+drp-global-datapack@globalpacks|全局数据包 (DRP - Global Data Pack)
mob-farm-nerfer
blood-in-the-water
bio-technik
@@ -2833,11 +2833,11 @@ astromine-fabric|天体矿工 (Astromine: Complete)|1068634
rustic-thaumaturgy|神秘乡村*
thallium|铊*|1088212
-haema
+haema@
evil-ores
unsuspicious-stew|炖菜解谜/炖菜效果显示*
tfc-seasonal
-imblockerfabric|输入法冲突修复 (IMBlockerFabric)|1090731
+imblockerfabric@imblocker|输入法冲突修复 (IMBlockerFabric)|1090731
saomclib
survival-utilities|生存工具*
slashblade|拔刀剑 (SlashBlade)|726664
@@ -2849,7 +2849,7 @@ camera-mod|照相机*|1162901
heartdrops|生命汲取 (Heart Drops)
observerlib
zen-summoning
-campanion|野营物品*
+campanion@|野营物品*
wolves-with-armor|狼铠* - Fabric¨wolves-with-armor-forge|狼铠 (Wolves With Armor) - Forge
get-exp-for-everything|万物皆可获得经验 (Get exp for everything)
jei-enchantment-info|JEI附魔信息 (JEI Enchantment Info)
@@ -2859,11 +2859,11 @@ project-red-integration|红石计划:集成 (Project Red - Integration)
project-red-lighting|红石计划:照明 (Project Red - Lighting)¨project-red-illumination|红石计划:照明 (Project Red - Illumination)
project-red-world|红石计划:探索 (Project Red - World)
project-red-compat|红石计划:兼容性 (Project Red - Compat)
-canvas-renderer|Canvas渲染器*|1211675
+canvas-renderer|Canvas渲染器*|1211675¨@canvas|Canvas渲染器 (Canvas Renderer)|1211675
coolfood|冷饮 (CoolFood)
-infinitevillagertrading|无限村民交易 (InfiniteVillagerTrading)
-infinite-trading|无限交易* - Forge¨infinite-trading-fabric|无限交易 (Infinite Trading) - Fabric
+infinitevillagertrading@|无限村民交易 (InfiniteVillagerTrading)
+infinite-trading|无限交易* - Forge¨infinite-trading-fabric|无限交易 (Infinite Trading) - Fabric¨@infinite-trading|无限交易 (Infinite Trading)
better-loading-screen|自定义加载画面 (Custom Loading Screen)|970911
extended-lights-mod|灯具拓展 (Extended Lights)|903904
more-swords-legacy|更多剑:传承*
@@ -2879,7 +2879,7 @@ enderite-mod-for-forge|末影合金 (Enderite Mod) - Forge¨enderite-mod-for-fab
dynamic-trees-industrial-craft-2|动态的树:工业2附属 (Dynamic Trees - Industrial Craft 2)
dynamic-trees-tinkers-construct|动态的树:匠魂附属 (Dynamic Trees - Tinker's Construct)
ex-nihilo-sequentia|无中生有:传承 (Ex Nihilo: Sequentia)
-toms-storage-fabric|汤姆的简易存储 (Tom's Simple Storage Mod) - Fabric|1085400¨toms-storage|汤姆的简易存储 (Tom's Simple Storage Mod) - Forge|1085400
+@toms-storage|汤姆的简易存储 (Tom's Simple Storage Mod)|1085400¨toms-storage-fabric|汤姆的简易存储 (Tom's Simple Storage Mod) - Fabric|1085400¨toms-storage|汤姆的简易存储 (Tom's Simple Storage Mod) - Forge|1085400
fishing-real|更真实的钓鱼*
maessentials
lingering-loot
@@ -2887,11 +2887,11 @@ ugraded-netherite|下界合金增强 (Upgraded Netherite)
inventory-profiles|一键背包整理*|920520
slimevoid-library
-kotlin-for-forge
+kotlin-for-forge@
fabric-zero
towers-of-the-wild|旷野之塔*|1098534
sausagecore|香肠核心 (SausageCore)
-shadowlands|暗影之地*
+shadowlands|暗影之地*|1399312
polymorph|多态合成* - Forge¨polymorph-fabric|多态合成 (Polymorph) - Fabric
scalable-cats-force
otyacraft-engine
@@ -2903,10 +2903,10 @@ colored-lux|彩色照明*
corsair-mccue
right-click-clear|右键文本清除*
wtfs-expedition-cavebiomes-ores-trees-and-tweaks
-guide-api-village-and-pillage
+guide-api-village-and-pillage@guide-api
drcyanos-lootable-bodies|可拾取尸体 (Dr. Cyano's Lootable Bodies)|406482
simply-cats
-pams-harvestcraft-2-crops|潘马斯农场2 - 作物 (Pam's HarvestCraft 2 - Crops)|1313245
+pams-harvestcraft-2-crops|潘马斯农场2 - 作物 (Pam's HarvestCraft 2 - Crops)|1000336
base-metals|基础金属*
mmdlib
@@ -2922,17 +2922,17 @@ better-beacon-effect|更好的信标效果*
netherite-horse-armor|下界合金马铠*
tacocraft-fabric
lootr¨lootr-fabric
-biolib
+biolib@bio-library
scavenge
heaven-earth-ring|乾坤戒指*|1113665
-pams-harvestcraft-2-food-extended|潘马斯农场2 - 食物拓展 (Pam's HarvestCraft 2 - Food Extended)|1313245
+pams-harvestcraft-2-food-extended|潘马斯农场2 - 食物拓展 (Pam's HarvestCraft 2 - Food Extended)
-pams-harvestcraft-2-trees|潘马斯农场2 - 果树 (Pam's HarvestCraft 2 - Trees)|1313245
+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
@@ -2940,18 +2940,18 @@ aportingcore|移植核心 (APortingCore)|1106002
ywlib
sweet-potato|烤地瓜 (Sweet Potato Mod)|1395827
redstone-lantern|红石灯笼*
-culinaire|烹饪*
+culinaire@|烹饪*
furbishcraft
-ambientsounds|自然音效 (AmbientSounds)|780518
+ambientsounds@|自然音效 (AmbientSounds)|780518
ordinary-firearms|普通枪械2 (Ordinary Firearms 2)|1107541
territory|领地 (MineTerritory)
-better-ping-display|更好的延迟显示* - Forge¨better-ping-display-fabric|更好的延迟显示 (Better Ping Display) - Fabric
+better-ping-display@|更好的延迟显示* - Forge¨better-ping-display-fabric@|更好的延迟显示 (Better Ping Display) - Fabric
turned-the-changed-mod
survival-tweaks|生存微调*|1050858
melon-slabs|西瓜台阶*
-lambdynamiclights|Lambda的动态光源 (LambDynamicLights)|1082100
+lambdynamiclights@|Lambda的动态光源 (LambDynamicLights)|1082100
realistic-torches|真实火把*|566201
durability-viewer|耐久显示器*|1086168
@@ -2976,7 +2976,7 @@ packagedexcrafting|封包合成拓展 (PackagedExCrafting)
compactstorage|紧凑存储 (compactstorage)
useful-backpacks|实用背包*
-conquest-reforged|征服者 (ConquestReforged)|992711
+
steelseries-gamesense
pizzaatimes-timber-mod
tellme
@@ -2984,7 +2984,7 @@ minerva-library
-edit-sign|编辑告示牌*
+edit-sign@editsign|编辑告示牌*
logistical-automation
dynamic-view|动态视距* - Forge¨dynamic-view-fabric|动态视距 (Dynamic View) - Fabric
@@ -3003,8 +3003,8 @@ open-loader|开放式加载*
deep-mob-learning-refabricated|深度怪物学习:重制版 (Deep Mob Learning: Refabricated)
ftb-ultimine-forge|连锁破坏 (FTB Ultimine) - Forge¨ftb-ultimine-fabric|连锁破坏 (FTB Ultimine) - Fabric
server-translations
-image2map
-corpse|遗体*
+image2map@
+corpse@|遗体*
ring-of-the-miner-fabric|矿工戒指 (Ring of the Miner) - Fabric¨ring-of-the-miner-forge|矿工戒指 (Ring of the Miner) - Forge
@@ -3041,7 +3041,7 @@ tumat
riddle-chests|谜题箱*
totem-plus|图腾增强*
-blockmeterfabric|方块计量表 (BlockMeterFabric)
+blockmeterfabric@blockmeter|方块计量表 (BlockMeterFabric)
fluid-drawers|储液抽屉*
creepypastacraft-reborn|蠕动意面重置版 (CreepyPastaCraft Reborn)
@@ -3051,7 +3051,7 @@ smallerfpsincrements
regex-filters|正则表达式过滤器*
fluidsystem|流体系统 (FluidSystem)
-falling-tree|伐树 (FallingTree)
+falling-tree@fallingtree|伐树 (FallingTree)
untranslated-items|物品名称双语同屏*
particle-culling|粒子渲染机制优化*
aggressive-chickens
@@ -3069,9 +3069,9 @@ xp-spawner-control|刷怪笼经验控制*
mob-spawner-control|刷怪箱控制与修改*
refined-pipes|精致管道*
singularities|奇点*
-better-spawner-control|更好的刷怪笼控制* - Forge¨better-spawner-control-fabric|更好的刷怪笼控制 (Better Spawner Control) - Fabric
-crying-ghasts|哭泣的恶魂* - Forge¨crying-ghasts-fabric|哭泣的恶魂 (Crying Ghasts) - Fabric
-dynamic-fps|动态FPS (Dynamic FPS)
+better-spawner-control|更好的刷怪笼控制* - Forge¨better-spawner-control-fabric|更好的刷怪笼控制 (Better Spawner Control) - Fabric¨@better-spawner-control|更好的刷怪笼控制 (Better Spawner Control)
+crying-ghasts|哭泣的恶魂* - Forge¨crying-ghasts-fabric|哭泣的恶魂 (Crying Ghasts) - Fabric¨@crying-ghasts|哭泣的恶魂 (Crying Ghasts)
+dynamic-fps@|动态FPS (Dynamic FPS)
compact-ores|致密矿石*
thaumic-additions|神秘领域 (Thaumcraft Addition)
fabric-disable-custom-worlds-advice|禁用自定义世界警告 (Disable Custom World Advice)
@@ -3081,8 +3081,8 @@ diggus-maximus|连锁挖掘*
super-sentai-craft|超级战队工艺*
wildly-eat|狼吞虎咽*
gotta-climb-fast|快速爬梯 (Gotta Climb Fast!)
-can-i-mine-this-block|我 能 挖 它 吗? (cAn i MiNe thIS bLOCk?)
-rotten-creatures|腐烂生物*|1094419
+can-i-mine-this-block@|我 能 挖 它 吗? (cAn i MiNe thIS bLOCk?)
+rotten-creatures@rottencreatures|腐烂生物*|1094419
fairy-lights|圣诞彩灯*|1167478
packmode
dank-null
@@ -3108,7 +3108,7 @@ iblis-headshots|爆头击杀*|963706
bee-barker||812120
sky-bonsais|天空盆景*
-origins|起源 (Origins (Fabric))|1081026
+origins|起源 (Origins (Fabric))|1081026¨@origins|起源 (Origins (Fabric))|1081026
alexiillib
feed-a-friend
@@ -3121,7 +3121,7 @@ miner-golems|矿工傀儡*
online-card|网络卡片*
felling|连锁砍树*
extra-player-render|额外玩家渲染 (Extra Player Renderer)|1118280
-fabric-api||835999
+fabric-api@||835999
coloredlanterns|多彩灯笼 (ColoredLanterns)
ae2-fluid-crafting|AE2流体合成套件 (AE2 Fluid Crafting)
cardinal-energy|能量基本*
@@ -3131,7 +3131,7 @@ triumph
overloaded-armor-bar|护甲上限突破* - Forge|1027870¨overloaded-armor-bar-fabric|护甲上限突破 (Overloaded Armor Bar) - Fabric|1027870
toomanydanyores
glass-pipe|玻璃管道*
-origins-classes|起源:职业 (Origins: Classes)|1129492
+origins-classes@|起源:职业 (Origins: Classes)|1129492
plonk|世界内物品放置*|1155521
baritone-1-18-2
potionsmaster|魔药大师 (Potions Master)|1002297
@@ -3143,7 +3143,7 @@ demagnetize|消磁*
-
+controlling|键位冲突显示* - Forge/Fabric版|713187¨controlling-for-fabric|键位冲突显示 (Controlling) - Fabric|713187
cinderscapes|余烬奇景*
tfc-homestead
tfctinkers|群峦与匠魂 (TFC Tinkers)
@@ -3160,7 +3160,7 @@ chlorine|氯*|1120009
bedrock-miner|基岩矿工*|789614
reasonable-realism|合理的现实主义*|997171
passable-foliage|叶间穿行 🌳 (Passable Foliage 🌳) - Forge¨passable-foliage-fabric|叶间穿行 🌳 (Passable Foliage 🌳) - Fabric
-betterend|更好的末地 (BetterEnd) - Fabric|1256498¨betterend-forge-port|更好的末地 (BetterEnd) - Beethoven92制作的Forge版本|1256498
+betterend|更好的末地 (BetterEnd) - Fabric|1256498¨betterend-forge-port|更好的末地 (BetterEnd) - Beethoven92制作的Forge版本|1256498¨@betterend|更好的末地 (BetterEnd)|1256498
armor-chroma|盔甲颜色显示*|772358
interactions|自定义交互事件*
lods-of-emone|很多钱 (Lods of Emone)
@@ -3190,8 +3190,8 @@ ambience-extras|环境音乐:附加 (Ambience - Extras)
additions-mod
extracpus|更多CPU (Extra CPUs)
extra-crafting-storage
-
-underground-city-engineering|地下城市工程*|943842
+conquest-reforged|征服者 (ConquestReforged)|992711
+underground-city-engineering@|地下城市工程*|943842
essentials
soul-shards-respawn
soul-shards-the-old-ways
@@ -3201,26 +3201,26 @@ ftb-ranks¨ftb-ranks-fabric
ftb-chunks-forge¨ftb-chunks-fabric
ftb-essentials
silveroak-outpost|银橡前哨*
-pehkui
+pehkui@
jeitweaker
yungs-law
-libx
+libx@
atmospheric|悠然一派*
monospace-font|等宽字体 (Monospace font)
mana-liquidizer|魔力液化器*
neapolitan|那不勒斯风味*
-clear-despawn-fabric
+clear-despawn-fabric¨@cleardespawn
tinkers-modifier-modifier|匠魂强化修改 (Tinkers' Modifier Modifier)
randomtweaks|随意微调 (RandomTweaks)|776232
zettai-magic
straw-golem-reborn|稻草傀儡重制版* - Fabric¨strawgolem-reborn|稻草傀儡重制版 (Straw Golem Reborn) - Forge
-rare-ice|冰中有宝*|1267712
+rare-ice@|冰中有宝*|1267712
create-integration
the-magic-mirror|魔镜*
extra-boats|额外船只 (Extra Boats / Boatload)
-outvoted|落选生物*|1144693
+outvoted@|落选生物*|1144693
attribute|属性修复 - Fabric版 (Attribute Fix {FABRIC})
packmodemenu|PackMode菜单 (PackModeMenu)
@@ -3229,12 +3229,12 @@ uniq|流体统一/物品统一 (UniQ)
harder-ores|更难的矿物处理*
rune-craft
-geckolib
+geckolib@
memory-cleaner-mod|内存自动清理*
ore-flowers|矿物花卉*
aqua-creepers|水下苦力怕 (Aqua Creepers!)
extrastorage|更多存储 (ExtraStorage)
-thermal-locomotion|热力运输*
+thermal-locomotion@|热力运输*
external-tweaker
morebiomesxl
notes|笔记*
@@ -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)|1313245
+pams-harvestcraft-2-food-core|潘马斯农场2 - 食物核心 (Pam's HarvestCraft 2 - Food Core)|1000336
eki-lib
nodami|伤害免疫机制移除 (No Damage Immunity)
@@ -3264,8 +3264,8 @@ devtech|GTCEu-CrT开发套件*
jurassic-world-reborn-mod|侏罗纪世界重生*
-cardboard
-
+cardboard@
+enchanting-with-thaumcraft|神秘附魔学*
crimson-revelations|血腥启示 (Crimson Revelation)
environmental-core
bigger-crafting-tables
@@ -3290,7 +3290,7 @@ detailed-technology|细节科技*|1145905
oreberries|矿莓*
stone-block-utilities
mystical-creations
-multiconnect
+multiconnect@
art-of-alchemy-memoriam|炼金艺术:纪念版 (Art of Alchemy: Memoriam)|1017647
blockphysics|方块物理 (BlockPhysics)
stoneblock-dimensions
@@ -3300,23 +3300,23 @@ enderfuge|末影熔炉*
calm-down-zombie-guy
universal-mod-core
suspended-server|挂起服务器*
-starlight|星光* - Fabric|1216316¨starlight-forge|星光 (Starlight) - Forge|1216316
+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合并*
+nbt-crafting@|数据包NBT合并*
diregoo
ogdragon|OG龙+ (OGDragon+)
sevtweaks
journeymapstages|旅行地图阶段控制 (JourneyMapStages)
-textile-backup|Textile备份*
+textile-backup@textile_backup|Textile备份*
goopers
mob-drops|自定义生物战利品 (Mob Drops Your Way)
alexs-mobs|Alex 的生物 (Alex's Mobs)|1185939
-all-stackable|可堆叠物品自定义*
+all-stackable@|可堆叠物品自定义*
thermal-mj|热力MJ支持 (Thermal MJ)
ctd-core
time-speed-mod|Minecraft地球自转/真实昼夜循环 (Вращение Земли Майнкрафтская (Accurate day/night-cycles Mod))
@@ -3324,7 +3324,7 @@ time-speed-mod|Minecraft地球自转/真实昼夜循环 (Вращение Зем
mineral-tracker
carpet-extra|Carpet拓展 (carpet-extra)
-viafabric||1122120
+viafabric@||1122120
double-slabs|双重台阶*
tools-and-armor-bop|超多生物群系:旧工具和装甲 (Tools And Armor - BOP)
centralized-materials|集中材料*
@@ -3334,7 +3334,7 @@ shulkerboxviewer
gameinfo|游戏信息 (GameInfo)
arcaea|Arcaea韵律源点*
advanced-tfc-tech|进阶群峦科技 (Advanced TFC Tech)
-vanilla-enhanced|原版增强 (Enriched/Vanilla Enhanced)
+vanilla-enhanced@enriched|原版增强 (Enriched/Vanilla Enhanced)
satisforestry
asmc
simple-generators|简易发电机*
@@ -3370,7 +3370,7 @@ endremastered|末地:创世 (End Remastered) - Forge¨endremastered-fabric|末
unique-crops|独特作物*|910420
yungs-api¨yungs-api-fabric
-dawn
+dawn@
assembly-line-machines|装配线*
netherending-ores
Flex-FOV|扭曲视野*
@@ -3384,7 +3384,7 @@ nbt-manipulator
sulfur-and-potassium-make-more-gunpowder
statues|雕像*|1119703
-advanced-mining-dimension|先进的采矿维度*|1157631
+advanced-mining-dimension@|先进的采矿维度*|1157631
time-travel-mod|时间旅行*
backslotaddon|背用武器拓展 (BackSlotAddon)
optifabric-1-8-9
@@ -3395,22 +3395,22 @@ applied-integrations|应用集成*
inventory-hud-forge|物品栏HUD+ (Inventory HUD+)|1116793
langsplit
-legacy-fabric-api
-krypton|氪*
+legacy-fabric-api@
+krypton@|氪*
mana-gear
not-enough-enchantments
bon-appetit-forge|祝您好胃口 (Bon Appetit) - Forge¨bon-appetit-fabric|祝您好胃口 (Bon Appetit) - Fabric
scuba-gear|潜水装备*
avatar-mod-2-out-of-the-iceberg|降世神通:突破冰山 (Avatar Mod 2: Out of the Iceberg)
-
-lazydfu|DFU载入优化 (LazyDFU) - Fabric¨lazy-dfu-forge|DFU载入优化 (LazyDFU) - Forge
+@hydrogen|氢 (Hydrogen)|1192876
+lazydfu@|DFU载入优化 (LazyDFU)¨lazy-dfu-forge|DFU载入优化 (LazyDFU) - 非官方 Forge 版本
ridable-ender-pearls|可骑乘末影珍珠*|1126706
gildedarmor|镀金盔甲 (GildedArmor)|1126586
deadly-book|致命书本*
speedy-hoppers|极速漏斗*
-indium|铟*
+indium@|铟*
go-fish|一起钓鱼吧!*
@@ -3419,19 +3419,19 @@ loot-overhaul
miners-helmet|矿工头盔 (Miner's Helmet)
lightweight-blood-mechanics
kbackup-fabric
-smooth-boot|流畅加载* - Fabric¨smooth-boot-forge|流畅加载 (Smooth Boot) - Forge
+smooth-boot|流畅加载* - Fabric¨smooth-boot-forge|流畅加载 (Smooth Boot) - Forge¨@smoothboot-fabric|流畅加载 (Smooth Boot)
netherite-plus-mod|下界合金拓展*
chunkpregenerator|区块预生成器 (Chunk-Pregenerator)|1015490
-antighost|方块同步修复 (AntiGhost)
+antighost@|方块同步修复 (AntiGhost)
backslot|背用武器 (BackSlot)
minecraftcapes-mod
-spartan-weaponry-arcana|斯巴达奥法 (SpartanWeaponryArcana)
+spartan-weaponry-arcana|斯巴达奥法*
greek-fantasy|希腊幻想*|1143037
-architectury-api
+architectury-api@
fantastic-beasts-and-how-to-eat-them-butchercraft
createaddition
@@ -3449,47 +3449,47 @@ shutup-experimental-settings|禁用实验性设置警告 (Shutup Experimental Se
datafixerslayer
hexcraft
police-mod|警察*
-enhanced-celestials|月亮事件* - Forge¨enhanced-celestials-fabric|月亮事件 (Enhanced Celestials) - Fabric
+enhanced-celestials|月亮事件* - Forge¨enhanced-celestials-fabric|月亮事件 (Enhanced Celestials) - Fabric¨@enhanced-celestials|月亮事件 (Enhanced Celestials)
resourceful-bees|缤纷蜜蜂*
-held-item-info|手持物品信息*|977835
+held-item-info@|手持物品信息*|977835
cleancut|干净利落 (CleanCut)|1231946
plus-tweaks
global-gamerules|全局游戏规则 (Global GameRules)
save-my-stronghold-fabric¨save-my-stronghold
-physics-mod|真实物理 (Physics mod)
+physics-mod@physicsmod|真实物理 (Physics mod)
bluemap
dregora|德雷戈拉*
k4lib
deadly-end-phantoms
spice-of-life-potato-edition|生活调味料:马铃薯版 (Spice of Life: Potato Edition)
-easiervillagertrading|简单村民交易 (EasierVillagerTrading)¨easiervillagertrading-2|简单村民交易 (EasierVillagerTrading) - Forge ≥1.18.2
+easiervillagertrading@|简单村民交易 (EasierVillagerTrading)¨easiervillagertrading-2|简单村民交易 (EasierVillagerTrading) - Forge ≥1.18.2
wwta|聊天栏时间显示 (When Was That Again)|1285507
ars-nouveau|新生魔艺*
eidolon|幻梦*
rats-ratlantis|老鼠:鼠西洲 (Rats: Ratlantis)
-wthit||1200908¨wthit-forge||1200908
-modern-industrialization|现代工业化*
+wthit||1200908¨wthit-forge||1200908¨@wthit||1200908
+modern-industrialization@|现代工业化*
chunk-pregenerator-fabric|区块预生成器(Fabric) (Fabric Chunk Pregenerator)|1167231
jumploader
unloader
better-animal-models|更真实的动物 (Better animal models)
-
+@mine-little-pony|我的小马驹:友谊就是合成 (Mine Little Pony: Friendship is Crafting)
druidcraft|德鲁伊工艺*|1162793
berry-good
savage-and-ravage|残暴与掠夺 (Savage & Ravage)
-jade|玉 🔍 (Jade 🔍)
+jade@|玉 🔍 (Jade 🔍)
somnia|梦醒时分 (Somnia Awoken)
industrial-reborn
-mo-structures|更多自然生成结构 (Mo' Structures) - Fabric¨mo-structures-forge|更多自然生成结构 (Mo' Structures) - Forge
+mo-structures@|更多自然生成结构 (Mo' Structures)¨mo-structures-forge|更多自然生成结构 (Mo' Structures) - Forge
wallpapercraft-a-fresh-roll|墙纸创造 (Wallpapercraft - A Fresh Roll)
clear-despawn
-
+unionlib
botany-trees
-better-third-person
+better-third-person@
survive|生存要素*
wallpapercraft-a-fresh-roll-stairs|墙纸创造:楼梯 (Wallpapercraft - A Fresh Roll (Stairs!))
wallpapercraft-a-fresh-roll-slabs|墙纸创造:台阶 (Wallpapercraft - A Fresh Roll (Slabs!))
@@ -3500,15 +3500,15 @@ botany-pots|植物盆栽*
callable-horses|召之马来*
ultimate-solar-panels
-slight-gui-modifications|界面微调 ('Slight' Gui Modifications)|1148951
+slight-gui-modifications@|界面微调 ('Slight' Gui Modifications)|1148951
elemental-craft|元素工艺*
just-another-rotten-flesh-to-leather-mod|腐肉换皮革 (Just Another Rotten Flesh to Leather Mod)
-spatial-harvesters-forge¨spatial-harvesters-fabric
-emotecraft|表情工艺* - Fabric¨emotecraft-forge|表情工艺 (Emotecraft) - Forge
+spatial-harvesters-forge¨spatial-harvesters-fabric@
+emotecraft|表情工艺* - Fabric¨emotecraft-forge|表情工艺 (Emotecraft) - Forge¨@emotecraft|表情工艺 (Emotecraft)
pattysmorestuff
hats|帽子*
smoother-bedrock|平滑基岩层*
-c2me-fabric|C^2M 引擎 (C^2M-Engine/Concurrent Chunk Management Engine)|1188136
+c2me-fabric@|C^2M 引擎 (C^2M-Engine/Concurrent Chunk Management Engine)|1188136
datapack-anvil
nuclear-science|核科学*
glaretorch|强光火把 (Glare Torch)
@@ -3517,27 +3517,27 @@ exposer
to-the-bat-poles
cc-restitched
wearables|可穿戴设备*
-
+@advancedfurnace|先进熔炉 (Advanced Furnace)|1172580
better-weather|更好的天气* - Forge¨better-weather-fabric|更好的天气 (Better Weather) - Fabric
-ultimate-car-mod|终极汽车*|938477
+ultimate-car-mod@|终极汽车*|938477
craft-time|耗时合成 (Craft Takes Time)|1159911
-betterf3|更好的F3 (BetterF3)
+betterf3@|更好的F3 (BetterF3)
the-abyss-chapter-ii|深渊:第二章 (The Abyss: Chapter II / The Abyss II - The Other Side)
mapper-base
-bedrockify
+bedrockify@bedrockIfy
rftools-power|RF工具:能量 (RFTools Power)
pipez
coins-je
-beenfo|蜂巢信息*
+beenfo@|蜂巢信息*
chest-building-blocks
zycraft
quitconfirm|退出前确认 (QuitConfirm)|1116784
ruined-equipment
-clickthrough|穿牌开箱 (ClickThrough)
+clickthrough@|穿牌开箱 (ClickThrough)
dynamic-sound-filters|动态声音滤波器*
binniepatcher
subterranean-wilderness
@@ -3545,7 +3545,7 @@ subterranean-wilderness
construction-wand|建筑手杖*
squeedometer
forgery
-fabrication
+fabrication@
mcdj
boost-boots
better-sodium-video-settings-button|更好的钠视频设置按钮*
@@ -3559,28 +3559,28 @@ pointless-tech-collective
revampedwolf
bedrock-b-gone
-elemental-creepers|元素爬行者 (Больше Криперов)|287856
+elemental-creepers|元素爬行者*|287856
gymcraft
-infernal-expansion|地狱扩展*
+infernal-expansion@|地狱扩展*
-configurable-mob-potion-effects|怪物药水效果自定义* - Forge¨configurable-mob-potion-effects-fabric|怪物药水效果自定义 (Configurable Mob Potion Effects) - Fabric
+configurable-mob-potion-effects|怪物药水效果自定义* - Forge¨configurable-mob-potion-effects-fabric|怪物药水效果自定义 (Configurable Mob Potion Effects) - Fabric¨@configurable-mob-potion-effects|怪物药水效果自定义 (Configurable Mob Potion Effects)
sapience
netherite-nuggets-fabric|下界合金粒 (Netherite Nuggets) - Fabric¨netherite-nuggets-forge|下界合金粒 (Netherite Nuggets) - Forge
-eroding-stone-entities¨eroding-stone-entities-fabric
-direbats-forge¨direbats-fabric
+eroding-stone-entities¨eroding-stone-entities-fabric¨@eroding-stone-entities
+@direbats¨direbats-forge¨direbats-fabric
advanced-electric-tools|高级电动工具*
backpacker
ynet
simple-drawers|简单的抽屉*
-charmonium¨charmonium-reforged
+charmonium¨charmonium-reforged¨@charmonium
xnicex
krate
chickensshed|鸡棚重置版 (ChickensShed)
chickenshed
-expanded-storage-fabric|扩展存储 (Expanded Storage) - Forge/Fabric/Quilt¨expanded-storage-forge|扩展存储 (Expanded Storage) - Forge
+@expanded-storage|扩展存储 (Expanded Storage)¨expanded-storage-fabric|扩展存储 (Expanded Storage) - Forge/Fabric/Quilt¨expanded-storage-forge|扩展存储 (Expanded Storage) - Forge
project-mmo
abnormals-delight
jojos-bizarre-survival
@@ -3604,8 +3604,8 @@ mob-origins|生物起源*
better-default-biomes|更好的默认生物群系*
kaimyentity|KAI我的实体 (KAIMyEntity)|1170874
tablechair|桌椅 (TableChair)
-when-dungeons-arise|地牢浮现之时* - Forge¨when-dungeons-arise-fabric|地牢浮现之时 (When Dungeons Arise) - Fabric
-animal-feeding-trough|动物喂养槽*
+when-dungeons-arise|地牢浮现之时* - Forge¨when-dungeons-arise-fabric|地牢浮现之时 (When Dungeons Arise) - Fabric¨@when-dungeons-arise|地牢浮现之时 (When Dungeons Arise)
+animal-feeding-trough@animal_feeding_trough|动物喂养槽*
wiki-zoomer
personality
allurement
@@ -3626,10 +3626,10 @@ scape-and-run-parasites|逃逸:寄生体 (Scape and Run: Parasites)
just-enough-drags|更多JEI拖拽*|1179845
exnihilo-automation|无中生有:自动化 (Exnihilo: Automation)
world-handler-command-gui|世界管理器:图形交互 (World Handler - Command GUI)
-entityculling|实体渲染机制优化 (Entity Culling Fabric/Forge)
+entityculling@|实体渲染机制优化 (Entity Culling Fabric/Forge)
tea-kettle|茶壶*
-enhanced-block-entities|方块实体优化*
+enhanced-block-entities@ebe|方块实体优化*
gun-customization-infinity
dungeons-gear|地下城装备*
integrated-nbt|NBT 联合 (Integrated NBT)
@@ -3643,14 +3643,14 @@ abundance
just-enough-calculation||561503
mythicbotany|神话植物学 (MythicBotany)|1190745
improved-mobs|怪物增强* - Forge¨improved-mobs-fabric|怪物增强 (Improved Mobs) - Fabric
-limitless|无上限附魔*|1118079
+limitless|无上限附魔*|1118079¨@limitless|无上限附魔 (Limitless)|1118079
vpn-blocker|禁用VPN (VPN Blocker)
premium-wood
tenshilib¨tenshilib-fabric
randomportals|随意传送门 (RandomPortals)
configured|配置界面* - Forge¨configured-fabric|配置界面 (Configured) - Fabric
-jellyfishing|抓水母*
+jellyfishing@|抓水母*
accurate-block-placement
pro-placer|放置专家*
farmers-delight-compats
@@ -3667,14 +3667,14 @@ tips|提示*
Interactio
advancement-book|进度之书*
drawers-tooltip|抽屉提示*
-paradise-lost|天境:重生*
-
+paradise-lost@|天境:重生*
+@gregfood|格雷的食物 (GregFood)|1120123
more-jellyfish|更多水母*
easy-ladders
beta-dannys-expansion
inventory-tweaks-renewed
-arrp|高级运行时资源包 (Advanced Runtime Resource Packs)
+arrp@|高级运行时资源包 (Advanced Runtime Resource Packs)
tougher-glass-forge|Tougher Glass - Forge 版本¨tougher-glass-fabric|Tougher Glass - Fabric 版本(1.16.5~1.17.1)
differentiate
cookie-core-fabric
@@ -3689,40 +3689,40 @@ vanilla-excavators¨vanilla-excavators-forge
morevanillatools|更多原版工具 (MoreVanillaTools)
colorful-health-bar
tipline
-ultimate-plane-mod|终极飞机*
-simple-voice-chat|简单的语音聊天*|1232171
+ultimate-plane-mod@|终极飞机*
+simple-voice-chat@|简单的语音聊天*|1232171
not-enough-milk
ewewukeks-musket-mod|ewewukek的火枪模组 (ewewukek's Musket mod)
-irisshaders||1161271
-
+irisshaders@iris||1161271
+@dimthread|世界多线程化 (DimensionalThreading)
chambers|处理仓*
-sodium-extra|钠 · 扩展*
+sodium-extra@|钠 · 扩展*
grind-enchantments|砂轮增强*
voice-chat|语音聊天*
xnet-gases
filing-cabinets-refurbished
-dropz
-figura
+dropz@
+figura@
autopilot¨autopilot-fabric
-applied-energistics-2-wireless-terminals|AE2无线终端*
+applied-energistics-2-wireless-terminals@|AE2无线终端*
appliedenergisticstweaker
-sleeping-bags|睡袋*
+sleeping-bags@|睡袋*
mass-inscriber
random-title|随机标题*|980991
astikorcarts
-
-jea|JEI进度 (Just Enough Advancements)
-et-futurum-requiem
+@invsync|背包同步 (InvSync)
+jea@|JEI进度 (Just Enough Advancements)
+et-futurum-requiem@etfuturum
better-op|更好的OP*
fastworkbench-minus-replacement
crimson-compass|绯红指南针*
-tinkers-construct|匠魂 (Tinkers' Construct)|661201
+tinkers-construct|匠魂 (Tinkers' Construct)|661201¨@tinkers-construct|匠魂 (Tinkers' Construct)|661201
ryoramas-terraria-mod
steves-workshop
upgraded-ender-chests|高级末影箱*
@@ -3731,7 +3731,7 @@ versioner|整合包版本工具*
engineers-workshop-reborn
-
+@immersivecursedness|沉浸传送门服务端版 (Immersive Cursedness)
crimson-xp-charm|经验护符 (Crimson XP)
locatebiome
@@ -3750,14 +3750,14 @@ necromancy
library-of-exile
variegated
-chest-cavity|胸腔*
+
extended-note-block|音符盒扩展 (Extended Noteblocks)
hbms-nuclear-tech-mod-reloaded|HBM的核科技重制版 (Hbm's Nuclear Tech Mod Reloaded)
-loading-timer|加载时长显示*
+loading-timer@|加载时长显示*
ocrocketry
-chime-fabric
-witherite|凋灵合金*
-mermaid-tail-mod|人鱼尾*
+chime-fabric@chime
+witherite@|凋灵合金*
+mermaid-tail-mod|人鱼尾*¨@mermod
astromine-core|天体矿工:核心 (Astromine: Core)
dungeondq
dynamic-trees-integrated-dynamics|动态的树:动态联合/集成动力附属 (Dynamic Trees - Integrated Dynamics)
@@ -3776,7 +3776,7 @@ flower-seeds
astemirs-forest-craft
astromine-foundations|天体矿工:基础 (Astromine: Foundations)
-create-stuff-additions|机械动力:物品附加 (Create : Stuff Additions)|1314047
+create-stuff-additions|机械动力:物品附加 (Create Stuff & Additions)|1314047
slab-machines|台阶型设备*
more-create-stuffs|更多机械动力物品*
rsinfinitybooster
@@ -3796,19 +3796,19 @@ more-red|更多红石*
ex-nihilo-sequentia-mekanism-addon|无中生有:传承 - 通用机械扩展 (Ex Nihilo: Sequentia - Mekanism Addon)
-panorama|全景图*
+panorama@swd-panorama|全景图*
bgcore
induction-charger
tiered-forge¨tiered
c-o-m-b-a-t
burden-of-time
gamemenumodoption|游戏菜单模组设定 (Game Menu Mod Option)
-game-menu-remove-gfarb|游戏菜单移除GFARB (Game Menu Remove GFARB)
+game-menu-remove-gfarb@gamemenuremovegfarb|游戏菜单移除GFARB (Game Menu Remove GFARB)
randomdeathmessage|随机死亡消息 (RandomDeathMessage)
ex-nihilo-sequentia-ae2-addon|无中生有:传承 - 应用能源2扩展 (Ex Nihilo: Sequentia - AE2 Addon)
sweetmagic|甜蜜与魔法 (SweetMagic)|1255490
astromine-discoveries|天体矿工:探索 (Astromine: Discoveries)
-azuredooms-angel-ring|AzureDoom的天使指环 (AzureDooms Angel Ring) - Forge¨azuredooms-angel-ring-fabric|AzureDoom的天使指环 (AzureDooms Angel Ring) - Fabric
+azuredooms-angel-ring|AzureDoom的天使指环 (AzureDooms Angel Ring) - Forge¨azuredooms-angel-ring-fabric|AzureDoom的天使指环 (AzureDooms Angel Ring) - Fabric¨@azuredooms-angel-ring|AzureDoom的天使指环 (AzureDooms Angel Ring)
togglelib|列车手柄库 (ToggleLib)|1189685
regrowth|再生*
mobs-main-menu
@@ -3821,7 +3821,7 @@ cat-jammies
rhino|犀牛*
fastsuite|配方性能优化 (FastSuite)
twerkitmeal|跳舞生长一切 (Twerk To Grow All The Things)
-thermal-expansion|热力膨胀*|805200¨thermal-integration|热力集成*
+thermal-expansion@|热力膨胀*|805200¨thermal-integration@|热力集成*
piggybanks|存钱罐*
in-control
mystical-agriculture-refabricated|神秘农业:Fabric版 (Mystical Agriculture: Refabricated)
@@ -3830,31 +3830,31 @@ aerial-affinity¨aerial-affinity-fabric
communism-life-and-art|共产主义:生活与艺术 (Communism:Life and Art)
project-war-dance|战舞计划 (Project: War Dance)|1176754
faster-ladder-climbing|更快的爬梯*
-infinitymending|无限+经验修补 (InfinityMending)
+infinitymending@|无限+经验修补 (InfinityMending)
better-than-mending|更好的经验修补*
elenai-dodge-2
-taterzens||1242114¨taterzens-forge||1242114
+taterzens||1242114¨taterzens-forge||1242114¨@taterzens||1242114
dragons-survival|龙之生存 (Dragon Survival)
-
-no-lan-cheats|禁用局域网作弊 (No LAN Cheats)
-dashloader|疾速加载 (DashLoader)
+@legacy-mod-menu
+no-lan-cheats@|禁用局域网作弊 (No LAN Cheats)
+dashloader@|疾速加载 (DashLoader)
caveworld-2|洞穴世界*
break-progress|破坏进度*
-item-model-fix|物品模型修复*
+item-model-fix@|物品模型修复*
additional-pipes-for-buildcraft|附加管道 (Additional Pipes for Buildcraft)
lolasm
rftools-utility|RF工具:实用设备 (RFTools Utility)
-ctm-fabric|连接材质Fabric版 (ConnectedTexturesMod for Fabric)
-whats-that-slot
+ctm-fabric|连接纹理Fabric版 (ConnectedTexturesMod for Fabric)
+whats-that-slot@
pmmo-and-nbt-compat
techstacks-heavy-machinery-mod
enhanced-mushrooms|蘑菇增强* - Forge版&Fabric1.18.2版¨enhanced-mushrooms-fabric|蘑菇增强 (Enhanced Mushrooms) - Fabric
versatile-portals
spawn-egg-recipes|刷怪蛋配方注册*
-configurable-extra-mob-drops|可配置的额外怪物掉落* - Forge¨configurable-extra-mob-drops-fabric|可配置的额外怪物掉落 (Configurable Extra Mob Drops) - Fabric
+configurable-extra-mob-drops|可配置的额外怪物掉落* - Forge¨configurable-extra-mob-drops-fabric|可配置的额外怪物掉落 (Configurable Extra Mob Drops) - Fabric¨@configurable-extra-mob-drops|可配置的额外怪物掉落 (Configurable Extra Mob Drops)
enhanced-mob-spawners|刷怪笼增强*
autorun
@@ -3862,14 +3862,14 @@ animania-farm|动物谷:农场*
animania-extra|动物谷:额外动物 (Animania Extra Animals)
animania-cats-dogs|动物谷:猫猫狗狗 (Animania Cats & Dogs)
better-foliage-renewed|更好的树叶重制版*
-block-swap¨block-swap-fabric
-basalt-walker|玄武岩行者*
+@block-swap¨block-swap¨block-swap-fabric
+basalt-walker@|玄武岩行者*
endless-ocean-adventures|无尽海洋:冒险 (Endless Ocean: Adventures) - Forge¨endless-oceans-adventures-fabric|无尽海洋:冒险 (Endless Ocean: Adventures) - Fabric
bpm
stone-circles
phase-potion|相位药水*
-marblegates-exotic-enchantment-flowing-agony|白门的奇异附魔:苦痛长河 (MarbleGate's Exotic Enchantment: Flowing Agony)|1198067
+marblegates-exotic-enchantment-flowing-agony@flowing-agony|白门的奇异附魔:苦痛长河 (MarbleGate's Exotic Enchantment: Flowing Agony)|1198067
measurements
visible-armor-slots|可见装备槽* - 官方版,适用于1.9-1.11.2|1191226¨visible-armor-slots-unofficial|可见装备槽 (Visible Armor Slots) - 国人非官方版重置,适用于1.12.2|1191226¨armor-slots-in-other-inventories|可见装备槽 (Visible Armor Slots) - 非官方版重置,适用于1.15.2-1.16.5|1191226
moon-and-space-dimensions-fabric|星际次元 (Space Dimensions / Moon and Space Dimensions) - Fabric|1348102¨space-dimensions-forge|星际次元 (Space Dimensions / Moon and Space Dimensions) - Forge|1348102
@@ -3879,13 +3879,13 @@ winged
mob-stages|生物阶段*|854619
refooled
-fabric-seasons
+fabric-seasons@
dehydration|脱水*
-easy-villagers|村民物品化/简单村民*|1097287
+easy-villagers@|村民物品化/简单村民*|1097287
largebar
tis-3d
entity-nan-health-fix|假死修复 (Entity NaN Health Fix)
-ferritecore|铁氧体磁芯 (FerriteCore) - Forge¨ferritecore-fabric|铁氧体磁芯 (FerriteCore) - Fabric
+@ferrite-core|铁氧体磁芯 (FerriteCore)¨ferritecore|铁氧体磁芯 (FerriteCore) - Forge¨ferritecore-fabric|铁氧体磁芯 (FerriteCore) - Fabric
thaumcraft-research-patcher
masterful-machinery||1245140
minecraft-earth-mod|Derec的地球生物 (Derec's Earth Mobs)
@@ -3909,7 +3909,7 @@ rpgz
scavenge-timing-addon
cull-particles|粒子渲染机制优化* - Forge|1110993¨cull-particles-fabric|粒子渲染机制优化 (Cull Particles) - Fabric|1110993
majos-broom|魔女的扫帚 (Majo's broom)|1182237
-seamless-loading-screen|无缝加载界面* - Fabric¨seamless-loading-screen-forge|无缝加载界面 (Seamless Loading Screen) - Forge
+seamless-loading-screen@|无缝加载界面*¨seamless-loading-screen-forge|无缝加载界面 (Seamless Loading Screen) - Forge
curios-quark-oddities-backpack|夸克背包饰品*
nature-expansion
@@ -3930,7 +3930,7 @@ incubation
create-plus
-coloured-tooltips
+coloured-tooltips¨@colored-tooltips-fabric
magicraft-magic|魔法材料 (Magical Materials)
glowstone-ores|荧石矿石*
more-wires
@@ -3944,16 +3944,16 @@ forgerocks
ballistix|弹道学*
wireless-industry||1338617
spice-of-life-tonio-edition|生活调味料:托尼欧版 (Spice of Life: Tonio Editon)
-husk-spawn|尸壳生成微调* - Forge¨husk-spawn-fabric|尸壳生成微调 (Husk Spawn) - Fabric
+husk-spawn|尸壳生成微调* - Forge¨husk-spawn-fabric|尸壳生成微调 (Husk Spawn) - Fabric¨@husk-spawn|尸壳生成微调 (Husk Spawn)
artisan-tools-1-16|工匠工具 (Artisan Tools)
-yttr
+yttr@
wisla
mixin-0-7-0-8-compatibility|兼容Mixin0.7-0.8 (Mixin 0.7-0.8 Compatibility)
farplanetwo|远平面2 (Far Plane Two)
xenoclus-one
satako-library
unique-enchantments-utils|独特的附魔:效用扩展 (Unique Enchantments - Utils)
-ae2ao¨forge-ae2-additional-opportunity
+ae2ao¨forge-ae2-additional-opportunity¨@ae2ao
iconexporter
curious-shulker-boxes|潜影盒插槽 (Curious Shulker Boxes/Trinket Shulker Boxes) - Forge¨curious-shulker-boxes-fabric|潜影盒插槽 (Curious Shulker Boxes/Trinket Shulker Boxes) - Fabric
xenoclus-2
@@ -3966,7 +3966,7 @@ boat-contraptions
ender-rift
splashanimation
-continue-button|继续按钮*
+continue-button@|继续按钮*
chem-craft|化学工艺*
time-in-a-bottle-standalone|时间之瓶 (Time in a bottle standalone)
@@ -3982,20 +3982,20 @@ playtime-counter-fabric|游戏时长计数器 (Playtime Counter)
entity-banners|实体旗帜*
curious-jetpacks
curious-armor-stands-fabric¨curious-armor-stands
-trinkets-fabric
+trinkets-fabric@trinkets
occultism|神秘学*|1077431
-stray-spawn|流浪者生成微调* - Forge¨stray-spawn-fabric|流浪者生成微调 (Stray Spawn) - Fabric
-mooshroom-spawn|哞菇生成微调* - Forge¨mooshroom-spawn-fabric|哞菇生成微调 (Mooshroom Spawn) - Fabric
-cardinal-components
+stray-spawn|流浪者生成微调* - Forge¨stray-spawn-fabric|流浪者生成微调 (Stray Spawn) - Fabric¨@stray-spawn|流浪者生成微调 (Stray Spawn)
+mooshroom-spawn|哞菇生成微调* - Forge¨mooshroom-spawn-fabric|哞菇生成微调 (Mooshroom Spawn) - Fabric¨@mooshroom-spawn|哞菇生成微调 (Mooshroom Spawn)
+cardinal-components@cardinal-components-api
integrated-proxy|集成代理器*
a-cobblestone-crafting-table|圆石工作台*
colored-iron
final-kobold
-ears|耳朵*
-wildfires-female-gender-mod-forge¨wildfires-female-gender-mod-fabric
-consistencyplus
+ears@|耳朵*
+wildfires-female-gender-mod-forge¨wildfires-female-gender-mod-fabric¨@female-gender
+consistencyplus@
modularwarfare|模块化战争/模块化武装 (ModularWarfare)
mputils-basic-tools
the-agartha-mod
@@ -4020,10 +4020,10 @@ magical-crops-decorative
magical-crops-armoury
simpleeco|简单经济 (SimpleEconomy)
-vistas
+vistas@
fish-in-planks
-fish-on-the-line¨fish-on-the-line-fabric
+fish-on-the-line¨fish-on-the-line-fabric¨@fish-on-the-line
fish-traps|鱼栅*
combustive-fishing
fabric-survival-island
@@ -4037,7 +4037,7 @@ the-survivalists-mod
campfire-overhaul
shatter
electric-self-balance-scooters|电动平衡车 (Electric Self-balance Scooters)
-rats-mischief
+rats-mischief@
dream-rng
wandering-trader-improvements
@@ -4050,13 +4050,13 @@ enderpig-mod|末影猪*
atomic-bomb-1-16|枪,炮,原子弹! (Guns, Rockets and Atomic Explosions)
se-sign-shop|简单经济:牌子商店 (SE: Sign Shop)
-fancymenu-forge||1367170¨fancymenu-fabric||1367170
+fancymenu-forge||1367170¨fancymenu-fabric||1367170¨@fancymenu||1367170
halogen|卤素*
-zetamod|泽塔 (ZetaForged/Zeta's Mod)
+zetamod@zetaforged|泽塔 (ZetaForged/Zeta's Mod)
wholetreeaxe
-fabrishot|高清截图Fabric*
+fabrishot@|高清截图Fabric*
materialisation|物质化*
recipebuffers|配方缓冲 (RecipeBuffers)
@@ -4070,74 +4070,74 @@ fat-experience-orbs|肥胖经验球 ([Fabric] Fat Experience Orbs)
better-pipes|更好的管道*
truetype-font-replacement||616658
fluidlogged-api
-spark|火花 (spark)
+spark@|火花 (spark)
mco
guardians-galore
cogwheel-tweaker
-ultra-amplified-mod|超大群系维度 (Ultra Amplified Dimension) - Forge¨ultra-amplified-dimension-fabric|超大群系维度 (Ultra Amplified Dimension) - Fabric
+ultra-amplified-mod|超大群系维度 (Ultra Amplified Dimension) - Forge¨ultra-amplified-dimension-fabric|超大群系维度 (Ultra Amplified Dimension) - Fabric¨@ultra-amplified-dimension|超大群系维度 (Ultra Amplified Dimension)
classical-art|经典艺术* - Forge¨classical-art-fabric|经典艺术 (Classical Art) - Fabric
emc-baubles|等价饰品 (EMC Baubles)
lag-removal
gender
-ticktock
+ticktock@servertick
fps-reducre-for-fabric|FPS减速器(Fabric) (FPS Reducer (For Fabric))
art-artillery|艺术?火炮! (Art? Artillery!)
-minemenufabric|我的菜单Fabric版 (MineMenuFabric)
-
-afkpeace
+minemenu-refabricated@minemenufabric|我的菜单 Fabric 版 (MineMenuFabric)
+@tabtps
+@afkpeace¨afkpeace
secret-rooms-fabric
-smooth-chunks|平滑区块加载*
+smooth-chunks@|平滑区块加载*
saturationoverflow|饱和度溢出 (Saturation Over flow)|838721
-phantom-blood|幻影之血*
+phantom-blood@phantomblood|幻影之血*
searchable-containers|可搜索容器*
integrated-additions|集成扩展*
matchlock-guns|火绳枪*
-fabric-autoswitch|自动切换工具 (AutoSwitch)
-inventory-profiles-next|一键背包整理Next*
+fabric-autoswitch@autoswitch|自动切换工具 (AutoSwitch)
+inventory-profiles-next@|一键背包整理Next*
drill|钻头*
ore-tree|矿物树*|1214379
ferdinands-flowers
-clear-water|清澈的水*
+clear-water@|清澈的水*
applied-energistics-2-wireless-terminals-forge|AE2无线终端Forge版*
ferroustry
village-employment|村庄就业*
-deathlog|死亡日志*
+deathlog@|死亡日志*
automatic-elytra|自动鞘翅*
axolotl-bucket-fix|美西螈桶修复*
xks-decoration|XK的装饰 (XK's Deco)|1214362
endgame-materials-addons|更多终局材料*
ravage-and-cabbage
stackup||1026496
-simple-anti-x-ray
-breakme
-mod-info-command
-hexxit-gear-fabric
+simple-anti-x-ray@sax
+breakme@
+mod-info-command@mod-info-cmd
+hexxit-gear-fabric@hexxitgear
buffed-tools|属性工具*
thaumcraft-nei-plugin|神秘时代NEI插件 (Thaumcraft NEI Plugin)|357554
moarrecipes|更多的配方 (MoarRecipes)
luminium
-
+@better-nether-map
iguanatweaks-reborn|蜥蜴微调重生 (IguanaTweaks Reborn)
enter-the-void|进入虚空 (Enter the void)
tensura-mod-that-time-i-got-reincarnated-as-a-slime|关于我转生变成史莱姆这档事 (Tensura Mod -That time I got reincarnated as a Slime)
speedometer|速度表*
-falling-leaves-forge|落叶 (Falling Leaves (Forge))
+falling-leaves-forge@fallingleavesforge|落叶 (Falling Leaves (Forge))
-custom-entity-models-cem|自定义实体模型 (Custom Entity Models)
+custom-entity-models-cem@cem|自定义实体模型 (Custom Entity Models)
tweakmyclient
-lovely-snails|可爱蜗牛*
+lovely-snails@lovely_snails|可爱蜗牛*
ourse-mod
clipboard|备忘录*
crimson-nbt-tags
@@ -4166,7 +4166,7 @@ auto-attack|自动攻击*
tamagotti
signal|讯号*
-realistic-horse-genetics|真实马匹遗传*
+realistic-horse-genetics@|真实马匹遗传*
timeless-and-classic-guns|永恒枪械工坊 (Timeless and Classics)|1264237
tool-progression|工具进阶*
@@ -4175,7 +4175,7 @@ a-paimon|派蒙*
music-maker-mod
penguin-lib
-flywheel|飞轮*
+flywheel|飞轮*¨@flywheel|飞轮 (Flywheel)
coralreef|珊瑚礁 (CoralReef)
@@ -4186,8 +4186,8 @@ alexs-mobs-battle-music
lava-waders-bauble|熔岩魔靴饰品*
hardcore-revival|硬核复活* - Forge¨hardcore-revival-fabric|硬核复活 (Hardcore Revival) - Fabric
additional-guns|更多的枪*
-oh-my-minecraft-client
-wooden-armors-stone-armor|木制盔甲 (Wooden Armors Mod)
+oh-my-minecraft-client@
+wooden-armors-stone-armor@woodenarmor|木制盔甲 (Wooden Armors Mod)
insanelib
daydreamer
@@ -4199,8 +4199,8 @@ PickupWidely
lilliputian
sampler
-custom-splash-screen|自定义加载界面*
-masa-gadget
+custom-splash-screen@|自定义加载界面*
+masa-gadget@
meet-your-fight|迎战*
hot-or-not-plus
macaws-furniture-tfc
@@ -4219,12 +4219,12 @@ water-flasks
structure-world
macaws-lights-and-lamps|Macaw的灯 (Macaw's Lights and Lamps)
-terrarian-slimes
+terrarian-slimes@
create-gears|机械动力:齿轮附加*
simple-big-backpack
croptopia|作物盛景*|1192701
firmalife
-supermartijn642s-core-lib
+supermartijn642s-core-lib@
cherished-worlds|存档置顶* - Forge|1104346¨cherished-worlds-fabric|存档置顶 (Cherished Worlds) - Fabric|1104346
ironfist|铁拳*|399076
@@ -4235,8 +4235,8 @@ its-the-little-things
fruitful|硕果累累* - Forge¨fruitful-fabric|硕果累累 (Fruitful) - Fabric
environmental-energy|环境科技-发电机*
nakranoths-herdcraft|群兽行为 (Nakranoth's Herdcraft)
-lambdabettergrass|Lambda的更好的草方块 (LambdaBetterGrass)
-
+lambdabettergrass@|Lambda的更好的草方块 (LambdaBetterGrass)
+@client-commands
bright-ore|矿石高亮*|1201226
chinese-style-sword|中式剑 (Arsenal Core)
@@ -4252,13 +4252,13 @@ mr-pineapples-food-mod
legacyvault
shopaholic
-ok-zoomer
-untitled-duck-mod-forge|无题鸭 (Untitled Duck) - Forge¨untitled-duck-mod-fabric|无题鸭 (Untitled Duck) - Fabric
+ok-zoomer@
+untitled-duck-mod-forge|无题鸭 (Untitled Duck) - Forge¨untitled-duck-mod-fabric|无题鸭 (Untitled Duck) - Fabric¨@untitled-duck-mod|无题鸭 (Untitled Duck)
v-tweaks
fairenchanting|公平附魔 (FairEnchanting)
bedspreads¨bedspreads-fabric
piglib
-nether-portal-spread¨nether-portal-spread-fabric
+nether-portal-spread¨nether-portal-spread-fabric¨@nether-portal-spread
x-hp
mr-pineapples-toy-guns
@@ -4274,9 +4274,9 @@ miniutilities|迷你实用设备 (Mini Utilities)
stumble-upon-campsites|邂逅:营地 (Stumble Upon: Campsites)
nomad-books|游牧之书*
yungs-extras¨yungs-extras-fabric
-stoneholm-forge|地下村庄 (Stoneholm, Underground Villages) - Forge¨stoneholm|地下村庄 (Stoneholm, Underground Villages) - Fabric
+stoneholm-forge|地下村庄 (Stoneholm, Underground Villages) - Forge¨stoneholm@|地下村庄 (Stoneholm, Underground Villages)
-inspecio
+inspecio@
special-ai|特殊AI (Special AI)|457169
dream-waifu-mod|梦中情人 (Dream Waifu mod)
help-wanted|求助*
@@ -4288,7 +4288,7 @@ reroll|刷新附魔*
tax-free-levels|免税附魔*
portable-dimensions|便携式传送门*
stone-age-by-yanny
-terra-world-generator
+terra-world-generator@terra
omnis|灾厄村民拓展*
omnis-backpacks
@@ -4298,45 +4298,45 @@ better-combat-rebirth|更好的战斗:重生*|813690
iron-and-gold-from-1-17|来自 1.17 的铁和金 (iron and gold from 1.17)
immersive-cooking|沉浸烹饪*
structured-crafting
-random-shulker-colours|随机潜影贝颜色* - Forge¨random-shulker-colours-fabric|随机潜影贝颜色 (Random Shulker Colours) - Fabric
+random-shulker-colours|随机潜影贝颜色* - Forge¨random-shulker-colours-fabric|随机潜影贝颜色 (Random Shulker Colours) - Fabric¨@random-shulker-colours|随机潜影贝颜色 (Random Shulker Colours)
create-automated
-random-sheep-colours|随机绵羊颜色* - Forge¨random-sheep-colours-fabric|随机绵羊颜色 (Random Sheep Colours) - Fabric
-sleep-sooner|早点睡* - Forge¨sleep-sooner-fabric|早点睡 (Sleep Sooner) - Fabric
-respawning-shulkers|潜影贝重生* - Forge¨respawning-shulkers-fabric|潜影贝重生 (Respawning Shulkers) - Fabric
-respawn-delay-fabric|延迟重生 (Respawn Delay)
-realistic-bees|真实的蜜蜂*
-recast|持续钓鱼* - Forge¨recast-fabric|持续钓鱼 (Recast) - Fabric
-softer-hay-bales|柔软的干草块* - Forge¨softer-hay-bales-fabric|柔软的干草块 (Softer Hay Bales) - Fabric
+random-sheep-colours|随机绵羊颜色* - Forge¨random-sheep-colours-fabric|随机绵羊颜色 (Random Sheep Colours) - Fabric¨@random-sheep-colours|随机绵羊颜色 (Random Sheep Colours)
+sleep-sooner|早点睡* - Forge¨sleep-sooner-fabric|早点睡 (Sleep Sooner) - Fabric¨@sleep-sooner|早点睡 (Sleep Sooner)
+respawning-shulkers|潜影贝重生* - Forge¨respawning-shulkers-fabric|潜影贝重生 (Respawning Shulkers) - Fabric¨@respawning-shulkers|潜影贝重生 (Respawning Shulkers)
+respawn-delay-fabric|延迟重生 (Respawn Delay)¨@respawn-delay|延迟重生 (Respawn Delay)
+realistic-bees@|真实的蜜蜂*
+recast|持续钓鱼* - Forge¨recast-fabric|持续钓鱼 (Recast) - Fabric¨@recast|持续钓鱼 (Recast)
+softer-hay-bales|柔软的干草块* - Forge¨softer-hay-bales-fabric|柔软的干草块 (Softer Hay Bales) - Fabric¨@softer-hay-bales|柔软的干草块 (Softer Hay Bales)
portable-jukebox-forge|便携式唱片机 (Portable Jukebox) - Forge/Fabric/Quilt¨portable-jukebox-fabric|便携式唱片机 (Portable Jukebox) - Fabric(OLD)
-spiders-produce-webs|蜘蛛吐网* - Forge¨spiders-produce-webs-fabric|蜘蛛吐网 (Spiders Produce Webs) - Fabric
+spiders-produce-webs|蜘蛛吐网* - Forge¨spiders-produce-webs-fabric|蜘蛛吐网 (Spiders Produce Webs) - Fabric¨@spiders-produce-webs|蜘蛛吐网 (Spiders Produce Webs)
assassins-creed-blocklegend|刺客信条:方块传奇 (Assassin's Creed Blocklegend)|1168306
gravestone-mod-graves|墓碑坟墓 (Gravestone mod Graves)
the-earth-mod|地球*
-lifts|电梯*
+lifts@|电梯*
corail-recycler|Corail的回收站*|1161400
-move-minecarts|可移动的矿车*
-inventory-totem|更好的图腾* - Forge¨inventory-totem-fabric|更好的图腾 (Inventory Totem) - Fabric
+move-minecarts@|可移动的矿车*
+inventory-totem|更好的图腾* - Forge¨inventory-totem-fabric|更好的图腾 (Inventory Totem) - Fabric¨@inventory-totem|更好的图腾 (Inventory Totem)
lava-picker-upper|熔岩收集器*
-nethers-exoticism
+nethers-exoticism@
everpotion|永恒药水 ⚗️ (EverPotion ⚗️)
quick-shulker|快捷潜影盒*
respawnable-pets|宠物可重生*
schmucks|小阿呆 (Schmucks!)
-automatic-doors|自动门* - Forge¨automatic-doors-fabric|自动门 (Automatic Doors) - Fabric
-configurable-despawn-timer
+automatic-doors|自动门* - Forge¨automatic-doors-fabric|自动门 (Automatic Doors) - Fabric¨@automatic-doors|自动门 (Automatic Doors)
+configurable-despawn-timer@
chunkmap|区块加载小地图 (ChunkMap)|1225181
inventory-tabs
-bottle-your-xp|装瓶你的经验* - Forge¨bottle-your-xp-fabric|装瓶你的经验 (Bottle Your Xp) - Fabric
+bottle-your-xp|装瓶你的经验* - Forge¨bottle-your-xp-fabric|装瓶你的经验 (Bottle Your Xp) - Fabric¨@bottle-your-xp|装瓶你的经验 (Bottle Your Xp)
gravestone-mod-extended|墓碑坟墓 - 拓展 (Gravestone mod - Extended)
-better-enchanted-books|更好的附魔书*
+better-enchanted-books@|更好的附魔书*
easy-steel-forge
-fabric-waystones|Fabric版传送石碑*|1129480
+fabric-waystones@fwaystones|Fabric版传送石碑*|1129480
-dark-enchanting|暗黑附魔*
+dark-enchanting@|暗黑附魔*
better-wandering-traders|更好的流浪商人*
-superflat-world-no-slimes|没有史莱姆的超平坦世界* - Forge¨superflat-world-no-slimes-fabric|没有史莱姆的超平坦世界 (Superflat World No Slimes) - Fabric
+superflat-world-no-slimes|没有史莱姆的超平坦世界* - Forge¨superflat-world-no-slimes-fabric|没有史莱姆的超平坦世界 (Superflat World No Slimes) - Fabric¨@superflat-world-no-slimes|没有史莱姆的超平坦世界 (Superflat World No Slimes)
scorge
beaconoverhaul|信标改革 (Beacon Overhaul)
@@ -4353,7 +4353,7 @@ fancyhud¨spiffy-hud-fabric
advanced-compass|高级指南针*
salutem
the-sol|太阳系*
-better-beds|更好的床*
+better-beds@|更好的床*
world-lives-mod
lib
@@ -4373,9 +4373,9 @@ modern-loading-screen|现代加载界面*|1235709
transliterationlib
-rpmtw-update-mod|RPMTW平台模組 (RPMTW Platform Mod)|1238681
+rpmtw-update-mod@|RPMTW平台模組 (RPMTW Platform Mod)|1238681
farsight-spyglasses
-not-enough-animations|更多动画*
+not-enough-animations@|更多动画*
better-beacon|更好的信标与潮涌核心 (Better Beacon / Conduit)
dungeon-now-loading
@@ -4388,12 +4388,12 @@ keyboard-wizard|按键精灵*|695626
piscary
storage-cabinet|储藏柜*
-first-person-model|更真实的第一人称模型 (First-person Model)
-randore¨randore-forge
+first-person-model@|更真实的第一人称模型 (First-person Model)
+@randore¨randore¨randore-forge
rising-uppercut|上勾拳*|1240641
-jackie-chan-s-weapon|成龙的武器 (Jackie Chan`s weapon)|1237674
+jackie-chan-s-weapon|成龙的武器 (Jackie Chan's weapon)|1237674
explorers-compass|探险者指南针 (Explorer's Compass)|1286168
-gravestones|墓碑*
+gravestones@|墓碑*
crafting-dead-survival|行尸走肉:生存 (Crafting Dead: Survival)
redstone-control-2|红石控制2*
csenchants
@@ -4402,7 +4402,7 @@ mystical-customization
fmprojecte-fmpe|等价交换重制-EMC上限扩展版 (FMProjectE)
-ibe-editor
+ibe-editor@
exotic-critters
archers-paradox|弓箭手悖论 (Archer's Paradox)
dynamic-trees-neapolitan|动态的树:那不勒斯风味附属 (Dynamic Trees - Neapolitan)
@@ -4410,15 +4410,15 @@ dynamic-trees-neapolitan|动态的树:那不勒斯风味附属 (Dynamic Trees
randomite-classic
wilds
-roughly-searchable
-cull-leaves|树叶渲染优化*
+roughly-searchable@
+cull-leaves@|树叶渲染优化*
dynamic-trees-atum-2|动态的树:阿图姆2附属 (Dynamic Trees - Atum 2)
randomtweaker
-iron-chests-fabric
+
steamworld
-falling-leaves-fabric|落叶 (Falling Leaves (Fabric))
+falling-leaves-fabric@fallingleaves|落叶 (Falling Leaves (Fabric))
craftable-creative-ability|可合成的创造能力强化*
not-enough-energistics
terracore
@@ -4429,7 +4429,7 @@ power-drop|蓄力投掷*
yungs-better-dungeons|YUNG的地牢优化 (YUNG's Better Dungeons) - Forge¨yungs-better-dungeons-fabric|YUNG的地牢优化 (YUNG's Better Dungeons) - Fabric
ore-controller
-morechickens|更多鸡 (MoreChickens)
+morechickens@|更多鸡 (MoreChickens)
ghosts-explosives-2
weapon-throw|武器投掷* - Forge¨weaponthrowlite|武器投掷 (Weapon Throw) - Fabric
more-villagers|更多村民* - Forge¨more-villagers-fabric|更多村民 (More Villagers) - Fabric
@@ -4461,7 +4461,7 @@ neubulaeko-slime|星云子史莱姆*
fantasysoup
-just-enough-professions-jep|JEI工作方块 (Just Enough Professions)
+just-enough-professions-jep@|JEI工作方块 (Just Enough Professions)
plumed-belt
@@ -4474,57 +4474,57 @@ expand-chinese-sword|中式剑拓展 (Arsenal Integration)
littleframes|小画 (LittleFrames)
lavalogged-blocks|岩浆充填 (Lavalogged blocks)
awoken-world
-gt4-reimagined|格雷科技4:重构想 (GregTech 4 Reimagined)
+gt4-reimagined@gt4r|格雷科技4:重构想 (GregTech 4 Reimagined)
camouflaged-creepers
ore-tweaker
openpython
jei-lotr
-capes
+capes@
attack-speed-enchantment|攻击速度附魔*
natures-minerals
-balm¨balm-fabric
+balm¨balm-fabric¨@balm
resource-hogs|资源猪 (Resourse Hogs)|1037377
advanced-xray|高级透视 (Advanced XRay) - Forge¨advanced-xray-fabric-edition|高级透视 (Advanced XRay) - Fabric
ring-of-attraction-forge|吸引戒指 (Ring of Attraction) - Forge¨ring-of-attraction-fabric|吸引戒指 (Ring of Attraction) - Fabric
-customhud|自定义HUD (CustomHud)
+customhud@|自定义HUD (CustomHud)
deadly-world|致命世界*|457226
-fastdecay
-essential-commands
+fastdecay@
+essential-commands@
caves-and-cliffs-backport
that-future-mod-glow-squid-axolotl-moobloom-etc
diamond-buildcraft|钻石装饰*
apocalypse-rebooted|启示录重制*|1254381
-mcwifipnp|更高级联机设置 (LAN World Plug-n-Play)|1244608
+mcwifipnp@|更高级联机设置 (LAN World Plug-n-Play)|1244608
requious-frakto
capsule
-isometric-renders|等轴渲染*
+isometric-renders@|等轴渲染*
enchanting-secretaire|附魔记录*|1250073
-sync-fabric|克隆(Fabric) (Sync (Fabric))
+sync-fabric@|克隆(Fabric) (Sync (Fabric))
tale-of-kingdoms-a-new-conquest|王国:新征程 (Tale of Kingdoms: A new Conquest)
-schwarz|黑*
-megane
-crusade
+schwarz@|黑*
+megane@
+crusade@
vending-machine|售货机*
modernxl
-taiga2|匠魂合金附加2 (Tinkers Alloying Addon Port)
+taiga2@|匠魂合金附加2 (Tinkers Alloying Addon Port)
chunkgenlimited|区块生成限制 (ChunkGenLimiter)|1041769
more-crafting-tables-for-forge|更多工作台 (More Crafting Tables for Forge!)
-repurposed-structures|结构变体* - Forge¨repurposed-structures-fabric|结构变体 (Repurposed Structures) - Fabric/Quilt
+repurposed-structures@repurposed-structures-forge|结构变体* - Forge¨repurposed-structures-fabric@|结构变体 (Repurposed Structures) - Fabric/Quilt
ezpas
electrona||1314239
-
-reasonable-sorting|合理排序*
+@mcg
+reasonable-sorting@|合理排序*
chat-heads|聊天头像*
hidden-armor|隐藏盔甲*
majruszs-progressive-difficulty|Majrusz的进阶难度 (Majrusz's Progressive Difficulty)
pharmacist|药师*
-kappa
+kappa@
equivalent-integrations|等价集成*
keep-equipment|保留装备*
herobrines-origin|Herobrine的起源 (Herobrine's Origin)
@@ -4532,7 +4532,7 @@ the-abyss|深渊:远古 (The Abyss: Legacy)
sekiro-sense-symbols
lurker|Cold的潜伏者 (Colds: Lurker)
cavebiomeapi¨cavebiomeapi-fabric
-extended-block-shapes|扩展方块形状*
+extended-block-shapes@extshape|扩展方块形状*
passive-mobs
sponsor|赞助者*|1080837
@@ -4543,14 +4543,14 @@ more-and-more-minerals|越来越多的矿物 (more and more minerals)
permafrost
scootys-plants-vs-zombies-2|Scooty的植物大战僵尸2 (Scooty's Plant Vs. Zombies 2)
-better-furnaces-reforged|更好的熔炉重铸版 (BetterFurnaces Reforged)
+better-furnaces-reforged@|更好的熔炉重铸版 (BetterFurnaces Reforged)
schools-of-magic-second-semester|魔法学校:第二学期 (Schools of Magic: Second Semester)
dark-loading-screen|深色加载界面*
hals-exploration-mod
farmers-delight-cookbook-addon|农夫乐事:烹饪书拓展 (Farmer's Delight Cookbook Addon)
-heads-down-display
+heads-down-display¨@head-down-display
mrcrayfish-more-furniture-mod|MrCrayfish 的更多家具 (MrCrayfish's More Furniture Mod)
multi-world
@@ -4564,7 +4564,7 @@ nethers-delight|下界乐事 (Nether's Delight)
farmers-extra-foods|农夫的拓展食物 (Farmer's Extra Foods)
tinkers-delight|工匠乐事 (Tinker's Delight)
-
+@flashfreeze
majruszs-accessories|Majrusz的配件 (Majrusz's Accessories)
water-2-mana
@@ -4577,7 +4577,7 @@ playing-cards
rainbow-oak-trees-2|彩虹橡树2*
mapfrontiers|地图边界 (MapFrontiers)
customizable-elytra|可自定义鞘翅* - Forge¨customizable-elytra-fabric|可自定义鞘翅 (Customizable Elytra) - Fabric
-puzzles-lib¨puzzles-lib-fabric
+puzzles-lib¨puzzles-lib-fabric¨@puzzles-lib
unique-enchantments-base|独特的附魔:基础*
ore-stages|矿石阶段*
krays-magic-candles
@@ -4585,37 +4585,37 @@ thaumcraft-localization-optimizer|神秘时代本地化优化*
drink-beer-fabric|喝啤酒啦 (Drink Beer) - Fabric¨drink-beer-forge|喝啤酒啦 (Drink Beer) - Forge
emerald-tools-armour
hidden-recipe-book|隐藏配方书*
-kibe|羊肉面饼实用设备 (Kibe Utilities)
+kibe@|羊肉面饼实用设备 (Kibe Utilities)
poisoncraft|毒药工艺 (Poison craft)
-detail-armor-bar|细节盔甲* - Fabric 版本¨detail-armor-bar-forge|细节盔甲 (Detail Armor Bar) - Forge 版本
+detail-armor-bar|细节盔甲* - Fabric 版本¨detail-armor-bar-forge|细节盔甲 (Detail Armor Bar) - Forge 版本¨@detail-armor-bar|细节盔甲 (Detail Armor Bar)
wings-horns-hooves-the-ultimate-unicorn-mod
project-rankine|兰金计划*
-tinkers-mechworks
+tinkers-mechworks@
qdc-quantum-dis-assembly-craft|量子拆解工艺 (Quantum Dis-Assembly Craft)
william-wythers-overhauled-overworld
infinite-music
cobbler|可靠的潜影贝工厂 (Shulker's Faithful Factories/Cobbler)
nether-fast-transport-layer
the-outer-end
-hamncheese
+hamncheese@
buzzy-drones
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 - 1.16.5Fabric版本¨miskatonic-mysteries-legacy|Miskatonic Mysteries - 1.12.2Forge版本,未完成且弃坑
harvesters-night|收割者之夜 (Harvester's Night)
-slotlock|锁定槽 (SlotLock)
+slotlock@|锁定槽 (SlotLock)
-panorama-tweaker
+panorama-tweaker@
simple-tomb|简单坟墓*
modern-life|摩登生活*
paxi-fabric¨paxi
-waveycapes|飘扬披风 (Wavey Capes)
-skin-layers-3d|3D皮肤层 (Skin Layers 3D)|1333790
+waveycapes@wavey-capes|飘扬披风 (Wavey Capes)
+skin-layers-3d@3dskinlayers|3D皮肤层 (Skin Layers 3D)|1333790
all-the-discs|唱片大全 (All the Discs)
cryptic-cosmos
bayou-blues|长沼蓝调* - Forge¨bayou-blues-fabric|长沼蓝调 (Bayou Blues) - Fabric
@@ -4623,8 +4623,8 @@ hex-lands|六边形地貌*
fixrtm
serene-tweaks
ScalingGuis|界面缩放 (ScalingGUIs)
-ide-better-command-block-forge-editor|更好的命令方块 (Better Command Block IDE) - Forge¨ide-better-command-block-fabric-editor|更好的命令方块 (Better Command Block IDE) - Fabric
-
+ide-better-command-block-forge-editor|更好的命令方块 (Better Command Block IDE) - Forge¨ide-better-command-block-fabric-editor|更好的命令方块 (Better Command Block IDE) - Fabric¨@ide-better-command-block-editor|更好的命令方块 (Better Command Block IDE)
+@breakfree|自由破坏 (Break Free)
tinkers-mechworks-fork
extended-nether-backport
borderless|无边框全屏 (Borderless Window)
@@ -4643,15 +4643,15 @@ gold-in-river-mod|河中淘金*
lorespawn|怪物巢穴*
creatuures
-fabrics-biome-api-reforged
-stalwart-dungeons|坚固地牢*
+fabrics-biome-api-reforged@fb-api-reforged
+stalwart-dungeons@|坚固地牢*
maidens-marvelous-materials
-nekoration|猫咪装饰*
+nekoration@|猫咪装饰*
tomb-many-graves-2
fins-and-tails|鳍和尾巴 (Fins and Tails)
smarter-farmers-farmers-replant|更聪明的农夫 (Smarter Farmers/Farmers Replant)|1285789
peculiars|独特风味*
-draggable-resource-packs|可拖动资源包*
+draggable-resource-packs@|可拖动资源包*
fastchest|快速箱子渲染 (FastChest)
yuushya-townscape-fabric|方块小镇 (Yuushya Townscape)|1255783
architects-palette-fabric|建筑师的调色板 (Architect's Palette) - Fabric¨architects-palette|建筑师的调色板 (Architect's Palette) - Forge
@@ -4667,7 +4667,7 @@ skinned-lanterns|灯笼皮肤* - Forge¨skinned-lanterns-fabric|灯笼皮肤 (Sk
scarecrows|稻草人*
seasonals|季节风味*
mimi-mod
-blocktuner|音符盒调音助手 (BlockTuner)|1253993
+blocktuner@|音符盒调音助手 (BlockTuner)|1253993
caged-mobs
advanced-rifles
tome-of-blood|血之宝典 (Tome of Blood)
@@ -4679,7 +4679,7 @@ raining-cats-and-dogs|猫狗雨 (Raining Cats and Dogs)
melt
stuff-a-sock-in-it|日志过滤器*
-supermartijn642s-config-lib
+supermartijn642s-config-lib@
small-ships
sound-engine-reloader|重新加载声音*
crystal-caves
@@ -4709,22 +4709,22 @@ botany-pots-tiers
compatchedstorage|紧凑存储修复 (ComPatchedStorage)
iseedragons
psionic-peripherals
-malum|灵灾*
+malum|灵灾* - Forge¨malum-quilt|灵灾 (Malum) - Qulit
allomancy|镕金术*
steamcraft2
boilerplate
meldexuns-crystalic-void
recipes-and-more
-llama-steeds|骑羊驼* - Fabric
+llama-steeds-forge|骑羊驼 (Llama Steeds) - Forge¨llama-steeds|骑羊驼* - Fabric
levellib
enigmatic-graves
-boat-item-view-forge|边划边看 (Boat Item View) - Forge|1365248¨boat-item-view|边划边看* - Fabric|1365248
+boat-item-view-forge|边划边看 (Boat Item View) - Forge|1365248¨boat-item-view|边划边看* - Fabric|1365248¨@boat-item-view|边划边看 (Boat Item View)|1365248
forge-creeper-heal-unofficial|Forge苦力怕坑修复[非官方版] (Forge Creeper Heal [Unofficial])
desolation-forge|荒芜 (Desolation) - Forge¨desolation|荒芜* - Fabric
ma-astral
zaraklib
chipped
-
+chest-cavity@|胸腔*
mending-for-1-7-10|给老版本的经验修补 (Mending for Older Version)
unreachable-fantasy-mod
ai-reducer|AI减速器 (AI Reducer)
@@ -4744,13 +4744,13 @@ better-diving|水世界/更好的潜水*
auto-sprint|自动冲刺:一键切换 (Auto Sprint : key toggle)
nebula-rpg
betternether-reforged|更好的下界Forge版 (BetterNether Reforged)
-item-stitching-fix|物品模型修复移植版*
+item-stitching-fix@|物品模型修复移植版*
blood-and-madness
afraid-of-the-dark
ores-above-diamonds|超越钻石*
crafting-automat
ingotter
-presence-footsteps|脚步声*
+presence-footsteps@|脚步声*
walk-the-air
castle-dungeons
mobs-properties-randomness
@@ -4775,7 +4775,7 @@ vanillatweaks
bacodifficulty
immersiveposts|沉浸长杆 (Immersive Posts)
fyres-youwilldiemod|必死无疑 (The "You Will Die" Mod)|309230
-old-walking-animation|旧版行走动画*
+old-walking-animation@|旧版行走动画*
enders-magic|末影魔法 (Ender's magic)
anvil-patch-lawful
elegant-networking
@@ -4797,7 +4797,7 @@ macaws-fences-and-walls|Macaw的栅栏与墙 (Macaw's Fences and Walls)
lunae-silva
rainbow6|我的六号 (Rainbow6:Minesiege)|1117023
-friendlyendermite|友好的末影螨 (FriendlyEndermite)
+friendlyendermite@friendermite|友好的末影螨 (FriendlyEndermite)
food-expansion|食物扩展*
forgotten-items|被遗忘的物品*
food-expansion-reimagined|食物扩展:重构想 (Food Expansion: Reimagined)
@@ -4832,8 +4832,8 @@ fabric-tickratechanger-mod|Fabric版运算变速 (Fabric TickRateChanger)
observable|可视性能侦测*
disenchantment-edit-table|祛魔编辑台*
-cit-resewn
-lazy-language-loader
+cit-resewn@
+lazy-language-loader@
clef
zettai-magic-2
@@ -4852,7 +4852,7 @@ milk-all-the-mobs¨milk-all-the-mobs-fabric
roadrunner
pokecube-aoi
grim-statues|Grim的雕像*
-oauth¨oauth-fabric
+oauth¨oauth-fabric¨@oauth
omaypaty-japan-mod
demon-slayer-mod-kimetu-no-yaiba|鬼灭之刃 (DEMON SLAYER MOD)|1086930
tipthescales
@@ -4864,7 +4864,7 @@ aquafina
way-through-dimension
journeymap-integration
-damage-tint|伤害色调*
+damage-tint@|伤害色调*
mo-spells
prehistoric-flora|史前自然 (Prehistoric Nature)
blade-works|剑制*
@@ -4890,11 +4890,11 @@ canals|水渠*
underground-loot-crates|地下战利品箱*
smooth-scrolling-everywhere|平滑滚动* - Forge¨smooth-scrolling-everywhere-fabric|平滑滚动 (Smooth Scrolling Everywhere) - Fabric
-sword-blocking|持剑格挡*
-better-mount-hud|更好的骑乘HUD*
-fire-overlay-controller|火焰叠加层调整*
+sword-blocking@|持剑格挡*
+better-mount-hud
+fire-overlay-controller@|火焰叠加层调整*
-particle-rain|粒子雨*
+particle-rain@|粒子雨*
sodium-reforged|镁 (Magnesium/Sodium Reforged)
phosphor-reforged|硫 (Sulfuric/Phosphor Reforged)
hydrogen-reforged|氦 (HeIium)
@@ -4902,16 +4902,16 @@ xl-food-mod-plus|超多食物+ (XL Food Mod+)
botconnect|群服互联🔗 (Bot Connect🔗)|1267022
ice-and-fire-dragonseeker
-reeses-sodium-options|Reese的钠视频界面 (Reese's Sodium Options)
-continuity
+reeses-sodium-options@|Reese的钠视频界面 (Reese's Sodium Options)
+continuity@
airportmod
-better-gui-scaling|更好的界面缩放 (Better GUI Scaling)
+better-gui-scaling@betterguiscaling|更好的界面缩放 (Better GUI Scaling)
titles|头衔*
skiing
cave-biomes
tatami
final-fantasy-12-mod
-mojangster|加载界面动画 (Mojangster (Animated Loading Screen))
+mojangster@|加载界面动画 (Mojangster (Animated Loading Screen))
anvil-tweaks
asphaltmod|沥青 (Asphalt Mod)|1012064
@@ -4923,7 +4923,7 @@ illagers|更多的灾厄村民 (Illagers+)
-villagers-follow-emeralds-fabric|村民跟随绿宝石 (Villagers follow Emeralds)
+villagers-follow-emeralds-fabric@|村民跟随绿宝石 (Villagers follow Emeralds)
diabloloot|暗黑破坏神战利品 (DiabloLoot)
yggdrasil|世界树*
@@ -4936,42 +4936,42 @@ opentoall
torchbowmod|火把弓 (TorchBowMod)|786206
esencia
weirdmobs
-enchantment-level-language-patch|附魔等级语言补丁 (EnchLevel-LangPatch)|1266496
+enchantment-level-language-patch|附魔等级语言补丁 (EnchLevel-LangPatch)|1266496¨@enchlevel-langpatch|附魔等级语言补丁 (EnchLevel-LangPatch)|1266496
open-to-lan
simple-translation|简单翻译*
fx-control|效果控制 (Fx control)
what-are-you-voting-for
steam-powered-create|蒸汽动力 (Create: Steam Powered)|1272372
-creepers-burn
+creepers-burn@CreepersBurn
pretty-game-enhhancing-gobblet-pgeg-remake|魔法森林重置版 (Pretty, Game-Enhhancing Gobblet Remake)|1237458
kvc-equipment|蛋挞君的原版补全装备篇 (KVCEquipment)|1224426
mooshroomcraft|哞菇工艺*|990356
unearthed|出土* - Forge / Fabric¨unearthed-fabric|出土 (Unearthed) - 1.1.1<= Fabric
-terrestria¨terrestria-reforged
+terrestria@¨terrestria-reforged
simplex-terrain-generation|Simplex地形生成器*
-enderscape
-goblin-traders-fabric|哥布林商人Fabric版 (Goblin Traders (Fabric))
-lakeside|湖畔*
+enderscape@
+goblin-traders-fabric|哥布林商人Fabric版 (Goblin Traders (Fabric))¨@goblin-traders-fabric|哥布林商人Fabric版 (Goblin Traders (Fabric))
+@lakeside|湖畔 (Lakeside)¨lakeside|湖畔*
chenziqius-originality|CHENZIQIU的创意 (CHENZIQIU's Originality)
-alloy-forgery
-mechanical-tech|机械科技*|1347516
+@alloy-forgery¨alloy-forgery
+mechanical-tech@|机械科技*|1347516
one-block-forge
human-reborn
-additional-additions|额外扩展* - Fabric¨additional-additions-forge|额外扩展 (Additional Additions) - Forge
-earlygame
+@addadd|额外扩展 (Additional Additions)¨additional-additions|额外扩展* - Fabric¨additional-additions-forge|额外扩展 (Additional Additions) - Forge
+earlygame@
happiness-is-a-warm-gun
kvc-blocks|蛋挞君的原版补全方块篇 (KVCBlocks)|1239534
-enigtech2-util|蝙蝠快乐:ET2专版 (EnigTech2 Util)
+enigtech2-util
environmental-creepers|环保型苦力怕*
look-at-that
advanced-peripherals
-nether-chest-fabric
+nether-chest-fabric@nether-chest
levelz||1409943
betterend-re-forked|更好的末地Forge重铸版 (BetterEnd Reforked)
@@ -4987,15 +4987,15 @@ squirrels|松鼠*
ftb-power-pots
the-graveyard-forge|墓园 (The Graveyard) - Forge¨the-graveyard-fabric|墓园 (The Graveyard) - Fabric
nether-agriculture|下界农业*
-conjuring
+conjuring@
awesome-dungeon-forge¨awesome-dungeon-fabric
out-of-sight
decorative-blocks-modded-compat|装饰方块模组兼容 (Decorative Blocks modded compat)
camp-chair
size-matters
-chalk
+chalk@chalk-mod|粉笔*
chalk-fabric
-
+@modmanager|模组管理器 (Mod Manager)
yarcf|合成冲突消除 (Yet Another Recipe Conflict Fixer)
drones
ticbc
@@ -5003,16 +5003,16 @@ ticbc
meetle
tarot|塔罗*
forcecraft|力量工艺 (ForceCraft)
-right-click-harvest|右击收割 (Right-Click-Harvest)
+right-click-harvest@|右击收割 (Right-Click-Harvest)
custom-content-packs
cake-chomps¨cake-chomps-fabric
-lod-level-of-detail
+lod-level-of-detail@distanthorizons
betterp2p|更好的P2P支持 (Better P2P)|1270402
-ob-aquamirae
+ob-aquamirae|海灵物语 (Aquamirae Mod)
nuclear-tfc
just-more-cakes|只是更多的蛋糕! (Just More Cakes!)
image-mod
-reinforced-barrels|增强木桶*
+reinforced-barrels|增强木桶*¨@reinforced-barrels|增强木桶 (Reinforced Barrels)
spyglass-zoom|望远镜变焦*
npc-variety-port|NPC变体 (NPC Variety)
just-enough-effects
@@ -5035,13 +5035,13 @@ savage-ender-dragon|更凶猛的末影龙*
age-of-weapons|武器时代 (Age of Weapons)|789398
drawerstorage-keychain|抽屉钥匙扣 (DrawerStorage Keychain)
-fracdustry|分形工业 (Fractal Industry)
+fracdustry@|分形工业 (Fractal Industry)
magical-forest|魔法森林*
-skin-swapper|皮肤更换器*
+skin-swapper@skinswapper|皮肤更换器*
-owo-lib
-picturesign
+owo-lib@
+picturesign@
divine-missions|神圣任务*
gregsieves|格雷筛子 (GregSieves)
gregtech-food-option|格雷科技食物优选 (GregTech Food Option)
@@ -5054,12 +5054,12 @@ mobz
villagerquests|村民任务 (VillagerQuests)
environmentz
-homing-ender-eye|回归之眼*|1275011
+homing-ender-eye@|回归之眼*|1275011
magical-crops-regrowth-1-16-5|魔法作物:重生 (Magical Crops: Regrowth)
voidz
mining-master
-victus
+victus@
lots-of-food-revived|更多食物:复生 (Lots of Food Revived)
dontstarve|不要饿死2 (DontStarve2)|1275610
steves-universe-space-mod
@@ -5071,17 +5071,17 @@ unnamed-animal-mod|无名动物模组*
camels|骆驼*
food-effects
item-borders|物品边框* - Forge¨item-borders-fabric|物品边框 (Item Borders) - Fabric
-iceberg|冰山* - Forge¨iceberg-fabric|冰山 (Iceberg) - Fabric
+iceberg|冰山* - Forge¨iceberg-fabric|冰山 (Iceberg) - Fabric¨@iceberg|冰山 (Iceberg)
+
-worldeditcui-forge-edition-3
enhanced-farming|增强农业*
lava-clear-view-fabric|熔岩下清晰视野 (Lava Clear View) - Fabric¨lava-clear-view|熔岩下清晰视野* - Forge
global-xp
-universal-graves
+universal-graves@
-more-bows-restrung|更多弓:重振旗鼓! (More Bows: Restrung!)
+more-bows-restrung@|更多弓:重振旗鼓! (More Bows: Restrung!)
nimble-fabric|灵活 (Nimble) - Fabric¨nimble|灵活* - Forge
metal-barrels|金属储物桶*
@@ -5096,8 +5096,8 @@ fantastic-fish-alpha-v1-4|神奇的鱼 (Fantastic Fish)|400280
more-mounted-storages|更多存储挂载*
-minecraft-comes-alive-testing|凡家物语:重生 (MCA Reborn)|1288951
-noodles-apex|面条的Apex (Noodles'Apex)
+minecraft-comes-alive-testing@minecraft-comes-alive-reborn|凡家物语:重生 (MCA Reborn)|1288951
+noodles-apex|面条的Apex系列 (Noodles'Apex)
ftb-beast-coin-miner|货币矿机 (Beast Coin Miner)
scape-and-run-parasites-addon-by-nocube
vanilla-degus|八齿鼠*
@@ -5109,7 +5109,7 @@ spartan-weaponry-twilight-forest|斯巴达的武器:暮色森林 (Spartan Weap
iris-reforged
additional-lanterns|更多灯笼*
bottled-air|瓶装空气* - Forge¨bottled-air-fabric|瓶装空气 (Bottled Air) - Fabric
-fabricproxy-lite
+fabricproxy-lite@
abyssal-depths
tomes|秘典*
budschies-morph-mod
@@ -5132,15 +5132,15 @@ simple-graves
wi-zoom|WI变焦 (WI Zoom)
-forge-carpet
+forge-carpet@
fabric-tree-chopper|砍树*
i-see-lava
dual-riders
refined-relocation-2|简单分类2*
ftb-sluice
-sky-villages-forge|天空村庄 (Sky Villages) - Forge¨sky-villages-fabric|天空村庄 (Sky Villages) - Fabric
-gui-clock¨gui-clock-fabric-version
+sky-villages-forge|天空村庄 (Sky Villages) - Forge¨sky-villages-fabric@sky-villages|天空村庄 (Sky Villages)
+gui-clock¨gui-clock-fabric-version¨@gui-clock
hand-over-your-items¨hand-over-your-items-fabric
koopas-critters
krypton-reforged|氪Forge版*
@@ -5161,7 +5161,7 @@ kubejs-immersive-engineering
kubejs-mekanism
starter-kit|初始套件* - Forge¨starter-kit-fabric|初始套件 (Starter Kit) - Fabric
-stacker
+stacker@
gcm
ocean-floor-clay-sand-and-dirt
linfox-stacked-dimensions-warden-edition
@@ -5169,7 +5169,7 @@ experience-bottler
gregicality-ore-addon|Gregicality矿物拓展*
gregtech-battery-buffer-driver-for-opencomputers|格雷科技电池箱的开放式电脑驱动 (GregTech Battery Buffer Driver for OpenComputers)
orimod
-htm
+htm@
gtce-inventory|格雷物品管道 (GregTech CE Inventory Pipes)
mechtech|机械工程 (MechTech)
gregtech-energistics|格雷能源 (GregTech Energistics)
@@ -5189,7 +5189,7 @@ into-the-maelstrom|冒险漩涡*
create-deco
warp-pipes
fertile-farmland|沃壤千里*
-luckperms
+luckperms@
inv-view
ftb-industrial-contraptions|FTB工业奇械 (FTB Industrial Contraptions)
more-respawn-anchors|更多重生锚* - Fabric¨more-respawn-anchors-forge|更多重生锚 (More Respawn Anchors) - Forge
@@ -5201,7 +5201,7 @@ public-gui-announcement|公开GUI显示*
wet-lava-sponge
ripples-of-the-past
-cursor-mod|自定义光标*
+cursor-mod@cursormod|自定义光标*
amplified-nether|放大化下界*
oreberries-replanted|矿莓重制版*
@@ -5213,12 +5213,12 @@ calcium|钙*
from-the-shadows-forge
l_ender-s-cataclysm|灾变 (L_Ender 's Cataclysm)
brighter-block-light|亮光 (Brighter)|1281920
-pick-up-notifier|拾取提示* - Forge版+Fabric1.19+¨pick-up-notifier-fabric|拾取提示 (Pick Up Notifier) - Fabric版1.17.1~1.18.2
+pick-up-notifier|拾取提示* - Forge版+Fabric1.19+¨pick-up-notifier-fabric|拾取提示 (Pick Up Notifier) - Fabric版1.17.1~1.18.2¨@pick-up-notifier|拾取提示 (Pick Up Notifier)
talkbubbles
servux
config-menus-forge
-saplanting|落苗生根*
+saplanting@|落苗生根*
login
edible-bugs
farsight¨farsight-fabric
@@ -5233,14 +5233,14 @@ fluffys-farming
aquatic-odyssey-mod
vanilla-cookbook|原版烹饪书*
edible-nether-wart|可食用下界疣*
-plasmo-voice|Plasmo语音*
+plasmo-voice@|Plasmo语音*
armor-sound-tweak|盔甲音效调整*
-hexerei
+hexerei|魔法巫师*
give-me-water-or-give-me-death
lost-and-found
better-fps-render-distance¨better-fps-render-distance-fabric
-armor-chroma-for-fabric|盔甲颜色显示Fabric版 (Armor Chroma for Fabric)
+armor-chroma-for-fabric@|盔甲颜色显示Fabric版 (Armor Chroma for Fabric)
ore-reeds|矿石甘蔗*
connected-glass
blockui
@@ -5262,7 +5262,7 @@ tetranomicon
more-observers|更多侦测器*
villagers-respawn|村民重生*
hot-swappable-armor|热切换护甲 (Hot-Swappable Armor)
-advancement-plaques|进度牌匾* - Forge¨advancement-plaques-fabric|进度牌匾 (Advancement Plaques) - Fabric
+advancement-plaques|进度牌匾* - Forge¨advancement-plaques-fabric|进度牌匾 (Advancement Plaques) - Fabric¨@advancement-plaques|进度牌匾 (Advancement Plaques)
minceraft-mod
alexs-delights
@@ -5288,19 +5288,19 @@ awesome-flooring-forge¨awesome-flooring-fabric
medievial-entity-forge|中世纪生物 (Medieval Entity) - Forge¨medievial-entity-fabric|中世纪生物 (Medieval Entity) - Fabric
upgraded-shulkers|更多潜影盒*
-bobby|服务器区块缓存*
-boosted-brightness|亮度增强*
+bobby@|服务器区块缓存*
+boosted-brightness@|亮度增强*
effective¨effective-forge
voidtotem|虚空图腾 (Void Totem) - Forge¨voidtotem-fabric|虚空图腾 (Void Totem) - Fabric
-tool-leveling-plus¨tool-leveling-plus-fabric
-mythicmetals|神话金属 (Mythic Metals)
-creeper-firework|烟花苦力怕*|1285741
+tool-leveling-plus¨tool-leveling-plus-fabric¨@tool-leveling
+mythicmetals@|神话金属 (Mythic Metals)
+creeper-firework@|烟花苦力怕*|1285741
second-chance¨second-chance-forge
-promenade
+promenade@
london-underground|伦敦地铁 (The London Underground)
dynamiclights-reforged|镁/铷:动态光源 (Magnesium/Rubidium Dynamic Lights)
-the-wild-mod|荒野更新*
+the-wild-mod@|荒野更新*
tuff-depth|凝灰岩深度*
minefantasy-reforged|我的幻想重铸版 (MineFantasy Reforged)
@@ -5310,20 +5310,20 @@ framework
anointed-items
golden-age-combat|黄金时代的战斗*
magnesium-extras|镁/铷:附属 (Magnesium/Rubidium Extras)
-chest-tracker|箱子追踪*
-advancementinfo|进度信息展示*
-animatica
+chest-tracker@|箱子追踪*
+advancementinfo@|进度信息展示*
+animatica@
all-dimension-height-increase|全维度建筑高度提升*
merchant-markers|商人标记* - Forge¨merchant-markers-fabric|商人标记 (Merchant Markers) - Fabric
loot-bag|战利品袋子*
miner-watcher|矿工监视者*
memento-mori-remember-death|人终有一死/记住死亡 (Memento Mori / Remember Death)
not-enough-gamerules¨not-enough-gamerules-fabric
-
+@jsonem|Json格式化实体模型 (Json Entity Models)
archmagus||320407
slimyboyos
-fireplace-lib¨fireplace-lib-forge
+fireplace-lib¨fireplace-lib-forge¨@fireplace-lib
immersive-geology|沉浸地质学*
wool-tweaks|羊毛调整* - Forge¨wool-tweaks-fabric|羊毛调整 (Wool Tweaks) - Fabric
tools-complement
@@ -5335,7 +5335,7 @@ true-darkness
starlight-x-create
grand-economy
chinacraft2|华夏文明2 (ChinaCraft2)|1288124
-interactic
+interactic@
fnars-roguelike-dungeons|冒险地牢-Fnar版 (Roguelike Dungeons -- Fnar's Edition)
playerex
data-attributes
@@ -5349,32 +5349,32 @@ better-beacon-placement-fabric|更好的信标放置 (Better Beacon Placement) -
dead-totems
functional-storage|功能性存储*
the-wild-update|荒野更新1.19 (The Wild Update 1.19)
-archeology|考古学 (CapsLock Archeology)
+archeology@|考古学 (CapsLock Archeology)
trinkets-and-baubles|饰品与小玩意 (Trinkets and Baubles)
rope-ladders|绳梯*
skewers-updated|烤串更新版*
keep-my-soil-tilled-fabric|保持肥沃 (Keep My Soil Tilled) - Fabric¨keep-my-soil-tilled|保持肥沃* - Forge
-double-doors-fabric|双开门 (Double Doors) - Fabric¨double-doors|双开门* - Forge
-expanded-armor-enchanting|盔甲附魔扩展*
-expanded-weapon-enchanting|武器附魔扩展*
-expanded-axe-enchanting|斧附魔扩展*
-expanded-trident-enchanting|三叉戟附魔扩展*
+double-doors-fabric|双开门 (Double Doors) - 1.16.5Fabric¨double-doors|双开门* - 1.16.5-1.19.3
+expanded-armor-enchanting@|盔甲附魔扩展*
+expanded-weapon-enchanting@|武器附魔扩展*
+expanded-axe-enchanting@|斧附魔扩展*
+expanded-trident-enchanting@|三叉戟附魔扩展*
urns
pylons
on-soul-fire
wizard-staff
kambrik
-additional-bars|更多的栏杆* - Forge¨additional-bars-fabric|更多的栏杆 (Additional Bars) - Fabric
+additional-bars|更多的栏杆* - Forge¨additional-bars-fabric|更多的栏杆 (Additional Bars) - Fabric¨@additionalbars|更多的栏杆 (Additional Bars)
leap
-cameraoverhaul
+cameraoverhaul@
enchantment-id-extender
-creeper-overhaul|苦力怕改革*
+creeper-overhaul|苦力怕改革/苦力怕革新*
cool-elytra-roll
camera-overhaul-forge
blame¨blame-fabric
-patboxs-banhammer
+patboxs-banhammer@banhammer
terraformed-api-reforged
multiblocktweaker
good-ol-currency
@@ -5385,9 +5385,9 @@ frys-things-guns-and-more
quickbind|功能集成 (Quick Bind/Command GUI buttons)
ompd|开放式模块化被动防御 (Open Modular Passive Defense)
basic-shields-fabric
-borderless-mining
-ledger||1207255
-pet-owner
+borderless-mining@
+ledger@||1207255
+pet-owner@petowner
spartan-hud-baubles|斯巴达饰品栏HUD (Spartan HUD: Baubles)
mekanism-matter|通用机械:物质拓展*
inzhefop-core
@@ -5399,7 +5399,7 @@ myrtrees
tiny-redstone
icarus-fabric|伊卡洛斯之翼Fabric版 (Icarus (Fabric))
-the-splash-milk|喷溅牛奶 (Splash Milk)|1289975
+the-splash-milk@|喷溅牛奶 (Splash Milk)|1289975
fastbench-for-fabric|工作台性能优化Fabric版 (FastBench for Fabric)
mob-buckets-fabric|生物桶 (Mob Buckets)
@@ -5410,7 +5410,7 @@ glasscutter|玻璃切割器 (Glass Cutter)
upgradable-crystal-tools
no-dragon-cheese
glassware|玻璃制品*
-milk-plus
+milk-plus@milk_plus
modifiers|重铸*
customnpc-plus|自定义NPC+ (CustomNPC+)
ingredient-extension-api
@@ -5440,19 +5440,19 @@ endless-deep-space|无尽深空*
dynamic-trees-for-sakura|动态的树:樱附属 (Dynamic Trees for Sakura)
advanced-fishing
-bettertabs
+bettertabs@
classy-hats|时髦帽子*
-bedbreakbegone
-bq-multiblock-structure-integration|更好的任务-多方块与结构扩展 (Better Questing - Multiblock and Structure Integration)
-bqtweaker
-hypnos
-collision-damage
+bedbreakbegone@
+bq-multiblock-structure-integration@|更好的任务-多方块与结构扩展 (Better Questing - Multiblock and Structure Integration)
+bqtweaker@
+hypnos@
+collision-damage@
project-74246|毁灭地牢 (Doomlike Dungeons)
dynamic-trees-defiled-lands|动态的树:污秽之地附属 (Dynamic Trees - Defiled Lands)
-xaero-map-addition
-lambdacontrols|Lambda 的控制优化 (LambdaControls)
+xaero-map-addition@
+lambdacontrols@|Lambda 的控制优化 (LambdaControls)
ducky-mod
-
+@craftgr|幻想乡电台 (CraftGR)
quartz
all-the-blocks
allthemodium
@@ -5469,11 +5469,11 @@ correlated
no-mob-spawning-on-trees
rf-lux
-
+@roughly-enough-characters
easy-normal-and-magic-foods
-tiefix
-more-chat-history|更多聊天记录*
+tiefix@
+more-chat-history@morechathistory|更多聊天记录*
phosphor-reloaded|磷重制版*
pigstep-backport
@@ -5507,7 +5507,7 @@ domum-ornamentum
methodicalmilking
save-and-load-inventories-fabric¨save-and-load-inventories
-forge-config-api-port-fabric
+forge-config-api-port-fabric@forge-config-api-port
pams-cookables
end-metals
vitality
@@ -5523,9 +5523,9 @@ menumobs|主菜单生物渲染 (MenuMobs)
tiny-skeletons-forge|小骷髅变种 (Tiny Skeletons) - Forge和Fabric¨tiny-skeletons-fabric|小骷髅变种 (Tiny Skeletons) - Fabric(1.17~1.18.2)
-matter-overdrive-community-edition|超能物质 (Matter Overdrive)|802474
+matter-overdrive-community-edition@moce|超能物质 (Matter Overdrive)|802474
cavetweaks|洞穴调整 (CaveTweaks)
-cosmetic-armor-fabric|时装盔甲 (Cosmetic Armor)
+cosmetic-armor-fabric@cosmetic-armor|时装盔甲 (Cosmetic Armor)
crimson-chickens
@@ -5542,7 +5542,7 @@ cloud-boots-mod|云靴 (Cloud Boots Mod!)
better-compatibility-checker
fastfurnace-minus-replacement
harvest
-craftpresence
+craftpresence@
stonecutter-recipe-tags
customnpcsreborn|自定义NPC:重生 (Custom NPCs Reborn)
nightmare-craft-survival|梦魇工艺:生存 (Nightmare Craft: Survival)
@@ -5569,27 +5569,27 @@ towers-of-the-wild-reworked|旷野之息高塔:重制 (Towers of the Wild: Rew
towers-of-the-wild-reloaded|旷野之塔:重置 (Towers of the Wild: Reloaded)
bansoko|创可贴 (Bansōkō)
-inventory-backpack
+inventory-backpack@inventory-backpack-mod
-
-reinforced-shulker-boxes|增强潜影盒*
+@drippy-loading-screen|自定义游戏加载界面 (Drippy Loading Screen)
+reinforced-shulker-boxes|增强潜影盒*¨@reinforced-shulker-boxes|增强潜影盒 (Reinforced Shulker Boxes)
fastopenlinksandfolders|快速打开链接和文件夹 (FastOpenLinksAndFolders)
-reinforced-chests|增强箱子*
+reinforced-chests|增强箱子*¨@reinforced-chests|增强箱子 (Reinforced Chests)
biome-staff
dynamic-trees-quark|动态的树:夸克附属 (Dynamic Trees - Quark)
radium-reforged|镭*
backpackmod
untamedwilds|不羁野性 (Untamed Wilds)|1211422
-advancements-tracker
+
no-null-processors
ma-enchants|Ma 附魔*
-bits-and-chisels
+bits-and-chisels@
trading-post|交易站* - Forge和Fabric¨trading-post-fabric|交易站 (Trading Post) - Fabric(1.17~1.18.2)
nourished-nether
furnus
-permanent-light-generator|恒久光发电机* - Forge¨permanent-light-generator-fabric|恒久光发电机 (Permanent Light Generator) - Fabric
+permanent-light-generator|恒久光发电机* - Forge¨permanent-light-generator-fabric|恒久光发电机 (Permanent Light Generator) - Fabric¨@plg|恒久光发电机 (Permanent Light Generator)
immortuos-calyx
claim-chunk
@@ -5602,10 +5602,10 @@ better-sneak|更好的潜行*
crapping-copper|压缩升级铜*
botany-pots-ore_planting-forge|植物盆栽矿石种植 (Botany Pots Ore_planting) - Forge¨bpop-botany-pots-ore_planting-fabric|植物盆栽矿石种植 (Botany Pots Ore_planting) - Fabric
-satin-api
+satin-api@
easy-magic
-enlightened-end
-rubidium|铷*
+enlightened-end@
+rubidium@|铷*
cultural-delights|多元乐事*
jer-integration|JER集成 (JER Integration)
@@ -5633,27 +5633,27 @@ extended-armor-bars
atom-economy|基石-经济 (Atom-Economy)
just-enough-piglin-bartering|JEI猪灵以物易物*
-
+@aftersans53228-fabric-road|暗访谈的Fabric道路 (aftersans53228's fabric roads)
primal-magick|原初魔法*
ore-creeper|矿石苦力怕*
panthalassa|泛古洋*
stardew-armory|星露谷武器* - Forge¨stardew-armory-fabric|星露谷武器 (Stardew Armory) - Fabric
no-more-nether-desert-edition
blaze-gear|烈焰装备*
-
+@aier|反内能革命 (Anti-internal Energy Revolution)
rhodonite-tools-armour
more-minecarts
-corn-delight|玉米乐事*
+corn-delight@|玉米乐事*
blast-craft|防爆工艺 (Blastcraft)
-zdgx|mod自动更新 (zdgx-AutoUpdateMod)|1302410
+zdgx@|mod自动更新 (zdgx-AutoUpdateMod)|1302410
ore-highlight|矿石发亮*|1302603
-sodium-shadowy-path-blocks|钠 · 土径阴影*
+sodium-shadowy-path-blocks@|钠 · 土径阴影*
-polymer
+polymer@
elytra-bombing|鞘翅轰炸* - Forge¨elytra-bombing-fabric|鞘翅轰炸 (Elytra Bombing) - Fabric
cuboiddroids-support-mod
@@ -5661,10 +5661,10 @@ cuboiddroids-support-mod
litematica-tool|投影工具 (litematica tool)
frozen-up|千里冰封*
-carpet-tis-addition
+carpet-tis-addition@
more-banner-features|更多旗帜功能*
-horsestatsvanilla|马匹状态 (Horse Stats Vanilla)
+horsestatsvanilla@|马匹状态 (Horse Stats Vanilla)
biome-id-extender
rereskillable-reborn
rereskillable-rereforked
@@ -5672,7 +5672,7 @@ tetra-pak
ars-magica-legacy
compressium
talking-villagers|会说话的村民*
-artifality
+artifality@
boat-container|箱船*
delogger
just-another-vanilla-addon-java|迫真原版增强 (Just Another Vanilla Addon)|1312820
@@ -5683,14 +5683,14 @@ create-gear-addon
gun-mod-tl
energymeter
-
+@headindex|头颅菜单 (Head Index)
quantum-generators|量子发电机*
simply-quarries|简易采石场*
lethal-peaceful
storage-drawers-crafting-recipe
-enhanced-attack-indicator|增强攻击提示器*
+enhanced-attack-indicator@|增强攻击提示器*
parasites-addon-overlast|寄生兽:末世扩展 (OverLast)
franciscofunari|中世纪工艺 (Medieval Craft)
@@ -5699,7 +5699,7 @@ green-thumb-v1-2-03
greenthumb
tfc-adventure|群峦冒险 (TFC+ Adventure)
just-zoom-forge
-
+@holograms|全息图 (Holograms)
eidolons-hexblades|幻梦咒剑 (Eidolon's Hexblades)
monke-madness
@@ -5731,17 +5731,17 @@ naturesaura_tweaker
death-finder|Death Finder - Forge和Fabric¨death-finder-fabric
portable-craft|便携工艺*
-
+@polypack_host
etched
caves-cliffs-backport-additions
cobblefordays
admin-shop|官方商店*
vanillamagic|纯净魔法 (Vanilla Magic)|1307461
deep-mob-learning-simulacrum
-oculus
+oculus@
simple-planes-tfc
-mishang-urban-construction|迷上城建*
-
+mishang-urban-construction@|迷上城建*
+@cursed-legacy-api
phi
ae2-utilities|AE2实用设备 (AE2 Utilities)
@@ -5761,18 +5761,18 @@ copper-pot|铜锅! (Copper Pot!)
viarewind
viabackwards
thaumic-isorropia
-loading-manager|更多加载信息*
+loading-manager@loadingmgr|更多加载信息*
psitools
psionic-upgrades
psionicolor
reskillable-psi-compat
zettai-psi
psicaster
-tweakermore
-legacy-display
+tweakermore@
+legacy-display@
the-backrooms|后室*
creatures-of-the-snow|雪地里的生物! (Creatures From The Snow!) - Fabric¨creatures-from-the-snow-forge|雪地里的生物! (Creatures From The Snow!) - Forge
-collisions-lib
+collisions-lib¨@collisions-lib
wooled-boots|羊毛靴子*
zawa-evolved|野生动物园:进化 (Zoo and Wild Animals: Evolved)
bongo
@@ -5790,11 +5790,11 @@ quick-hotbar
modular-augment
lumberjack
better-mods-button|更好的模组按钮*
-improved-mount-hud-forge|改进的骑乘HUD (Improved Mount HUD)
+improved-mount-hud-forge|改进的骑乘HUD (Leave My Bars Alone)
advancement-frames
dynmapforge
-spellbind|物品魔法*|1311578
+spellbind@|物品魔法*|1311578
bumpkinbatch
beekeeper|养蜂人*
@@ -5835,7 +5835,7 @@ ae2-extended-life
refined-cooking|精致厨房*
jade-addons¨jade-addons-fabric
-feature-nbt-deadlock-be-gone
+feature-nbt-deadlock-be-gone@
real-infinity-bow-allow-inf-mending|真正的无限弓 (Real Infinity Bow)|1148331
drink-it-forge|喝下去! (Drink It!)
@@ -5844,25 +5844,25 @@ tails
howling-moon-rebooted-forge¨howling-moon-rebooted-fabric
-
-furnish
+@dustrial-decor
+furnish@furnish-furnitures
iammusicplayer
pirates|海盗*
comics-bubbles-chat
fabric-extended-armor-bars-forked
-eating-animation-forge|进食动画 (Eating Animation) - Forge¨eating-animation-fabric|进食动画 (Eating Animation) - Fabric
-waterdripsound¨dripsounds-fabric
+eating-animation-forge@eating-animations|进食动画 (Eating Animation) - Forge¨eating-animation-fabric@eating-animation|进食动画 (Eating Animation) - Fabric
+waterdripsound@¨dripsounds-fabric@
better-horse-hud
thermopolium|汤饮铺*|1314208
orderly-fabric-2-0
-entity-texture-features-fabric
+entity-texture-features-fabric@entitytexturefeatures
sculk-plus
creeper-confetti-fabric|烟花苦力怕Fabric版*
-double-jump-attribute
+double-jump-attribute@
overweight-farming
healthcare
betterloadingscreen|加载画面改良 (Better Loading Screen)|1314925
@@ -5880,10 +5880,10 @@ just-needed¨just-needed-fabric
nodami-remake|伤害免疫机制移除重制版 (NoDamIRemake)
had-enough-items|HEI物品管理器*
worldinfo
-
-block-helper
-
-
+@bang
+block-helper@
+@class-loader-fixer
+@font-fixer
gregicprobe
travelers-index
@@ -5906,14 +5906,14 @@ reagenchant
sim-u|模拟城市 (Sim-U)|1317405
-thorium|钍*|1314572
+thorium@|钍*|1314572
creative-one-punch
-radon|氡*
+radon@|氡*
ars-omega
game-stages-conditions
tinkers-construct-tool-leveling-with-random
odd-water-mobs
-glowsquids-begone
+glowsquids-begone@
theundead
framedblocks|框架方块 (FramedBlocks)
nekos-enchanted-books
@@ -5925,9 +5925,9 @@ no-enchant-cap
artisan-automation|工匠自动化*
enchanted-wolves
-rain-growth
+rain-growth@rain
scape-and-run-monstress|逃逸:魔物娘 (Scape and Run: Monstress)
-raised
+raised@
resetchunks
@@ -5938,18 +5938,18 @@ multibeds¨multibeds-fabric
enhanced-armaments-reload|增强装备重制版*
entangled
-createplus
+createplus@
custom-fluid-mixin
slender-reimagined
doors-by-ichun
slender-man-mod
cookielicious|曲奇佳味*
the-forbidden|禁忌者*
-memory-usage-screen
-evergreenhud
-fabricskyboxes
-
-
+memory-usage-screen@
+evergreenhud@
+fabricskyboxes@
+@level-border
+@fvt
blue_skies_tcon
tdv-tweaks
@@ -5969,15 +5969,15 @@ keygrip-mocap-mod
attachable-grinder
hat-stand
-chunk-copy-fabric
+chunk-copy-fabric@
inventory-home|回归箱*
nether-hexed-kingdom
-
+@paimonfoodreborn|应急食品:重制 (PaimonFood:Reborn)
talking-ben-mod
-in-backpack-eat|背包内食用 (In-backpack Eat)
+in-backpack-eat@inbackpackeat|背包内食用 (In-backpack Eat)
with-thursday|相约星期四 (WithThursday!)
-smooth-swapping-forge¨smooth-swapping
+smooth-swapping-forge¨smooth-swapping¨@smooth-swapping
tinkering-with-blood-magic
tinker-toolcasts
thermal-tinkering
@@ -6004,7 +6004,7 @@ harder-staged-difficulty
material-changer
tree-harvester||1123514¨tree-harvester-fabric||1123514
itemfx
-mekanism-ce|通用机械1.7.10社区版 (Mekanism 1.7.10 Community Edition)
+mekanism-ce@mekanism-1.7.10-community-edition|通用机械1.7.10社区版 (Mekanism 1.7.10 Community Edition)
property-modifier
grimoire-of-tetra
@@ -6014,18 +6014,18 @@ simple-stations
ars-elemental-elemental-spell-foci|元素魔艺 (Ars Elemental)
too-many-glyphs
create-cafe|机械动力:奶茶店*
-
+@worldbordercolor
ic2-rpg|工业RPG (IC2 RPG)|821438
drop-the-meat
better-invisibility|更好的隐身*
-tweakerplus
-autorun-fabric
+tweakerplus@
+autorun-fabric@autorun
fpv-drone
campfire-backport
-skip-transitions
-just-load
+skip-transitions@
+just-load@
cheese-dragon
-boatjump
+boatjump@
torched
nyfs-quivers|Nyf的箭袋 (Nyf's Quivers)
@@ -6042,7 +6042,7 @@ the-one-probe-fabric
gehenna-super-spooky-nether-overhaul-for-forge
draconicminus
hygiene
-
+worldeditcui-forge-edition-3
external-view-reload
fluid-drawers-legacy|储液抽屉:遗产*
my-server-is-compatible
@@ -6051,13 +6051,13 @@ leapoffaith-forge|信仰之跃 (Leap of Faith)
top-plus
refined-storage-fluxified
quit-confirm
-compressedcreativity
+compressedcreativity|压缩动力 (Compressed Creativity)
applied-mekanistics|应用能源:通用机械附属*
craftdumper
-immersive-weathering-fabric|沉浸式风化 (Immersive Weathering) - Fabric¨immersive-weathering-forge|沉浸式风化 (Immersive Weathering) - Forge
+immersive-weathering-fabric@immersive-weathering|沉浸式风化 (Immersive Weathering)¨immersive-weathering-forge|沉浸式风化 (Immersive Weathering) - Forge
replay-mod-for-forge
bigtrees||376937
-absolutely-not-a-zoom-mod|绝对不是一个缩放模组*
+absolutely-not-a-zoom-mod@anazm|绝对不是一个缩放模组*
glymworld-lush-caves
colored-crafting-stations
harvest-scythes
@@ -6072,7 +6072,7 @@ item-highlighter|物品高亮* - Forge¨item-highlighter-fabric|物品高亮 (It
environmental-armor¨origins-environmental-armor-1-18-1-port|Origins - Environmental Armor - 贡献者制作的 1.18.1 分支(已过时)
-health-levels
+health-levels@
the-comfort-zone
mekatweaker
@@ -6085,9 +6085,9 @@ tradernpcs
more-pads|更多Pad*|1323848
texture-dump
spartan-weaponry-ice-and-fire|斯巴达的武器:冰火传说 (Spartan Weaponry: Ice and Fire)
-hefty-crops
-
-custom-player-models|自定义玩家模型 (Customizable Player Models) - Forge¨custom-player-models-fabric|自定义玩家模型 (Customizable Player Models) - Fabric
+hefty-crops@
+@strangefuelsmod|奇奇怪怪的燃料 (Strange Fuels Mod)
+@custom-player-models|自定义玩家模型 (Customizable Player Models)¨custom-player-models|自定义玩家模型 (Customizable Player Models) - Forge¨custom-player-models-fabric|自定义玩家模型 (Customizable Player Models) - Fabric
extrachampions|强敌扩充 (ExtraChampions)|1325026
@@ -6102,13 +6102,13 @@ eccentric-tome|怪奇宝典*
arnicalib
gregicality-multiblocks
-
-the-box-trot
-better-biome-blend|更好的生物群系过渡*
+@forcecloseworldloadingscreen|强制关闭加载屏幕 (kennytv's epic force close loading screen mod for fabric)
+the-box-trot@
+better-biome-blend@|更好的生物群系过渡*
forever-enough-items|FEI物品管理器*
chess|象棋*
immersive-fx
-ydms-weapon-master|YDM的武器大师 (YDM's Weapon Master)
+ydms-weapon-master@weaponmaster|YDM的武器大师 (YDM's Weapon Master)
galacticrafttweaker
moreleads|拴绳增强 (More Leads)
@@ -6118,7 +6118,7 @@ excore
messmod
log4j2-jndi-exploit-fix
woodcutter¨woodcutter-forge
-origins-classes-forge|起源:职业非官方Forge版 (Origins: Classes (Forge))
+origins-classes-forge@|起源:职业非官方Forge版 (Origins: Classes (Forge))
tool-stats
thatched
fumo-mod
@@ -6136,19 +6136,19 @@ humbling-bundle|慈善捆绑包*
grindstone-sharper-tools-fabric¨grindstone-sharper-tools
nutritious-milk¨nutritious-milk-fabric
extract-poison¨extract-poison-fabric
-zombie-villagers-from-spawner-fabric¨zombie-villagers-from-spawner
+zombie-villagers-from-spawner-fabric¨zombie-villagers-from-spawner¨@zombie-villagers-from-spawner
vine-climber
healing-soup¨healing-soup-fabric
-idas
+idas@
mob-sunscreen
-
+@dontstarvereborn|不要饿死:重生 (Don't Starve:Reborn)
decorative-winter
looot
wmch
-block-event-separator
+block-event-separator@
no-damage-immunity-reload|伤害免疫机制移除重制版*
sheve
-chromatic-currents
+chromatic-currents@
dropfullcarts
are-you-blind
alwayseat-reload|吃不停重制版 (AlwaysEat Reload)
@@ -6156,9 +6156,9 @@ alwayseat-reload|吃不停重制版 (AlwaysEat Reload)
tps-hud-fabric
orcz
-sandwichable
-
-mod-erate-loading-screen
+sandwichable@
+@shelve-refabricated
+mod-erate-loading-screen@moderate-loading-screen
shrink_
cable-tiers
jumbo-furnace
@@ -6175,7 +6175,7 @@ stackone-mod|禁止堆叠 (StackOne)|1328904
spectrum|光谱世界*|1342883
kitteh6660s-morecraft
angel-ring|天使指环*
-
+@debugify
nomowanderer
allthecompressed
cave-enhancements
@@ -6186,15 +6186,15 @@ proxy-server
multithreaded-noise
spelling-table-mod|拼写台*
-advancedchatcore
+advancedchatcore@AdvancedChatCore
dirt-deco
multiblocked
-arcanus
+arcanus@
armor-weight
all-the-tweaks
runelic
alexs-cloud-storage|云存储 (Cloud Storage)
-visuality|可视性*
+visuality@|可视性*
ecologics|丰富的生态*
mob-scarecrows
trolls-community
@@ -6204,21 +6204,21 @@ goblin-community
kobolds-community
mutant-villager
pick-your-poison
-illager-expansion-fabric
-immersive-armors|沉浸式盔甲*
-seeds
+illager-expansion-fabric¨@illager-expansion-forked|Illager Expansion - 由ZekeSmith创建的备份¨@illager-expansion-polymer|Illager Expansion - 现版本,由Patbox制作
+immersive-armors@|沉浸式盔甲*
+seeds@
unusual-drill
-frosted-friends
+frosted-friends@
hover-pets
ic2-patcher
-useless-sword|朴华之剑*
+useless-sword@|朴华之剑*
jei-professions
atm-additions
extra-tags|额外标签*
-advancedchatlog
+advancedchatlog@AdvancedChatLog
crafting-station|合成站*
sons-of-sins
-advancedchathud
+advancedchathud@AdvancedChatHUD
fuzes-relics
chirpys-wildlife
megaparrot
@@ -6228,30 +6228,30 @@ waila-stages
steves-vanilla
duckling
-wandering-bag
-friends-and-foes-forge¨friends-and-foes
+wandering-bag@
+friends-and-foes-forge@¨friends-and-foes@¨@friends-and-foes-quilt
dynamic-trees-the-betweenlands|动态的树:交错次元附属 (Dynamic Trees - The Betweenlands)
pyrologer-and-friends
tree-hollows
-solar-apocalypse-refabricated
-
-chunky-pregenerator-forge|预生成区块 (Chunky) - Forge¨chunky-pregenerator|预生成区块 (Chunky) - Fabric
+solar-apocalypse-refabricated@solar-apocalypse¨@solar-apocalypse-reforged|Solar Apocalypse - 由ZX_or_移植的Forge版(仅1.18.2)
+@icommon
+@chunky|预生成区块 (Chunky)¨chunky-pregenerator-forge|预生成区块 (Chunky) - Forge¨chunky-pregenerator|预生成区块 (Chunky) - Fabric
beast-slayer|上古凶灵/远古野兽 (Ancient Beasts/Beast Slayer)
-easyauth
-depth
-slimy-stuff
+easyauth@
+depth@
+slimy-stuff@
netheriteroad|下界之路 (Netherite Road)
organics
-qsl
+qsl@
kaliastyle|卡利亚式附魔 (CarianStyle)|1332545
wmitaf
depth-meter|深度计*
-omni-hopper
+omni-hopper@omnihopper
jumpy-boats
-carpetclient
+carpetclient@
dynamic-trees-vampirism|动态的树:吸血鬼附属 (Dynamic Trees - Vampirism)
transcend|超越*
@@ -6261,18 +6261,18 @@ connectible-chains¨connectible-chains-forge
birds-nests-fabric|鸟巢Fabric版 (Birds Nests (Fabric))
hot-or-not-tfc
eye-of-dragons
-paperdoll|纸娃娃 (PaperDoll)
+paperdoll@|纸娃娃 (PaperDoll)
little-logistics
-show-me-what-you-got
+show-me-what-you-got@
herdspanic
-extrasounds
+extrasounds@
brooms
the-stormlight-archive-mod|飓光志*
extrae
projecte-integration|等价兼容 (ProjectE Integration)
mekajs
antique-dragons
-badpackets
+badpackets@
undead-army
ironagefurniture
@@ -6286,7 +6286,7 @@ psionic-utilities
lucent
togglesneak
iron-apples
-actually-additions-fluxified
+actually-additions-fluxified@
dank-storage¨dank-storage-fabric
pixelgamewizards-banded-torches
dynamic-trees-byg|动态的树:你将去的生物群系附属 (Dynamic Trees - Oh The Biomes You'll Go)
@@ -6294,24 +6294,24 @@ dynamic-trees-byg|动态的树:你将去的生物群系附属 (Dynamic Trees -
comfort-magic
colored-lights-fabric
biomes-far-away
-better-runtime-resource-pack|更好的运行时资源包*
+better-runtime-resource-pack@brrp|更好的运行时资源包*
ends-delight|末地乐事 (End's Delight)
natures-starlight
alloygery
custom-game-rules
lava-walker
pretty-pipes|更好的管道*
-
+@death-flashback|死亡回溯 (Death Flashback)
victorymod
cryptic-assets-pack
dynamicregistries
among-us-mobs
among-us|在我们之中*
-universal-ores-fabric
+universal-ores-fabric@universal_ores
project-copper
pirates-and-looters-mod
-
+@mudrock|泥岩 (Mudrock)
itemchat
resident-evil-8-mod|生化危机8 (Resident Evil 8)|1206189
@@ -6319,17 +6319,17 @@ solar-forge
colored-allays|染色悦灵*
phantasm
-emerald-craft-mod|绿宝石工艺*
-roughly-enough-professions-rep|REI工作方块 (Roughly Enough Professions)
+emerald-craft-mod@emerald-craft|绿宝石工艺*
+roughly-enough-professions-rep@|REI工作方块 (Roughly Enough Professions)
sophisticated-core|精妙核心*
edibles-fabric¨edibles
reach-fix
lootjs-forge
-chat-sounds
+chat-sounds@chatsounds
advancement-screenshot-fabric¨advancement-screenshot
all-loot-drops
-
-better-taskbar|更好的任务栏*
+disc-jockey@
+better-taskbar@|更好的任务栏*
storage-network
@@ -6346,7 +6346,7 @@ probably-chests
illager-plushies¨illager-plushies-fabric
pillageplunder
extended-illagers-mod
-midnightcontrols||1398761
+midnightcontrols@||1398761
wonderful-enchantments
a-lot-of-useless-stuff
lankaster-origins
@@ -6355,36 +6355,36 @@ lankaster-origins
priority-target|优先目标*
advanced-botany
charred
-incorporeal-3|幻想多媒体3*
+incorporeal-3@|幻想多媒体3*
oxygen|氧*
better-combat-revamped|沉浸式战斗 (Immersive Combat)
-
-mystical-index
+@essentialclient||1285276
+mystical-index@
combat-commons
corail-woodcutter
nolocalizationconflict|本地化冲突消除 (NoLocalizationConflict)
enhanced-celestials-mobifier-integration¨enhanced-celestials-mobifier-integration-fabric
twilightdecor
-midas-hunger-fabric
+midas-hunger-fabric@midas-hunger
firesafety|安全用火 (FireSafety)
pretty-pistons
more-beautiful-trapdoors
-project-expansion
+project-expansion@
the-corners
deep-mob-learning-reforged|深度怪物学习:重铸 (Deep Mob Learning: Reforged)
-apotheosis-fabric
-extended-drawers
-equippable-utilities
+apotheosis-fabric¨@zenith
+extended-drawers@
+equippable-utilities@utilities
never-enough-currency-2|货币多多2* - Forge¨never-enough-currency-fabric|货币多多2 (Never Enough Currency 2) - Fabric
quartz-chests|石英箱子*
frozen-delight|冰封乐事*
clean-creative-mod
-this-rocks|这就是石粒! (This Rocks!) - Fabric/Quilt¨this-rocks-forge|这就是石粒! (This Rocks!) - Forge
-motschens-puddles
+this-rocks@|这就是石粒! (This Rocks!)¨this-rocks-forge|这就是石粒! (This Rocks!) - Forge
+motschens-puddles@puddles
dense-ores-reborn|致密矿石:重生*
tfctreatedwood|群峦·防腐木 (TFC Treated Wood)
@@ -6393,7 +6393,7 @@ double-hotbar|双重快捷栏*
lavatech|熔岩科技 (Lava Tech)
fragile-torches
-
+@time-changer
come-closer
creeper-chain-reaction
tiffitlib
@@ -6403,19 +6403,19 @@ dynamic-trees-the-aether-legacy|动态的树:天境附属 (Dynamic Trees - The
dynamic-trees-cuisine|动态的树:料理工艺附属 (Dynamic Trees - Cuisine)
ancient-classes
bigger-stacks
-silence|快速静音 (Silence!)
+silence@|快速静音 (Silence!)
dynamic-trees-extra-utilities-2|动态的树:更多实用设备2附属 (Dynamic Trees - Extra Utilities 2)
platforms¨platforms-fabric
-easierchests|简便箱子 (EasierChests)
+easierchests@|简便箱子 (EasierChests)
crackers-wither-storm-mod|Cracker的凋灵风暴 (Cracker's Wither Storm Mod)
ore-canes-mod
spartan-defiled
-mcmtfabricce|Minecraft多线程增强Mod兼容性增强分支 (Minecraft Multi-Threading Mod Fabric Port Compatibility Enhancement)
+mcmtfabricce@mcmtce|Minecraft多线程增强Mod兼容性增强分支 (Minecraft Multi-Threading Mod Fabric Port Compatibility Enhancement)
dynamic-trees-roots|动态的树:根源魔法附属*
dynamic-trees-voyage|动态的树:Voyage附属 (Dynamic Trees - Voyage)
mystical-biomes
-forgero
+forgero@
disenchantingforge
redstone-pen|红石笔*
ae2things¨ae2-things-forge
@@ -6433,32 +6433,32 @@ mystical-powers
wooden-bucket|木桶*
-compressed-barrels|压缩木桶*
+compressed-barrels@compressed_barrels|压缩木桶*
-advanced-netherite|高级下界合金* - Forge¨advanced-netherite-fabric|高级下界合金 (Advanced Netherite) - Fabric
+advanced-netherite|高级下界合金* - Forge¨advanced-netherite-fabric|高级下界合金 (Advanced Netherite) - Fabric¨@advanced-netherite|高级下界合金 (Advanced Netherite)
avaritia-reforged|无尽贪婪:重铸 (Avaritia:Reforged)
simply-conveyors-more|简易传送带 (Simply Conveyors & More)
-porting-lib
-expanded-delight|扩充乐事*
+porting-lib@porting_lib
+expanded-delight@|扩充乐事*
spell-bundle
nightmareesm
-simply-no-shading
-hexcasting
+simply-no-shading@
+hexcasting@hex-casting|咒法学 (Hex Casting)
paucal
uneffectual
loot
crafting-dead-immerse|行尸走肉:沉浸 (Crafting Dead: Immerse)
-extended-clouds
+extended-clouds@
distinct-damage-descriptions
technicalities-lib
-fantasys-furniture|Fantasy的家具 (Fantasy's Furniture)
+fantasys-furniture@fantasy-furniture|Fantasy的家具 (Fantasy's Furniture)
touhou-spell-card-additional|东方符卡附加包 (Touhou Spell Card Additional Pack)
registrator
apexcore
-magiclib|魔法类库 (MagicLib)
-cull-less-leaves|更好的树叶渲染优化*
-
+magiclib@|魔法类库 (MagicLib)
+cull-less-leaves@|更好的树叶渲染优化*
+@ex-stellae|繁星之凝 (Ex Stellae)
with-craft|手工艺 (With Crafts)
fluidconverters|流体转化器 (FluidConverters)
multiblock-stages
@@ -6468,16 +6468,16 @@ waterskin
realism-thirst
dungeons-libraries
-
-raknetify
-
-flotage|漂浮物*
+@fabricated-forge
+raknetify@
+@vmp-fabric
+flotage@|漂浮物*
dynamic-trees-for-hungteens-plants-vs-zombies-mod|动态的树:HungTeen的植物大战僵尸附属 (Dynamic Trees for PVZ)
-antidrop|防丢 (AntiDrop)|1306210
+antidrop@|防丢 (AntiDrop)|1306210
elemental-items||456944
-onekeyminer|一键矿工 (OneKeyMiner)|1342383
-boathud
+onekeyminer@|一键矿工 (OneKeyMiner)|1342383
+boathud@
ninjaxxs-needs
pixelmon-gui-blocks
@@ -6489,23 +6489,23 @@ laserio
villager-tools
mcsa
-
-
-slime-mimic
+@no-resource-pack-warnings
+@take-it-slow
+slime-mimic@slime-mimic-mod
ldlib
shimmer|微光*
ducts
-
+@baguette
nosiphus-furniture-mod
tf2-engineer-buildings-mod
kubejs-botania
advancements-enlarger
better-muffling|更好的消音器*
-lightest-lamps¨lightest-lamps-fabric
+lightest-lamps¨lightest-lamps-fabric@lightest-lamps
bigbuckets|大铁桶 (Big Buckets) - Forge和Fabric/Quilt1.19及以上¨bigbuckets-fabric|大铁桶 (Big Buckets) - Fabric1.14~1.16
dimstorage
spawner-imbuer
@@ -6517,7 +6517,7 @@ ftb-tutorial-mod-forge
mc-terrain-editor
extra-gems|额外的宝石 (ExtraGems)
various-world
-better-impaling-forge|更好的穿刺Forge版*
+better-impaling-forge@thisismyfirstmod|更好的穿刺Forge版*
bucketlib
aquatic-torches
better-sponges||1343107
@@ -6527,7 +6527,7 @@ brick-furnace|砖熔炉*
brick-hopper|砖漏斗*
human-companions
odysseyhud
-colorblindness
+colorblindness@
aether-addon
@@ -6535,15 +6535,15 @@ server-redirect
city-blocks
useful-hats
-modern-splash|高版本加载界面*
+modern-splash@|高版本加载界面*
babel
cultural-treasures-paintings|文化瑰宝 - 画作 (Cultural Treasures - Paintings)
-servercore
-ivan-carpet-addition
+servercore@
+ivan-carpet-addition@
food-funk||1189925
wumpleutil
-twilight-delight|暮色乐事*|1364206
+twilight-delight@twilightdelight|暮色乐事*|1364206
recruits
the-true-backrooms
webstreamer
@@ -6552,11 +6552,11 @@ thaumisc|神秘杂项学*
treechop
-idwtialsimmoedm
-entity-collision-fps-fix¨entity-collision-fps-fix-fabric
+idwtialsimmoedm@
+entity-collision-fps-fix¨entity-collision-fps-fix-fabric¨@entity-collision-fps-fix
hollowwoods||1346623
-dynamic-crosshair
+dynamic-crosshair@dynamiccrosshair
raiders
better-animals-plus-plus
block-overlay-fix
@@ -6565,22 +6565,22 @@ nature-overhaul
ae2-fluid-crafting-rework|AE2流体合成套件重置 (AE2 Fluid Crafting Rework)
-moreculling
+moreculling@
better-village-forge¨better-village-fabric
-trinkets-curios-theme
-banilla-claws-forge¨banilla-claws
+trinkets-curios-theme@
+@banilla-claws¨banilla-claws-forge¨banilla-claws
transparent-cosmetics
-
-right-click-get-crops
+@more-geodes
+right-click-get-crops@
oh-my-gourd
-
+better-block-sounds@bbs
v0ids-smart-backpacks|V0id的智能背包 (V0id's Smart Backpacks)
-
-forgetmechunk¨forgetmechunk-forge
-
+@winterly
+forgetmechunk@¨forgetmechunk-forge
+@moremusic
better-f1|更好的F1*
removehudbutnothand
@@ -6589,69 +6589,69 @@ tool-part-stages
iron-backpacks-redone|特殊背包重做版*
b0bgarys-biome-remover-v-1-0-0-1|B0bGary的生物群系禁用器 (B0bGary's Biome Remover)
dualwielding
-
-memoryleakfix
-
-
-language-reload
-
-
-
-
-
+@malum-quilt
+memoryleakfix@
+@axolotlviewer
+@compactchat|紧凑聊天 (CompactChat)
+language-reload@
+@beer
+@sound-categories
+@unsuspicious-stew%22
+@preventer
+@wpit
starflight-innovation
-powah-rearchitected
-
-
-
+powah-rearchitected@powah
+@mouserate-framerate
+@roundaround-pickup-notifications
+@practical-barrels
better-rocks
horse-combat-controls
libgui
-simply-houses||1348787
+simply-houses||1348787¨@simply-houses||1348787
yungs-better-desert-temples|YUNG的沙漠神殿优化 (YUNG's Better Desert Temples) - Forge¨yungs-better-desert-temples-fabric|YUNG的沙漠神殿优化 (YUNG's Better Desert Temples) - Fabric
modern-dynamics|现代动力学*
doggo-mod
tan-huge-trees
-
+@wiangdtbisadtn|草我本来不想这么做的但是我这么做了啊啊啊啊啊啊啊啊啊啊啊啊啊啊 (Wait I Am Not Gonna Do This But I Somehow Accidentally Did This Nooooooooooooooo)
yungs-better-witch-huts|YUNG的沼泽小屋优化 (YUNG's Better Witch Huts) - Forge¨yungs-better-witch-huts-fabric|YUNG的沼泽小屋优化 (YUNG's Better Witch Huts) - Fabric
panorama-creator|全景图创建器*
-ui-input-undo-fabric¨ui-input-undo-forge
+ui-input-undo-fabric@¨ui-input-undo-forge@
paimeng|应急食物 (PaiMeng)
nyfs-quivers-expanded
-zoomify
+zoomify@
golemania
-vulkanmod
+@vulkanmod¨vulkanmod
sledgehammer
-quilt-loading-screen|Quilt加载画面*
-amethyst-imbuement
-emi
+quilt-loading-screen|Quilt加载画面*¨@quilt-loading-screen|Quilt加载画面 (Quilt Loading Screen)
+amethyst-imbuement@
+emi@
nuclear-contraptions
-tooltiptweaks
+tooltiptweaks@
more-babies
-
-
-
-armor-visibility
+@save-my-bed
+@data-reload
+@winver
+armor-visibility@
the-chicken-came-first|先有鸡*
hardcore-dungeons
block-relocation-forge
-norecipebook-fabric|没有配方书Fabric版 (NoRecipeBook (Fabric))
-
-fpsdisplay
-
-microdurability
-indicatia
+norecipebook-fabric@|没有配方书Fabric版 (NoRecipeBook (Fabric))
+@sort
+fpsdisplay@
+@where-items-owo
+microdurability@
+indicatia@
fishy-delight-a-farmers-delight-add-on
simple-delights
-color-me-outlines
-
+color-me-outlines@
+@nbttooltips
upstream¨upstream-fabric
astemirs-fireflies
@@ -6663,47 +6663,47 @@ fivehead
attained-drops|可种植掉落物*
attained-drops-2|可种植掉落物2*
-auth-me
-refinedcreativeinventory|创造模式物品栏重制 (RefinedCreativeInventory)
+auth-me@
+refinedcreativeinventory@|创造模式物品栏重制 (RefinedCreativeInventory)
runesword
-
+@jcm
autopackager
dynamx
-
+mob-cards
mavm
-
+@waxednotwaxed
hidden-names|隐藏名称*
-doph|远程命中提示 (Ding On Projectile Hit)
-keybinds
-
-
+doph@|远程命中提示 (Ding On Projectile Hit)
+keybinds@
+hat-list@hatlist
+@nmuk
raven-brews-core
raven-coffee|Raven咖啡*
cqc
geode
realistic-spiders|真实的蜘蛛*
-
-biome-particle-weather
+@timedisplay|时间显示 (Time Display)
+biome-particle-weather@biome_particle_weather
ftb-backups-2|FTB备份2 (FTB Backups 2)
-darkkore
+darkkore@
illagers-wear-armor
-hudium
+hudium@
ocean-world|海洋的世界*
-cobblegen
+cobblegen@
zombie-extreme
modularmovements|模块化动作 (ModularMovements)
uncle-js
wither-bones
-sleep-warp
-diagonal-fences
+sleep-warp@
+diagonal-fences@
jumpy-boats-fabric|跳跃的船(Fabric/Quilt) (Jumpy Boats(Fabric/Quilt))
dyeable-redstone-signal|染色红石信号*
velocity-based-damage
no-telemetry
-
+@fullbright
create-chromatic-return|机械动力:异彩化合物 (Create: Chromatic Return)
coffee-spawner
@@ -6717,29 +6717,29 @@ tardim
luckytnt
-gamma-utils|伽玛工具*
+gamma-utils@|伽玛工具*
pickle-tweaks
-dps-chaoscraft
-
+dps-chaoscraft@
+@cc-polymer
moyai
mega-meteors-mod
-
+@mcmouser
mixinbootstraplegacy
freecam
animationrecorder|动图记录 (AnimationRecorder)|1353791
ingame-biome-map-exporter|群系地图一键导出 (Ingame Biome Map)
fishing-overhaul
-kronhud
+kronhud@
shared-ender-chest|共享末影箱*
no-beacon-beams|无信标光柱*
farmers-respite|农夫暇事 (Farmer's Respite)
-
+@fabricae-ex-nihilo
crafting-mania
loot-goblins
skylib
-dt3|不要饿死3 (DontStarve3)|1376536
+@dt3|不要饿死3 (DontStarve3)|1376536¨dt3|不要饿死3 (DontStarve3)|1376536
tbscclick
modern-elevators-and-escalators|现代电梯与扶梯 (Modern Elevators and Escalators)
@@ -6750,34 +6750,34 @@ gobber-delight-a-farmers-delight-add-on|戈伯乐事 (Gobber Delight)
extinguish-by-uss_shenzhou|灭 (Extinguish)
-biome-makeover-forge|生物群系改造 (Biome Makeover) - Forge¨biome-makeover|生物群系改造* - Fabric
+@biome-makeover|生物群系改造 (Biome Makeover)¨biome-makeover-forge|生物群系改造 (Biome Makeover) - Forge¨biome-makeover|生物群系改造* - Fabric
throwable-blocks
-ancient-warfare-3|古代战争3*
-no-chat-reports|禁用聊天举报*|1355259
-valleycraft
+ancient-warfare-3@ancient-warfare|古代战争3*
+no-chat-reports@|禁用聊天举报*|1355259
+valleycraft@
no-xp-bar
towers-of-the-wild-additions
world-of-pure-imagination|想象界 (World of Pure Imagination)
connectivity
more-useful-villagers
-
-
+@symbol-chat
+@forcegl20
hyle
advanced-solar-panels-patcher
-no-recipe-book-reborn|没有配方书重制版*
+no-recipe-book-reborn@norecipebookreborn|没有配方书重制版*
-shulker-tooltip
+shulker-tooltip@
-midnightlib
-
+midnightlib@
+@mod-remapping-api
tic-tooltips
ydms-wizarding-world-of-harry-potter
lucraft-id-extender
@@ -6789,7 +6789,7 @@ flat-bedrock
dans-crafting-tweaks
handle-cane|手杖*
-mega-cells|MEGA存储单元 (MEGA Cells)
+mega-cells@mega|MEGA存储单元 (MEGA Cells)
structory
enchlevel-langpatch-config2|附魔等级语言补丁 - 配置扩展 (EnchLevel-LangPatch Config III)
instant-unify|瞬间统一+ (InstantUnify+)
@@ -6798,8 +6798,8 @@ just-enough-recipe-integrations
hanami
is-a-mod-by-vazkii
inputfix|输入修正 (InputFix)|71955
-inventory-tabs-updated
-ez-mod-lib
+inventory-tabs-updated@
+ez-mod-lib@ezmodlib
armor-toughness-bar-updated
colorful-health-bar-updated
@@ -6814,14 +6814,14 @@ nether-tears|下界遗泪 (NetherTears)
africraft||1357400
applied-botanics-addon|应用能源:植物魔法附属*
overloaded-armor-bar-updated
-delightful
+delightful@
wizardry-tales
tamedrespawn|驯兽重生 (TamedRespawn)
-dumplings-delight|饺子乐事*
+dumplings-delight@|饺子乐事*
thermal_extra
-nether-sky-block|下界空岛*
+nether-sky-block@|下界空岛*
arte-magicum
harder-tinker|真实匠艺*
ocean-blender|海洋搅拌机 (OceanBlender)
@@ -6829,21 +6829,21 @@ buildcraft-fluxified
brewin-and-chewin|饮酒作乐 (Brewin' And Chewin')
infinite-source-of-water
dramatic-doors
-crafttweaker-gui
-
-villager-hats-mod
-custom-damage-particles|自定义伤害粒子*
-
+recipe-gui
+@autotechno
+villager-hats-mod@villager-hats
+custom-damage-particles@|自定义伤害粒子*
+@aei|AEI物品管理器 (Always Enough Items)
cyan-warrior-swords-mod¨wiki-115-112
-plant-in-a-jar
+plant-in-a-jar@
solid-mobs
naturalist|自然主义*
-c3h6n6o6|环三亚甲基三硝胺 (Cyclotrimethylenetrinitramine)|1359824
-syncmatica|共享原理图*
-zephs-hammers
-zephs-excavators
-
-
+c3h6n6o6@|环三亚甲基三硝胺 (Cyclotrimethylenetrinitramine)|1359824
+syncmatica@|共享原理图*
+zephs-hammers@zephshammers
+zephs-excavators@zephsexcavators
+@delayedreports
+@technomodel
cat-herder
command-creative-tab
umu-backpack||1358515
@@ -6852,7 +6852,7 @@ short-stacks
smooth-boot-reloaded|流畅加载重置版*
stone-crafting-table
lodestonelib
-witherturnsskeletons
+witherturnsskeletons@
twilight-forest-the-lost-blocks
the-nexus-deep-dark-dimension
jepp|JEI绘画预览 (Just Enough Painting Previews)
@@ -6862,21 +6862,21 @@ ctm-refabricated
placeable-pumpkin-pie|可放置南瓜派*
birch-forest-upgrade|白桦林更新*
ok-zoomer-forge
-
+@koro-utils-lib|科洛的工具库 (Koro Utils Lib)
cosmicnpcs
skinrestorer
hitchhike
-sonic-deflect
+sonic-deflect@
mpkmod
supernatural-creatures
food-rebalanced
psi-unofficial
time-core
-
-unusual-squad-into-the-void
-create-supercharged
+@searchable-containers-retraversal|可搜索容器:重遍历 (Searchable Containers: Retraversal)
+unusual-squad-into-the-void@intothevoid
+create-chromaticreturn
powertool|电动工具 (PowerTool)
-keymap|键盘映射*
+keymap@|键盘映射*
actually-useful-stonecutter
itemphysic-lite-fabric
forgotten-treasures
@@ -6887,8 +6887,8 @@ grimoire-of-gaia|盖亚魔典 (Grimoire of Gaia)|679274
ftb-jar-mod-forge
dimensional-paintings|维度绘画*
item-recycler
-linsapi
-titlechanger|标题切换器 (TitleChanger)|1357743
+linsapi@
+titlechanger@mctitlechanger|标题切换器 (TitleChanger)|1357743
adobe-blocks-2
menacing-monsters
packing-tape
@@ -6897,7 +6897,7 @@ the-graveyard-biomes-forge¨the-graveyard-biomes-fabric
cammies-minecart-tweaks
renderlib
nothirium
-advancedchatbox
+advancedchatbox@AdvancedChatBox
quick-pick
advancements-debug
randomium-ore
@@ -6905,50 +6905,50 @@ degradeexplodedblocks
zeras-scps
enderite-lieonlion
-advancedchatfilters
-advancedchatmacros
+advancedchatfilters@AdvancedChatFilters
+advancedchatmacros@AdvancedChatMacros
aof-emotes
grasslessdirtbackport
dazzle-2
-smaller-nether-portals¨smaller-nether-portals-fabric
+smaller-nether-portals¨smaller-nether-portals-fabric¨@smaller-nether-portals
basic-aiots
-pokeball|精灵球 (PokeBall)
+pokeball@|精灵球 (PokeBall)
gravitychanger
-building-wands
-advancedchat
+building-wands@
+advancedchat@AdvancedChat
aiots-expanded-fabric
-moremcmeta¨moremcmeta-fabric
+moremcmeta¨moremcmeta-fabric¨@moremcmeta
starry-skies
flesh2leather-forge¨flesh2leather-fabric
fall-damage-indicator
aww-man-achievement-mod
fire-extinguisher
-farmers-knives
+farmers-knives@
sullys-mod
magicaldecorations
moss-and-monsters
detonation
-
+@rpgdurability|RPG装备耐久 (RPG Durability)
coal-processing-machine
joy-of-painting
warden-loot-forge¨warden-loot
-
+@vmwcr|维克的现代战争补充合成表 (Crafting Recipes of Vic's Modern Warfare Mod)
optifine-checker|高清修复检测 (OptiFine Checker)|1334261
paintings
-builtin-servers
-the-extractinator|提炼机 (Extractinator)
-choicetheorems-overhauled-village
+builtin-servers@
+the-extractinator@extractinator|提炼机 (Extractinator)
+choicetheorems-overhauled-village¨@ct-overhaul-village
blast
-no-indium
+no-indium@
windsweptmod
-immersive-paintings
-melon-wireless-redstone
-automated-crafting
-
-easy-piglins|简易猪灵*
+immersive-paintings|沉浸画框*
+melon-wireless-redstone@wireless-redstone
+automated-crafting@
+@optab
+easy-piglins@|简易猪灵*
waterlogged-redstone
prehistoric-flora-integration
better-bad-omen
@@ -6956,7 +6956,7 @@ can-you-trash-it
croptopias-chocolaterie-forge|作物盛景:巧克力工坊 (Croptopia's Chocolaterie) - Forge¨croptopias-chocolaterie-fabric|作物盛景:巧克力工坊 (Croptopia's Chocolaterie) - Fabric
crawl
fabric-chisel
-roost-ultimate
+roost-ultimate@roostultimate
cammies-wearable-backpacks
parrying
@@ -6967,14 +6967,14 @@ verdure|郁郁葱葱*
the-ori-mod
-coxinha-utilities
+coxinha-utilities@
dragon-fire-mod
sandy-ores
-rainbowify
+rainbowify@
be-quiet-please|请安静*
prehistoric-revival-a-prehistoric-fauna-add-on|史前复生 (Prehistoric Revival)
had-enough-characters
@@ -6983,7 +6983,7 @@ medieval-origins
elytra-chestplate-swapper
-
+apollos-additional-structures
chimes
@@ -6997,26 +6997,26 @@ mcda|我的世界:地下城盔甲 (MC Dungeons Armors)
sun-burns
battle-tools
jobsplus
-towns-and-towers-structure-add-on
+towns-and-towers-structure-add-on@towns-and-towers
drg-flares-forge¨drg-flares
-simple-uncrafting-table-fabric
-caracal-mod
+simple-uncrafting-table-fabric@simple-uncrafting-table
+caracal-mod@caracal_mob
rough-tweaks-revamped
the-wild-backport
unvoted-shelved
yeos-mobs
-infohud
+infohud@
haruhiism|春日主义*
withcoffee|咖啡相伴/天堂之路 (WithCoffee)|1365207
emeraldstuff
grass-slabs-carpets-stairs
not-mutually-exclusive|不冲突 (Not Mutually Exlusive)
builders-delight-forge
-miners-minerals
+miners-minerals@
days-to-mine|七日杀 (7 Days to Mine)|1200742
pieces-of-ore
-
+@fix-keyboard-on-linux
lockdown-additions
scp-lockdown-extras
player-tabs
@@ -7029,9 +7029,9 @@ sneaky-screens
inmis¨inmis-forge
-rechiseled
-durability-tooltip
-oreganized-mod|井然有矿*
+rechiseled@
+durability-tooltip@
+oreganized-mod|井然有矿* - 旧版¨oreganized|井然有矿 (Oreganized Mod) - 2.0+版
riding-utilities
compact-help-command¨compact-help-command-fabric
@@ -7042,8 +7042,8 @@ large-meals-an-add-on-for-farmers-delight
explorers-delight
the-irregular-chef
compat-o-plenty
-snow-pig|雪猪* - Forge¨snow-pig-fabric|雪猪 (Snow Pig) - Fabric
-wandering-collector
+snow-pig@snowpig|雪猪* - Forge¨snow-pig-fabric@snowpig-fabric|雪猪 (Snow Pig) - Fabric
+wandering-collector@
@@ -7053,61 +7053,61 @@ auto-leveling
packed-inventory
crafting-on-a-stick
+endlessids@
-
-
+@cpm-fabric|压缩空间 Fabric (Compact Machines - Fabric)
cycle-paintings¨cycle-paintings-fabric
fire-spread-tweaks¨fire-spread-tweaks-fabric
anger-management
easy-elytra-takeoff¨easy-elytra-takeoff-fabric
stack-refill¨stack-refill-fabric
-light-meals|轻食物语*
-lost-and-fished|失而钓得 (Lost and Fished)
+light-meals@|轻食物语*
+lost-and-fished@lost-fished|失而钓得 (Lost and Fished)
custom-backgrounds
ydms-allay|YDM的悦灵 (YDM's Allay)
starmaker
+@swdheftpywaed|对不起,我们没有充足的资金为您提供一只末影龙 (Sorry We Don't Have Enough Funds To Provide You With An Ender Dragon)
-
-areas¨areas-fabric
+areas¨areas-fabric¨@areas
emberroot-zoo
mctimeextendsfabric
l2library
unstructured
colorful-cut
-
-environmental-materials
+@fake-floader
+environmental-materials@
horse-tweaks
auto-workstations-fabric|自动化工作站 (Auto Workstations)
l2-backpack|莱特兰-背包*
-
+@mbp
capybara-fabric¨unnamed-animal-mod-capybara-only
just-enough-petroleum
diamethysts
-twigs
+twigs@
-
-spongemixins
+@fplib
+spongemixins@spongemixin1710
nock-enough-arrows
-every-compat
+every-compat|泛用兼容:木材 (Every Compat: Wood Good)
offline-mode
-ghastly-wail
+ghastly-wail@
immersive-weapons#c71
-clear-skies
+clear-skies@
ShretNether
pling
justthetips
-notenoughitems-gtnh|NEI物品管理器非官方版 (NotEnoughItems Unofficial)
+notenoughitems-gtnh@notenoughitems-unofficial|NEI物品管理器非官方版 (NotEnoughItems Unofficial)
sketchbook-attributes
-better-combat-by-daedelus
+better-combat-by-daedelus@better-combat¨better-combat-backport|Better Combat - 1.16, 由 MinikParadox 上传
custom-stars
ice-and-fire-tweaker
@@ -7118,9 +7118,9 @@ freecam-by-zergatul
macaws-bridges-oh-the-biomes-youll-go|Macaw的桥梁:你将去的生物群系附属 (Macaw's Bridges - Oh The Biomes You'll Go)
macaws-fences-oh-the-biomes-youll-go|Macaw的栅栏与墙:你将去的生物群系附属 (Macaw's Fences - Oh The Biomes You'll Go)
-alternate-current
-no-unused-chunks
-no-fade
+alternate-current@
+no-unused-chunks@
+no-fade@
radioactive-universe
completeconfig
@@ -7130,8 +7130,8 @@ critters-and-companions
memorytester
colormatic
-fogbox
-
+fogbox@
+@hopper
lots-of-shields
timestopclock|Mega的时间静止 (MegaTimeStopMod)
umu-little-maid
@@ -7160,50 +7160,50 @@ apex-guns|Apex 枪械工艺*
hwyla-addon-horse-info
postal-pigeons
swagoween
-no-lag-tickratechanger
+no-lag-tickratechanger@
alcocraft-beer-and-stuff
-simplevillagers
+simplevillagers@
autoreconnect
dusk
copper-craft|铜制工艺*
extrabotany2|额外植物学重置版 (ExtraBotany2)
-terramine
+terramine@
aeinfinitybooster
endertech-infinity
more-frogs-fabric|更多青蛙 (More Frogs)
create-big-cannons|机械动力:火炮*
-fastanim
-rubidium-extra|铷 · 扩展*
+fastanim@
+rubidium-extra@|铷 · 扩展*
less-feature|更少的特性 (Less Features)
-mores-forge¨mores-fabric
+mores-forge¨mores-fabric@mores
tactical-fishing
token-enchanter
igiexteneded|IGI 信息扩展 (IGIExteneded)
landofsignals
-lootbeams
+lootbeams@
-stepupnext
-simple-bbq|简易烧烤 (Simple BBQ)
+stepupnext@stepup
+simple-bbq@|简易烧烤 (Simple BBQ)
mythic-mounts
-spice-of-life-sweet-potato-edition
-
-sneak-through-berries
+spice-of-life-sweet-potato-edition|生活调味料:红薯版 (Spice of Life: Sweet Potato Edition)
+@reality-c-c|真实城市建设模组 (Reality City Construction)
+sneak-through-berries@
winter-overhaul|冬季改革*
-offlineskins¨offlineskins-fabric
-prevent-crappy-launcher
+offlineskins
+prevent-crappy-launcher@preventcrappylauncher
another-furniture
-rayon
+rayon@
ponder
-
+ender-logistics|末影物流*
@@ -7218,9 +7218,9 @@ turtlemancy
goblins-dungeons
-optigui
-
-background-music-selector|背景音乐选择器*|1372157
+optigui@
+@eeeee|咏e (eeemod)|1372244
+background-music-selector@bgmselector|背景音乐选择器*|1372157
dynamic-surrounding-resurrected
spells-shields
@@ -7232,20 +7232,20 @@ extra-utilities-reborn|更多实用设备:重生*
chatflow
-auto-third-person|自动第三人称*
-flowery-structures
+auto-third-person@|自动第三人称*
+flowery-structures@
chat-up
flowery-core
level-hp
sanguine-arsenal|幻梦:血染武装 (Eidolon's Sanguine Arsenal)
-automobility|飞车奇匠*
+automobility@|飞车奇匠*
ftb-quests-localization-keys
unlit-realistic-torch-remake|真实火把:重置 (Realistic Torch Remake)|1373150
chunk-saving-fix|区块保存修复*
-fullscreeno
+fullscreeno@
piglin-proliferation
the-binding-of-isaac-style-consumables
@@ -7254,37 +7254,37 @@ configuration
natural-decoration
-spice-of-fabric
-
+spice-of-fabric@
+@better-climbing
dog-yeeter
-mc122477fix
+mc122477fix¨@mc122477fix
armors-hud-revived-liteloader-only
-living-things|自然生物*
-beautify-decorate
+living-things@|自然生物*
+beautify-decorate|美化! (Beautify !)
Voodoo
notenoughluck|更多幸运 (NotEnoughLuck)
-
-mixintrace
+@hideplayers|隐藏玩家 (HidePlayers)
+mixintrace@
bancis-enchantments
+@maze|迷宫 (Maze)
-
-
+@skylands
jjthunder-overhauled-world-generation
betterblockoutline
-
-scift
-
-
+@sodium-crash-fix|Sodium 临时崩溃修复 (Sodium Crash Fix)
+scift@
+@ping-me
+@tool-rods
the-squid-game-mod
-datapack-portals
+datapack-portals@datapackportals
more-beautiful-walls
iris-flywheel-compat
prism-lib¨prism-fabric
map-atlases-forge|地图册 (Map Atlases) - Forge¨map-atlases|地图册* - Fabric
-
+@eprr|额外玩家渲染Rift版 (ExtraPlayerRenderer-Rift)
@@ -7296,13 +7296,13 @@ squid-game-mod
quantum-querry-plus|量子采石场增强 (Quantum Quarry Plus)
food-enhancements|食物扩增*
-
-create-ore-excavation|机械动力:矿石开掘*
+@bindgg
+create-ore-excavation@|机械动力:矿石开掘*
just-player-heads¨just-player-heads-fabric
survivalplus-lightsabers|生存加光剑 (SurvivalPlus Lightsabers) - Forge¨survivalplus-lightsabers-fabric|生存加光剑 (SurvivalPlus Lightsabers) - Fabric
fclib
primitive-utilities
-guglecarpetaddition|Gugle的Carpet附加包 (GugleCarpetAddition)|1378375
+guglecarpetaddition@gca|Gugle的Carpet附加包 (GugleCarpetAddition)|1378375
survivalplus|生存加 (SurvivalPlus) - Forge¨survivalplus-fabric|生存加 (SurvivalPlus) - Fabric
mrp-library
bypass-anvil-restriction
@@ -7315,9 +7315,9 @@ restored-earth
pig-pen-cipher
-luckyblock-fabric|幸运方块 (Lucky Blocks)
-
-things-fabric|杂七杂八的东西 (Things)
+luckyblock-fabric@luckyblocks|幸运方块 (Lucky Blocks)
+@smeltingtouch
+things-fabric@things|杂七杂八的东西 (Things)
exlines-snorkel-mod
two-players-one-horse
headshot-forge
@@ -7325,29 +7325,29 @@ left-hanging
aetherworks|天华之作 (AetherWorks)
-slice-and-dice
-textrues-rubidium-options|TexTrue的铷视频界面 (TexTrue's Rubidium Options)|1377003
+slice-and-dice@
+textrues-rubidium-options@|TexTrue的铷视频界面 (TexTrue's Rubidium Options)|1377003
rubber-duck|橡皮鸭*
-unlimited-dragon-eggs-fabric
+unlimited-dragon-eggs-fabric@unlimited-dragon-eggs
moreplayermodels-plus
-
+@actioninventory
custom-void
-create-jetpack|机械动力:喷气背包*
+create-jetpack@|机械动力:喷气背包*
entity-outliner
-
-no-name-tags|隐藏名称标签*
+@sharpness6
+no-name-tags@|隐藏名称标签*
ranged-wireless-redstone
potato-canon-plus-forge
unusual-end
solar-flux|日光通量*
-custom-background-color|自定义背景颜色*
-simple-shulker-preview
+custom-background-color@cbc|自定义背景颜色*
+simple-shulker-preview@
bygone-nether
-
+@clickopener
kokoalinux-backport
mechanical-clothesline|机械晾衣绳*
loading-progress-bar
@@ -7356,15 +7356,15 @@ planefix
quick-leaf-decay
simple-trophies
thaumic-computers
-
+@sliderclicksoundfix
instant-massive-structures-ims
hunger-remover
rad-enchants
plus-the-end
-runic
+runic¨@runic
broken-discs
forgedfabric
-create-extended-flywheels¨create-extended-flywheels-fabric
+create-extended-flywheels¨create-extended-flywheels-fabric¨@extended-flywheels
piggy-bank
deeperdarker
@@ -7377,51 +7377,51 @@ the-woodland-update
a-foe-on-fire
hunting-delight
more-barrels|更多桶*
-origins-accessibilities|起源:通行 (Origins: Accessibilities)
-
+origins-accessibilities@|起源:通行 (Origins: Accessibilities)
+@minerslunchbox|矿工的午餐盒 (Miner's Lunchbox)
fuelcanister
-f5-begone
-smartvision
+f5-begone@
+smartvision¨@smartvision
no-more-purple
content-creator-integration
-defaultworldtype
+defaultworldtype@
no-nether
miniatures
-ad-astra
-big-items-duh
+ad-astra@
+big-items-duh@
scape-and-run-parasite-vaccine
doge-mod
ice-fire-katanas
-
-
-brvsb|更好的铷视频设置按钮 (Better Rubidium Video Settings Button)
+@pressalttomeow
+@cma|地毯-MCT拓展 (Carpet MCT Addition)
+brvsb@|更好的铷视频设置按钮 (Better Rubidium Video Settings Button)
roughly-enough-trades
simple-quarry
magitek-mechs
infectum
nocubes-sea-dwellers
-show-me-your-skin
+show-me-your-skin@
invulnerable-pigs
t88
k-turrets
nevertooexpensive
max-enchant-x
-visible-toggle-sprint
-let-me-despawn
-glsl-panorama
-feyfriends
+visible-toggle-sprint@
+let-me-despawn@lmd
+glsl-panorama@
+feyfriends@
mccalc
nekeys
crafted-forge¨crafted
cursery
mirage-orb
galacticborn-origin
-
+@extrarecipe|更多配方 (Extra Recipe)
custom-window-title
@@ -7435,77 +7435,77 @@ upgraded-netherite-creativerite|下界合金增强:创造 (Upgraded Netherite
elementary-ores
minecraft-dark-souls|黑暗之魂 (MC: Dark Souls)
-dontmineit
-tmp
-feytweaks
-show-yourself
-convenient-name-tags
+dontmineit@
+tmp@
+feytweaks@
+show-yourself@
+convenient-name-tags@
anakus-status-bars
-minemenu-refabricated
-cfl
+
+cfl@
creative-fly
-why-does-my-glass-sound-like-that
-itemwallet
-way-much-faster-oxidize|更快铜锈蚀*
-
+why-does-my-glass-sound-like-that@wdmgslt
+itemwallet@
+way-much-faster-oxidize@|更快铜锈蚀*
+@emitrades|EMI村民交易 (EMI Trades)
sim-u-kraft-reloaded|模拟城市重置版 (Sim-U-Kraft Reloaded)|1379164
create-factory
-horseinboat
+horseinboat@
upgraded-tools
tools-for-caves-and-cliffs
-better-end-sky¨better-end-sky-fabric
+@better-end-sky¨better-end-sky¨better-end-sky-fabric
-infinity-with-mending|无限与经验修补
+infinity-with-mending@|无限与经验修补
infinity-craft
-hookshot
+hookshot¨@hookshot
custom-spawns
create-misc-and-things|机械动力:实用物件 (Create : Misc & Things)
low-fire
-infinity-buttons|无限按钮*|1378245
+infinity-buttons@infinitybuttons|无限按钮*|1378245
i-know-what-im-doing-fabric
-skin-hotkey
-dyeable-fishing-lines-fabric¨dyeable-fishing-lines-forge
+skin-hotkey@
+dyeable-fishing-lines-fabric¨dyeable-fishing-lines-forge¨@dyeable-fishing-lines
reciperemover
roughly-enough-loot-tables
-fld
+fld@
lostcities-tfc
snowed-fabric
player-blink
-better-command-block-ui
+better-command-block-ui@bettercommandblockui
create-experienced
gotta-go-fast
mad-particle|疯狂粒子*
-fabrihud
-shiny-horses
+fabrihud@
+shiny-horses@
nyx-rotn-edition
-playeranimator
+playeranimator@
apathy-mod
auudio-forge¨auudio-fabric
easy-shulker-boxes
-qu-enchantments
+qu-enchantments@
ironchests
-piercing-paxels
-icy-incitement
+piercing-paxels@
+icy-incitement@
visible-librarian-trades
unlimited-chisel-works-tfc1
enchantedshulkers|附魔潜影盒 (EnchantedShulkers)
noits-simple-sorting
colds-gauntlets
level-one
-wilder-wild
+wilder-wild@
paintings-with-dragons
more-redstone-lamps|更多红石灯*
placeable|可放置植物 (Placeable Plants)
hot-or-not-tfc-with-sticks
-quick-elytra
+quick-elytra@
other-berries
itank
snowy-spirit
@@ -7520,32 +7520,32 @@ better-mobgriefing-gamerule
frozen-fiend
gateways-to-eterrnity
-gate-of-babylon-additions|王之财宝附加 (Gate of Babylon Additions)|1381630
-hephaestus-fabric|匠神 (Hephaestus)
-crafting-bench
+gate-of-babylon-additions@|王之财宝附加 (Gate of Babylon Additions)|1381630
+hephaestus-fabric@hephaestus|匠神 (Hephaestus)
+crafting-bench@
morebeeinfo
bq-forestry|更好的任务-林业扩展 (Better Questing - Forestry)
create-infinidrill
-
-attribute-tooltip-fix
+@scrollable-tooltips
+attribute-tooltip-fix@
crumbs¨crumbs-fabric
italian-delights-add-on-for-farmers-delight
-immersivemc
+immersivemc|沉浸式MC (ImmersiveMC)
mc-vr-api
-exordium
+exordium@
fabric-launchpads¨zihlaunchpads
thermal-innovation-cyclic-compat
-
+@bee-fix|蜜蜂修复 (Bee Fix)
noel-christmas-mod
-moar-fps
+moar-fps@moarfps
flighthud
-meal-api
+meal-api@mealapi
seed-drop
fishery-expansion
@@ -7562,21 +7562,21 @@ zenstages
wondrous-wilds
truly-treasures
-where-is-it
-relicex
-led|发光二极管 (Light Emitting Diode)
+where-is-it@
+relicex@
+led@|发光二极管 (Light Emitting Diode)
i-dont-need-stone|再见 圆石 (I DON'T Need Stone)
-
-colorize
+@libgui-forge
+colorize@
no-magic-milk
powered-food
spirit
elytra-bounce
-no-report-button
+no-report-button@nrb
mana-wizardry
aileron
-
+@devworld
immersive-weapons-compatibility-bridge
gameidiots-craftable-wizardry-items
@@ -7585,36 +7585,36 @@ serene-seasons-harvestcraft2-compat
goat
simple-autofish
-
+@thinkbeforedrop|丢弃物品保护 (Think Before Drop)
omo
mushroom-additions
project-the-void|项目 -虚空- (Project the Void)
ice-and-fire-rotn-edition
minescript
-no-capes|禁用披风*
+no-capes@gallery|禁用披风*
apocalypsecraft
mcree_highnoons-enchantments|McRee_HighNoon的附魔 (McRee_HighNoon's Enchantments)
canary
-better-give
+better-give@
zonkos-monsters
tetratic-combat
-fastload
+fastload@
dramatictrees
-robinhood
+@robinhood¨robinhood
trajans-core
stop-hiding
simple-world-timer
-recursive-resources
+recursive-resources@recursiveresources
inventory-actions
haunted-harvest
dungeonsenhanced
-create-crystal-clear|机械动力:晶莹剔透 (Create: Crystal Clear)
-
+create-crystal-clear@|机械动力:晶莹剔透 (Create: Crystal Clear)
+@create-crystal-clear-fabric
fix-experience-bug
-
+@minecraft024|24点 (Minecraft024)
@@ -7624,11 +7624,11 @@ it-takes-a-pillage¨it-takes-a-pillage-fabric
get-it-together-drops
fire-n-blood
chunknogobyebye
-beaming-drops|掉落物光束 (Beaming drops)
-
+beaming-drops@loot-beams-backport|掉落物光束 (Beaming drops)
+@protocharset-rift
the-hordes
-
+@roundaround-inventory-management
soul-fired
faithfulbackrooms
ex-machinis
@@ -7636,7 +7636,7 @@ goety
torch-hit
we-got-runners
-
+@cabricality-utils
dynamic-trees-croptopia
medieval-music
gempire
@@ -7644,7 +7644,7 @@ gempire
sbm-bone-torch
linkmyitem
sprout
-resourceful-lib
+resourceful-lib@
@@ -7662,7 +7662,7 @@ angry-mobs
onlylooking
the-birdwatching-mod
giant-ai
-unlit-campfire
+unlit-campfire@
xl-packets-renewed
nameplate
rpgdifficulty
@@ -7680,26 +7680,26 @@ cathedral
meowing
dogwhistle
-
+@onlylooking-fabric
wilder-wilds
-
-better-respawn
+@ae2-unpowered
+better-respawn@
essentialgui
elementary-staffs
dragon-fight-config
-infused-foods
+infused-foods@
what-meme
shiny-gear
would-you-shut-up-man
weaker-spiderwebs¨weaker-spiderwebs-fabric
netherbarrels
-wooden-elytra
+wooden-elytra|木制鞘翅*
construction-site-deco
-wthit-harvestability
+wthit-harvestability@
habitat
-
+@emicompat
@@ -7707,39 +7707,39 @@ custom-cards|自定义卡牌*
biome-cards|群系卡牌*
bombinghud
astral-dimension
-followers-teleport-too-fabric¨followers-teleport-too
-
+@followers-teleport-too¨followers-teleport-too-fabric¨followers-teleport-too
+@citycraft|城市工艺 (City Craft)
odysseymod
-libipn
+libipn@
blues-dynamic-lights
gtc-expansion
nether-depths-upgrade
cloud-factory
disc-holders-dj
-
+@econ
keepmum|三缄其口 (KeepMum)
-saturn
+saturn@
stackable
-do-a-barrel-roll
-fantasys-dice|Fantasy的骰子 (Fantasy's Dice)
-
-
-itemresistance
-distinguished-potions
-
-just-enough-immersive-multiblocks
+do-a-barrel-roll@
+fantasys-dice@fantasy-dice|Fantasy的骰子 (Fantasy's Dice)
+@ukulib
+@betterhurtcam
+itemresistance@
+distinguished-potions@
+@enhanced-weather
+just-enough-immersive-multiblocks@jei-multiblocks
adapaxels
-fabrizoom
+fabrizoom@
json-things
-
+@origins-randomiser
simply-swords
-kuayue|跨越 (kuayue)
+kuayue@|跨越 (KuaYue)
summoningrituals|召唤仪式 (Summoning Rituals)
no-sleep-forge¨no-sleep
you-died|你死了*
-hotbarcycle
+hotbarcycle@
hungry-in-peaceful-mode|无中生饥*
auto-respawn-mod
cave-generator
@@ -7748,42 +7748,42 @@ customized-dungeon-loot
customquests
portal-cubed
pehkui-resizer
-
-
-portable-hole
-betterteamchat
+@kaffees_dual_ride
+@sfreeze
+portable-hole@
+betterteamchat@
logic-chips
-quit
+quit@
nears
-
-
+@spruceui-forge
+@walk-jog-run
conveyor-belts-fabric|传送带 (Conveyor Belts)
-create-sifting
+create-sifting@
dat-modding-api
-rangefinder-hud
+rangefinder-hud@rangefinderhud
prelaws-blocky-siege
-modget
-
-no-leaf-decay
-mysteriumlib
-
-furnace-recycle¨furnace-recycle-fabric
+modget@
+@roundaround-babies-forever
+no-leaf-decay@
+mysteriumlib@
+@inrealtime
+furnace-recycle¨furnace-recycle-fabric¨@furnace-recycle
wild-lands
noenchanting
gregtech-experimental
-
-almost-bedtime
+@cooldown-totem
+almost-bedtime@
catlib
-
-polaroid-camera|宝丽来相机*
+@mythicbotany_tweaker
+polaroid-camera@polaroidcamera|宝丽来相机*
dig
dimensional_ores
-devices-mod
+devices-mod@
dynamistics
eguilib
glacidus
@@ -7791,8 +7791,8 @@ glacidus
compat-makeover
-
-
+@nametagping
+map-in-slot@
hungertweaker
knob-control
daedalus-labyrinth
@@ -7802,14 +7802,14 @@ epic-fight-nbt-integration
login-protection|登录保护*
swem
metal-barrels-legacy|金属储物桶:传承 (Metal Barrels: Legacy)
-inventoryfullalert
+inventoryfullalert@
lead-beyond|引向超越*
-
+@dyeallthethings
swampier-swamps¨swampier-swamps-fabric
weather-settings|更好的天气控制 (Better Weather Control)
shutdowner
shield-mechanics|盾牌机制优化 (Shield mechanics)
-sun-and-moon-celestial-configuration
+sun-and-moon-celestial-configuration@celestial-config
chatsound
advancedshader|光影前向兼容 (AdvancedShader)
the-wools|羊毛! (The Wools!)
@@ -7820,13 +7820,13 @@ tinker-leveling
gtce-tj-edition|格雷科技社区版:TJ版 (GregTech Community Edition: TJ Edition)
upc
gregicality-tjfork
-
-create-mechanical-extruder
+@flagslib
+create-mechanical-extruder@
no-debug-5-you
packagedavaritia
pillar
resound
-mob-plaques
+mob-plaques@
corail-scanner
space-ambient-addon-for-galacticraft
spiked-foods
@@ -7836,17 +7836,17 @@ contenttweaker-registry-orderer
the-otherside
pogo-sticks
-camcord
-modern-keybinding|现代化按键绑定 (Modern KeyBinding)
-make-bubbles-pop
+camcord@
+modern-keybinding@modernkeybinding|现代化按键绑定 (Modern KeyBinding)
+make-bubbles-pop@make_bubbles_pop
couplings
mambience
-elytra-aeronautics¨elytra-aeronautics-forge|Elytra Aeronautics - Forge移植版
+elytra-aeronautics@¨elytra-aeronautics-forge|Elytra Aeronautics - Forge移植版
infinitory
loud-leads|栓绳音效*
music-duration-reducer
-telepistons
+telepistons@
mariums-soulslike-weaponry|Marium的魂类武器 (Marium's Soulslike Weaponry)
lets-go-herping
modularui
@@ -7861,7 +7861,7 @@ spook
broglis-owls
pluto
-youre-in-grave-danger
+youre-in-grave-danger@yigd
reds-better-biomes-fabric-forge
reds-more-structures
rotn-tweaker
@@ -7879,17 +7879,17 @@ more-golems
kebabs-crowns
rerereskillable
hedgehogs|刺猬*
-
-yacl
-keyboard-wizard-legacy|按键精灵旧版 (Keyboard Wizard: Legacy)
+@pendulum
+yacl@
+keyboard-wizard-legacy@keywizardlegacy|按键精灵旧版 (Keyboard Wizard: Legacy)
queen-cats-dogs
additional-lights|更多光源*
-
+in-time-presence
mob-vote-2022-forge¨mob-vote-2022
curious-lands
-cpmsvcc|自定义玩家模型的简单的语音聊天兼容 (Customizable Player Models Simple Voice Chat compat)
-pettable
-create-enchantment-industry|机械动力:附魔工业*
+cpmsvcc@|自定义玩家模型的简单的语音聊天兼容 (Customizable Player Models Simple Voice Chat compat)
+pettable@
+create-enchantment-industry@|机械动力:附魔工业*
enchanted-witchcraft
wyml
@@ -7897,58 +7897,58 @@ bunch-o-bugs
useless-reptile
technomancy-2|量子魔法2 (Technomancy2)
quickstore|快速贮藏重制版 (QuickStoreRemake)
-your-items-are-safe¨your-items-are-safe-fabric
+your-items-are-safe¨your-items-are-safe-fabric¨@your-items-are-safe
techemistry
the-missing-villages
-continents
+continents@
yungs-better-ocean-monuments|YUNG的海底神殿优化 (YUNG's Better Ocean Monuments) - Forge¨yungs-better-ocean-monuments-fabric|YUNG的海底神殿优化 (YUNG's Better Ocean Monuments) - Fabric
echoing-depths
advanced-finders
maple-forest|枫林*
-
+@legacyinputpatch|Legacy Fabric输入补丁 (LegacyInputPatch)|1395382
droplight
-xanders-sodium-options
-entity-view-distance
-creeper-ai-updated
+xanders-sodium-options@
+entity-view-distance@
+creeper-ai-updated@
sihywtcamd
sihywtcamc
-why-stacks-of-16
+why-stacks-of-16@
jumpquilt
oh-how-the-crafting-has-tabled
-roughly-enough-items-hacks
+roughly-enough-items-hacks@
piglin-expansion|猪灵扩展*
-
+@nes
dreadsteel|悚怖钢*
-auto-hud
-camera-utils
+auto-hud@autohud
+camera-utils@
-roughly-enough-items-server-component
+roughly-enough-items-server-component@
daves-building-extended¨daves-building-extended-fabric|Dave's Building Extended - Fabric(非官方)
-
+@rechiseled-bookshelves
dimensional-pockets-ii|四次元口袋2 (Dimensional Pockets II)
-
+@calculatorrinf-uwu
black-hole-storage|黑洞存储*
-hudtweaks
+hudtweaks@
mod-button
-
-trees-do-not-float
+@opt-carpet-addition
+trees-do-not-float@
cosmos-library
groovyscript
potion-ring-reforged|药剂环重铸 (Potion Rings - REFORGED) - Forge¨potion-ring-reforged-fabric|药剂环重铸 (Potion Rings - REFORGED) - Fabric
scp-overtime
chubby-stuff-fabric
-better-brightness-slider
-open-parties-and-claims
-loading-screen-tips
+better-brightness-slider@
+open-parties-and-claims@
+loading-screen-tips@loadingscreentips
better-tips
-immediatelyfast
-opac-fabric-create-support
-steel-for-fabric
-mekanism-tweaks
+immediatelyfast@
+opac-fabric-create-support@
+steel-for-fabric@steel
+mekanism-tweaks@
changed-minecraft-mod
hello-crosshair
@@ -7958,26 +7958,26 @@ golden-crops
lil-wings
-
+@scp-sharp
scary-mobs-and-bosses
elytra-replace|鞘翅替换*
mt-garden-arsenal-forge|MT:花园军火库 (MT: GardenArsenal) - Forge¨mt-gardenarsenal-fabric|MT:花园军火库 (MT: GardenArsenal) - Fabric
-visual-overhaul
+visual-overhaul@
drawerfps-legacy|储物抽屉渲染配置:遗产 (DrawerFPS Legacy)
-status-effect-timer
-logical-zoom
+status-effect-timer@statuseffecttimer
+logical-zoom@
the-space-age-mod|太空时代*
-touhou-origins|起源:东方project附加包*
-earth-mobs|地球生物*
+touhou-origins|起源:东方project附加包*¨@touhou-origins|起源:东方project附加包 (Touhou Origins)
+earth-mobs@|地球生物*
simpleores-tin
just-enough-keys¨just-enough-keys-fabric
-why-am-i-on-fire
+why-am-i-on-fire@
bouncing-balls-api
bouncing-balls|弹跳球*
teletubbies-mod|天线宝宝*
-almost-unified
+almost-unified@
draw-bridge
creative-fireworks
invertedbed
@@ -7987,10 +7987,10 @@ allis-one-way-glass|Alli的单向玻璃 (Alli's One Way Glass)
sanguis
ender-trigon
litlaunch
-puzzle
-
+puzzle@
+@tdfp|暮色乐事:冰雪豪饮 (Twilight Delight: Frozen Pride)
ftb-pack-companion
teams-stages
kiwi-boi
@@ -8000,15 +8000,15 @@ advanced-combat-revitalized|高级战斗装备重置 (Advanced Combat (Revitaliz
totemic-overhaul
battlecorrection|战斗修正 (BattleCorrection)|1393257
-midnightcontrols-extra
+midnightcontrols-extra@
i-wanna-skate
-tectonic
+tectonic@
born-in-chaos|生于混沌 (Born in Chaos)
eureka-ships
goofy-goober
-time-stop-clock-mod
+time-stop-clock-mod@
dynamic-asset-generator
-excavated-variants
+excavated-variants@excavated_variants
survival-light-blocks
@@ -8017,17 +8017,17 @@ garden-stuff|园林组合*
forgottenrecipes
corgilib
moms-love|母爱 (Mom's Love)
-food-effect-tooltips|食物效果显示*
-
+food-effect-tooltips@foodeffecttooltips|食物效果显示*
+@resounding
hbm-fixes
-status-effect-bars
-monsters-in-the-closet
-recipe-unlocker
+status-effect-bars@
+monsters-in-the-closet@
+recipe-unlocker@recipes
metamorph-max|变形拓展*
kubejs-tinkers-construct
ghost
-better-stats
+better-stats@
@@ -8035,15 +8035,15 @@ better-stats
abyssalblocks|深渊国度幸运方块 (AbyssalBlocks)
archon
stackie
-
-
+@cullclouds
+@superfancyclouds
stage-tabels
temporal-dynamics
villagertradingban
enchantment-machine
-yosbr
+yosbr@
minefortress-rts
-onebar|单条 (OneBar)
+onebar@|单条 (OneBar)
berdinskiybears-armor-hud
@@ -8053,18 +8053,18 @@ rgb-blocks-forge
quicksand-fabric|流沙 (Quicksand)
better-durability|更好的耐用性*
passthrough-signs
-excorrelation
+excorrelation@
packet-size-doubler
-
-arachnophobia-mode-for-minecraft
+@packet-size-double-forge
+arachnophobia-mode-for-minecraft¨@arachnophobia-mode
villagerconfig|村民配置 (VillagerConfig)
jasm
-paginated-advancements|分页进度*
-
+paginated-advancements@paginatedadvancements|分页进度*
+@backport-gamerules
structures-compass
swiss-cheese
-vitalize
-i18n-nlts|自动汉化更新非长期支持版 (I18nUpdateMod Non-LTS)|1413063
+vitalize@
+i18n-nlts@i18nupdatemod-nlts|自动汉化更新非长期支持版 (I18nUpdateMod Non-LTS)|1413063
ingame-info-xml-serene-seasons
ingame-info-xml-addon-serene-seasons
@@ -8072,144 +8072,144 @@ ingame-info-xml-addon-serene-seasons
staff-of-building|建筑之杖 (Staff of Building)
dark-mode-everywhere|夜间模式无处不在*
custom-shop|自定义商店 (CustomShop)
-another-liquid-milk
-dark-mode-everywhere-fabric|夜间模式无处不在Fabric版 (Dark Mode Everywhere - Fabric)
+another-liquid-milk@
+dark-mode-everywhere-fabric@|夜间模式无处不在Fabric版 (Dark Mode Everywhere - Fabric)
bartering-station
dark-paintings
-filtpick|拾取筛 (FiltPick)
+filtpick@|拾取筛 (FiltPick)
deepslatecutting
easy-anvils
leaves-be-gone
recipe-cache|配方缓存*
mob-catcher
-
+@quiltgoslighlyfasterlol
guns-rpg-waystone-addon
biospheres-fabric|现代生物圈 (Modern Biospheres)
better-snowball-fight-2|更好的打雪仗2*|1396154
feathers
-brb|更好的配方书 (Better Recipe Book)
+brb@|更好的配方书 (Better Recipe Book)
boatoverhaul-forge|行船机制修改 (Boat Overhaul) - Forge¨boatoverhaul-fabric|行船机制修改 (Boat Overhaul) - Fabric
sculk-warden
-
+better-questing-gamestages-expansion@|更好的任务-游戏阶段扩展 (Better Questing - Gamestages Expansion)
omega-chips
+youdroppedthis@
-
-toomanyorigins
+toomanyorigins@
evil-regeneration
-food-treasure-box|食运宝盒*
+food-treasure-box|食物宝盒*
revolution
-apugli
+apugli@
harvest-season
-
-
+@ic2fix
+@extended-bookshelves
cocoainput
chargers
+@roundaround-axolotl-buckets
-
-recipe-book-is-pain
-
+recipe-book-is-pain@rbip
+@one-bad-apple
mystical-nature|神秘自然*
-
+@formula-addition-fabric|配方追加 (Formula addition)
randomlib
-
-pullup|飞行警报
-id-primeval
+@kinventory
+pullup@|飞行警报
+id-primeval@primeval
colorfulazaleas
-pigeon-post
+pigeon-post@
hunted-api
bigger-structures
-find-my-friends
-
+find-my-friends@
+@legacy-lazydfu
fallout-wastelands
-
+@letitsnow
dons-lightning-rod-mod
-rainglow
+rainglow@
nethers-delight-fabric|下界乐事(Fabric版) (Nether's Delight (Fabric))
-quicksand-forge|流沙Forge版 (Quicksand (Forge))
-axolotl-bucket-fix-forge|美西螈桶修复Forge版 (Axolotl Bucket Fix (Forge))
+quicksand-forge@|流沙Forge版 (Quicksand (Forge))
+axolotl-bucket-fix-forge@|美西螈桶修复Forge版 (Axolotl Bucket Fix (Forge))
scape-and-run-parasites-survival-addon-by-nocube
scape-and-run-parasites-nests-addon-by-nocube
-
+@emiffect
villagers-sell-animals
teal-bricks
-bodacious-berries
-
+bodacious-berries@berries|多汁浆果 (bodacious berries)
+@the-bag-of-holding|手袋 (Bag Of Holding)
rgb-chat
diamond-caliber
-
+@emi_farmersdelight
world-stripper
dayz-remastered|DayZ 重制版 (DayZ Remastered)
-visuality-reforged|可视性:重铸 (Visuality: Reforged)
-no-night-vision-flickering
+visuality-reforged@visuality-forge|可视性:重铸 (Visuality: Reforged)
+no-night-vision-flickering@
athelas|阿塞拉斯*
more-beautiful-buttons
aoa-end-realmstone
-adaptive-tooltips
-variant-barrels-fabric
-variant-crafting-tables-fabric
-immersive-structures
+adaptive-tooltips@
+variant-barrels-fabric@variant-barrels
+variant-crafting-tables-fabric@variant-craftingtables
+immersive-structures@
avaritia-port-fabric
explorify
-variant-bookshelves-fabric
-variant-tiered-shields-fabric
+variant-bookshelves-fabric@variant-bookshelves
+variant-tiered-shields-fabric@variant-shields
libertys-villagers|自由村民 (Liberty's Villagers)
server-translation-api
rough-mobs-2|粗暴的怪物2*
barren-isles
korgelin
-variant-composters-fabric
-variant-grindstones-fabric
+variant-composters-fabric@variant-composters
+variant-grindstones-fabric@variant-grindstones
spice-of-life-apple-pie-edition|生活调味料:苹果派版 (Spice of Life: Apple Pie Edition)
xp-obelisk
-enhanced-searchability
-compact-ui
-lets-do-wine
+enhanced-searchability@
+compact-ui@
+lets-do-wine@vinery|葡萄园 (Vinery)
wealthyandgrowth
-subtitle-highlight|字幕高亮*|1398903
-clockhud
+subtitle-highlight@|字幕高亮*|1398903
+clockhud@clock-hud
-variant-lanterns-fabric
-lanterns-bow
-auto-crouch
+variant-lanterns-fabric@variant-lanterns
+lanterns-bow@
+auto-crouch@
my-village-pack
-variant-sticks-stuff
-multiple-server-lists
+variant-sticks-stuff@variant-sticks-and-stuff
+multiple-server-lists@
superflat-biomes
combat-music
yuoenchants|Yuo的更多附魔 (YuoEnchants)
hibernal-herbs
-better-resource-pack-sorting
-sound-physics-remastered|物理声效重制版*
-
+better-resource-pack-sorting@
+sound-physics-remastered|物理声效重制版*¨@sound-physics-remastered|物理声效重制版 (Sound Physics Remastered)
+@fix-quark-3951|Quark3951号issue修复 (FixQuark3951)
starcoffee
seed-finder-mod
potato-food
compassplus
create-industry|机械动力:工业 (Create: Industry/Create: The Factory Must Grow)
-simple-splash-screen
+simple-splash-screen@
unusual-prehistory-forge
biospheres|生物圈 (Biosphere)
-
+@qkl
dynamic-trees-tech-reborn|动态的树:科技复兴附属 (Dynamic Trees - Tech Reborn)
-daylight-mobs-reborn
+daylight-mobs-reborn@
toast-manager
explosives-i-approve
@@ -8218,56 +8218,56 @@ igniting-arrows
rise-of-the-animagus
lost-books
shingeki-no-kyojin-attack-on-titan
-helicopters-madness
+helicopters-madness@
fanon-mutant-entities
-technical-enchant|更多附魔重置版 (TechnicalEnchant+)|1396480
+technical-enchant@technical-enchant%2B|更多附魔重置版 (TechnicalEnchant+)|1396480
naturally-spawning-vex
-better-game-menu
+better-game-menu@
-seasonhud
-stack-to-nearby-chests|堆叠到附近的箱子 (Stack to Nearby Chests)
-gmod-title-screen
+seasonhud@
+stack-to-nearby-chests@|堆叠到附近的箱子 (Stack to Nearby Chests)
+gmod-title-screen@
create-steam-n-rails|机械动力:汽鸣铁道 (Create: Steam 'n Rails)
neutron
applied-cooking|应用厨房*
+@litematica-printer|投影打印机 (Litematica Printer)
+recipe-printer@
+botarium@
+qfapi-and-qsl-biomefix-1-18-2@qsl-biomefix
-recipe-printer
-botarium
-qfapi-and-qsl-biomefix-1-18-2
-
-
+@cotton
honey-expansion-add-on-for-farmers-delight|蜂蜜拓展 (Honey Expansion)
moguns
dayz-minecraft
-infusion-table
+infusion-table@
backroomtastic
xps-things|经验之谈 (XP's Things)
-gravityapi
-
-item-alchemy-fabric
+gravityapi@gravity-api
+@super-secret-revival
+item-alchemy-fabric@item-alchemy
bat-elytra
super-secret-settings
-
-geophilic
+@plumeconfig
+geophilic@
critter-fights
-coldwaters
+hypothermic@
nosecrets|不秘密 (NoSecrets)
extra-creeper-types
loot-casket
farmers-bundle-of-joy
-
+@musical-allays
pure-chaos-chaos-awakens
flatter-entities
daves-potioneering
last-days-of-humanity-tweaks
space-bosstools-giselle-addon
-
+@ser|刷怪蛋配方 (Spawn Eggs Recipes)
mined-rider-kuuga
inventory-essentials¨inventory-essentials-fabric
astral-additions|星辉附加*
-simple-copper-pipes¨simple-copper-pipes-forge
+simple-copper-pipes¨simple-copper-pipes-forge¨@simple-copper-pipes
advanced-nbt-tooltips
follow-me
stabx-modern-guns
@@ -8295,122 +8295,122 @@ lazydfu-agent|DFU禁用器 (Lazydfu-agent)
nether-mushroom-stew|下界蘑菇煲*
shibapi
galosphere-delight-a-farmers-delight-add-on
-strong-crops
+strong-crops@
vegetarian-delight|素食乐事*
-resourceful-config
+resourceful-config@
coppers-delight
enderites-delight
simply-steel-forge
wilder-world
advanced-solar-materials
-
-
-
-modulargolems|傀儡装配 (Modular Golems)
-tooltip-scroll-fabric
+@survival-tooltips
+@notifyme
+@damagedarrows
+modulargolems@modular-golems|傀儡装配 (Modular Golems)
+tooltip-scroll-fabric@tooltip-scroll
legoatooms-golden-berries
nyfcore
call-of-the-wild|荒野之声 (Call of the Wild)
-
-
+@more-lapis-lazuli
+@slimefun-essentials
decoration-delight|装饰乐事*
+@havio-cookbook|Havio的烹饪书 (Havio's Cookbook)
+formidablefarmland@
-formidablefarmland
-
-
-dynamic-crosshair-compat
+@survivality
+dynamic-crosshair-compat@dynamiccrosshaircompat
litewolfcore
vineyard-mod
-
+@affectionate
mo-colors
-peek
-fancy-dyes
+peek@
+fancy-dyes@
-
-mod-settings
-
-fastquit
+@extra-mod-integrations
+mod-settings@
+@dont-dissapear
+fastquit¨@fastquit
violeta-cannons
war-of-valor
no-tool-break
-motionblur-fabric|动态模糊 (Motion Blur)
+motionblur-fabric@motionblur|动态模糊 (Motion Blur)
epic-paladins
-brazier|生灵火盆*
-stackcalc-revived
+brazier@|生灵火盆*
+stackcalc-revived@
with-thursday-delight|乐在星期四*
-
-
-wagyourminimap
-chunks-fade-in|区块淡入动画 (Chunks fade in)
+@osmium|锇 (Osmium)
+@command-gui-buttons
+wagyourminimap@
+chunks-fade-in@|区块淡入动画 (Chunks fade in)
sword-displays|刀剑展示架*
slabfishs-delights
saltymod-expanded
masonry-blocks
mssql-jdbc
-packages#c20|自定义包裹 (Packages)
-giant-spawn¨giant-spawn-fabric
-
+packages#c20@packages|自定义包裹 (Packages)
+giant-spawn¨giant-spawn-fabric¨@giant-spawn
+@mtr-nte|蓝星社交通扩展 (Nemo's Transit Expansion)
serene-shrubbery
gardens-of-the-dead
pirate-hats
decor4fabric
mob-skills
clay-no-more-balanced|黏土不再制衡*
-blossom
-whipdashing
-
+blossom@
+whipdashing@
+potiontimestacker-forge@potiontimestacker
breezy
heart-balance
throwabletorch-fabric¨throwabletorch
potion-descriptions¨potion-descriptions-fabric
-half-doors
+half-doors@
decor4forge
mineterrariabosses
biomes-in-jars-forge|群系罐子 (Biomes in Jars) - Forge¨biomes-in-jars-fabric|群系罐子 (Biomes in Jars) - Fabric
-
+@bocchitheblock
craftable-potion-combinations
polylib
-
-
+@creeper-fire-charge-fix|Creeper火焰弹修复 (Creeper Fire Charge Fix)|1402630
+@tags-binder
fastcaps
throwable-fluids
-time-in-a-bottle|时间之瓶 Fabric 版 (Time in a Bottle (Fabric))
+time-in-a-bottle@|时间之瓶 Fabric 版 (Time in a Bottle (Fabric))
upgraded-netherite-spartan-weaponry|下界合金增强:斯巴达的武器 (Upgraded Netherite : Spartan Weaponry)
simple-jams
nethers-cruelty
the-gold-rush
-optifabric-origins
+optifabric-origins@
lng-deco
darkrpg-reborn|黑暗RPG:重生 (DarkRPG: REBORN)
-modpack-manager|模组管理器*
+modpack-manager@|模组管理器*
rocket-connector
hot-and-cold
donthityourfriend
drink-beer-unofficial-clockwerk-edition
-novacraft
+novacraft@
better-hurt-timer
-drink-beer-refill|喝啤酒啦:再来一杯*
+drink-beer-refill@|喝啤酒啦:再来一杯*
minecraft-style-paintings
potato-cooking
-
+@conveniented-forge-tags
clienttime
-mcpitanlibarch
-
-manure-fabric|粪便 (Manure) - Fabric¨manure|粪便* - Forge
+mcpitanlibarch@
+manure-fabric|粪便 (Manure) - Fabric¨manure|粪便* - Forge¨@manure|粪便 (Manure)
+@well
enderling-invaders
proton
zetter-gallery
-hedge-magic
+hedge-magic@
arcane-additions
instrument|更多乐器 (Instrument++)
@@ -8420,17 +8420,17 @@ rpg-gods
just-enough-vehicles
max-health-fix
-
+@synlib
tell-me-my-items
pollen
-mavapi
+mavapi@
player-hopper
guaranteed-villager-conversion
-windchimes|风铃*
+windchimes@|风铃*
-diamond-ingots|钻石锭*
+diamond-ingots@|钻石锭*
-inventory-sorting
+inventory-sorting@
mine-piece
mine-piece-animation
hbms-nuclear-tech-mod-alcater-edition
@@ -8438,7 +8438,7 @@ custom-skyboxes
breedable-killer-rabbit|可繁殖的杀手兔* - Forge¨breedable-killer-rabbit-fabric|可繁殖的杀手兔 (Breedable Killer Rabbit) - Fabric
bqenergyexpansion
-re-ftbqkeys|FTB任务本地化键:重置 (FTB Quests LocalizationKeys - Reconverted)
+re-ftbqkeys@ftbqlocalizationkeys-reconverted|FTB任务本地化键:重置 (FTB Quests LocalizationKeys - Reconverted)
enchantment-sort|附魔排序*
wrapfix|换行修复 (WrapFix)
gem-crabs|宝石蟹*
@@ -8447,25 +8447,25 @@ inmis-back-pack-mod-retextured
thonkutil
xp-storage
xp-storage-trinkets
-carpet-layers
-itemswapper
-
+carpet-layers@
+itemswapper@
+@caxton
treasure2-wizardry-loot-pack
laser-creeper-robot-dino-riders-from-space|来自外太空的激光爬行者机器恐龙骑士*
paladins-furniture|Paladin的家具 (Paladin's Furniture)
compact-status-effects|迷你状态效果配置* - Fabric¨compact-status-effects-forge|迷你状态效果配置 (Compact Status Effects) - Forge
end-goblin-traders-fabric|末地哥布林商人 (End Goblin Traders)
-
+@mikulib
playersync|玩家数据同步 (PlayerSync)
-create-more-potatoes|机械动力:更多土豆 (Create: More potatoes) - Forge¨create-more-potatoes-fabric|机械动力:更多土豆 (Create: More potatoes) - Fabric/Quilt
+@create-more-potatoes|机械动力:更多土豆 (Create: More potatoes)¨create-more-potatoes|机械动力:更多土豆 (Create: More potatoes) - Forge¨create-more-potatoes-fabric|机械动力:更多土豆 (Create: More potatoes) - Fabric/Quilt
primitive-beasts
raided
-moisturization-fabric
+moisturization-fabric@moisturization
treasure2-twilight-forest-loot-pack
sanity-and-insanity
-crops-love-rain
+crops-love-rain@
till-zombies-tear-us-apart
difficult-raids
@@ -8477,11 +8477,11 @@ chefs-delight-fabric
mcgltf
add-potion-into-your-food|给您下药了 (Add Potion into Your Food)
+@chunk-bordium
-
-create-ender-transmission|机械动力:末影传输 (Create: Ender Transmission)
+create-ender-transmission@|机械动力:末影传输 (Create: Ender Transmission)
horror-elements-mod
-create-extended-cogs
+create-extended-cogs@extended-cogwheels
create-connected-block-textures
cccbridge
@@ -8489,64 +8489,64 @@ liquid-burner
create-electric-stonks
create-mounted-storages|机械动力:更多存储挂载 (Create: Mounted Storages)
-minecells
-
+minecells@
+@heatwaves|热浪 (Heatwaves)
steves-mini-pouch
infinite-abyss
-
-
+@ktice
+creator-overlays@creatoroverlays
maplecraft
-invutils
-
-
+invutils@
+@withfire-upgraded|手工艺:升级版 (With Crafts: Upgraded)
+@usage-ticker
distant-worlds
-
+@advanced-vanilla-logistics
simple-flashlight-port
-alwaysopenwater|始终开放水域 (AlwaysOpenWater)|1406871
-quest-plaques|任务牌匾*
+alwaysopenwater@|始终开放水域 (AlwaysOpenWater)|1406871
+quest-plaques@|任务牌匾*
video-player|视频播放器*
-stendhal
-dynamic-surroundings-remastered-fabric-edition
+stendhal@
+dynamic-surroundings-remastered-fabric-edition¨@dynamicsurroundings_remasteredfabric
terraplusplus
-
+@blahaj|布罗艾 (Blåhaj)
tinkers-levelling-addon
-terramap
+terramap@
villagemarkermod-for-liteloader
+@show-durability
+disable-enderman-picking-up-blocks@|禁用末影人搬运*
+beautified-chat-server¨beautified-chat-server-fabric¨@beautified-chat-server
+beautified-chat-client¨beautified-chat-client-fabric¨@beautified-chat-client
-disable-enderman-picking-up-blocks|禁用末影人搬运*
-beautified-chat-server¨beautified-chat-server-fabric
-beautified-chat-client¨beautified-chat-client-fabric
-
-axes-are-weapons
-
+axes-are-weapons@
+@curse%2B|诅咒+ (Curse+)
optifine-capes
-immersive-aircraft
+immersive-aircraft@|沉浸式飞机*
default-world-generator
animalistic
+@qdresloader
-
-fabricskyboxes-interop
+fabricskyboxes-interop@
old-inventorism
-title-fix
+title-fix@title-fix-mod
create-alloyed-guns
-
+@luna-slimes
special-drops
forgebrainlib
render-360
-async-locator
+async-locator@
minemention|提及 (MineMention)
umapyoi|马儿蹦跳*
origins-full-moon|起源:满月 (Origins: Full Moon)
-
-
+@codechickenlib-unofficial
+@codechickencore-unofficial|鸡块核心非官方版 (CodeChickenCore Unofficial)
permafrost-biome
ambient-additions
@@ -8555,69 +8555,69 @@ sweep|扫雷 (Minesweeper)
sekclib
betweenlands-storage
ore-stone-variants
-food-effect-tooltips-forge|食物效果显示Forge版 (Food Effect Tooltips (Forge))
+food-effect-tooltips-forge@|食物效果显示Forge版 (Food Effect Tooltips (Forge))
alexs-armoury
-dynamic-crops
+dynamic-crops@
super-chocolate-maker|超级巧克力制造*
naturalized
-rsls
-emi-loot
-
-backhand
-
+rsls@
+emi-loot@
+backhand@
+@stones-cookbook|Stone的烹饪书 (Stone's Cookbook)
+@essential
farmers-delight-jei-plugin
-keybind-fix
+keybind-fix@
tales-of-villagers-the-infiltrators|村民之书:渗透者 (Tales of Villagers: The Infiltrators)
-
-carpet-fixes
+@morecullingextra
+carpet-fixes@
er-core|ER 核心 (ER Core)
rings-of-ascension¨fabric-rings-of-ascension
-blanket
+blanket@
convenient-curios-container
-moogs-voyager-structures
+moogs-voyager-structures@
-extra-aoa-info
+extra-aoa-info|额外虚无世界信息 (Extra AoA Info)
opulence
lonely-biome|孤独的生物群系*
lamps
generic-ecosphere
-wired-redstone
+wired-redstone@wiredredstone
pixelgalaxy
hopper
excalibur-the-mighty-sword
undergarden-paths|深园小径*
undergarden-tetra-patch|深暗之园:Tetra兼容 (Undergarden/Tetra Patch)
uncrafter
+@pebblegetter
-
-
-
+pangea-ultima
+@fpspluslf|FPS优化Legacy Fabric版 (FPS Plus Legacy Fabric)
table-top-craft¨table-top-craft-fabric
-
-
+ddyc@
+@stonecutter-damage
shipping
structureutils
-
+@cloudmusic|云音乐 (CloudMusic)|1411213
i-like-wood
macaws-furnitures-biomes-o-plenty|Macaw的家具:超多生物群系附属 (Macaw's Furnitures - Biomes O' Plenty)
macaws-furnitures-oh-the-biomes-youll-go|Macaw的家具:你将去的生物群系附属 (Macaw's Furnitures - Oh The Biomes You'll Go)
armiger
-
+news-pillagers
rangers-haven
heyberryshutup
destroy-on-death
yes-steve-model|是,史蒂夫模型*|1411623
macaws-roofs-oh-the-biomes-youll-go|Macaw的屋顶:你将去的生物群系附属 (Macaw's Roofs - Oh The Biomes You'll Go)
macaws-roofs-biomes-o-plenty|Macaw的屋顶:超多生物群系附属 (Macaw's Roofs - Biomes O' Plenty)
-configured-feature-saplings
-coyote-time
+configured-feature-saplings@
+coyote-time@
macaws-bridges-modding-legacy|Macaw的桥梁:Modding Legacy 附属 (Macaw's Bridges - Modding Legacy)
macaws-bridges-aurora|Macaw的桥梁:Aurora 附属 (Macaw's Bridges - Aurora)
@@ -8626,9 +8626,9 @@ koremods
heart-of-ender
heart-of-spartan
macaws-fences-biomes-o-plenty|Macaw的栅栏与墙:超多生物群系附属 (Macaw's Fences - Biomes O' Plenty)
-endemic
+endemic@
lucys-sloths
-
+@gdtweaker
drop-the-rock-no-tree-punching-compat
macaws-bridges-abnormals|Macaw的桥梁:Abnormals 附属 (Macaw's Bridges - Abnormals)
macaws-bridges-shroomed|Macaw的桥梁:Shroomed 附属 (Macaw's Bridges - Shroomed)
@@ -8637,7 +8637,7 @@ shroomed
rlcraft-structures-not-official
moving-sunflowers
lunar-mana-generator|月光魔能制造器*
-ost-overhaul
+ost-overhaul@
chunk-by-chunk
beyond-planets-core|飞越群星:核心 (Beyond Planets - Core)
webdisplays|内置网页浏览器*
@@ -8647,14 +8647,14 @@ mcef-forge|Minecraft Chromium嵌入式框架 (MCEF [Forge])
the-monk-mod
-expanded-enderchest
-text-utilities
+expanded-enderchest@
+text-utilities@
memorysweep|内存清扫 (Memory Sweep)
-
-autostereogram
-
-identifier-translation|标识符翻译*
+@explosive-enhancement|爆炸动画增强 (Explosive Enhancement)
+autostereogram@
+@bounced
+identifier-translation@|标识符翻译*
vanity
reid
its-been-twelve-years
@@ -8663,7 +8663,7 @@ sorcerium
2603972
campful
-well-rested
+well-rested@
raw-input-1-12-2
spider-pig
jingames-hair-c
@@ -8675,20 +8675,20 @@ home-system-forge
geta-footwear
catwalks-inc
firework-rocket-duration
+@chatwalk
+@emcstage
-
-
-
-
+@broken-lead-warner|拴绳断裂警告 (Broken Lead Warner)
+@alwayzsteve|永远史蒂夫 (Alwayzsteve)
vanilla-vistas
menulogue
archaicfix
-ekac|糕蛋 (ekaC)
+ekac@|糕蛋 (ekaC)
byg-plus|你将去的生物群系+ (Oh The Biomes You'll Go Plus)
farmers-compats
-
+@map-compass
space-research-addon-for-galacticraft3
patchoulibutton|帕秋莉手册按钮 (PatchouliButton)
@@ -8703,7 +8703,367 @@ wormhole-portals|虫洞 (Wormhole)
dragon-magic-and-relics|神龙魔法与遗物*
yummy-foods-forked
-
+@fullblock-energistics
youmatter
vanity_battle_axes
-markdownmanual|Markdown 手册(Markdown Manual)
\ No newline at end of file
+markdownmanual@|Markdown 手册(Markdown Manual)
+powershot
+@crockpot-tweaker
+automatic-tool-swap@
+knight-quest
+modernfix|现代化修复 (ModernFix)
+blades-plus
+homeostatic
+super-saturation|超级饱和度*
+
+
+dungeon-difficulty@
+cazfps-chronicles
+unstable-tools|不稳定金属工具*
+tech-reborn-patchouli
+biome-bundle
+moon-phase-info@
+@fabwork
+projecte-max|等价交换max (ProjectE Max)
+advanced-tweakery
+creeper-hector
+
+@bttf_blahaj|布罗艾Fabric版 (Blåhaj (Fabric))
+@blahaj-reforged|布罗艾:重铸 (Blåhaj - Reforged)
+buddingcrystals
+dynamic-trees-tectonic|动态的树:Tectonic附属 (Dynamic Trees - Tectonic)
+prp
+@moonphaseinfo%2B
+
+hungteens-lib
+more-tool|更多工具*
+@ex-hud
+
+
+optifine-crash-fix
+
+wyrmroost-patch|猛龙之居补丁*
+travelers-dream
+thaumic-travelers-dream
+@gasstation
+
+aetherium-ashen-armor
+smoothmenu|平滑菜单 (Smooth Menu)
+@cabricality-mod
+unusual-fish
+obscure-tooltips
+
+
+otg-tutorial-world
+otg-skylands
+fxs-rail-optimization@rail-optimization
+morejs@
+
+@moresnowballls|更多雪球 (MoreSnowballs)
+valkyrien-skies-control
+the-end-expanded-mod-ice-and-fire-addon
+@vault-patcher|保险库补丁 (Vault Patcher)
+projectile-damage-attribute@
+noteable@
+deftulib@
+trofers
+obscure-api
+
+death-punishment@|死亡惩罚*
+inventory-tabs-forge
+reaper
+containersearcher@csearcher
+
+
+screencapper@
+valkyrien-skies-world
+lucky-tnt-lib
+waffles-placeable-foods
+otg-the-void
+otg-flatlands
+otg-dungeons
+@light-meals-quilted
+gtnhlib@
+sculpt@
+levelhearts@
+bring-back-luck¨forge-bring-back-luck¨@bringbackluck
+teleport-master@|传送命令*
+@mufog|锻造 (Mufog)
+betterparry|更好的格挡 (BetterParry)
+rltweaker2
+thaumcraft-aspect-creator|神秘时代要素创建器*
+vanity_katanas
+pixels-character-models@|Pixel的角色模型 (Pixel's Character Models)
+l2-complements|莱特兰-扩充*
+epicfight-auto-shouldersurfing
+zsrarity
+zenscroll
+zentraits
+l2-archery|莱特兰-弓艺*
+vanity-metallurgical
+minespaceex
+
+shut-up-model-loader
+cultural-delights-fabric|多元乐事(Fabric版) (Cultural Delights [Fabric])
+collectors-reap
+bones-and-swords
+vanity-shedds-mystical-toolsets-pack
+emc-builders-wand
+
+vanity-charcutier
+hunger-in-peace
+
+lexicon@
+scaffolding-drops-nearby¨scaffolding-drops-nearby-fabric¨@scaffolding-drops-nearby
+@fuel-info
+glacier-ice
+gtnhmixins@
+dawn-to-dusk
+open-tower-defence|开放式塔防*
+mtr-station-decoration@station-decoration
+perviaminvenire
+
+silverbirch@silver-birch
+
+
+creepypastas-mod
+more-slab
+landk-brick
+kubejs-offline|KubeJS离线文档 (KubeJS Offline Documentation)
+
+
+
+advancements-tracker|进度追踪器概览 (Advancements Tracker and Overview)
+memory-settings|内存设置*
+tiny-item-animations@
+more-plates-revamped|更多金属板重置版*
+extended-slabs-plus
+brewin-and-chewin-fabric|饮酒作乐(Fabric版) (Brewin' And Chewin' [Fabric])
+particular
+longer-login-times
+broglis-plants
+rlmixins
+simplehats|简单帽子 (Simple Hats)
+timeoutout-fabric@timeoutout
+fabric-furnaces
+
+mixinbooterlegacy
+basalt-walker-reborn|玄武岩行者:重生 (Basalt Walker : Reborn)
+create-industrial-chemistry|机械动力:工业化学 (Create: Industrial Chemistry)
+
+@flaming|火焰熊熊 (Flaming)
+cruelars-triforcemod
+
+@morespawneggs|更多刷怪蛋 (MoreSpawnEggs)
+beautify-refabricated@|美化!Fabric版 (Beautify: Refabricated)
+
+manatweaks¨mana
+chicken-nugget
+goldfish-myth
+rezombies
+wound@|外伤*
+survival-campfire@
+eyes-mod
+
+colorful-rods|缤纷彩烛*
+xp-plus
+
+
+no-holds-barred-halloween-mod
+
+
+@post-join-leave-message|发送加入信息与离开信息到网址 (Post Server Join & Leave Messages to URL)
+advanced-extended-creative-mode
+
+eerie-entities
+better-weather-revived
+
+rlcombat|更好的战斗-RLCraft版 (RLCombat)
+botanical-addons
+@scoreboards-backup|计分板备份 (Scoreboards Backup)
+hodgepodge@
+fast-projectile-fix
+edivadlib
+systeams
+waymaker@
+
+dmod
+extra-redstone-craft|更多红石合成*
+farmers-respite-fabric|农夫暇事(Fabric版) (Farmer's Respite (Fabric))
+wizards|魔法师*
+basketcase
+primal-lib
+biomes-youll-go-1-12-2-fixed|你将去的生物群系修复版 (Biomes You'll Go Fixed)
+rune-crafting|符文 (Runes)
+controlled-random
+leos-bosses|Leo的Boss (Leo's Bosses)
+leos-illagers
+
+
+wearable-backpacks-rlcraft-edition|可穿戴背包-RLCraft版 (Wearable Backpacks: RLCraft Edition)
+spartan-fire-rlcraft-edition|斯巴达之冰与火-RLCraft版 (Spartan and Fire: RLCraft Edition)
+frame-void-patch-mc-59363
+@archprp|帕秋莉手册加载补丁跨平台版 (PatchouliResourcePatch-Arch)
+clear-skies-forge-port
+spell-power
+
+morecrashinfo|更多崩溃报告信息 (MoreCrashInfo)
+epicfight-saopack|史诗战斗:刀剑神域附属 (EpicFight SAO AddonPack)
+screenshot-viewer|截图查看器*
+gml
+@futurepack-additions|飞向未来附加 (Futurepack Additions)|1419834
+bee-fix|蜜蜂修复*
+spawner-fix|刷怪笼漏洞修复 (Spawner Bug Fix)
+block-limit-fix
+nochatlag|聊天无卡顿 (NoChatLag)
+spell-engine|法术引擎*
+spellblade-next
+@netherite-road-2|下界之路2 (Netherite Road 2)
+@tileentity-reset-fix
+notenoughrecipebook
+urushi-mod|漆 (Urushi)
+nicephore¨nicephore-fabric
+terraria-paintings¨terraria-paintings-fabric
+minegooseduck
+floating-islands
+
+@qwq-library
+scorched-guns
+
+fred-qol@fred
+
+guntopia-legend-of-the-guns
+
+
+pixelmon-gameshark
+hidden-creepers-creepers-pretend-to-be-other-mobs
+ob-core
+ob-pandorica
+no-weather-effects
+ob-tooltips
+hekate-lib
+loot-journal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+structure-floater-fabric
+applecore-unofficial@|苹果核非官方版*
+drilling-veins
+server-chat-history@|服务端聊天历史*
+scriptor-magicae|字符魔法师*
+json-entity-models-jems|JSON实体模型 (JSON Entity Models)
+improved-animations|改良动画*
+
+
+rain-of-hell
+
+suggestion-provider-fix
+worldblender¨world-blender-fabric
+no-oceans|无海洋的世界*
+monoblocks
+tinkers-things-json@tinkers-things|匠魂杂物 (Tinkers' Things)
+free-cam
+@workings
+@mod-loading-screen
+lucky-cases
+atmosfera
+feruchemy-allomancy|藏金术 (Feruchemy)
+alive-combat@|战斗生机*
+
+
+
+
+
+
+
+
+
+
+
+
+fix-selected-item-text
+dregora-o-plenty
+integrated-api
+the-betweenlands-eternal-melodies|交错次元:永恒旋律 (The Betweenlands: Eternal Melodies)
+
+frozen-apocalypse|冰封启示录*
+whymap
+craftify@
+overgrown-cities-fabric
+night-config-fixes
+standardconfigs
+armor-adjustment|盔甲调整*
+enchanting-max_level@enchanting.max_level
+fixbookgui@
+custom-explosions|自定义爆炸*
+datapacks-screen|数据包屏幕 (Datapack Screen)
+pandoras-box|潘多拉的魔盒 (Pandora's Box)
+boss-rifts
+random-teleport-altar
+syncpotioneffects
+aobd-ore-chunks
+evasive-items
+spagheters-enchants
+factory-api@factory_api
+tempad@|任意门*
+structure-void-toggle|结构空位切换*
+@cactusfix
+morezombies|更多僵尸 (More Zombies)
+mushroom-quest
+chowder-express
+mod-browser|模组浏览器*
+fastback
+copper-hopper@|铜漏斗*
+oxidized¨@oxidized
+ping-wheel@
+dark-waters@
+sneak-tweak@
+
+serene-seasons-fix|静谧四季修复*
+cross-dim-commands|跨维度指令 (Cross-Dim Commands)
+temporary-spawners
+slyde@
+phonos@
+spelunkery@
+@endless_cake|无尽的蛋糕 (Endless Cake)
+rusticated
+invmovecompats@
+@tinkerers-smithing
+hesperus|燐*
+inventory-hotswap
+corail-backpack
+chomper
+flamelib
+
+better-planting
+
+
+pet-tracker
+@splashfox
+@taptab
+mekanism-ce-tools|通用机械工具:社区版 (Mekanism Community Edition: TOOLS)
+mekanism-ce-generators|通用机械发电机:社区版 (Mekanism Community Edition: GENERATORS)
+
+
+more-mobgriefing-options
+cobalt-mod-think-blue
+graphutil@
+
+
+entropy
+ngv-forge¨ngv-fabric
+world-of-wonder
\ No newline at end of file
diff --git a/Plain Craft Launcher 2/Resources/java-wrapper.jar b/Plain Craft Launcher 2/Resources/java-wrapper.jar
index bd89078..306ab36 100644
Binary files a/Plain Craft Launcher 2/Resources/java-wrapper.jar and b/Plain Craft Launcher 2/Resources/java-wrapper.jar differ