use lighty_launcher::prelude::*;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
const QUALIFIER: &str = "com";
const ORGANIZATION: &str = "MyLauncher";
const APPLICATION: &str = "";
let _app = AppState::new(
QUALIFIER.to_string(),
ORGANIZATION.to_string(),
APPLICATION.to_string(),
)?;
let launcher_dir = AppState::get_project_dirs();
// Create event bus
let event_bus = EventBus::new(1000);
let mut receiver = event_bus.subscribe();
// Spawn listener
tokio::spawn(async move {
while let Ok(event) = receiver.next().await {
if let Event::Loader(loader_event) = event {
match loader_event {
LoaderEvent::FetchingData { loader, minecraft_version, loader_version } => {
println!("🔄 Fetching {} for MC {} (version: {})",
loader, minecraft_version, loader_version);
}
LoaderEvent::DataFetched { loader, .. } => {
println!("✅ {} data fetched", loader);
}
LoaderEvent::ManifestNotFound { error, .. } => {
println!("❌ Not found: {}", error);
}
LoaderEvent::ManifestCached { loader } => {
println!("💾 Using cached {} manifest", loader);
}
LoaderEvent::MergingLoaderData { base_loader, overlay_loader } => {
println!("🔀 Merging {} + {}", overlay_loader, base_loader);
}
LoaderEvent::DataMerged { overlay_loader, .. } => {
println!("✅ {} merge complete", overlay_loader);
}
}
}
}
});
// Create instance (will emit events)
let instance = VersionBuilder::new("fabric-1.21", Loader::Fabric, "0.16.9", "1.21.1", launcher_dir);
// This will trigger LoaderEvent emissions
let _metadata = instance.get_metadata().await?;
tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;
Ok(())
}