diff --git a/apps/oneclient/frontend/src/components/Bundle/DownloadModButton.tsx b/apps/oneclient/frontend/src/components/Bundle/DownloadModButton.tsx index 1a3499c6..dc17e967 100644 --- a/apps/oneclient/frontend/src/components/Bundle/DownloadModButton.tsx +++ b/apps/oneclient/frontend/src/components/Bundle/DownloadModButton.tsx @@ -10,6 +10,14 @@ export function DownloadModButton({ cluster, file }: { cluster: ClusterModel; fi const download = useCommandMut(async () => { if ('Managed' in file.kind) { const [pkg, version] = file.kind.Managed; + if (version.dependencies.length > 0) + for (const dependency of version.dependencies) + if (dependency.dependency_type === "required") { + const slug = dependency.project_id ?? ''; + const versions = await bindings.core.getPackageVersions(pkg.provider, slug, cluster.mc_version, cluster.mc_loader, 0, 1); + await bindings.core.downloadPackage(pkg.provider, slug, versions.items[0].version_id, cluster.id, null); + } + await bindings.core.downloadPackage(pkg.provider, pkg.id, version.version_id, cluster.id, null); } else { diff --git a/apps/oneclient/frontend/src/components/Bundle/ModCard.tsx b/apps/oneclient/frontend/src/components/Bundle/ModCard.tsx index 9012576b..b1b684be 100644 --- a/apps/oneclient/frontend/src/components/Bundle/ModCard.tsx +++ b/apps/oneclient/frontend/src/components/Bundle/ModCard.tsx @@ -135,6 +135,14 @@ export function ModCard({ file, cluster }: ModCardProps) { const download = useCommandMut(async () => { if ('Managed' in kind) { const [pkg, version] = kind.Managed; + if (version.dependencies.length > 0) + for (const dependency of version.dependencies) + if (dependency.dependency_type === "required") { + const slug = dependency.project_id ?? ''; + const versions = await bindings.core.getPackageVersions(pkg.provider, slug, cluster.mc_version, cluster.mc_loader, 0, 1); + await bindings.core.downloadPackage(pkg.provider, slug, versions.items[0].version_id, cluster.id, null); + } + await bindings.core.downloadPackage(pkg.provider, pkg.id, version.version_id, cluster.id, null); } else { diff --git a/apps/oneclient/frontend/src/components/DownloadMods.tsx b/apps/oneclient/frontend/src/components/DownloadMods.tsx index c65739ac..f20b3eb3 100644 --- a/apps/oneclient/frontend/src/components/DownloadMods.tsx +++ b/apps/oneclient/frontend/src/components/DownloadMods.tsx @@ -111,10 +111,22 @@ function DownloadingMods({ mods, setOpen, nextPath }: { mods: ModDataArray; setO const [downloadedMods, setDownloadedMods] = useState(0); const [modName, setModName] = useState(null); const download = useCommandMut(async (mod: ModData) => { - if (isManagedMod(mod)) + if (isManagedMod(mod)) { + if (mod.dependencies.length > 0) + for (const dependency of mod.dependencies) { + const cluster = await bindings.core.getClusterById(mod.clusterId); + if (!cluster) + continue; + if (dependency.dependency_type === "required") { + const slug = dependency.project_id ?? ''; + const versions = await bindings.core.getPackageVersions(mod.provider, slug, cluster.mc_version, cluster.mc_loader, 0, 1); + if (versions.items.length !== 0) + await bindings.core.downloadPackage(mod.provider, slug, versions.items[0].version_id, cluster.id, null); + } + } await bindings.core.downloadPackage(mod.provider, mod.id, mod.versionId, mod.clusterId, true); - else - await bindings.core.downloadExternalPackage(mod.package, mod.clusterId, null, null); + } + else { await bindings.core.downloadExternalPackage(mod.package, mod.clusterId, null, null); } }); const { setting } = useSettings();