From 2e0d04d6d08cceb41854e4e4f373bbe5e72f2a36 Mon Sep 17 00:00:00 2001 From: Wyvest Date: Mon, 29 Dec 2025 00:23:26 +0900 Subject: [PATCH] actually implement "enabled" for mods / categories --- apps/oneclient/frontend/src/bindings.gen.ts | 16 +++++++-------- .../preferences/versionCategory.tsx | 20 ++++++++++++------- .../core/src/api/packages/modpack/data.rs | 6 ++++++ .../core/src/api/packages/modpack/mrpack.rs | 1 + .../src/api/packages/modpack/polymrpack.rs | 1 + 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/apps/oneclient/frontend/src/bindings.gen.ts b/apps/oneclient/frontend/src/bindings.gen.ts index ca9a8bd4..d473e383 100644 --- a/apps/oneclient/frontend/src/bindings.gen.ts +++ b/apps/oneclient/frontend/src/bindings.gen.ts @@ -105,7 +105,7 @@ export type ModpackFileKind = { Managed: [ManagedPackage, ManagedVersion] } | { export type ModpackFormat = "CurseForge" | "MrPack" | "PolyMrPack" -export type ModpackManifest = { name: string; version: string; loader: GameLoader; loader_version: string; mc_version: string; files: ModpackFile[] } +export type ModpackManifest = { name: string; version: string; loader: GameLoader; loader_version: string; mc_version: string; enabled?: boolean; files: ModpackFile[] } export type MojangCape = { id: string; state: string; url: string; alias: string } @@ -303,14 +303,12 @@ export type VersionType = */ "old_beta" -const ARGS_MAP = { 'debug':'{"isInDev":[],"getGitCommitHash":[],"openDevTools":[],"getPackageVersion":[],"getOsVersion":[],"getArch":[],"getLocale":[],"getType":[],"getFamily":[],"getPlatform":[],"getBuildTimestamp":[]}', 'events':'{"message":["event"],"process":["event"],"ingress":["event"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'oneclient':'{"getBundlesFor":["cluster_id"],"checkForUpdate":[],"getVersions":[],"getClustersGroupedByMajor":[],"installUpdate":[]}', 'core':'{"getDefaultUser":["fallback"],"removeCluster":["id"],"getUsers":[],"getUser":["uuid"],"fetchMinecraftProfile":["uuid"],"changeCape":["access_token","cape_uuid"],"getRunningProcessesByClusterId":["cluster_id"],"getProfileOrDefault":["name"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"createSettingsProfile":["name"],"setClusterStage":["id","stage"],"getRunningProcesses":[],"getWorlds":["id"],"installModpack":["modpack","cluster_id"],"searchPackages":["provider","query"],"getUsersFromAuthor":["provider","author"],"getLoadersForVersion":["mc_version"],"getPackage":["provider","slug"],"getScreenshots":["id"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"removePackage":["cluster_id","package_hash"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"convertUsernameUUID":["username_uuid"],"setDiscordRPCMessage":["message"],"getClusterById":["id"],"getLogs":["id"],"launchCluster":["id","uuid","search_for_java"],"getGameVersions":[],"writeSettings":["setting"],"killProcess":["pid"],"getPackageBody":["provider","body"],"getLinkedPackages":["cluster_id"],"updateClusterProfile":["name","profile"],"readSettings":[],"updateClusterById":["id","request"],"removeUser":["uuid"],"openMsaLogin":[],"getGlobalProfile":[],"createCluster":["options"],"getLogByName":["id","name"],"fetchLoggedInProfile":["access_token"],"changeSkin":["access_token","skin_url","skin_variant"],"getClusters":[],"setDefaultUser":["uuid"],"removeCape":["access_token"],"open":["input"],"isClusterRunning":["cluster_id"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"getMultiplePackages":["provider","slugs"]}' } +const ARGS_MAP = { 'core':'{"updateClusterProfile":["name","profile"],"getRunningProcesses":[],"getLinkedPackages":["cluster_id"],"createCluster":["options"],"launchCluster":["id","uuid","search_for_java"],"getWorlds":["id"],"getUsers":[],"getClusters":[],"getPackage":["provider","slug"],"getMultiplePackages":["provider","slugs"],"installModpack":["modpack","cluster_id"],"removeCape":["access_token"],"setDiscordRPCMessage":["message"],"isClusterRunning":["cluster_id"],"writeSettings":["setting"],"getLogs":["id"],"getPackageBody":["provider","body"],"changeSkin":["access_token","skin_url","skin_variant"],"searchPackages":["provider","query"],"open":["input"],"openMsaLogin":[],"fetchLoggedInProfile":["access_token"],"readSettings":[],"removeCluster":["id"],"getClusterById":["id"],"createSettingsProfile":["name"],"updateClusterById":["id","request"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"killProcess":["pid"],"getLoadersForVersion":["mc_version"],"getProfileOrDefault":["name"],"setClusterStage":["id","stage"],"fetchMinecraftProfile":["uuid"],"getUsersFromAuthor":["provider","author"],"getLogByName":["id","name"],"getDefaultUser":["fallback"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getUser":["uuid"],"removeUser":["uuid"],"changeCape":["access_token","cape_uuid"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"convertUsernameUUID":["username_uuid"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"removePackage":["cluster_id","package_hash"],"getGameVersions":[],"getGlobalProfile":[],"setDefaultUser":["uuid"],"getScreenshots":["id"],"getRunningProcessesByClusterId":["cluster_id"]}', 'oneclient':'{"getClustersGroupedByMajor":[],"installUpdate":[],"checkForUpdate":[],"getBundlesFor":["cluster_id"],"getVersions":[]}', 'debug':'{"getLocale":[],"getArch":[],"getType":[],"getGitCommitHash":[],"openDevTools":[],"isInDev":[],"getFamily":[],"getPackageVersion":[],"getBuildTimestamp":[],"getPlatform":[],"getOsVersion":[]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}' } export type Router = { 'oneclient': { getClustersGroupedByMajor: () => Promise>, getBundlesFor: (clusterId: number) => Promise, getVersions: () => Promise, checkForUpdate: () => Promise, installUpdate: () => Promise }, -'folders': { fromCluster: (folderName: string) => Promise, -openCluster: (folderName: string) => Promise }, 'core': { getClusters: () => Promise, getClusterById: (id: number) => Promise, removeCluster: (id: number) => Promise, @@ -360,6 +358,11 @@ removeCape: (accessToken: string) => Promise, convertUsernameUUID: (usernameUuid: string) => Promise, setDiscordRPCMessage: (message: string) => Promise, open: (input: string) => Promise }, +'events': { ingress: (event: IngressPayload) => Promise, +message: (event: MessagePayload) => Promise, +process: (event: ProcessPayload) => Promise }, +'folders': { fromCluster: (folderName: string) => Promise, +openCluster: (folderName: string) => Promise }, 'debug': { openDevTools: () => Promise, isInDev: () => Promise, getArch: () => Promise, @@ -370,10 +373,7 @@ getPlatform: () => Promise, getOsVersion: () => Promise, getGitCommitHash: () => Promise, getBuildTimestamp: () => Promise, -getPackageVersion: () => Promise }, -'events': { ingress: (event: IngressPayload) => Promise, -message: (event: MessagePayload) => Promise, -process: (event: ProcessPayload) => Promise } }; +getPackageVersion: () => Promise } }; export type { InferCommandOutput } diff --git a/apps/oneclient/frontend/src/routes/onboarding/preferences/versionCategory.tsx b/apps/oneclient/frontend/src/routes/onboarding/preferences/versionCategory.tsx index 4d1f745c..487f0128 100644 --- a/apps/oneclient/frontend/src/routes/onboarding/preferences/versionCategory.tsx +++ b/apps/oneclient/frontend/src/routes/onboarding/preferences/versionCategory.tsx @@ -50,8 +50,13 @@ function RouteComponent() { }); const [modsPerCluster, setModsPerCluster] = useState>>( - clusters.reduce((acc, cluster) => { - acc[cluster.id] = []; + clusters.reduce((acc, cluster, i) => { + const bundles = bundleQueries[i]; + const enabledMods = bundles + .filter(bundle => bundle.manifest.enabled) + .flatMap(bundle => bundle.manifest.files.filter(file => file.enabled)); + + acc[cluster.id] = enabledMods; return acc; }, {} as Record>), ); @@ -111,13 +116,14 @@ function ModCategory({ bundleData, name, modsPerCluster, setModsPerCluster }: { function ModCategoryCard({ art, fullVersionName, bundle, mods, setMods, clusterId }: { fullVersionName: string; art: string; bundle: ModpackArchive; mods: Array; setMods: React.Dispatch>>; clusterId: number }) { const files = bundle.manifest.files; - const isSelected = files.every(file => mods.includes(file)); + const isSelected = files.filter(file => file.enabled).every(file => mods.includes(file)); const handleDownload = () => { setMods((prevMods) => { - if (isSelected) - return prevMods.filter(mod => !files.includes(mod)); - else - return [...files, ...prevMods]; + if (isSelected) { return prevMods.filter(mod => !files.includes(mod)); } + else { + const filesToAdd = files.filter(file => file.enabled && !prevMods.includes(file)); + return [...filesToAdd, ...prevMods]; + } }); }; diff --git a/packages/core/src/api/packages/modpack/data.rs b/packages/core/src/api/packages/modpack/data.rs index 99b19931..e6025779 100644 --- a/packages/core/src/api/packages/modpack/data.rs +++ b/packages/core/src/api/packages/modpack/data.rs @@ -24,9 +24,15 @@ pub struct ModpackManifest { pub loader: GameLoader, pub loader_version: String, pub mc_version: String, + #[serde(default = "default_false")] + pub enabled: bool, pub files: Vec, } +fn default_false() -> bool { + false +} + #[onelauncher_macro::specta] #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct ModpackFile { diff --git a/packages/core/src/api/packages/modpack/mrpack.rs b/packages/core/src/api/packages/modpack/mrpack.rs index 523b94ff..5bd94ba0 100644 --- a/packages/core/src/api/packages/modpack/mrpack.rs +++ b/packages/core/src/api/packages/modpack/mrpack.rs @@ -157,6 +157,7 @@ impl InstallableModpackFormatExt for MrPackFormatImpl { mc_version: self.mc_version.clone(), loader: self.loader.clone(), loader_version: self.loader_version.clone(), + enabled: false, files, }; diff --git a/packages/core/src/api/packages/modpack/polymrpack.rs b/packages/core/src/api/packages/modpack/polymrpack.rs index fa5e0604..4a44e0a7 100644 --- a/packages/core/src/api/packages/modpack/polymrpack.rs +++ b/packages/core/src/api/packages/modpack/polymrpack.rs @@ -156,6 +156,7 @@ impl InstallableModpackFormatExt for PolyMrPackFormatImpl { mc_version: self.mc_version.clone(), loader: self.loader.clone(), loader_version: self.loader_version.clone(), + enabled: self.raw_manifest.enabled, files, };