private static string GetLibraries_Optifine() { VersionJson versionJson = Global.LaunchConfiguation.MinecraftSetting.VersionJson; VersionJson versionJsonVanilla = JsonStorage.ParseVersionJson($"{Global.LaunchConfiguation.MinecraftSetting.MinecraftSource}\\versions\\{versionJson.inheritsFrom}"); String re = String.Empty; for (int i = 0; i < versionJson.libraries.Count; i++) { String[] split = $"{versionJson.libraries[i].name}".Split(':'); String tempPath = $"{Global.LaunchConfiguation.MinecraftSetting.MinecraftSource}\\libraries\\{split[0].Replace(".", "\\")}\\{split[1]}\\{split[2]}"; Console.WriteLine("==========================TEMP" + tempPath); foreach (String item in Directory.GetFiles(tempPath)) { re += $"{item};"; } } Console.WriteLine(GetClientType(versionJsonVanilla)); String vanilla = String.Empty; switch (GetClientType(versionJsonVanilla)) { case 2: vanilla = GetLibraries_VanillaHigh(); break; case 0: vanilla = GetLibraries_Vanilla(); break; } return(vanilla + re); }
private void OnVersionFileDownloadSuccess(byte[] pBytes) { string json = Encoding.UTF8.GetString(pBytes); VersionJson versionJson = JsonUtility.FromJson <VersionJson>(json); Debug.Log(json); AppVersion newVersion = AppVersion.Create(versionJson.version); #if UNITY_ANDROID AppConst.s_AppUrl = versionJson.aOSAppUrl; AppConst.s_AppUrl = versionJson.aOSResUrl; #else AppConst.s_AppUrl = versionJson.iOSAppUrl; AppConst.s_ResUrl = versionJson.iOSResUrl; #endif if (AppVersion.Bigger(newVersion, AppConst.s_AppVersion)) { //需要版更 Target.ShowAlert(2, OnAppUpdate); } else if (newVersion.d > AppConst.s_AppVersion.d) { //需要热更 Target.ShowAlert(3, OnResUpdate); } else { Target.GetFSM().ChangeState(MainState_LoadDll.Instance); } }
public static void WriteVersionCodes() { Debug.Log("Writing Version Codes"); if (!Directory.Exists("Assets/Resources")) { Directory.CreateDirectory("Assets/Resources"); } var path = "Assets/Resources/VersionCodes.json"; var writer = new StreamWriter(path, false); var json = new VersionJson { android = new VersionPlatform { versionCode = PlayerSettings.Android.bundleVersionCode, versionString = PlayerSettings.bundleVersion }, ios = new VersionPlatform { versionCode = int.Parse(PlayerSettings.iOS.buildNumber), versionString = PlayerSettings.bundleVersion } }; writer.Write(JsonUtility.ToJson(json)); writer.Close(); AssetDatabase.ImportAsset(path); }
private void HandleRequest(object state) { try { var context = (HttpListenerContext)state; context.Response.StatusCode = 200; context.Response.SendChunked = true; int totalTime = 0; if (context.Request.RawUrl == "/ver") { UpgradeHelper helper = new UpgradeHelper(); string baseVersion; string latestVersion; string[] vers; string currentVersion; helper.ShowVersion(out baseVersion, out latestVersion, out vers, out currentVersion); VersionJson json = new VersionJson(); json.baseVersion = baseVersion; json.latestVersion = latestVersion; json.vers = vers; json.currentVersion = currentVersion; string jsonString; jsonString = JsonMapper.ToJson(json); var data = Encoding.UTF8.GetBytes(jsonString); context.Response.OutputStream.Write(data, 0, data.Length); } else if (context.Request.RawUrl == "/upgrade") { UpgradeHelper helper = new UpgradeHelper(); helper.Upgrade(""); var data = Encoding.UTF8.GetBytes("Launched"); context.Response.OutputStream.Write(data, 0, data.Length); } else if (context.Request.RawUrl == "/progress") { string jsonString; jsonString = JsonMapper.ToJson(currentProgress); var data = Encoding.UTF8.GetBytes(jsonString); context.Response.OutputStream.Write(data, 0, data.Length); } context.Response.OutputStream.Close(); } catch (Exception e) { Console.WriteLine(e.Message); // Client disconnected or some other error - ignored for this example } }
void webServer_ProcessRequest(object sender, ProcessRequestEventArgs args) { try { string cmd = args.Request.Path; if (cmd == "/ver") { UpgradeHelper helper = new UpgradeHelper(); string baseVersion; string latestVersion; string[] vers; string currentVersion; helper.ShowVersion(out baseVersion, out latestVersion, out vers, out currentVersion); VersionJson json = new VersionJson(); json.baseVersion = baseVersion; json.latestVersion = latestVersion; json.vers = vers; json.currentVersion = currentVersion; string jsonString; jsonString = JsonMapper.ToJson(json); var data = Encoding.UTF8.GetBytes(jsonString); args.Response.BinaryWrite(data); } else if (cmd == "/upgrade") { Thread thread1 = new Thread(() => { UpgradeHelper helper = new UpgradeHelper(); helper.Upgrade(""); }); thread1.Start(); var data = Encoding.UTF8.GetBytes("Launched"); args.Response.BinaryWrite(data); } else if (cmd == "/progress") { string jsonString; jsonString = JsonMapper.ToJson(currentProgress); var data = Encoding.UTF8.GetBytes(jsonString); args.Response.BinaryWrite(data); } } catch (Exception e) { Console.WriteLine("Http Request Exception:" + e.Message); } }
private static void CheckLoad() { if (_json == null && !_failed) { var res = Resources.Load <TextAsset>("VersionCodes").text; _json = JsonUtility.FromJson <VersionJson>(res); if (_json == null) { _failed = true; } } }
/// <summary> /// 0:Vanilla Low 1:Forge 2:VanillaHigh 3:Optifine /// </summary> /// <param name="versionJson"></param> /// <returns></returns> public static int GetClientType(VersionJson versionJson) { if (Convert.ToInt32(versionJson.id.Split('.')[1]) >= 13 && !versionJson.id.ToLower().Contains("optifine") && !versionJson.id.ToLower().Contains("forge")) { return(2); } else if (versionJson.id.ToLower().Contains("optifine")) { return(3); } else { return(versionJson.id.ToLower().Contains("forge") ? 1 : 0); } }
private static string GetLibraries_VanillaHigh() { VersionJson versionJson = Global.LaunchConfiguation.MinecraftSetting.VersionJson; String re = String.Empty; for (int i = 0; i < versionJson.libraries.Count; i++) { try { re += $"{Global.LaunchConfiguation.MinecraftSetting.MinecraftSource}\\libraries\\{versionJson.libraries[i].downloads.artifact.path};".Replace("/", "\\"); } catch {} } return(re); }
public VersionJson ReadJson(string versionNumber) { if (!File.Exists($"Resources/VersionJSONs/{ versionNumber }.json")) { throw new FileNotFoundException("This version does not yet exist.");; } var json = string.Empty; using (var fs = File.OpenRead($"Resources/VersionJSONs/{ versionNumber }.json")) using (var sr = new StreamReader(fs, new UTF8Encoding(false))) json = sr.ReadToEnd(); VersionJson Json = JsonConvert.DeserializeObject <VersionJson>(json); return(Json); }
void webServer_ProcessRequest(object sender, ProcessRequestEventArgs args) { string cmd = args.Request.Path; if (cmd == "/ver") { UpgradeHelper helper = new UpgradeHelper(); string baseVersion; string latestVersion; string[] vers; string currentVersion; helper.ShowVersion(out baseVersion, out latestVersion, out vers, out currentVersion); VersionJson json = new VersionJson(); json.baseVersion = baseVersion; json.latestVersion = latestVersion; json.vers = vers; json.currentVersion = currentVersion; string jsonString; jsonString = JsonMapper.ToJson(json); var data = Encoding.UTF8.GetBytes(jsonString); args.Response.BinaryWrite(data); } else if (cmd == "/upgrade") { UpgradeHelper helper = new UpgradeHelper(); helper.Upgrade(""); var data = Encoding.UTF8.GetBytes("Launched"); args.Response.BinaryWrite(data); } else if (cmd == "/progress") { string jsonString; jsonString = JsonMapper.ToJson(currentProgress); var data = Encoding.UTF8.GetBytes(jsonString); args.Response.BinaryWrite(data); } }
public static List <LibrariesInfo> GetExistLibraries() { VersionJson versionJson = Global.LaunchConfiguation.MinecraftSetting.VersionJson; List <String> libs = new List <String>(); List <LibrariesInfo> re = new List <LibrariesInfo>(); switch (GetClientType(versionJson)) { case 0: libs = GetLibraries_Vanilla().Split(';').ToList(); break; case 1: libs = GetLibraries_Forge().Split(';').ToList(); break; case 2: libs = GetLibraries_VanillaHigh().Split(';').ToList(); break; case 3: libs = GetLibraries_Optifine().Split(';').ToList(); break; } foreach (var item in libs) { Console.WriteLine(item); if (!File.Exists(item)) { String uriPart = item.Replace($"{Global.LaunchConfiguation.MinecraftSetting.MinecraftSource}\\libraries\\", String.Empty).Replace("\\", "/"); if (String.IsNullOrEmpty(uriPart)) { re.Add(new LibrariesInfo { DownloadUri = $"https://bmclapi2.bangbang93.com/maven/{uriPart}", FileName = item }); } } } return(re); }
public void CreateNewVersionJson(string versionNumber, string versionName) { if (File.Exists($"Resources/VersionJSONs/{ versionNumber }.json")) { throw new Exception("This version already exists."); } var json = new VersionJson { Version = versionNumber, Name = versionName, ReleaseDate = new ReleaseDate { Started = DateTime.Now, Release = DateTime.Now }, PatchNotes = "empty", MinorNotes = "empty" }; SaveJson(json, versionNumber); }
public static async Task <List <AssetsModule> > ParseAssetsAsync() { VersionJson versionName = Global.LaunchConfiguation.MinecraftSetting.VersionJson; String jsonName; VersionJson versionJson; int clientType = GetClientType(Global.LaunchConfiguation.MinecraftSetting.VersionJson); if (clientType == 1 || clientType == 3) { versionJson = JsonStorage.ParseVersionJson(Global.LaunchConfiguation.MinecraftSetting.VersionJson.inheritsFrom); jsonName = $"{Global.LaunchConfiguation.MinecraftSetting.MinecraftSource}\\assets\\indexes\\{versionJson.assetIndex.id}.json"; if (!File.Exists(jsonName)) { await NetTools.DownloadFileAsync(new Uri($"https://bmclapi2.bangbang93.com/v1/packages/{versionJson.assetIndex.sha1}/{versionJson.assetIndex.id}.json"), jsonName); } } else { versionJson = Global.LaunchConfiguation.MinecraftSetting.VersionJson; jsonName = $"{Global.LaunchConfiguation.MinecraftSetting.MinecraftSource}\\assets\\indexes\\{versionName.assetIndex.id}.json"; if (!File.Exists(jsonName)) { await NetTools.DownloadFileAsync(new Uri($"https://bmclapi2.bangbang93.com/v1/packages/{versionJson.assetIndex.sha1}/{versionJson.assetIndex.id}.json"), jsonName); } } String jsonText = File.ReadAllText(jsonName); List <AssetsModule> re = new List <AssetsModule>(); foreach (DictionaryEntry item in AnalayJson(jsonText)) { foreach (DictionaryEntry sub in AnalayJson(item.Value.ToString())) { re.Add(JsonConvert.DeserializeObject <AssetsModule>(sub.Value.ToString())); } } return(re); }
public static string GetLibraries() { VersionJson versionJson = Global.LaunchConfiguation.MinecraftSetting.VersionJson; switch (GetClientType(versionJson)) { case 0: return(GetLibraries_Vanilla()); case 1: return(GetLibraries_Forge()); case 2: return(GetLibraries_VanillaHigh()); case 3: return(GetLibraries_Optifine()); default: return(null); } }
static void GenVersion() { VersionJson version = new VersionJson() { Version = GameConfig.Version }; string outPath = GameConfig.GetAssetBundleOutputPath(); string path = outPath + "/" + GameConfig.GameName.ToLower() + "/version.txt"; if (File.Exists(path)) { File.Delete(path); } string content = JsonUtility.ToJson(version, true); File.WriteAllText(path, content); AssetDatabase.Refresh(); Debug.Log("产生版本文件"); }
public void SaveJson(VersionJson json, string versionNumber) { string jsonString = JsonConvert.SerializeObject(json, Formatting.Indented); File.WriteAllText($"Resources/VersionJSONs/{ versionNumber }.json", jsonString); }
void ThreadFunc() { //listener = new HttpListener(); ////listener.Prefixes.Add("http://+:8081/"); //listener.Prefixes.Add("http://localhost:8081/"); //listener.Prefixes.Add("http://127.0.0.1:8081/"); //listener.Start(); //while (working) //{ // try // { // var context = listener.GetContext(); // ThreadPool.QueueUserWorkItem(o => HandleRequest(context)); // } // catch (Exception) // { // // Ignored for this example // } //} //listener.Close(); //TinyWeb.WebServer webServer = new TinyWeb.WebServer(); //webServer.EndPoint = new IPEndPoint(0, 8081); //webServer.ProcessRequest += new TinyWeb.ProcessRequestEventHandler(this.webServer_ProcessRequest); //webServer.IsStarted = true; using (var server = new NHttp.HttpServer()) { server.RequestReceived += (s, e) => { // The response must be written to e.Response.OutputStream. // When writing text, a StreamWriter can be used. string cmd = e.Request.RawUrl; using (System.IO.BinaryWriter writer = new BinaryWriter(e.Response.OutputStream)) { if (cmd == "/ver") { UpgradeHelper helper = new UpgradeHelper(); string baseVersion; string latestVersion; string[] vers; string currentVersion; helper.ShowVersion(out baseVersion, out latestVersion, out vers, out currentVersion); VersionJson json = new VersionJson(); json.baseVersion = baseVersion; json.latestVersion = latestVersion; json.vers = vers; json.currentVersion = currentVersion; string jsonString; jsonString = JsonMapper.ToJson(json); var data = Encoding.UTF8.GetBytes(jsonString); writer.Write(data, 0, data.Length); } else if (cmd == "/upgrade") { Thread thread1 = new Thread(() => { UpgradeHelper helper = new UpgradeHelper(); helper.Upgrade(""); }); thread1.Start(); var data = Encoding.UTF8.GetBytes("Launched"); writer.Write(data, 0, data.Length); } else if (cmd == "/progress") { string jsonString; jsonString = JsonMapper.ToJson(currentProgress); var data = Encoding.UTF8.GetBytes(jsonString); writer.Write(data, 0, data.Length); } } }; server.EndPoint = new IPEndPoint(IPAddress.Any, 8081); server.Start(); Console.ReadKey(); } }
public string GenerateLaunchArgs() { LaunchConfiguation launchConfiguation = Global.LaunchConfiguation; VersionJson versionJson = Global.LaunchConfiguation.MinecraftSetting.VersionJson;; int ClientType = Libraries.GetClientType(versionJson); String VersionPath = launchConfiguation.MinecraftSetting.MinecraftSource + $"\\versions\\{launchConfiguation.MinecraftSetting.VersionJson.id}"; String VersionName = launchConfiguation.MinecraftSetting.VersionJson.id; String MinecraftSource = launchConfiguation.MinecraftSetting.MinecraftSource; String LauncherArg_NativesPath = VersionPath.Contains("Roaming") ? $"\"{launchConfiguation}\\$natives\"" : $"{VersionPath}\\{VersionName}-natives"; String LauncherArg_JarPath = ClientType == 1 ? $"{MinecraftSource}\\versions\\{versionJson.inheritsFrom}\\{versionJson.inheritsFrom}.jar" : $"{VersionPath}\\{VersionName}.jar"; String LauncherArgs = launchConfiguation.JavaSetting.JvmArgument; LauncherArgs += "-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump "; if (ClientType == 1) { LauncherArgs += $"-Dminecraft.client.jar=\"{MinecraftSource}\\versions\\{versionJson.inheritsFrom}\\{versionJson.inheritsFrom}.jar\" "; } LauncherArgs += $"-Xss1M -Djava.library.path={LauncherArg_NativesPath} "; LauncherArgs += $"-Dminecraft.launcher.brand={launchConfiguation.MinecraftSetting.LauncherName } -Dminecraft.launcher.version=ML.net "; LauncherArgs += $"-Xmx{launchConfiguation.JavaSetting.MaxMemorySize}G -Xmn{launchConfiguation.JavaSetting.MinMemorySize}G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 "; LauncherArgs += $"-XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M "; LauncherArgs += $"-cp \"{Libraries.GetLibraries()}{LauncherArg_JarPath}\" {versionJson.mainClass} "; LauncherArgs += $"--username {Global.AuthConfiguation.PlayerName} "; LauncherArgs += $"--version \"{launchConfiguation.MinecraftSetting.LauncherName}\" "; LauncherArgs += $"--gameDir {launchConfiguation.MinecraftSetting.MinecraftSource} "; LauncherArgs += $"--assetsDir {launchConfiguation.MinecraftSetting.MinecraftSource}\\assets "; LauncherArgs += ClientType == 3 ? $"--assetIndex {versionJson.inheritsFrom.Split('.')[0]}.{versionJson.inheritsFrom.Split('.')[1]} " : $"--assetIndex {versionJson.assets} "; LauncherArgs += $"--uuid {Global.AuthConfiguation.PlayerUUID} "; LauncherArgs += $"--accessToken {Global.AuthConfiguation.PlayerToken} "; LauncherArgs += $"--userType mojang "; if (!String.IsNullOrEmpty(launchConfiguation.MinecraftSetting.AutoConnectServer)) { LauncherArgs += $"--server {launchConfiguation.MinecraftSetting.AutoConnectServer} --port 25565 "; } if (launchConfiguation.MinecraftSetting.WindowWidth != 0 && launchConfiguation.MinecraftSetting.WindowHeight != 0) { LauncherArgs += $"--width {launchConfiguation.MinecraftSetting.WindowWidth} --height {launchConfiguation.MinecraftSetting.WindowHeight} "; } LauncherArgs += "--userProperties {}"; switch (ClientType) { case 1: LauncherArgs += " --tweakClass net.minecraftforge.fml.common.launcher.FMLTweaker"; break; case 3: LauncherArgs += " --tweakClass optifine.OptiFineTweaker"; break; default: break; } return(LauncherArgs); }
void ThreadFunc() { //listener = new HttpListener(); ////listener.Prefixes.Add("http://+:8081/"); //listener.Prefixes.Add("http://localhost:8081/"); //listener.Prefixes.Add("http://127.0.0.1:8081/"); //listener.Start(); //while (working) //{ // try // { // var context = listener.GetContext(); // ThreadPool.QueueUserWorkItem(o => HandleRequest(context)); // } // catch (Exception) // { // // Ignored for this example // } //} //listener.Close(); //TinyWeb.WebServer webServer = new TinyWeb.WebServer(); //webServer.EndPoint = new IPEndPoint(0, 8081); //webServer.ProcessRequest += new TinyWeb.ProcessRequestEventHandler(this.webServer_ProcessRequest); //webServer.IsStarted = true; using (var server = new NHttp.HttpServer()) { server.RequestReceived += (s, e) => { using (System.IO.BinaryWriter writer = new BinaryWriter(e.Response.OutputStream)) { string cmd = e.Request.RawUrl; try { // The response must be written to e.Response.OutputStream. // When writing text, a StreamWriter can be used. if (cmd == "/ver") { UpgradeHelper helper = new UpgradeHelper(); string baseVersion; string latestVersion; string[] vers; string currentVersion; helper.ShowVersion(out baseVersion, out latestVersion, out vers, out currentVersion); VersionJson json = new VersionJson(); json.baseVersion = baseVersion; json.latestVersion = latestVersion; json.vers = vers; json.currentVersion = currentVersion; json.state = "success"; string jsonString; jsonString = JsonMapper.ToJson(json); var data = Encoding.UTF8.GetBytes(jsonString); writer.Write(data, 0, data.Length); } else if (cmd == "/upgrade") { string progressName = "\nu准备升级"; AsyncServer.Instance.SetProgress(progressName, 0); StateJson json = new StateJson(); if (upgrading) { json.state = "already launched"; } else { Thread thread1 = new Thread(() => { upgrading = true; UpgradeHelper helper = new UpgradeHelper(); helper.Upgrade(""); upgrading = false; }); thread1.Start(); json.state = "success"; } string jsonString; jsonString = JsonMapper.ToJson(json); var data = Encoding.UTF8.GetBytes(jsonString); writer.Write(data, 0, data.Length); } else if (cmd == "/progress") { string jsonString; currentProgress.state = "success"; jsonString = JsonMapper.ToJson(currentProgress); var data = Encoding.UTF8.GetBytes(jsonString); writer.Write(data, 0, data.Length); } } catch (Exception ex) { AsyncServer.Instance.SetProgress("Idle", 0); string jsonString = ""; if (cmd == "/ver") { VersionJson json = new VersionJson(); json.state = "net error"; jsonString = JsonMapper.ToJson(json); } else if (cmd == "/upgrade") { StateJson json = new StateJson(); json.state = "net error"; jsonString = JsonMapper.ToJson(json); } else if (cmd == "/progress") { ProgressJson json = new ProgressJson(); json.state = "net error"; jsonString = JsonMapper.ToJson(json); } var data = Encoding.UTF8.GetBytes(jsonString); writer.Write(data, 0, data.Length); Console.WriteLine("Http Request Exception:" + ex.Message); } } }; server.EndPoint = new IPEndPoint(IPAddress.Any, 8081); server.Start(); while (true) { Thread.Sleep(1000); } } }
public Task UpdateMappingDataTask() { return(new Task(() => { RefreshTimer.Stop(); OnUpdate?.Invoke(); JsonTextReader jReader; using (var client = new WebClient()) { var data = Encoding.UTF8.GetString(client.DownloadData(Properties.Settings.Default.VersionJsonUrl)); jReader = new JsonTextReader(new StringReader(data)); } MappingData.Clear(); VersionJson jsonInput = VersionJson.Init; string keyVersion = null; MappingType keyMapType = MappingType.Snapshot; while (jReader.Read()) { var value = jReader.Value; if (jReader.Value != null) { switch (jsonInput) { case VersionJson.MCVersion: MappingData[keyVersion = (string)value] = new Dictionary <MappingType, SortedSet <int> >(); break; case VersionJson.MapType: if (!Enum.TryParse((string)value, true, out keyMapType)) { throw new InvalidDataException("Expected Mapping type."); } break; case VersionJson.Version: if (!MappingData[keyVersion].ContainsKey(keyMapType)) { MappingData[keyVersion][keyMapType] = new SortedSet <int>(); } MappingData[keyVersion][keyMapType].Add((int)(long)value); break; default: break; } } else { if (jReader.TokenType == JsonToken.StartObject) { jsonInput += 1; } else if (jReader.TokenType == JsonToken.StartArray) { jsonInput += 1; } else if (jReader.TokenType == JsonToken.EndObject) { jsonInput -= 1; } else if (jReader.TokenType == JsonToken.EndArray) { jsonInput -= 1; } } } Dispatcher.Invoke(() => { var versions = new List <string>(MappingData.Keys); versions.Sort(MCVersionComparer.Comparer); versions.Reverse(); versions.Insert(0, "Semi-Live"); versions.Add("Custom"); MCVersionDropDown.ItemsSource = versions; }); RefreshTimer.Start(); OnUpdateFinished?.Invoke(); IsUpdating = false; })); }