use late_java_core::{Launch, MicrosoftAuth, LaunchOptions, MemoryOptions, LoaderOptions, JavaOptions, ScreenOptions, init_logger};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
init_logger();
println!("=== Late Java Core - Ejemplo Básico ===");
let auth = MicrosoftAuth::new("00000000402b5328".to_string());
println!("Nota: En un ejemplo real, esto abriría la autenticación Microsoft");
let auth_result = late_java_core::auth::AuthResponse {
access_token: "simulated_token".to_string(),
client_token: "simulated_client_token".to_string(),
uuid: "simulated_uuid".to_string(),
name: "TestUser".to_string(),
refresh_token: Some("simulated_refresh_token".to_string()),
user_properties: "{}".to_string(),
meta: late_java_core::auth::AuthMeta {
auth_type: "Xbox".to_string(),
access_token_expires_in: chrono::Utc::now().timestamp() as u64 + 3600,
demo: false,
},
xbox_account: None,
profile: None,
};
let options = LaunchOptions {
url: None,
headers: None,
token: None,
authenticator: auth_result,
timeout: Some(10000),
path: ".Minecraft".to_string(),
version: "1.20.4".to_string(),
instance: None,
detached: Some(false),
download_file_multiple: Some(5),
bypass_offline: Some(false),
intel_enabled_mac: Some(false),
loader: LoaderOptions {
path: Some("./loader".to_string()),
r#type: None,
build: Some("latest".to_string()),
enable: false,
},
mcp: None,
verify: Some(false),
ignored: vec![],
jvm_args: vec![],
game_args: vec![],
java: JavaOptions {
path: None,
version: None,
r#type: "jre".to_string(),
},
screen: ScreenOptions {
width: None,
height: None,
fullscreen: None,
},
memory: MemoryOptions {
min: Some("2G".to_string()),
max: Some("4G".to_string()),
},
};
let mut launcher = Launch::new();
let mut event_receiver = launcher.subscribe();
let event_handle = tokio::spawn(async move {
while let Ok(event) = event_receiver.recv().await {
match event {
late_java_core::LaunchEvent::Progress { downloaded, total, element } => {
let percentage = if total > 0 { (downloaded * 100) / total } else { 0 };
println!("Progreso: {}% - {}", percentage, element);
}
late_java_core::LaunchEvent::Data(data) => {
println!("Minecraft: {}", data);
}
late_java_core::LaunchEvent::Close(msg) => {
println!("{}", msg);
break;
}
late_java_core::LaunchEvent::Error(err) => {
println!("Error: {}", err);
break;
}
_ => {}
}
}
});
println!("Lanzando Minecraft...");
launcher.launch(options).await?;
event_handle.abort();
println!("¡Ejemplo completado!");
Ok(())
}