@@ -128,6 +128,10 @@ Public Module ModLaunch
|
||||
Loaders.Insert(3, New LoaderTask(Of Integer, Integer)("内存优化", AddressOf McLaunchMemoryOptimize) With {.ProgressWeight = 30})
|
||||
Case 2 '关闭
|
||||
End Select
|
||||
'显示设置
|
||||
If Setup.Get("LaunchGraphicSetup") Then
|
||||
Loaders.Insert(3, New LoaderTask(Of Integer, Integer)("检查显示设置", AddressOf McLaunchCheckGraphicSettings) With {.ProgressWeight = 2})
|
||||
End If
|
||||
Dim LaunchLoader As New LoaderCombo(Of Object)("Minecraft 启动", Loaders) With {.Show = False}
|
||||
If McLoginLoader.State = LoadState.Finished Then McLoginLoader.State = LoadState.Waiting '要求重启登录主加载器,它会自行决定是否启动副加载器
|
||||
'等待加载器执行并更新 UI
|
||||
@@ -203,6 +207,48 @@ NextInner:
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "显示设置"
|
||||
|
||||
Private Sub McLaunchCheckGraphicSettings(Loader As LoaderTask(Of Integer, Integer))
|
||||
Const GPU_KEY As String = "Software\Microsoft\DirectX\UserGpuPreferences"
|
||||
Const TARGET_SETUP As String = "GpuPreference=2;"
|
||||
Dim javaPath As String = McLaunchJavaSelected.PathJavaw
|
||||
|
||||
McLaunchLog("显示设置开始")
|
||||
'读取现行设置
|
||||
Try
|
||||
Dim parentKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser
|
||||
Dim regKey As Microsoft.Win32.RegistryKey = parentKey.OpenSubKey(GPU_KEY, False)
|
||||
If regKey IsNot Nothing Then
|
||||
Dim currentSetting As Object = regKey.GetValue(javaPath)
|
||||
If currentSetting IsNot Nothing And TARGET_SETUP.Equals(currentSetting.ToString()) Then
|
||||
McLaunchLog("不需要调整显示设置")
|
||||
Exit Sub
|
||||
End If
|
||||
regKey.Close()
|
||||
End If
|
||||
Catch ex As Exception
|
||||
McLaunchLog("无法读取注册表,跳过显示设置")
|
||||
Exit Sub
|
||||
End Try
|
||||
'更新设置
|
||||
Try
|
||||
If Not IsAdmin() Then RunAsAdmin("")
|
||||
Dim parentKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser
|
||||
Dim regKey As Microsoft.Win32.RegistryKey = parentKey.OpenSubKey(GPU_KEY, True)
|
||||
If regKey Is Nothing Then
|
||||
regKey = parentKey.CreateSubKey(GPU_KEY)
|
||||
End If
|
||||
regKey.SetValue(javaPath, TARGET_SETUP)
|
||||
Catch ex As Exception
|
||||
McLaunchLog("无法写入显示设置")
|
||||
Exit Sub
|
||||
End Try
|
||||
McLaunchLog("已修改显示设置")
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "预检测"
|
||||
|
||||
Private Sub McLaunchPrecheck()
|
||||
@@ -1317,14 +1363,15 @@ Retry:
|
||||
McLaunchLog("开始获取 Minecraft 启动参数")
|
||||
'获取基准字符串与参数信息
|
||||
Dim Arguments As String
|
||||
Arguments = If(McLaunchJavaSelected.VersionCode > 8, "-Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 ", Nothing) '#4700
|
||||
If McVersionCurrent.JsonObject("arguments") IsNot Nothing AndAlso McVersionCurrent.JsonObject("arguments")("jvm") IsNot Nothing Then
|
||||
McLaunchLog("获取新版 JVM 参数")
|
||||
Arguments = McLaunchArgumentsJvmNew(McVersionCurrent)
|
||||
Arguments += McLaunchArgumentsJvmNew(McVersionCurrent)
|
||||
McLaunchLog("新版 JVM 参数获取成功:")
|
||||
McLaunchLog(Arguments)
|
||||
Else
|
||||
McLaunchLog("获取旧版 JVM 参数")
|
||||
Arguments = McLaunchArgumentsJvmOld(McVersionCurrent)
|
||||
Arguments += McLaunchArgumentsJvmOld(McVersionCurrent)
|
||||
McLaunchLog("旧版 JVM 参数获取成功:")
|
||||
McLaunchLog(Arguments)
|
||||
End If
|
||||
@@ -1421,9 +1468,10 @@ Retry:
|
||||
|
||||
'添加 Java Wrapper 作为主 Jar
|
||||
If McLaunchJavaSelected.VersionCode >= 9 Then DataList.Add("--add-exports cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED")
|
||||
DataList.Add("-Doolloo.jlw.tmpdir=""" & PathPure.TrimEnd("\") & """")
|
||||
DataList.Add("-jar """ & ExtractJavaWrapper() & """")
|
||||
|
||||
If Setup.Get("VersionAdvanceUseLaunchWrapperV2", Version) AndAlso Setup.Get("LaunchAdvanceUseLaunchWrapper") Then
|
||||
DataList.Add("-Doolloo.jlw.tmpdir=""" & PathPure.TrimEnd("\") & """")
|
||||
DataList.Add("-jar """ & ExtractJavaWrapper() & """")
|
||||
End If
|
||||
'添加 MainClass
|
||||
If Version.JsonObject("mainClass") Is Nothing Then
|
||||
Throw New Exception("版本 json 中没有 mainClass 项!")
|
||||
@@ -1488,9 +1536,10 @@ NextVersion:
|
||||
|
||||
'添加 Java Wrapper 作为主 Jar
|
||||
If McLaunchJavaSelected.VersionCode >= 9 Then DataList.Add("--add-exports cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED")
|
||||
DataList.Add("-Doolloo.jlw.tmpdir=""" & PathPure.TrimEnd("\") & """")
|
||||
DataList.Add("-jar """ & ExtractJavaWrapper() & """")
|
||||
|
||||
If Setup.Get("VersionAdvanceUseLaunchWrapperV2", Version) AndAlso Setup.Get("LaunchAdvanceUseLaunchWrapper") Then
|
||||
DataList.Add("-Doolloo.jlw.tmpdir=""" & PathPure.TrimEnd("\") & """")
|
||||
DataList.Add("-jar """ & ExtractJavaWrapper() & """")
|
||||
End If
|
||||
'将 "-XXX" 与后面 "XXX" 合并到一起
|
||||
'如果不合并,会导致 Forge 1.17 启动无效,它有两个 --add-exports,进一步导致其中一个在后面被去重
|
||||
Dim DeDuplicateDataList As New List(Of String)
|
||||
@@ -2050,6 +2099,7 @@ IgnoreCustomSkin:
|
||||
'输出 bat
|
||||
Try
|
||||
Dim CmdString As String =
|
||||
$"{If(McLaunchJavaSelected.VersionCode > 8, "chcp 65001>nul" & vbCrLf, Nothing)}" &
|
||||
"@echo off" & vbCrLf &
|
||||
"title 启动 - " & McVersionCurrent.Name & vbCrLf &
|
||||
"echo 游戏正在启动,请稍候。" & vbCrLf &
|
||||
@@ -2142,8 +2192,8 @@ IgnoreCustomSkin:
|
||||
StartInfo.EnvironmentVariables("Path") = Join(Paths.Distinct.ToList, ";")
|
||||
|
||||
'设置其他参数
|
||||
StartInfo.StandardErrorEncoding = Encoding.UTF8
|
||||
StartInfo.StandardOutputEncoding = Encoding.UTF8
|
||||
StartInfo.StandardErrorEncoding = If(McLaunchJavaSelected.VersionCode > 8, Encoding.UTF8, Nothing)
|
||||
StartInfo.StandardOutputEncoding = If(McLaunchJavaSelected.VersionCode > 8, Encoding.UTF8, Nothing)
|
||||
StartInfo.WorkingDirectory = ShortenPath(McVersionCurrent.PathIndie)
|
||||
StartInfo.UseShellExecute = False
|
||||
StartInfo.RedirectStandardOutput = True
|
||||
|
||||
Reference in New Issue
Block a user