From 80c7797ad13661a4c4bdb311b75481d056e3dfc8 Mon Sep 17 00:00:00 2001 From: Wyvest Date: Fri, 26 Dec 2025 20:07:51 +0900 Subject: [PATCH] Don't search for external JDKs in OneClient --- apps/oneclient/frontend/src/bindings.gen.ts | 18 ++++++------- .../frontend/src/hooks/useLaunchCluster.ts | 2 +- packages/core/examples/cluster.rs | 20 +++++++------- packages/core/src/api/cluster/mod.rs | 11 +++++--- packages/core/src/api/game/launch.rs | 3 ++- packages/core/src/api/java/mod.rs | 27 +++++++++++-------- packages/core/src/api/tauri/commands.rs | 16 ++++++++--- 7 files changed, 59 insertions(+), 38 deletions(-) diff --git a/apps/oneclient/frontend/src/bindings.gen.ts b/apps/oneclient/frontend/src/bindings.gen.ts index 30b8c3d8..9ce578aa 100644 --- a/apps/oneclient/frontend/src/bindings.gen.ts +++ b/apps/oneclient/frontend/src/bindings.gen.ts @@ -301,15 +301,12 @@ export type VersionType = */ "old_beta" -const ARGS_MAP = { 'oneclient':'{"getClustersGroupedByMajor":[],"getVersions":[],"getBundlesFor":["cluster_id"]}', 'core':'{"getLoadersForVersion":["mc_version"],"convertUsernameUUID":["username_uuid"],"getClusters":[],"getGameVersions":[],"getUsers":[],"killProcess":["pid"],"getClusterById":["id"],"getMultiplePackages":["provider","slugs"],"removePackage":["cluster_id","package_hash"],"fetchMinecraftProfile":["uuid"],"changeSkin":["access_token","skin_url","skin_variant"],"getPackageBody":["provider","body"],"getWorlds":["id"],"createSettingsProfile":["name"],"removeUser":["uuid"],"getLinkedPackages":["cluster_id"],"installModpack":["modpack","cluster_id"],"removeCluster":["id"],"changeCape":["access_token","cape_uuid"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getLogByName":["id","name"],"getRunningProcessesByClusterId":["cluster_id"],"fetchLoggedInProfile":["access_token"],"removeCape":["access_token"],"open":["input"],"getDefaultUser":["fallback"],"getLogs":["id"],"updateClusterProfile":["name","profile"],"setDiscordRPCMessage":["message"],"isClusterRunning":["cluster_id"],"updateClusterById":["id","request"],"getUser":["uuid"],"writeSettings":["setting"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getProfileOrDefault":["name"],"getPackage":["provider","slug"],"getGlobalProfile":[],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"setDefaultUser":["uuid"],"getRunningProcesses":[],"createCluster":["options"],"openMsaLogin":[],"launchCluster":["id","uuid"],"getScreenshots":["id"],"readSettings":[],"searchPackages":["provider","query"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"getUsersFromAuthor":["provider","author"]}', 'debug':'{"getOsVersion":[],"getType":[],"getFamily":[],"getBuildTimestamp":[],"isInDev":[],"getArch":[],"getLocale":[],"openDevTools":[],"getPlatform":[],"getGitCommitHash":[],"getPackageVersion":[]}', 'events':'{"ingress":["event"],"message":["event"],"process":["event"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}' } -export type Router = { 'events': { ingress: (event: IngressPayload) => Promise, -message: (event: MessagePayload) => Promise, -process: (event: ProcessPayload) => Promise }, -'folders': { fromCluster: (folderName: string) => Promise, -openCluster: (folderName: string) => Promise }, -'oneclient': { getClustersGroupedByMajor: () => Promise>, +const ARGS_MAP = { 'events':'{"message":["event"],"process":["event"],"ingress":["event"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'oneclient':'{"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"],"getVersions":[]}', 'debug':'{"openDevTools":[],"getType":[],"getOsVersion":[],"isInDev":[],"getArch":[],"getFamily":[],"getPackageVersion":[],"getLocale":[],"getPlatform":[],"getBuildTimestamp":[],"getGitCommitHash":[]}', 'core':'{"convertUsernameUUID":["username_uuid"],"getMultiplePackages":["provider","slugs"],"removeCluster":["id"],"getLinkedPackages":["cluster_id"],"getClusterById":["id"],"getDefaultUser":["fallback"],"createCluster":["options"],"getRunningProcesses":[],"openMsaLogin":[],"getGlobalProfile":[],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getScreenshots":["id"],"changeSkin":["access_token","skin_url","skin_variant"],"getProfileOrDefault":["name"],"removeCape":["access_token"],"getClusters":[],"getUser":["uuid"],"killProcess":["pid"],"getUsers":[],"setDiscordRPCMessage":["message"],"open":["input"],"getLogs":["id"],"getPackage":["provider","slug"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getPackageBody":["provider","body"],"isClusterRunning":["cluster_id"],"getGameVersions":[],"createSettingsProfile":["name"],"getUsersFromAuthor":["provider","author"],"getRunningProcessesByClusterId":["cluster_id"],"installModpack":["modpack","cluster_id"],"getLoadersForVersion":["mc_version"],"changeCape":["access_token","cape_uuid"],"updateClusterById":["id","request"],"removePackage":["cluster_id","package_hash"],"getWorlds":["id"],"readSettings":[],"removeUser":["uuid"],"fetchLoggedInProfile":["access_token"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getLogByName":["id","name"],"searchPackages":["provider","query"],"fetchMinecraftProfile":["uuid"],"launchCluster":["id","uuid","search_for_java"],"updateClusterProfile":["name","profile"],"writeSettings":["setting"],"setDefaultUser":["uuid"]}' } +export type Router = { 'oneclient': { getClustersGroupedByMajor: () => Promise>, getBundlesFor: (clusterId: number) => Promise, getVersions: () => Promise }, +'folders': { fromCluster: (folderName: string) => Promise, +openCluster: (folderName: string) => Promise }, 'debug': { openDevTools: () => Promise, isInDev: () => Promise, getArch: () => Promise, @@ -325,7 +322,7 @@ getPackageVersion: () => Promise }, getClusterById: (id: number) => Promise, removeCluster: (id: number) => Promise, createCluster: (options: CreateCluster) => Promise, -launchCluster: (id: number, uuid: string | null) => Promise, +launchCluster: (id: number, uuid: string | null, searchForJava: boolean | null) => Promise, updateClusterById: (id: number, request: ClusterUpdate) => Promise, getScreenshots: (id: number) => Promise, getWorlds: (id: number) => Promise, @@ -368,7 +365,10 @@ changeCape: (accessToken: string, capeUuid: string) => Promise Promise, convertUsernameUUID: (usernameUuid: string) => Promise, setDiscordRPCMessage: (message: string) => Promise, -open: (input: string) => Promise } }; +open: (input: string) => Promise }, +'events': { ingress: (event: IngressPayload) => Promise, +message: (event: MessagePayload) => Promise, +process: (event: ProcessPayload) => Promise } }; export type { InferCommandOutput } diff --git a/apps/oneclient/frontend/src/hooks/useLaunchCluster.ts b/apps/oneclient/frontend/src/hooks/useLaunchCluster.ts index 6b227e20..f6e272f5 100644 --- a/apps/oneclient/frontend/src/hooks/useLaunchCluster.ts +++ b/apps/oneclient/frontend/src/hooks/useLaunchCluster.ts @@ -18,7 +18,7 @@ export function useLaunchCluster(clusterId?: number | undefined | null) { return; try { - await bindings.core.launchCluster(targetId, null); + await bindings.core.launchCluster(targetId, null, false); navigate({ to: '/app/cluster/process', diff --git a/packages/core/examples/cluster.rs b/packages/core/examples/cluster.rs index 2adab2d6..17d9c745 100644 --- a/packages/core/examples/cluster.rs +++ b/packages/core/examples/cluster.rs @@ -1,4 +1,8 @@ -use onelauncher_core::{api::{self, proxy::ProxyDynamic}, error::LauncherResult, initialize_core, store::CoreOptions}; +use onelauncher_core::api::proxy::ProxyDynamic; +use onelauncher_core::api::{self}; +use onelauncher_core::error::LauncherResult; +use onelauncher_core::initialize_core; +use onelauncher_core::store::CoreOptions; use onelauncher_entity::loader::GameLoader; #[tokio::main] @@ -12,18 +16,14 @@ async fn main() -> LauncherResult<()> { } println!("creating cluster"); - let cluster = &mut api::cluster::create_cluster( - "Test Cluster", - "1.8.9", - GameLoader::Vanilla, - None, - None, - ).await?; + let cluster = + &mut api::cluster::create_cluster("Test Cluster", "1.8.9", GameLoader::Vanilla, None, None) + .await?; println!("cluster created: {cluster:#?}"); println!("preparing cluster for launch"); - api::cluster::prepare_cluster(cluster, None).await?; + api::cluster::prepare_cluster(cluster, None, Some(true)).await?; Ok(()) -} \ No newline at end of file +} diff --git a/packages/core/src/api/cluster/mod.rs b/packages/core/src/api/cluster/mod.rs index 6a6268d3..3d886f9b 100644 --- a/packages/core/src/api/cluster/mod.rs +++ b/packages/core/src/api/cluster/mod.rs @@ -117,6 +117,7 @@ pub async fn create_cluster( pub async fn prepare_cluster( cluster: &mut clusters::Model, force: Option, + search_for_java: Option, ) -> LauncherResult<&clusters::Model> { tracing::debug!("preparing cluster {}", cluster.name); @@ -131,7 +132,7 @@ pub async fn prepare_cluster( }) .await?; - if let Err(err) = install_cluster(cluster, force).await { + if let Err(err) = install_cluster(cluster, force, search_for_java).await { tracing::error!("failed to prepare cluster: {}", err); dao::update_cluster(cluster, async |mut cluster| { cluster.stage = Set(ClusterStage::NotReady); @@ -151,7 +152,11 @@ pub async fn prepare_cluster( Ok(cluster) } -async fn install_cluster(cluster: &clusters::Model, force: Option) -> LauncherResult<()> { +async fn install_cluster( + cluster: &clusters::Model, + force: Option, + search_for_java: Option, +) -> LauncherResult<()> { const INGRESS_TOTAL: f64 = 100.0; const INGRESS_TASKS: f64 = 4.0; const INGRESS_STEP: f64 = INGRESS_TOTAL / INGRESS_TASKS; @@ -211,7 +216,7 @@ async fn install_cluster(cluster: &clusters::Model, force: Option) -> Laun return Err(ClusterError::MissingJavaVersion.into()); }; - java::prepare_java(ver.major_version).await? + java::prepare_java(ver.major_version, search_for_java.unwrap_or(true)).await? }; // TASK 3 diff --git a/packages/core/src/api/game/launch.rs b/packages/core/src/api/game/launch.rs index bd0855e5..5f6fdfbe 100644 --- a/packages/core/src/api/game/launch.rs +++ b/packages/core/src/api/game/launch.rs @@ -24,12 +24,13 @@ pub async fn launch_minecraft( cluster: &mut Cluster, creds: MinecraftCredentials, force: Option, + search_for_java: Option, ) -> LauncherResult>> { if cluster.stage.is_downloading() { return Err(ClusterError::ClusterDownloading.into()); } - prepare_cluster(cluster, force).await?; + prepare_cluster(cluster, force, search_for_java).await?; let mut settings = get_global_profile().await; if let Some(name) = &cluster.setting_profile_name && let Some(profile) = get_profile_by_name(name).await? diff --git a/packages/core/src/api/java/mod.rs b/packages/core/src/api/java/mod.rs index eec20e21..121867d6 100644 --- a/packages/core/src/api/java/mod.rs +++ b/packages/core/src/api/java/mod.rs @@ -155,7 +155,10 @@ pub async fn get_recommended_java( dao::get_latest_java_by_major(supported_ver.major_version).await } -pub async fn prepare_java(major: u32) -> LauncherResult { +pub async fn prepare_java( + major: u32, + search_for_java: bool, +) -> LauncherResult { let id = init_ingress( IngressType::JavaPrepare, &format!("preparing java {}", major), @@ -169,16 +172,18 @@ pub async fn prepare_java(major: u32) -> LauncherResult { return Ok(java.clone()); } - let java = locate_java().await?; + if search_for_java { + let java = locate_java().await?; - if !java.is_empty() { - for (path, info) in java { - dao::insert_java(path, info).await?; - } + if !java.is_empty() { + for (path, info) in java { + dao::insert_java(path, info).await?; + } - if let Some(java) = dao::get_latest_java_by_major(major).await? { - send_ingress(&id, 100.0).await?; - return Ok(java); + if let Some(java) = dao::get_latest_java_by_major(major).await? { + send_ingress(&id, 100.0).await?; + return Ok(java); + } } } @@ -251,8 +256,8 @@ fn internal_locate_java() -> Vec { // epic common paths let common_paths = [ - r"C:\Program Files\Java", - r"C:\Program Files (x86)\Java", + //r"C:\Program Files\Java", # These can be shitty 32-bit installations, we'd rather not deal with that lol + //r"C:\Program Files (x86)\Java", r"C:\Program Files\OpenJDK", r"C:\Program Files\Eclipse Adoptium", r"C:\Program Files\Zulu", diff --git a/packages/core/src/api/tauri/commands.rs b/packages/core/src/api/tauri/commands.rs index 7c972059..14a1e6e0 100644 --- a/packages/core/src/api/tauri/commands.rs +++ b/packages/core/src/api/tauri/commands.rs @@ -42,7 +42,11 @@ pub trait TauriLauncherApi { async fn create_cluster(options: CreateCluster) -> LauncherResult; #[taurpc(alias = "launchCluster")] - async fn launch_cluster(id: ClusterId, uuid: Option) -> LauncherResult<()>; + async fn launch_cluster( + id: ClusterId, + uuid: Option, + search_for_java: Option, + ) -> LauncherResult<()>; #[taurpc(alias = "updateClusterById")] async fn update_cluster_by_id(id: ClusterId, request: ClusterUpdate) -> LauncherResult<()>; @@ -346,7 +350,12 @@ impl TauriLauncherApi for TauriLauncherApiImpl { Ok(cluster) } - async fn launch_cluster(self, id: ClusterId, uuid: Option) -> LauncherResult<()> { + async fn launch_cluster( + self, + id: ClusterId, + uuid: Option, + search_for_java: Option, + ) -> LauncherResult<()> { let mut cluster = api::cluster::dao::get_cluster_by_id(id) .await? .ok_or_else(|| anyhow::anyhow!("cluster with id {} not found", id))?; @@ -364,7 +373,8 @@ impl TauriLauncherApi for TauriLauncherApiImpl { // let user = api::credentials::get_fake_user(); - let _ = api::game::launch::launch_minecraft(&mut cluster, user, None).await?; + let _ = + api::game::launch::launch_minecraft(&mut cluster, user, None, search_for_java).await?; Ok(()) }