OneLauncher-Cracked/packages/oneclient_java/examples/install_provider.rs
oiupoyt 936e4247a3 feat: update base to official upstream 2.4.2 with all cracked features intact (2.4.2-c1)
- Rebased base onto official Polyfrost OneLauncher 2.4.2 (release v2.4.2).
- Ensured offline mode launches with 0 Microsoft accounts required (no OfflineRequiresMicrosoft error).
- Maintained custom 3D offline skin changer, player model switch (Classic/Slim), and targeted Minecraft Java UUID character slot isolation to prevent multiplayer skin cloning.
- Maintained CustomSkinLoader auto-configuration for local skins, Ely.by, and SkinRestorer.
- Integrated direct GitHub Releases auto-updater pointing to oiupoyt/OneLauncher-Cracked.
- Ported inline username renaming modal and Change Skin navigation in account settings and onboarding.
- Maintained mods filter popover blur/text ghosting fix in package manager.
- Preserved fast dev profile and multiplatform release workflow for v2.4.2-c1.
- All workspace tests and clippy checks pass with 0 errors.
2026-09-17 00:28:04 +05:30

69 lines
2.5 KiB
Rust

//! Downloads and probes one vendor's JDK then records it in an in-memory store
use std::env;
use oneclient_common::paths::java_dir;
use oneclient_events::EventBus;
use oneclient_java::vendors::{
AdoptiumRuntimeProvider, CorrettoRuntimeProvider, JavaRuntimeProvider, LibericaRuntimeProvider,
MicrosoftRuntimeProvider, ZuluRuntimeProvider,
};
use oneclient_java::{JavaResult, JavaService, MemoryJavaStore, check_java_runtime};
use oneclient_net::{NetConfig, RequestClient};
#[tokio::main]
async fn main() -> JavaResult<()> {
let mut args = env::args().skip(1);
let vendor = args.next().unwrap_or_else(|| {
eprintln!("usage: install_provider <zulu|adoptium|corretto|liberica|microsoft> [major]");
std::process::exit(1);
});
let major: u32 = args
.next()
.unwrap_or_else(|| "21".to_string())
.parse()
.expect("major version must be a number");
let net = RequestClient::new(NetConfig::default())?;
// Nothing drains this so events are dropped
let (events, _rx) = EventBus::channel();
let provider: Box<dyn JavaRuntimeProvider> = match vendor.as_str() {
"zulu" => Box::new(ZuluRuntimeProvider),
"adoptium" => Box::new(AdoptiumRuntimeProvider),
"corretto" => Box::new(CorrettoRuntimeProvider),
"liberica" => Box::new(LibericaRuntimeProvider),
"microsoft" => Box::new(MicrosoftRuntimeProvider),
other => {
eprintln!(
"unknown vendor '{other}', use zulu, adoptium, corretto, liberica, or microsoft"
);
std::process::exit(1);
}
};
let packages = provider.list_packages(Some(major), &net).await?;
let package = packages
.into_iter()
.find(|p| p.java_version.contains(&major))
.unwrap_or_else(|| panic!("no {vendor} package for Java {major}"));
println!("Installing package {:#?} to '{:?}'", package, java_dir()?);
let executable = provider
.install_package(&package, &net, &events, None)
.await?;
println!("Installed: {}", executable.display());
let info = check_java_runtime(executable.display().to_string()).await?;
println!(" version: {}", info.version);
println!(" vendor: {}", info.vendor);
println!(" arch: {}", info.os_arch);
let service = JavaService::new(MemoryJavaStore::new(), net, events);
service.add_custom_runtime(executable).await?;
println!("Registered runtimes: {:?}", service.list_runtimes().await?);
Ok(())
}