Skip to content

Commit f234eaf

Browse files
committed
feat(wip): 启动游戏
1 parent b517b62 commit f234eaf

File tree

4 files changed

+94
-61
lines changed

4 files changed

+94
-61
lines changed

App.xaml.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Threading.Tasks;
66
using System.Windows;
7+
using static SodaCL.Core.Java.JavaProcess;
78
using static SodaCL.Toolkits.Logger;
89

910
namespace SodaCL {
@@ -19,7 +20,7 @@ protected override void OnStartup(StartupEventArgs e) {
1920
}
2021
LauncherInit.Setup();
2122
LauncherInit.DeleteTempFolder();
22-
Task.Run(() => { JavaFindingAndSelecting.AutoJavaFinding(); });
23+
Task.Run(() => { AutoJavaFinding(); });
2324
//LauncherInit.InitMiSansFonts();
2425
LogStart();
2526
#if RELEASE

Core/Game/MinecraftLaunch.cs

+79-50
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
using Microsoft.Win32;
22
using Newtonsoft.Json;
3-
using SodaCL.Core.Java;
43
using SodaCL.Models.Core.Game;
54
using SodaCL.Toolkits;
65
using System;
76
using System.Collections.Generic;
87
using System.Diagnostics;
98
using System.IO;
109
using System.Reflection;
10+
using System.Security.Principal;
1111
using static SodaCL.Launcher.LauncherInfo;
1212
using static SodaCL.Toolkits.DataTool;
1313
using static SodaCL.Toolkits.DeviceInfo;
14+
using static SodaCL.Toolkits.Logger;
15+
using static SodaCL.Core.Java.JavaProcess;
1416

1517
namespace SodaCL.Core.Game {
1618

@@ -28,20 +30,23 @@ public class MinecraftLaunch {
2830
private MinecraftLaunch() {
2931
}
3032

31-
private static List<string> BasicArguments { get; set; }
32-
private static List<string> LibrariesArguments { get; set; }
33-
private static List<string> McArguments { get; set; }
34-
3533
public static void LaunchGame() {
36-
_coreInfo = JsonConvert.DeserializeObject<CoreModel>(RegEditor.GetKeyValue(Registry.CurrentUser, "CurrentGameInfo"));
37-
_assetInfo = JsonConvert.DeserializeObject<AssetModel>(_coreInfo.GameDir + "\\" + _coreInfo.VersionName);
34+
// _coreInfo = JsonConvert.DeserializeObject<CoreModel>(RegEditor.GetKeyValue(Registry.CurrentUser, "CurrentGameInfo"));
35+
// _assetInfo = JsonConvert.DeserializeObject<AssetModel>(_coreInfo.GameDir + "\\" + _coreInfo.VersionName);
36+
var json = File.ReadAllText($"{SODA_MC_DIR}\\versions\\1.21.4\\1.21.4.json");
37+
_assetInfo = JsonConvert.DeserializeObject<AssetModel>(json);
3838
var StartArgs = SpliceArgumentsMain();
39+
Log(false, ModuleList.IO, LogInfo.Info, StartArgs);
40+
41+
var javaPath = "";
42+
// javaPath = JavaAutoSelector("1.21.4");
43+
javaPath = "C:\\Program Files\\Zulu\\zulu-21\\bin\\java.exe";
3944

4045
var p = new Process();
4146
p.StartInfo = new ProcessStartInfo {
42-
FileName = "C:\\Program Files\\Zulu\\zulu-17\\bin\\java.exe",
47+
FileName = $"\"{javaPath}\"",
4348
Arguments = StartArgs,
44-
CreateNoWindow = false,
49+
CreateNoWindow = true,
4550
UseShellExecute = false,
4651
RedirectStandardInput = true,
4752
RedirectStandardOutput = true,
@@ -69,69 +74,93 @@ public static string SpliceArgumentsMain() {
6974

7075
var basicArguments = SpliceBasicArguments();
7176
var libArguments = SpliceLibrariesArguments();
72-
var mcArguments = SpliceMcArguments();
77+
var mcArguments = SpliceMcArguments(0);
7378
return basicArguments + libArguments + mcArguments;
7479
}
7580

7681
public static string SpliceBasicArguments() {
77-
var javaPath = JavaFindingAndSelecting.JavaAutoSelector(_coreInfo.MajorVersion);
78-
if (javaPath == "核心版本非法") {
79-
Logger.Log(false, Logger.ModuleList.IO, Logger.LogInfo.Warning, "核心版本非法,无法确定所需 Java ");
80-
}
82+
// var javaPath = JavaFindingAndSelecting.JavaAutoSelector(_coreInfo.MajorVersion);
83+
//if (javaPath == "核心版本非法") {
84+
// Logger.Log(false, Logger.ModuleList.IO, Logger.LogInfo.Warning, "核心版本非法,无法确定所需 Java ");
85+
//}
8186

8287
//TODO: Args Modify (内存修改, GC 回收器修改)
8388

8489
//TODO: Natives 文件处理 (-Djava.library.path="E:\Minecraft\.minecraft\$natives")
8590

86-
//BasicArguments.Add();
87-
BasicArguments.Add($" -Xmx2048M");
88-
BasicArguments.Add($" -Xms2048M");
89-
BasicArguments.Add($" -Xmn256M");
90-
BasicArguments.Add(" -XX:+UseG1GC");
91-
BasicArguments.Add(" -XX:-UseAdaptiveSizePolicy");
92-
BasicArguments.Add(" -XX:-OmitStackTraceInFastThrow");
93-
BasicArguments.Add(" -Dlog4j2.formatMsgNoLookups = true");
94-
BasicArguments.Add($" -Dos.name=Windows {GetOsMajorNumber()} ");
95-
BasicArguments.Add($" -Dminecraft.launcher.brand=SodaCL");
96-
BasicArguments.Add($" -Dminecraft.launcher.version={Assembly.GetExecutingAssembly().GetName().Version.ToString()}");
97-
return SplitListAndToString(BasicArguments, " ");
91+
var BasicArguments = "";
92+
BasicArguments += $" -Xmx2048M";
93+
BasicArguments += $" -Xms2048M";
94+
BasicArguments += $" -Xmn256M";
95+
BasicArguments += " -XX:+UseG1GC";
96+
BasicArguments += " -XX:-UseAdaptiveSizePolicy";
97+
BasicArguments += " -XX:-OmitStackTraceInFastThrow";
98+
BasicArguments += " -Dlog4j2.formatMsgNoLookups=true";
99+
BasicArguments += " -Dos.name=Windows";
100+
BasicArguments += " -Dminecraft.launcher.brand=SodaCL";
101+
BasicArguments += $" -Dminecraft.launcher.version={Assembly.GetExecutingAssembly().GetName().Version.ToString()}";
102+
return BasicArguments;
98103
}
99104

100105
public static string SpliceLibrariesArguments() {
101-
//LibrariesArguments.Add();
102-
LibrariesArguments.Add(" -cp ");
103-
foreach (var libraries in _assetInfo.Downloads.Client.Path) {
104-
var libProcessed = PathConverter(libraries.ToString());
105-
var libPath = SODA_MC_VERSIONS_DIR + "\\" + libProcessed;
106+
var LibrariesArguments = "";
107+
LibrariesArguments += " -cp ";
108+
foreach (var library in _assetInfo.Libraries) {
109+
var path = library.Downloads.Artifact.Path;
110+
var libProcessed = PathConverter(path.ToString());
111+
var libPath = SODA_MC_DIR + "\\libraries\\" + libProcessed;
112+
if (libPath.Contains("macos") || libPath.Contains("linux") || libPath.Contains("arm64"))
113+
{
114+
continue;
115+
}
106116
if (!File.Exists(libPath)) {
107117
Logger.Log(false, Logger.ModuleList.IO, Logger.LogInfo.Warning, "启动 Minecraft 所需的 Libraries 文件不存在: " + libPath);
108118
// 这里应该需要一个自动下载的逻辑,但是多线程下载器鸽秋还不会用
109119
}
110-
LibrariesArguments.Add(libPath + ";");
120+
LibrariesArguments += libPath + ";";
111121
}
112-
return SplitListAndToString(LibrariesArguments, " ");
122+
LibrariesArguments += "E:\\Code\\SodaCL\\bin\\Debug\\net8.0-windows\\.minecraft\\versions\\1.21.4\\1.21.4.jar";
123+
return LibrariesArguments;
113124
}
114125

115-
public static string SpliceMcArguments() {
116-
//McArguments.Add();
117-
McArguments.Add($"--username {RegEditor.GetKeyValue(Registry.CurrentUser, "UserName")}");
118-
McArguments.Add($"--version {_coreInfo.VersionName}");
119-
McArguments.Add($"--gameDir {DirConverter(_coreInfo.GameDir)}");
120-
McArguments.Add($"--assetsDir " + SODA_MC_DIR + "\\assets");
121-
McArguments.Add($"--assetIndex " + _assetInfo.AssetIndex);
122-
McArguments.Add($"--uuid {_uuid}");
123-
McArguments.Add($"--accessToken {_accessToken}");
126+
/// <summary>
127+
/// 获取 MC 档案及资源相关启动信息
128+
/// </summary>
129+
/// <param name="accountType">档案类型,0 为离线验证,1 为正版验证</param>
130+
public static string SpliceMcArguments(int accountType) {
131+
var McArguments = $" {_assetInfo.MainClass}";
132+
//McArguments += $" --username {RegEditor.GetKeyValue(Registry.CurrentUser, "UserName")}";
133+
// McArguments.Add($"--version {_coreInfo.VersionName}");
134+
//McArguments.Add($"--gameDir {DirConverter(_coreInfo.GameDir)}");
135+
McArguments += $" --username SodaCLTest";
136+
McArguments += $" --version 1.21.4" ;
137+
McArguments += $" --gameDir {SODA_MC_DIR}\\versions\\1.21.4";
138+
McArguments += $" --assetsDir {SODA_MC_DIR}\\assets";
139+
McArguments += $" --assetIndex {_assetInfo.AssetIndex.Id}";
140+
//McArguments += $" --uuid {_uuid}";
141+
//McArguments += $" --accessToken {_accessToken}";
142+
McArguments += $" --uuid 000000000000300A9D840A3AC868D84A";
143+
McArguments += $" --accessToken 000000000000300A9D840A3AC868D84A";
124144

125145
// 微软账户特有 xuid 处理
126-
if (RegEditor.GetKeyValue(Registry.CurrentUser, "LoginType") == "1") {
127-
McArguments.Add($"--xuid {_xuid}");
146+
//if (RegEditor.GetKeyValue(Registry.CurrentUser, "LoginType") == "1") {
147+
// McArguments += $" --xuid {_xuid}";
148+
//}
149+
150+
var loginType = "";
151+
switch (accountType) {
152+
case 0:
153+
loginType = "legacy";
154+
break;
155+
case 1:
156+
loginType = "msa";
157+
break;
128158
}
129-
130-
McArguments.Add($"--userType {_userType}");
131-
McArguments.Add($"--versionType {_versionType}");
132-
McArguments.Add($"--width 854");
133-
McArguments.Add($"--height 480");
134-
return SplitListAndToString(McArguments, " ");
159+
McArguments += $" --userType {loginType}";
160+
McArguments += $" --versionType SodaCL";
161+
McArguments += $" --width 854";
162+
McArguments += $" --height 480";
163+
return McArguments;
135164
}
136165

137166
public static void CreateLaunchScript(string script) {

Core/Java/ModJava.cs

+9-7
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
//Finish
1515
namespace SodaCL.Core.Java {
1616

17-
public class JavaFindingAndSelecting {
17+
public class JavaProcess {
1818

1919
#region 自动 Java 查找
2020

@@ -189,11 +189,13 @@ public static void SearchJavaInFolder(string targetDir, ref List<JavaModel> java
189189
// return "目标 Java 版本非法";
190190
//}
191191

192-
public static string JavaAutoSelector(int TargetMcVersion) {
192+
public static string JavaAutoSelector(string TargetMcVersion) {
193193
var javaJson = RegEditor.GetKeyValue(Registry.CurrentUser, "CacheJavaList");
194194
var javaList = JsonConvert.DeserializeObject<JavaModel>(javaJson);
195195

196-
if (TargetMcVersion >= 1.17) {
196+
var mcMajorVersion = int.Parse(TargetMcVersion.Split('.')[1]);
197+
198+
if (mcMajorVersion >= 17) {
197199
// 1.18 Pre2+ 至少 Java 17
198200
// 1.17+ (21w19a+) 至少 Java 16
199201
// 出于省事考虑直接最少 Java 17 ,除了 1.17 部分早期版本的 Forge 可能需要特殊处理 (Java 16)
@@ -207,7 +209,7 @@ public static string JavaAutoSelector(int TargetMcVersion) {
207209
break;
208210
}
209211
}
210-
else if (TargetMcVersion >= 1.12) {
212+
else if (mcMajorVersion >= 12) {
211213
// 最少 Java 8
212214
// 如果是 1.12 加了 Forge 最高 Java 8
213215

@@ -220,7 +222,7 @@ public static string JavaAutoSelector(int TargetMcVersion) {
220222
break;
221223
}
222224
}
223-
else if (TargetMcVersion <= 1.11 && TargetMcVersion >= 1.8) {
225+
else if (mcMajorVersion <= 11 && mcMajorVersion >= 8) {
224226
// 必须恰好 Java 8
225227

226228
foreach (var javaJsonSingle in javaList.ToString()) {
@@ -232,7 +234,7 @@ public static string JavaAutoSelector(int TargetMcVersion) {
232234
break;
233235
}
234236
}
235-
else if (TargetMcVersion <= 1.7) {
237+
else if (mcMajorVersion <= 7) {
236238
// 最高 Java 8
237239

238240
foreach (var javaJsonSingle in javaList.ToString()) {
@@ -245,7 +247,7 @@ public static string JavaAutoSelector(int TargetMcVersion) {
245247
break;
246248
}
247249
}
248-
else if (TargetMcVersion <= 1.5) {
250+
else if (mcMajorVersion <= 5) {
249251
// 最高 Java 12
250252

251253
foreach (var javaJsonSingle in javaList.ToString()) {

MainPage.xaml.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using System.Windows;
1212
using System.Windows.Controls;
1313
using System.Windows.Media.Animation;
14+
using static SodaCL.Core.Java.JavaProcess;
1415
using static SodaCL.Toolkits.HttpHelper;
1516
using static SodaCL.Toolkits.Logger;
1617

@@ -75,21 +76,21 @@ public void TextAni() {
7576
private void EnvironmentCheckButtonClick(object sender, RoutedEventArgs e) {
7677
MinecraftVersion.GetVersionList();
7778
Log(false, ModuleList.IO, LogInfo.Info, "--------------------------------");
78-
Task.Run(() => { JavaFindingAndSelecting.AutoJavaFinding(); });
79+
Task.Run(() => { AutoJavaFinding(); });
7980
}
8081

8182
private void LogFolderOpenerButtonClick(object sender, RoutedEventArgs e) {
8283
Process.Start("explorer.exe", ".\\SodaCL\\logs");
8384
}
8485

8586
private void StartBtn_Click(object sender, RoutedEventArgs e) {
86-
//MinecraftLaunch.LaunchGame();
87+
MinecraftLaunch.LaunchGame();
8788
//var dE = new SodaLauncherErrorDialog("笨蛋 xiaohu 还在搓天杀的控件,你先别急。人活着哪有不疯的?硬撑罢了!\r\n\r\n人活着哪有不疯的?硬撑罢了!\r\n\r\n人活着哪有不疯的?硬撑罢了!\r\n\r\n人活着哪有不疯的?硬撑罢了!\r\n\r\n妈的,忍不了,一拳把地球打爆!\r\n\r\n妈的,忍不了,一拳把地球打爆!\r\n\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n妈的,忍不了,一拳把地球打爆!\r\n他奶奶的鸡蛋六舅的哈密瓜妹妹的大窝瓜爷爷的大鸡腿婶婶的大葡萄妈妈的黄瓜菜爸爸的大面包三舅姥爷的大李子二婶的桃子三叔的西瓜七舅姥爷的小荔枝二舅姥爷的火龙果姑姑的猕猴桃祖爷爷的车厘子祖姥爷的大菠萝祖奶奶的大榴莲二爷的小草莓他三婶姥姥的大白菜他哥哥的大面条妹妹的小油菜弟弟的西葫芦姐姐的大土豆姐夫的大青椒爷爷的大茄子嗯啊,杀杀杀!\r\n!\r\n好可怕杀杀杀杀杀杀上勾拳!\r\n下勾拳!\r\n左勾拳!\r\n右勾拳!\r\n扫堂腿!\r\n回旋踢!\r\n这是蜘蛛吃耳屎,这是龙卷风摧毁停车场!\r\n这是羚羊蹬,这是山羊跳!\r\n乌鸦坐飞机!\r\n老鼠走迷宫!\r\n大象踢腿!\r\n愤怒的章鱼!\r\n巨斧砍大树!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n杀!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n彻底疯狂!\r\n");
8889

8990
//var sl = JsonConvert.DeserializeObject<AssetModel>(await GetStringResponseAsync("https://bmclapi2.bangbang93.com/mc/game/version_manifest_v2.json"));
9091
//MessageBox.Show(sl.ToString());
9192

92-
RegEditor.SetKeyValue(Registry.CurrentUser, "LoginType", "0", RegistryValueKind.String);
93+
// RegEditor.SetKeyValue(Registry.CurrentUser, "LoginType", "0", RegistryValueKind.String);
9394
}
9495

9596
#endregion 事件

0 commit comments

Comments
 (0)