private void Application_Startup(object sender, StartupEventArgs e) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11; Process[] myProcesses = Process.GetProcessesByName("NsisoLauncher");//获取指定的进程名 bool self = false; foreach (var item in myProcesses) { if (item.MainModule.FileName == AppDomain.CurrentDomain.BaseDirectory + AppDomain.CurrentDomain.FriendlyName) { if (self == false) { self = true; } else { SetForegroundWindow(item.MainWindowHandle); Shutdown(); } } } LogHandler = new LogHandler(true); Config = new ConfigHandler(); EnvironmentObj env = Config.MainConfig.Environment; JavaList = Java.GetJavaList(); AggregateExceptionCatched += (a, b) => LogHandler.AppendFatal(b.AggregateException); if (Config.MainConfig.Launcher.Debug || e.Args.Contains("-debug")) { DebugWindow debugWindow = new DebugWindow(); debugWindow.Show(); LogHandler.OnLog += (s, log) => debugWindow?.AppendLog(s, log); } nsisoAPIHandler = new APIHandler(Config.MainConfig.Launcher.NoTracking); //设置版本路径 string gameroot = null; switch (env.GamePathType) { case GameDirEnum.ROOT: gameroot = Path.GetFullPath(".minecraft"); break; case GameDirEnum.APPDATA: gameroot = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\.minecraft"; break; case GameDirEnum.PROGRAMFILES: gameroot = System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\.minecraft"; break; case GameDirEnum.CUSTOM: gameroot = env.GamePath + "\\.minecraft"; break; default: throw new ArgumentException("判断游戏目录类型时出现异常,请检查配置文件中GamePathType节点"); } LogHandler.AppendInfo("核心初始化->游戏根目录(默认则为空):" + gameroot); //设置JAVA Java java; if (env.AutoJava) { java = Java.GetSuitableJava(JavaList); } else { java = JavaList.Find(x => x.Path == env.JavaPath); if (java == null) { java = Java.GetJavaInfo(env.JavaPath); } } if (java != null) { env.JavaPath = java.Path; LogHandler.AppendInfo("核心初始化->Java路径:" + java.Path); LogHandler.AppendInfo("核心初始化->Java版本:" + java.Version); LogHandler.AppendInfo("核心初始化->Java位数:" + java.Arch); } else { LogHandler.AppendWarn("核心初始化失败,当前电脑未匹配到JAVA"); } bool verIso = Config.MainConfig.Environment.VersionIsolation; Handler = new LaunchHandler(gameroot, java, verIso); Handler.GameLog += (s, log) => LogHandler.AppendLog(s, new Log() { LogLevel = LogLevel.GAME, Message = log }); Handler.LaunchLog += (s, log) => LogHandler.AppendLog(s, log); ServicePointManager.DefaultConnectionLimit = 10; Downloader = new MultiThreadDownloader(); ProxyRe(); Downloader.ProcessorSize = Config.MainConfig.Download.DownloadThreadsSize; Downloader.CheckFileHash = Config.MainConfig.Download.CheckDownloadFileHash; Downloader.DownloadLog += (s, log) => LogHandler?.AppendLog(s, log); var custom = Config.MainConfig.Customize; if (!string.IsNullOrWhiteSpace(custom.AppThme)) { LogHandler.AppendInfo("自定义->更改主题:" + custom.AppThme); ThemeManager.Current.ChangeTheme(Current, custom.AppThme); } Lauguage(); }
//保存按钮点击后 private async void saveButton_Click(object sender, RoutedEventArgs e) { switch (App.Config.MainConfig.Environment.GamePathType) { case GameDirEnum.ROOT: App.Handler.GameRootPath = Path.GetFullPath(".minecraft"); break; case GameDirEnum.APPDATA: App.Handler.GameRootPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\.minecraft"; break; case GameDirEnum.PROGRAMFILES: App.Handler.GameRootPath = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\.minecraft"; break; case GameDirEnum.CUSTOM: App.Handler.GameRootPath = App.Config.MainConfig.Environment.GamePath + "\\.minecraft"; break; default: throw new ArgumentException(App.GetResourceString("String.Settingwindow.Message.GamePathType.Error")); } App.Handler.VersionIsolation = App.Config.MainConfig.Environment.VersionIsolation; App.Downloader.CheckFileHash = App.Config.MainConfig.Download.CheckDownloadFileHash; if (_isGameSettingChanged) { if (App.Config.MainConfig.Environment.VersionIsolation) { await GameHelper.SaveOptionsAsync(VersionOption.Type.options, versionOptionsGrid.ItemsSource as List <VersionOption>, App.Handler, VersionsComboBox.SelectedItem as MCVersion); await GameHelper.SaveOptionsAsync(VersionOption.Type.optionsof, versionOptionsofGrid.ItemsSource as List <VersionOption>, App.Handler, VersionsComboBox.SelectedItem as MCVersion); } else { await GameHelper.SaveOptionsAsync(VersionOption.Type.options, versionOptionsGrid.ItemsSource as List <VersionOption>, App.Handler, new() { ID = "null" }); await GameHelper.SaveOptionsAsync(VersionOption.Type.optionsof, versionOptionsofGrid.ItemsSource as List <VersionOption>, App.Handler, new() { ID = "null" }); } } App.Config.Save(); App.ProxyRe(); saveButton.Content = App.GetResourceString("String.Settingwindow.Saving"); EnvironmentObj env = App.Config.MainConfig.Environment; Java java = null; if (env.AutoJava) { java = Java.GetSuitableJava(App.JavaList); } else { java = App.JavaList.Find(x => x.Path == env.JavaPath); if (java == null) { java = Java.GetJavaInfo(env.JavaPath); } } if (java != null) { App.Handler.Java = java; Close(); } else { await this.ShowMessageAsync(App.GetResourceString("String.Settingwindow.SaveError"), App.GetResourceString("String.Settingwindow.JavaError")); } }
// Start is called before the first frame update void Start() { currLoaded = new List <GameObject>(); EnvironmentObj.SetEnvObjs(envObjs); LoadEnvironment(); }