public static MCSetting GetSetting() { if (Setting == null) { Setting = new MCSetting(); } return(Setting); }
public void Start() { if (IsReady()) { var setting = MCSetting.GetSetting(); Process p = new Process(); var args = ""; JObject JSON; var JSONPath = mc.Ver.Path + $@"\{mc.Ver.Name}.json"; var natives = $@"{mc.Ver.Path}\{mc.Ver.Name}-natives"; var gamePath = $@"{AppDomain.CurrentDomain.BaseDirectory}\.minecraft"; using (System.IO.FileStream fs = new System.IO.FileStream(JSONPath, System.IO.FileMode.Open)) { System.IO.StreamReader sr = new System.IO.StreamReader(fs, Encoding.UTF8); JSON = JObject.Parse(sr.ReadToEnd()); sr.Close(); } List <string> TrueLibs = new List <string>(); if (JSON == null) { throw new ApplicationException("无法读取指定版本的JSON文件"); } TrueLibs.AddRange(GetLib(JSONPath)); //填充参数 if (JSON["inheritsFrom"] != null) { var inher = JSON["inheritsFrom"].ToString(); var qu = from c in MCSetting.AllVer where c.Name == inher select c; if (qu.Count() == 0) { throw new System.IO.FileNotFoundException("找不到指定的版本继承"); } else { try { TrueLibs.AddRange(GetLib(qu.First().Path + $@"\{qu.First().Name}.json")); TrueLibs.Add($@"{qu.First().Path}\{qu.First().Name}.jar"); } catch { throw; } } } else { TrueLibs.Add($@"{gamePath}\versions\{mc.Ver.Name}\{mc.Ver.Name}.jar"); } if (!System.IO.Directory.Exists(natives)) { throw new System.IO.DirectoryNotFoundException("该版本的natives目录不存在"); } args = $"-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heap.dump -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Xmn128m -Xmx{setting.MaxRam}m -Djava.library.path={natives} -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true -Dhellominecraftlauncher.gamedir={gamePath}"; args = args + " -cp "; foreach (var tl in TrueLibs) { args = args + tl + ";"; } args = args + " "; args = args + JSON["mainClass"].ToString() + " "; args = args + JSON["minecraftArguments"].ToString() + " --height 480 --width 854"; args = args.Replace("${auth_player_name}", mc.Name); args = args.Replace("${version_name}", $"\"BasicStart\""); args = args.Replace("${game_directory}", $"{gamePath}"); args = args.Replace("${assets_root}", $@"{gamePath}\assets "); args = args.Replace("${assets_index_name}", JSON["assets"].ToString()); var Random = getRandStringEx(32).ToLower(); args = args.Replace("${auth_uuid}", Random); args = args.Replace("${auth_access_token}", Random); args = args.Replace("${user_properties}", "{}"); args = args.Replace("${user_type}", "Legacy"); args = args.Replace(@"\\", @"\"); ProcessStartInfo psi = new ProcessStartInfo(setting.JavaPath, args); p.StartInfo = psi; p.Start(); } else { throw new ApplicationException("发生了一个未知的错误,无法启动游戏."); } }
public bool IsReady() { if (mc.ver == null) { return(false); } if (!string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Ver.Name) && !string.IsNullOrEmpty(MCSetting.GetSetting().JavaPath)) { if (System.IO.Directory.Exists(Ver.Path)) { return(true); } } return(false); }