public override bool Operate(LauncherCore core, MinecraftLaunchArguments args)
 {
     core.CopyVersionDirectory("mods", args.Version.Id);
     core.CopyVersionDirectory("coremods", args.Version.Id);
     core.CopyVersionDirectories(core.GetVersionRootPath(args.Version));
     return(true);
 }
 internal LaunchResult LaunchInternal(LaunchOptions options, params Action <MinecraftLaunchArguments>[] argumentsOperators)
 {
     lock (Locker)
     {
         if (!File.Exists(JavaPath))
         {
             return(new LaunchResult {
                 Success = false, ErrorType = ErrorType.NoJAVA, ErrorMessage = "指定的JAVA位置不存在"
             });
         }
         CurrentCode = Random.Next();
         var args   = new MinecraftLaunchArguments();
         var result = GenerateArguments(options, ref args);
         if (result != null)
         {
             return(result);
         }
         if (argumentsOperators == null)
         {
             return(LaunchGame(args));
         }
         foreach (var opt in argumentsOperators)
         {
             try
             {
                 if (opt != null)
                 {
                     opt(args);
                 }
             }
             catch (Exception exp)
             {
                 return(new LaunchResult {
                     Success = false, ErrorType = ErrorType.OperatorException, ErrorMessage = "指定的操作器引发了异常", Exception = exp
                 });
             }
         }
         return(LaunchGame(args));
     }
 }
        private LaunchResult GenerateArguments(LaunchOptions options, ref MinecraftLaunchArguments args)
        {
            try
            {
                var authentication = options.Authenticator.Do();
                if (!string.IsNullOrWhiteSpace(authentication.Error))
                {
                    return new LaunchResult
                           {
                               Success      = false,
                               ErrorType    = ErrorType.AuthenticationFailed,
                               ErrorMessage = "验证错误: " + authentication.Error
                           }
                }
                ;
                args.CGCEnabled = true;
                args.MainClass  = options.Version.MainClass;
                args.MaxMemory  = options.MaxMemory;
                args.MinMemory  = options.MinMemory;
                args.NativePath = GameRootPath + @"\$natives";
                foreach (var native in options.Version.Natives)
                {
                    var exp = ZipTools.UnzipFile(this.GetNativePath(native), args.NativePath, native.Options);

                    if (exp == null)
                    {
                        continue;
                    }
                    return(new LaunchResult
                    {
                        Success = false,
                        ErrorType = ErrorType.UncompressingFailed,
                        ErrorMessage = string.Format("解压错误: {0}:{1}:{2}", native.NS, native.Name, native.Version),
                        Exception = exp
                    });
                }
                args.Server    = options.Server;
                args.Size      = options.Size;
                args.Libraries = options.Version.Libraries.Select(this.GetLibPath).ToList();
                args.Libraries.Add(this.GetVersionJarPath(options.Version.JarId));
                args.MinecraftArguments = options.Version.MinecraftArguments;

                args.Tokens.Add("auth_access_token", authentication.AccessToken.GoString());
                args.Tokens.Add("auth_session", authentication.AccessToken.GoString());
                args.Tokens.Add("auth_player_name", authentication.DisplayName);
                args.Tokens.Add("version_name", options.Version.Id);
                args.Tokens.Add("game_directory", ".");
                args.Tokens.Add("game_assets", "assets");
                args.Tokens.Add("assets_root", "assets");
                args.Tokens.Add("assets_index_name", options.Version.Assets);
                args.Tokens.Add("auth_uuid", authentication.UUID.GoString());
                args.Tokens.Add("user_properties", authentication.Properties);
                args.Tokens.Add("user_type", authentication.UserType);

                args.AdvencedArguments = new List <string> {
                    "-Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true"
                };

                args.Authentication = authentication;
                args.Version        = options.Version;
                if (options.Mode != null)
                {
                    options.Mode.Operate(this, args);
                }
                return(null);
            }
            catch (Exception exp)
            {
                return(new LaunchResult {
                    Success = false, ErrorType = ErrorType.Unknown, ErrorMessage = "在生成参数时发生了意外的错误", Exception = exp
                });
            }
        }
 public override bool Operate(LauncherCore core, MinecraftLaunchArguments args)
 {
     return(_operatorMethod.Invoke(core, args));
 }
 public override bool Operate(LauncherCore core, MinecraftLaunchArguments args)
 {
     args.Tokens["game_directory"] = String.Format(@".\versions\{0}\", args.Version.Id);
     return(true);
 }
 /// <summary>
 ///     启动模式
 /// </summary>
 /// <returns>模式是否应用成功</returns>
 public abstract bool Operate(LauncherCore core, MinecraftLaunchArguments args);