From 6dc8789ac0f4c89960f18aae3400d7222c7e2a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E7=8C=AB=E8=B7=83?= <1043137532@qq.com> Date: Thu, 16 Feb 2023 22:21:04 +0800 Subject: [PATCH] 2.5.0 --- Plain Craft Launcher 2/Controls/MyCard.vb | 20 +- Plain Craft Launcher 2/FormMain.xaml.vb | 44 +- .../Images/Icons/NoIcon.png | Bin 312 -> 3880 bytes .../Modules/Base/ModBase.vb | 43 +- .../Modules/Base/ModLoader.vb | 2 +- Plain Craft Launcher 2/Modules/Base/ModNet.vb | 6 +- .../Modules/Minecraft/ModComp.vb | 1216 +++++++ .../Modules/Minecraft/ModCrash.vb | 18 +- .../Modules/Minecraft/ModDownload.vb | 717 +--- .../Modules/Minecraft/ModLaunch.vb | 8 +- .../Modules/Minecraft/ModMinecraft.vb | 24 +- .../Modules/Minecraft/ModModpack.vb | 227 +- .../Minecraft/MyCompItem.xaml} | 6 +- .../Minecraft/MyCompItem.xaml.vb} | 36 +- .../My Project/AssemblyInfo.vb | 4 +- .../Pages/PageDownload/ModDownloadLib.vb | 20 +- ...etail.xaml => PageDownloadCompDetail.xaml} | 8 +- ...xaml.vb => PageDownloadCompDetail.xaml.vb} | 183 +- .../PageDownload/PageDownloadInstall.xaml.vb | 63 +- .../Pages/PageDownload/PageDownloadLeft.xaml | 4 +- .../PageDownload/PageDownloadLeft.xaml.vb | 2 + .../Pages/PageDownload/PageDownloadMod.xaml | 65 +- .../PageDownload/PageDownloadMod.xaml.vb | 96 +- .../Pages/PageDownload/PageDownloadPack.xaml | 55 +- .../PageDownload/PageDownloadPack.xaml.vb | 110 +- .../Pages/PageLink/PageLinkIoi.xaml.vb | 6 +- .../Pages/PageSetup/PageSetupLaunch.xaml.vb | 2 +- .../Pages/PageSetup/PageSetupSystem.xaml | 4 +- .../PageVersion/PageVersionSetup.xaml.vb | 2 +- .../Plain Craft Launcher 2.vbproj | 13 +- Plain Craft Launcher 2/Resources/ModData.txt | 3054 +++++++++-------- .../Resources/java-wrapper.jar | Bin 16818 -> 17727 bytes 32 files changed, 3605 insertions(+), 2453 deletions(-) create mode 100644 Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb rename Plain Craft Launcher 2/{Pages/PageDownload/MyCfItem.xaml => Modules/Minecraft/MyCompItem.xaml} (96%) rename Plain Craft Launcher 2/{Pages/PageDownload/MyCfItem.xaml.vb => Modules/Minecraft/MyCompItem.xaml.vb} (81%) rename Plain Craft Launcher 2/Pages/PageDownload/{PageDownloadCfDetail.xaml => PageDownloadCompDetail.xaml} (84%) rename Plain Craft Launcher 2/Pages/PageDownload/{PageDownloadCfDetail.xaml.vb => PageDownloadCompDetail.xaml.vb} (62%) 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 cf4a0cead805274c9fb89525f3e9f456b7fe81b6..556e72b6d425c519ccf87a849e263619cc88c110 100644 GIT binary patch literal 3880 zcmaKvc{tSH_rTwyp&`qRL1LIOWUQfxM2WF$FiFV1S0;okS%#=VAu^LCk;a-`wuwg8 z>`P@0k>fXCPfi)W3*e+|OH z>f0{3^a23ynlbj0RfyxN!>ts1eZdQi0qJ4EY7iHaC?t~ZwV@m*(*o#2)A^Czrs8b2 zB;nMR>GL(mB;c_bOZPCeUVdmhV4yfeQj!wR?GY#dcgUq!By^IjZDmkaueyE6{mosP zxA@eeR|cj7*7~M1mdZ1oMj6{n74N1Zeg%oNzA85WXid8Xo6eA-MJZ*lGWh!)aMRmg z1xNqCnZv}9rzX_2`=|y8Z~+Y5L(e0DIo_$du|QE|Qv#5~5CZ|Gr0?%h(DYx{=Tg=L&`O+Q0d=3v9ax_&uFi9CScZSekZOH0e}pFe-9EeuUN zCQ|{E;=Uf*Zscp@Qa_ zw@*=ek2Ko<402K!L;%iUVCIx%5=nHsa@{mOT;6>$2G|deL^^g4k2Yyb=}62slRXqg zg@u`>ilKvBWY}jTZ5q+PrxV>b%)Nvp?6OOuZ({M z(Z|}luP%x)X6V%l;vzZlW$y+XSI)W6nWZM$-y&!nq3NsSd5Z+A9h3; zxN5`FVJfQ{1L`L?{d-^Ay;(levbObdWJC8$a!pjq2lp1qr^gf3(g7-d$zpb|k@gOI zQw8m)9{h7U{qXQG4KMaMRbD933-waB{m4lV=x{_>r{6oQBYISTO@J$|8DDI*h#jzx z&jTujU;$;~XMR*U$f`Npk`1x=aNp5m##ujPl}yBoqk||*p^g_}itNPu%R-ZC3kJQ_ zv8AC4Tr z7#n>?*DWg7i#r*z7z|5{16IBqy+rp~UUY1JXGg^VLfuspeG7 z!BcMqu%81(6gR@`n@>+#sO|p~YDF(y+%bUvKFToK=D6f%ayDxbetBLX11SF?&JMUJ zSsYwZKdA2@2dCuDc+ZP}m2@eg-s?BYa(u#>`*c1|Yz9#*-{BJI!2ZTXdMro@0Di)j z?TmEW@A*s#5w2XDi#G!Xx2)H9ZyCLPF^p|cdu4Cvxu>-TpI*lb?DF>-bosv;T?q*X zBtUXJ``%Ene9gp4v)Dwnnq2xIgAYf=%R?>0cJo#_Euz1B0Vx3p#>Q=w?kUPWJzw87 zbpRz+)gq=x{2OdYQm5jJ7kkNy_f*iz@q)n)dtB1zfxg7n?g2EB!#$N`?Rh%mhbthX zBDeh{;5M_(O|?Xl)1sAu46|vFG@xgemsrRk(oCr3AmSAfi;zuD`b>*6d0oz$)a}Kv zj@ADB1*p_3{uq2B0r2yeX>~X=%L#b(qh`gy<1G=i<<-^2(eqk^f+w*DFxZClu+Wnj zX|9bvBl91u3mV3t8lIAvh>nWM9H5S1US=&z<<-SX$AtVe!Mbhz*Kdm1z@}VK=?fBc zP&`6pkcuv*eK>f!At%7q6)XUfGrQ}smj=+WA(Ztt1Owh!N7(9rPR4w(2nCqVU^nu) zq?+D@n_c|536NuIFa=IO67w3+FjBWl#;y(ppI}bMXozs4%j*dD>c<8(bAYSZIoa8i zSg?W~md}>l(bX0u{|RP|lYNs=krS6*+VgIv`nCR2V5Zl3+GPhlp!{(8Q|X>8r58am zu2n06xmRS+Mjq(zj97Lx&}OfUGoz{%evAZa_G7|5%^dWJT>NpmU%y+)bsU#Hmry7J zd(z{6+LHJB+wy7GD&~y~OUHnRq(^MehIk#nc>SfN0)l=!c_X5rIY44gX(K+Xh+??8 ze~=eW;e(m;Pqyj_RQNpjqOv+|t0RmGqKGcu+_{1fMnA{R9xt$Ob~(cZ9J+if*+S0; zV=$PbuP9e(O-GA3PE&eqo12^E=6_BcvJ&;>!qKSLpK?u#xzU?)IWikp{gUj+AKW9A z@VRl^AjkWTc@`SV=_ZYq1rFFid3b9bp(UisbiUMq?6F~QA82|4$N>>Mk`~(ekI2H?1XPyP-Nnk)vr~q82Q|8g(J9`!3qV>vTqz+voFT zntDWt(ecC%a|u@vEcsDx0opDQ;ib%>oo6M?78`SGFT-JMQOq!BbnT=?aG{6o{WFAd zNZ@BhR=H5OdUHmOTCU$Ne~Xdbvr*|`I}vu)XZa(h#}k5zA%sa#KSq+6ha#=n1HlL{ zLZ5!(#}jNM=PcW9mOtFo393r7d*;Fj#Pm4vrCzBj7{X&q0O=7OR8n*7BCeX2(V~rM zJU$R-i1P!Y9PcynIko%;8=#wf`Lu7!dOAjQU3YbyGo*64|7JL_a6}kMX9AvLx$i*> zU=d8^%y7Wo{v)_B&%2CQkKyBh&ttfEw$8t$A&uxx&TP*R75Qk1E{6s11F!=2E^7cv zXI^)5s^W6}+5XAW3(iFY>nIqHL9^_2-{Vg5PBd;1t1PX}%s95Jwijj=ntn)zGv!91 zV`ezq*=-kw-Q&T(^+!NY@%KsHF5Wk(yAnErFxETDlJuyTI+?+OnCHgWgHK~SEL^C~ z0e+pUwMbTn55EJ55968^7TY_>QvCF-w{GzyrHa^yd*eX}44gfyn-(o8De0S)o&Ajt zN!=!`{l4F?_29V_+xm}}+S=Nsr0=?%A;5Y^QL79Zu9IAfkWn$IG>ANwtmL@qhUd9# zEJ0+1_QsR)Nr`y-!ZJ4rU<~!3(6z8Z;Eic%oM$O3HUCQRunm74@z<^nxAj-((9d1L z{6nV!F`?>Lm3O4}wzCVn)5vJ2jU3ZX)J`AJ9;is|yeRdOvVUX00hyNc9N=blcXz+N z<`^3HBFzoG%^6RR7G5dhldQ`GI$Wy;t6zVzd_M#o7D;k(pSruERC+cR5FAR!KlJAB zt9@pfh8nAWAGjyc1R`PTaVL1O(EL|J1vTh zpY+dP(4ZKyzdQk+^B0GmOPI(yxr?56n_lm4piT?0S?xd=sChhKg932?Y}nfTShrhJ zAQS3{$|a~@uo9P(A$IUi_WN@I|2;b8_%=kBWGPcsz)w`X-r)E3_5K#)+QE?~FXe69E%h@c|9e8>wCB)Z6&NAj@l;H$T;X{;P=5Nsn4Tr|rhHQOx&Z zMh*FApSZ7Ocv7d>%5LuWpE6QN?a)BkWQ~_o-lD7uxCr&N>8FPo7#&stea--!hXb9+ zPycbWEF@+My1||2-~kjVeA80;2&37|L+EMysaDPRP<**)JQ z#QfMr?YyqgKb!F9EP%fHr!`bd0qaL+J|P);X@*?F2J1h2vOa#n?i9r^pb?S0A8$_3 z2MhxK@jsIp;vunAW_;-xlK8Q={(740745sVVj#Knk-@IYv=Du5L4tD*ZAW*YfP*}& z{E1*nyT1~hF!&T`UL8hPr?!EFuwk>Y1;)%J-#seaBy$Ta|Wrn;F7$W3I4xaH3ja zmk(DAr(syeW@>KL6Y9!QtkC;K&v`_LMb`OUN}C(f@?Fc%-DSD*L7N ztJv`R&Sib~}y|{g{_o8PrjfFS_{|ee2X7g#?=CFK!ZBus3!}c{#E$hDN`oC_s zd42lH)o{`8cmLQ`Mi&-5nEtro>yq>*)^4_|^?HhVeA-^ShOP2Fk~?{gMyu+<^3=y( z>dJ=plT6av?)Wac@^Hpgr#Wly1h3&UJ6;{0G`-VDZvy}O-gl1|e_f}x_m$tR#EE)} zvTb>4A|5R*9yctGUDG$Z=PIvZz_z4VVR`W;tK+KY>blk2r#v&8^8Z#P&~FT$u6{1- HoD!M ''' 数组去重。 ''' - 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 bd89078e144167736ca9da70147c1ec3a7095a99..306ab362d3aaf9c3897e2d22c626ebcb85821fe9 100644 GIT binary patch delta 4770 zcmY*dWmFX2+k~YXq=ZF4q!vNxW|59Xx>-P7KqQxLRzeyUSXq{iMY=&sQc6mYPC=AL zLXeKX`hNJG_udb8<~eho`*G$>Z5VDx3@)WE1P`AS2Zxv#2h^fqoJ7fmUmka6m?RO4 zZ&&|^_dUP|{+<8ix%2mpu%s!y`$ztT1_y^32X!FNf(SApc}6$IbYpdb8L)GAR{sbX zr>9ANBA)Ur2J$5NH8XJ}zB(SA^qf|5$cXl07KO4!fLXw@Az6i5jd;a8-W&Y*n2Lr5 zQ;Pum#|!i37S8YIl@>VCgI!Oa!O(usmYx0g4k9dhRva;JEv98j?6ivK9*ZJ+gc z2B}`yD8f%&;pG>vs!wwY^pS>vR=tdYO}G-JO#_iqO=ijMo8Nb;1D808tdqkn=mX~> zNuiH60Z)rDx^7j_Hl5yUQteOQ@W#J31|lTcmW>Z`sp5UryLB$?w3h|;$`z!i1=8I4wdNT^$##q0>0`OzhDINhtJ>BU6;@~ca8qobd&OjcF~ds z?{!OGDYhIzLh>6%oZ}(hKJ|^_k7%eJ31Sw?O+QYNXMct*+(WG<@K6_RloUdJ^ z7!V5@@up#6{^gC`aY-}FHEL|rz#v!Agkb(wNa$43Kl(8jo@ji%H#UF{CulTHB%L;#4wPbwVtn9zRXI^ ztA0$3U+6cPE{X*)>DW9$8k9aGqG(zrj7$NY6gaDvfGd%n7!r%xbRkWd6OSMkrol6_ z44rB}e`#ZVGq<7&wUf%3NER~yGSRp?(v;z#VvbEHB2&xbj;$}ybAhGs4d5safhe3B zV+Cr?8#-);311ZtJcHCuLWYaG)le++}@`O zl$97D=@|0?h&o|Hn01i`_x?f{z{O&bZ~6c*ODXyzN8I;Pcb>vVW?pf9r%@_>W>u?B zqOrv6{j4a0Vz&63yAx+S?SQE|QjJitt)(K8kYud*HMgHqcUT^V7C+p{-x~GZ$T|uX#kH(nj3xFwVN&RM zb3vvUpU0K=)!tCJqqF6+iN|s7b8AigTE4T42*$%ZMn(0akEF1Xl{UV>iJ0321a+Da z(LxtEf?D)MgeV#g|8^dYc#{X}a^0PSDPyt`gTq&3j~#tg`gDUBOd(aba$LP;#|~#y zH)Y@Gtft`1Rkj$Ghi2-+E6@%OJXM>jFTnAGmU`*aTP3S!?`VmA9%9N=ROxpoq;@Ih zjddALR&(#MB?V?$bgKqhFV<72f*)4_`s3>fg-7CndP+L2NwKAf@$(G72EOqFV^6zH zZ5DyF?xpD0^o7rpnK*v<*a?fiw>K+zSs=j!YmlERt6dhTO>Nbn`j();k?S+5R35^MydE2_wS=O#!`(uaKKTXe@|drh#rj z)1tU!E-8|0G`%xaR^t=U-4?9cuzciDC?0(UeJ3RqQ+w_)(ZrY$AMR1wz$t8D7U1nu z_?y?Y^kWvM$dx{y)0T$mmjY*}aog^b6SG5wC59$mBqKYwi&X>J9x(;x2G{pKgD?sw4!M7%;H|@sI5i4&7Xb0^f z0f`+^waP=-vSEi8c$;WlieDF(0XG~8NfWw8kQ;a3N_T8OKE6!AM%`Y|-;F`$g*&}V zZrr^)XgT7grUxdxjUh4gM8f(aCR>Gfv!Bp2mUgq6pnOg;yPF=YWCz7lLo(iKu6b{D z;cn67D1yBLL$~&2!TTF^sL^T7eFeH16FwMbP7Fbc4JHo();wJK_H6pDosaEsLcS$) zn$82r(E1Yo2-9vW(~ZAW@~S8}=BTy>kn&YYcM%Jp=+ZkA4j-rhJ?MQIH%TB{c`5jk zd_(qibN@l%gM^I_XYJ?@cyFbd_+M}auLs^osPca#|GHb|TU6CYieF7w*X-lb1oTL| zW%ouHxV%ncT|tJ1nZCB*^#Y!r^E$Wze)|IMf4#$eK>n!nX!4jttSyH7B+2$;Sha2q z^liQwezpGO>Wgi>Q>%BMfd}53t#J6mFJZ(pk9&qT-za33capWfxVv~NHo2(d!r112 zhxtshandlp13vBz#!=3Hob#rj)70y=RaJ z*sEECy}mYwS(y;B=+we$<^%jzm@mW!r4Oea1UPi=B;%NhOP@PEx!0`%k{~rB!XDJ} zQrdKVY~krKeW?Y7);8rW!?$?_~uhwblIPp`keN;8~SMa!X%^Bsuc}mZC{8@OIv5Ny?8&%-=Q4d^ElW#!!c?O0RBogqEFcnl`?eod6UdBpQCaY6Y6ms^&KP(@Sc)p_yCpDXi^pdfPS z+RC-yU^V7uuRA#30lediZ{qGUK3aA_NmN#Ls11F}(t-3kel&0Nsg7m8FTnI6vQ~Q; z5;Hs!38y&RD`cx1?oyM)*l;n{`bugER7ZhJS74s|-&Y76jIB!H#i<{7UhR}0 z0~#&NxVT@1Lzp*mR+sV|DCO^a400>K8E1{HkLr|vvz<;MJL zCO0XUj(yc&17e@NpHUOO-clnPwY=J$taSEe_B1(OpJuM9{tKIb!)4tTaT)>T-&iU7 zyD*c42nT1L9F<7Pj9n z6O{PAwPwc5F=dJ`zWd!+L_l-n8-~qz#U>?1JuMLmDp^6iZgQloP&YYww;;KQ>>B9X zrB8}^!_>*zt_Ld%MTx(i%+BiBq|~*`+~Wn847C7~Rx`3-`S%er~MB$lsiq zJd_Dt7n^mr9)p{QVV~=%k+_iCW+u7oNSE3l7#Y4>FHZo=7Jg?z|8TeJwxVY<5-Nug zfeXKXKMRlPU%Szu$VukO9y_p!yCk5`nRa8;b~uY$lz*5yx^*Vop1T?g*gnovD<^ z=G8InJ0!bK%EGIdltE4y-L`*pH02gpAFaR<$4~uGdj0$ehHGq8iYMr7&~7FxXNL|m zoFo6C{Y2ig(mo|9!`ASSi{9G!ke=S!=unK_x@i7UmY0r2UX`JP+-zg9vX(L5>mgEn zIKDVS0z=4`zdX%;RBk|7x6M{}<>!MQtehejNO7&1Y@VLD86E?twGGX4r{}&+3D`ob~dl(TWJ0 z;C1wHxib`Iz*?F~9gXu>g{>09R*eMkIzBoAET;2)a~)*($x1ew1Cb%tSi2Qcv=QQ} zuX9H@_$d%n~h;Qk}mC&++qHd4jlWQ)eTeywA!0r0`Nynm_0!42$`OBkC?9~=7J z)T2-Y%5R>c>4C}xf3HN$R-l>NJn^|37OXM$iF;7sb+xlpe1Cqg-vn?Shp$A@Kb-be zs$GQ#ZIL3bYn16bX#x;8(2D8$$X^s!o zFV0cfL&=vAKtRSY1V!S&u-Igj1kaqenb9`0oe&8#dsXrFUPko(EAgbKkK3Qt(rDJX ze!dqA^UrQJ^c+%7f0g_qFS?k$U#=!%46ZNL>6BefUDh*T=>PNGozf`2^#epnaN187 zGz1mvEYdA&?}m|c6yH?~xm^BsLq1x#yr;Q%VJvN&Qy$^$9GO!)>1Gyb?;A$8I8)%y zlYTtxPa|VjSp(y!yvpWOb*+&f&m*S8uL>_jK)BFI+sW_+7v+n{I#v(dE!MC zu4Wb9x6#TVk?cU>JPLyZ!mdjM+Cjell;^$y`WAibSdE{;t74u%eisBg!OEzXSf1x7ppb2 z@MM;*RePF712=YPmJhMRK(f7l$VPPqnlwG3r;%RvJ)hS^D^qZZtV zeV*O%Syh^)$Up>e6&%ow`!X|KC7=-;@d)k^#Qir2F0)(qkXx>xTUh;$%?7ueM#5(l zm+?Kn`S)LHX)mjDuI~LX*}}$AX z_ej?RrU}WxGYhkxwlnsidu3D##WLDU_JS;=G)US@d@-H_`=EUO>_j|N^fIeSs+-!? z=iG|7kkpz>zP;7J-RL3*b&(uT3TS`{wd;>ZpjSL-Q4SI_rVeroWex%ShWxCLR74XO zNw;|ad8ag$S6u_0Fdg1su)|A+`wyIhzS8~!^Kw+U_rb260V6G8U>Z_YS4cX9qZ1tF)@sHi90e?LXl zJOKj4@1j0GVfsh6|4>JM6p;eQKgzEF1o#P{G!%gBf5b*2TmdwTe-;Jd;@~j+w-Bcw Q#9RRtuE0y^p!j$CKbfudj{pDw delta 3923 zcmZ9PX*d+@_kgF6Y+1)X){$-OJA)X@V2aAbSTlnt%UH9{G>8~WOxA2;_mZ6`iL$TR zg)D=VA`=No|LXVQz25)x<(%g{=bY>Lc3=0)gfk7%XD(P-(9kjh0O!vGZaj!Ure2Vs zeeH@srfLvrN%p^EuQ=`B`nDv;pV&gk^2nwK0N7ao0Db@|5+;Zbvhfb&n&!i~zjSZN zj&XItWB?eA=3-o*8Zz^WNyOVmi;`o`rBwtr=zyaeb%s7eL|f(+h%+hk*Q%lz;hx3Q z^F?)JlO9}Hvi`za%IU|CT0h4po%1L4bvH^%$MW8RiKqkDoy8wG-7k^L-#hMp9r(5M zgRRp&LeNMjS*8vTbOmY}tYZ;fu53Y?PK4$xM*k2aW@pZ!TBhD&Wg(^_M$;aOfN}?) zQIf6osy#Zynt7SK=}UizL;FkF;_Ds-52-OxlE4Vd6)3RV9QtI1kBYm|`yB}7>1N%9 z(MbYN;8q2h)HM-x3LW`pQDSD42RFPNYxmHZyV0imGakrSJE+Oo4bqh58e_OO8`Hd} zj1wal-Q9h&L)ML(UjW0!Ib=9*$ds0nB2DZv*|v0wK$DcR451WO?Uq!bW%;i1w`(Yd zA=4qHOpV)bt9^80(?^#uuFXoQ&>gl>h2)myRLm;ql}QLJeA?7WPK&_+o`XK9G!PQ<;F5mwE7f1muAY26RX9I zl2n@=Pp%1Kqm_esG^p0JQ|HbA%d`P2H!F`@)p`N#V0Tf z;bnr0h{ow7rI?(&tOpWmro>WPU>PkE-kn^E_LMV5_8(>^c(z|zo?ozTClpl8C3wr2 zjF+P6J1QvhffcR7zUHkP7u#-7xp4;F%F@@U>bOdZ&8s)Y?c(J3d+OHhL<^ag;>Hi} zB3!{!+zCp(=tL!XW+shKKAm+5w5un0xB4|Gs!U1U^G-H1O{(f;gS^#BX`AtwgvwZtT&*Np@U zuWHEPK3%LvjMUk2U;aE)3KB0>P^6pqVtwM&eZbmZby$q826xh6O!s51-wwssS8P_+ ztei3|_wE<4YH7S(@9UOn@DzlP&{jOyEHBmZKag`Db zRXt!!O3q-HhLP&X2)02Vyq3e2hmK*9`@K%roNlAc5)n)62>yV2%duzWFJ*NK2Fo5l zZ!Aft+h2obqBQy!aod}Mezj}~%IMP%9#8wD@e}HT8L`7bzO`(-k_cG~^GN9(Lw2A; zd9fn~H8iYs>~wjNM{nHwErk>|Q}=EC72)R7V1Ja;z?~y1;E;_24|>pOHy*aA@tDTy zy26F@hYz7eDh4NWTPp?{D{Uz`j3Q4w^9fUeUt`)umw|^zJdEq2&as9j#wu|uZq{Ks zj}^$utlxG})+}R%&tBF!&8$8)W?^Us;e5jjU8Y0ZK~y!UyqWj5zb$T(u7|0n;1XQ{ zx876W@~1;+*X9{LJpC)e^@`gpL!mJj5HQ~n%n=`yiyF`%maowR@I9PLITmSFpl z!*l0H(L6gFm%A5NEm~9dlMXff?!t;B3#dD9M+AL)^gr|og?yZL9#1(FwnVh7&&)p> zIO2Tb4Fg2ucWO$+eDy<}MN9dRv(n%p-ZU^Dy{q6OrC}y)@{YB}6w*dYM`Brx7OJ)n z?}k%^pcH<{ROY@XxdZFTEgJ`8AtP<-a(dLF)gmFF4KA^$dg;JV%s!u3pRha`!u-tl zoB~!P8ECcSQ)(_GY!_K5oeQqAja$iSyu)groc_movN>$TSg9@>kYLhWJ~ zX!08?;t#Wi6^U&@$H)5iUmqApgm#zLKYOiD)QJ_}ciWr35K7=ot>y3>0ya6iP6g(6 zn(dgik70!+{YE3h-`(bQ>FrVhqMgKsO~q9>Zpmx&_W7Kv$xIb?oeJumaxE!u)h0xT zFydc_B+pCoZEPwT5$XL1O&aiUCe{XJA%B%fUW1v~OvyEa-bVKH5@E{x`sOzqvXX_? z%rdVEs4!221D>W1x6lsiK|QywPGTFyrlZ^nfc25 zx+}e@TC}dv2$s|zZdno6W)Ew7&<((nY;`XeZjUwlliRR6d#wSdbuWk){cup9?z1)U zPUHR8#XIZe!jR0oBmI9t{|D@i9!%ME7ycmq^^M!7Kj;8}6Gjp%y9gfTC4l78RS1Tz zeJr`0r#aH($J3&HW$}^+ji!XBofL0_fw_e}BO=#K`D6E5a^A!v(4f;n!)e|5%4LW$ zuwo;c70kv_5Fsi`U^6@)UyD=A)xg+k_;qD0g$I0z{GJ!S^TPN2LV$DbnKwyK)vEg{ zqI6WJ29B<R_nvImi4k?zp@V5xMTbFPNTGydq0)i}!{j%5%2P-UGq+xn=p;V7x)e!mgQb?SR z3qv(;)85SP;^)?lZRI|YIXc>BG%)yazFdLqE3D_dJfkY>vl{$btIurW-lbWgF$fo= zHgg^|Im*-o{?0m@6*nT^H*6V{ln&L=pZ-*URJ53!*yE6M(Yk?itpSTPoc%UKzM8oi zBMAyffL~6*bmtE~7cx+t#wrxfAMwfB`0Emyr+0%j-Rm_6qZ@%QXwBmSg=P9-hESA9 zPQY-nY1|2b3txHArJ9&Nyx1k$xY9QUNeeu){a#$F%BtaA#8pE1J&ajbZq#c=p~Cr5 z;b2xfLanR6^qj>T&h-5w?7%%%)0=MTm9=8W(@5p9oIqaW>_cQuuw;c-o2K{Pef;&= z_PNO!YvJu?rMsg;C>?LlVjKT9vz)C~L7VeUKY20(?eV2TyJhDb173X%bch={`^JxU zPdk}n0AgKr(SjPjnrw?oHl=2DHUw%*MxMJ*w#lF9T4RhylN8>9B^ZTfskHglSVZ4- z_@@y5u@52KV@kyz`A8o8Je*Z)q3wkjNuR4&hdyG6S>I4dDWyGu1yoB>qpSU-Nzjn@ zS5=nB;HRka3}YT)7~gblu1P2 zuS1UeKJwi{*=F{h*3-`O*VGKhX4u>|dJl_?=vjI@Fjwhl9l`2p+r%GGD|YXx)qnh7 z;vG;-x00T_OQf_7pjpFajI7GfE}U+fGaa=2nw6UllLj@u@}l4Hp|8zd*BgL=TdnDQ zD!P_V`J0=pV^|`t*TkLN7g^u#rJCyn`MvkPe>}CxCLC}zu1eD+f*hOlP$S#-9(Z2M zG}Vy)No!k8!Nf-4vBlK(PeF2*0{eT1UwA$-*lNe9impp)B~Lc|7R44Gc)81$oUk*W`C5{jQFsy6^54Ms5vetfH)T7(q|E3ymc49yU(?QIcR6<2w$D$T!_`+V>~LxXi{r7`z~qph zU7pB-GwI8hfdke>s<<|lbK($)f4s{>I?&Ls9i`YoZZ;Ma7Y}ow%8~pmO?o=Q@YzypM;VedcZr%sfjG>vXQn$JbzOwW(_fhFQ}{q9S6b}6+;guG&sY$)|%jX9Sz=5P?-+pWdhu>(oOKWmJc8+$VJ z5iM}84y1$SWEfu;kd;#GxGM(b`T(U9NA_-!N9S^OJ)5>!dN?p{)u1bJL$;aRkDe?G zY!!OE&Sx6%5Jf2Rrn@vL-=ihpWorUMfQLO#n9rS>pBu51z9>pu2*JskAy$Kr`Kwh8 z3I&R4mVJ{I*;(0s1aHN1{G8!CqW_l_4xWfc7_TxH&7UL$!gS_u5-YdF`8T;`zk#q;9E%FCLPq`bz9e=}TBaB((zmx(1c>nDKln_ELkbp)P|NMreXC!d8l8a<-#3%Cmid2yZXJ7o? z8+ir*;QG(Zk`(EYk=WmvHX{Mu&(Z+EU4IuW*3DlDyl%gW-+SuUFYY4QKx#QmR5 QBf2DZW2tlR^!`-;528LksQ>@~