Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        //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);
        }
Пример #3
0
        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);
        }
Пример #5
0
        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"]
                        );
                }
            }
        }
Пример #6
0
 public LaunchResult Launch(LaunchOptionBase options)
 {
     return(Launch(options, null));
 }