public static void Initialize() { CoreMCL = new OneMCL(@".\.minecraft"); Option = new LaunchOptionBase("one-minecraft-launcher"); Config.LoadFromFile(); VersionsList = new ObservableCollection <KMCCC.Launcher.Version>(); RefreshVersionsList(CoreMCL.Core.GetVersions()); AccountTypes.Mojang.Text = "Mojang账号(正版登陆)"; AccountTypes.Offline.Text = "离线模式"; DownloadSourcesList = new List <IDownloadSource>(); var tmp = new OriginalSource(); DownloadSourcesList.Add(tmp); DownloadSourcesList.Add(new BMCLApiSource()); DownloadSource = tmp; foreach (IDownloadSource source in DownloadSourcesList) { if (Equals(source.SourceID, Config.INSTANCE.DownloadSourceId)) { DownloadSource = source; } } }
//Demo public static void Main(string[] args) { OneMCL mcl = new OneMCL("E:/BestOwl/Desktop/LauncherTest"); mcl.UserAuthenticator = new OfflineAuthenticator("MicroOwl"); LaunchOptionBase message = new LaunchOptionBase("demo") { gameDir = "E:\\BestOwl\\Desktop\\LauncherTest_GameDir", versionId = "1.12.2", javaExt = "C:\\Program Files\\Java\\jre-9.0.4\\bin\\javaw.exe" }; LaunchResult result = mcl.Launch(message); }
public LaunchResult Launch(LaunchOptionBase launchOption, params Action <MinecraftLaunchArguments>[] argumentsOperators) { if (UserAuthenticator == null) { FailedResult.ErrorType = ErrorType.AuthenticationFailed; FailedResult.ErrorMessage = "User authenticator no set"; Console.WriteLine("ERROR: User authenticator no set"); return(FailedResult); } if (launchOption == null) { Console.WriteLine("ERROR: Launch message is null"); FailedResult.ErrorMessage = "Launch message is null"; return(FailedResult); } Core.JavaPath = launchOption.javaExt; //LaunchOptions in KMCCC, different with LaunchOption in OneMCL.Core LaunchOptions options = new LaunchOptions() { Version = Core.GetVersion(launchOption.versionId), Authenticator = UserAuthenticator, GameDirPath = string.IsNullOrEmpty(launchOption.gameDir) ? Core.GameRootPath : launchOption.gameDir, }; Console.WriteLine("Launching..."); int argsCount = 0; if (argumentsOperators != null) { argsCount = argumentsOperators.Length; } Action <MinecraftLaunchArguments>[] argsOpt = new Action <MinecraftLaunchArguments> [argsCount + 1]; argsOpt[0] = (Action <MinecraftLaunchArguments>)(args => { args.AdvencedArguments.Add(launchOption.javaArgs); System.Version osVersion = Environment.OSVersion.Version; args.AdvencedArguments.Add("-Dos.name=\"" + GetSystemVersionName(osVersion.Major, osVersion.Minor) + "\""); args.AdvencedArguments.Add("-Dos.version=" + osVersion.Major + "." + osVersion.Minor); args.AdvencedArguments.Add("-Dminecraft.launcher.brand=one-minecraft-launcher"); //args.AdvencedArguments.Add("-Dminecraft.launcher.version="); args.AdvencedArguments.Add("-Dminecraft.client.jar=" + Core.GetVersionJarPath(options.Version)); //args.AdvencedArguments.Add("-Dlog4j.configurationFile="); }); argumentsOperators?.CopyTo(argsOpt, 1); return(Core.Launch(options, argsOpt)); }
public override ValueSet OnRequest(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) { string auth_type = args.Request.Message["auth_type"].ToString(); string auth_username = args.Request.Message["auth_username"].ToString(); Logger.Info("User type: " + auth_type); Logger.Info("Username: "******"offline": Program.Launcher.UserAuthenticator = new OfflineAuthenticator(auth_username); break; //case "mojang": } if (Program.Launcher.UserAuthenticator == null) { Logger.Error("User authenticator no set or passed a wrong auth massage"); return(null); } string json = args.Request.Message["launch_option"].ToString(); Logger.Info("LaunchOption: " + json); Logger.Info("Deserializing launch option"); LaunchOptionBase launchOption = null; ValueSet ret = new ValueSet(); ret["result"] = false; try { launchOption = JsonConvert.DeserializeObject <LaunchOptionBase>(json); } catch (JsonException e) { ret["errorMessage"] = e.Message; ret["errorStack"] = e.StackTrace; Logger.Error("ERROR: " + e.Message); Logger.Error(" " + e.StackTrace); } if (launchOption != null) { Logger.Info("Ready to launch"); LaunchResult launchResult = Program.Launcher.Launch(launchOption); if (launchResult.Success) { ret["result"] = true; Logger.Info("Launch successfully"); } else { ret["errorMessage"] = launchResult.ErrorMessage; ret["errorStack"] = launchResult.Exception?.StackTrace; Logger.Warn("Launch failed: " + launchResult.ErrorMessage); } } Logger.Info("Sending launch result to app"); return(ret); }
private async Task Launch(LaunchOption option) { //Check connection to launch agent if (AppServiceManager.appServiceConnection == null) { return; } List <MinecraftAssembly> missingLibs = null; //include missing natives List <MinecraftAsset> missingAssets = new List <MinecraftAsset>(); #region Libraries and natives check ValueSet valueSet = new ValueSet(); valueSet["type"] = "librariesCheck"; valueSet["version"] = option.versionId; AppServiceResponse response = await AppServiceManager.appServiceConnection.SendMessageAsync(valueSet); string responseJson = response.Message["value"].ToString(); try { missingLibs = JsonConvert.DeserializeObject <List <MinecraftAssembly> >(responseJson); } catch (JsonException) { } #endregion #region Assets check valueSet = new ValueSet(); valueSet["type"] = "assetsCheck"; valueSet["version"] = option.versionId; response = await AppServiceManager.appServiceConnection.SendMessageAsync(valueSet); object obj = null; response.Message.TryGetValue("index_path", out obj); // Asset index dose not exist or invalid if (obj != null) { string path = obj.ToString(); string url = response.Message["index_url"].ToString(); try { using (HttpClient client = new HttpClient()) { string json = await client.GetStringAsync(url); StorageFile file = await CoreManager.WorkDir.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting); await FileIO.WriteTextAsync(file, json); } } catch (Exception e) { await _msgDialog.Show( CoreManager.GetStringFromResource("/StartPage/LaunchFailed"), "Cannot fetch asset index \r\n " + e.Message + "\r\n" + e.StackTrace ); return; } //Check again after asset index downloaded response = await AppServiceManager.appServiceConnection.SendMessageAsync(valueSet); obj = null; response.Message.TryGetValue("index_path", out obj); if (obj != null) { await _msgDialog.Show( CoreManager.GetStringFromResource("/StartPage/LaunchFailed"), "Asset index validation failed"); return; } } responseJson = response.Message["missing_assets"].ToString(); try { missingAssets = JsonConvert.DeserializeObject <List <MinecraftAsset> >(responseJson); } catch (JsonException) { } #endregion //Found missing libs, go to download. if ((missingLibs != null && missingLibs.Count > 0) || (missingAssets != null && missingAssets.Count > 0)) { missingLibs.ForEach(lib => { DownloadItem item = new DownloadItem(lib.Name, lib.Path, lib.Url); DownloadManager.DownloadQuene.Add(item); }); missingAssets.ForEach(ass => { DownloadItem item = new DownloadItem( string.Format("{0}: {1}", CoreManager.GetStringFromResource("/Resources/Asset"), ass.Hash), ass.GetPath(), ass.GetDownloadUrl() ); DownloadManager.DownloadQuene.Add(item); }); DownloadManager.StartDownload(); await DownloadDialog.ShowAsync(); return; } DebugWriteLine("Serializing launch message to json"); string messageJson; try { LaunchOptionBase tmp = option as LaunchOptionBase; if (string.IsNullOrWhiteSpace(option.javaExt)) { tmp.javaExt = CoreManager.GlobalJVMPath; } messageJson = JsonConvert.SerializeObject(tmp); } catch (JsonSerializationException exp) { DebugWriteLine("ERROR: " + exp.Message); return; } DebugWriteLine(messageJson); //Check if the launch message was successfully generated if (!string.IsNullOrWhiteSpace(messageJson)) { valueSet = new ValueSet(); valueSet.Add("type", "launch"); valueSet.Add("launch_option", messageJson); valueSet.Add("auth_type", CoreManager.AccountTypeTag); valueSet.Add("auth_username", CoreManager.Username); response = await AppServiceManager.appServiceConnection.SendMessageAsync(valueSet); //Display error obj = response.Message["result"]; if (obj is bool && !((bool)obj)) { await _msgDialog.Show( CoreManager.GetStringFromResource("/StartPage/LaunchFailed"), response.Message["errorMessage"].ToString() + "\r\n" + response.Message["errorStack"] ); } } }
public LaunchResult Launch(LaunchOptionBase options) { return(Launch(options, null)); }