public MSession GetLocalToken() { MSession session; if (!File.Exists(TokenFile)) // no session data { var ClientToken = Guid.NewGuid().ToString().Replace("-", ""); // create new clienttoken session = MSession.createEmpty(); session.ClientToken = ClientToken; WriteLogin(session); } else // exists session data { var filedata = File.ReadAllText(TokenFile, Encoding.UTF8); try { var job = JObject.Parse(filedata); session = new MSession(); session.AccessToken = job["session"]?.ToString(); session.UUID = job["uuid"]?.ToString(); session.Username = job["username"]?.ToString(); session.ClientToken = job["clientToken"]?.ToString(); } catch (Newtonsoft.Json.JsonReaderException) // if JSON file isn't vaild { DeleteTokenFile(); session = GetLocalToken(); } } return(session); }
internal static MSession createEmpty() { var session = new MSession(); session.Username = ""; session.AccessToken = ""; session.UUID = ""; session.ClientToken = ""; return(session); }
public static MSession GetOfflineSession(string username) { var login = new MSession(); login.Username = username; login.AccessToken = "access_token"; login.UUID = "user_uuid"; login.Result = MLoginResult.Success; login.Message = ""; login.ClientToken = ""; return(login); }
internal void CheckValid() { string exMsg = null; // error message if (Path == null) { exMsg = nameof(Path) + " is null"; } if (MaximumRamMb < 1) { exMsg = "MaximumRamMb is too small."; } if (StartVersion == null) { exMsg = "StartVersion is null"; } if (Session == null) { Session = MSession.GetOfflineSession("tester123"); } if (!Session.CheckIsValid()) { exMsg = "Invalid Session"; } if (ServerPort < 0 || ServerPort > 65535) { exMsg = "Invalid ServerPort"; } if (ScreenWidth < 0 || ScreenHeight < 0) { exMsg = "Screen Size must be greater than or equal to zero."; } if (exMsg != null) // if launch option is invalid, throw exception { throw new ArgumentException(exMsg); } }
public MSession Refresh() { var result = new MSession(); try { var session = GetLocalToken(); var req = new JObject { { "accessToken", session.AccessToken }, { "clientToken", session.ClientToken }, { "selectedProfile", new JObject() { { "id", session.UUID }, { "name", session.Username } } } }; var resHeader = mojangRequest("refresh", req.ToString()); using (var res = new StreamReader(resHeader.GetResponseStream())) { var response = res.ReadToEnd(); result._RawResponse = response; JObject job = JObject.Parse(response); result.AccessToken = job["accessToken"]?.ToString(); result.UUID = job["selectedProfile"]?["id"]?.ToString(); result.Username = job["selectedProfile"]?["name"]?.ToString(); result.ClientToken = session.ClientToken; WriteLogin(result); result.Result = MLoginResult.Success; } } catch { result.Result = MLoginResult.UnknownError; } return(result); }
public MSession Validate() { var result = new MSession(); try { var session = GetLocalToken(); JObject job = new JObject { { "accessToken", session.AccessToken }, { "clientToken", session.ClientToken } }; var resHeader = mojangRequest("validate", job.ToString()); using (var res = new StreamReader(resHeader.GetResponseStream())) { if (resHeader.StatusCode == HttpStatusCode.NoContent) // StatusCode == 204 { result.Result = MLoginResult.Success; result.AccessToken = session.AccessToken; result.UUID = session.UUID; result.Username = session.Username; result.ClientToken = session.ClientToken; } else { result.Result = MLoginResult.NeedLogin; } } } catch { result.Result = MLoginResult.UnknownError; } return(result); }
public string[] CreateArg() { MVersion version = LaunchOption.GetStartVersion(); var args = new List <string>(); // Common JVM Arguments if (LaunchOption.JVMArguments != null) { args.AddRange(LaunchOption.JVMArguments); } else { args.AddRange(DefaultJavaParameter); if (LaunchOption.MaximumRamMb > 0) { args.Add("-Xmx" + LaunchOption.MaximumRamMb + "m"); } if (LaunchOption.MinimumRamMb > 0) { args.Add("-Xms" + LaunchOption.MinimumRamMb + "m"); } } if (!string.IsNullOrEmpty(LaunchOption.DockName)) { args.Add("-Xdock:name=" + handleEmpty(LaunchOption.DockName)); } if (!string.IsNullOrEmpty(LaunchOption.DockIcon)) { args.Add("-Xdock:icon=" + handleEmpty(LaunchOption.DockIcon)); } // Version-specific JVM Arguments var classpath = new List <string>(version.Libraries?.Length ?? 1); if (version.Libraries != null) { var libraries = version.Libraries .Where(lib => lib.IsRequire && !lib.IsNative && !string.IsNullOrEmpty(lib.Path)) .Select(lib => Path.GetFullPath(Path.Combine(minecraftPath.Library, lib.Path !))); classpath.AddRange(libraries); } if (!string.IsNullOrEmpty(version.Jar)) { classpath.Add(minecraftPath.GetVersionJarPath(version.Jar)); } var classpathStr = IOUtil.CombinePath(classpath.ToArray()); var native = new MNative(minecraftPath, version); native.CleanNatives(); var nativePath = native.ExtractNatives(); var jvmdict = new Dictionary <string, string?> { { "natives_directory", nativePath }, { "launcher_name", useNotNull(LaunchOption.GameLauncherName, "minecraft-launcher") }, { "launcher_version", useNotNull(LaunchOption.GameLauncherVersion, "2") }, { "classpath", classpathStr } }; if (version.JvmArguments != null) { args.AddRange(Mapper.MapInterpolation(version.JvmArguments, jvmdict)); } else { args.Add("-Djava.library.path=" + handleEmpty(nativePath)); args.Add("-cp " + classpathStr); } if (!string.IsNullOrEmpty(version.MainClass)) { args.Add(version.MainClass); } // Game Arguments MSession session = LaunchOption.GetSession(); var gameDict = new Dictionary <string, string?> { { "auth_player_name", session.Username }, { "version_name", version.Id }, { "game_directory", minecraftPath.BasePath }, { "assets_root", minecraftPath.Assets }, { "assets_index_name", version.AssetId ?? "legacy" }, { "auth_uuid", session.UUID }, { "auth_access_token", session.AccessToken }, { "user_properties", "{}" }, { "user_type", "Mojang" }, { "game_assets", minecraftPath.GetAssetLegacyPath(version.AssetId ?? "legacy") }, { "auth_session", session.AccessToken }, { "version_type", useNotNull(LaunchOption.VersionType, version.TypeStr) } }; if (version.GameArguments != null) { args.AddRange(Mapper.MapInterpolation(version.GameArguments, gameDict)); } else if (!string.IsNullOrEmpty(version.MinecraftArguments)) { args.AddRange(Mapper.MapInterpolation(version.MinecraftArguments.Split(' '), gameDict)); } // Options if (!string.IsNullOrEmpty(LaunchOption.ServerIp)) { args.Add("--server " + handleEmpty(LaunchOption.ServerIp)); if (LaunchOption.ServerPort != DefaultServerPort) { args.Add("--port " + LaunchOption.ServerPort); } } if (LaunchOption.ScreenWidth > 0 && LaunchOption.ScreenHeight > 0) { args.Add("--width " + LaunchOption.ScreenWidth); args.Add("--height " + LaunchOption.ScreenHeight); } if (LaunchOption.FullScreen) { args.Add("--fullscreen"); } return(args.ToArray()); }
private void WriteLogin(MSession result) { WriteLogin(result.Username, result.AccessToken, result.UUID, result.ClientToken); }
public MSession Authenticate(string id, string pw) { MSession result = new MSession(); string ClientToken = GetLocalToken().ClientToken; var job = new JObject { { "username", id }, { "password", pw }, { "clientToken", ClientToken }, { "agent", new JObject { { "name", "Minecraft" }, { "version", 1 } } } }; var resHeader = mojangRequest("authenticate", job.ToString()); using (var res = new StreamReader(resHeader.GetResponseStream())) { var Response = res.ReadToEnd(); result.ClientToken = ClientToken; if (resHeader.StatusCode == HttpStatusCode.OK) // ResultCode == 200 { var jObj = JObject.Parse(Response); //json parse result.AccessToken = jObj["accessToken"].ToString(); result.UUID = jObj["selectedProfile"]["id"].ToString(); result.Username = jObj["selectedProfile"]["name"].ToString(); WriteLogin(result); result.Result = MLoginResult.Success; } else // fail to login { var json = JObject.Parse(Response); var error = json["error"]?.ToString(); // error type result._RawResponse = Response; result.Message = json["message"]?.ToString() ?? ""; // detail error message switch (error) { case "Method Not Allowed": case "Not Found": case "Unsupported Media Type": result.Result = MLoginResult.BadRequest; break; case "IllegalArgumentException": case "ForbiddenOperationException": result.Result = MLoginResult.WrongAccount; break; default: result.Result = MLoginResult.UnknownError; break; } } return(result); } }