1
1
using Microsoft . Win32 ;
2
2
using Newtonsoft . Json ;
3
- using SodaCL . Core . Java ;
4
3
using SodaCL . Models . Core . Game ;
5
4
using SodaCL . Toolkits ;
6
5
using System ;
7
6
using System . Collections . Generic ;
8
7
using System . Diagnostics ;
9
8
using System . IO ;
10
9
using System . Reflection ;
10
+ using System . Security . Principal ;
11
11
using static SodaCL . Launcher . LauncherInfo ;
12
12
using static SodaCL . Toolkits . DataTool ;
13
13
using static SodaCL . Toolkits . DeviceInfo ;
14
+ using static SodaCL . Toolkits . Logger ;
15
+ using static SodaCL . Core . Java . JavaProcess ;
14
16
15
17
namespace SodaCL . Core . Game {
16
18
@@ -28,20 +30,23 @@ public class MinecraftLaunch {
28
30
private MinecraftLaunch ( ) {
29
31
}
30
32
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
-
35
33
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 ) ;
38
38
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" ;
39
44
40
45
var p = new Process ( ) ;
41
46
p . StartInfo = new ProcessStartInfo {
42
- FileName = "C: \\ Program Files \\ Zulu \\ zulu-17 \\ bin \\ java.exe ",
47
+ FileName = $ " \" { javaPath } \" ",
43
48
Arguments = StartArgs ,
44
- CreateNoWindow = false ,
49
+ CreateNoWindow = true ,
45
50
UseShellExecute = false ,
46
51
RedirectStandardInput = true ,
47
52
RedirectStandardOutput = true ,
@@ -69,69 +74,93 @@ public static string SpliceArgumentsMain() {
69
74
70
75
var basicArguments = SpliceBasicArguments ( ) ;
71
76
var libArguments = SpliceLibrariesArguments ( ) ;
72
- var mcArguments = SpliceMcArguments ( ) ;
77
+ var mcArguments = SpliceMcArguments ( 0 ) ;
73
78
return basicArguments + libArguments + mcArguments ;
74
79
}
75
80
76
81
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
+ // }
81
86
82
87
//TODO: Args Modify (内存修改, GC 回收器修改)
83
88
84
89
//TODO: Natives 文件处理 (-Djava.library.path="E:\Minecraft\.minecraft\$natives")
85
90
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 ;
98
103
}
99
104
100
105
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
+ }
106
116
if ( ! File . Exists ( libPath ) ) {
107
117
Logger . Log ( false , Logger . ModuleList . IO , Logger . LogInfo . Warning , "启动 Minecraft 所需的 Libraries 文件不存在: " + libPath ) ;
108
118
// 这里应该需要一个自动下载的逻辑,但是多线程下载器鸽秋还不会用
109
119
}
110
- LibrariesArguments . Add ( libPath + ";" ) ;
120
+ LibrariesArguments += libPath + ";" ;
111
121
}
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 ;
113
124
}
114
125
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";
124
144
125
145
// 微软账户特有 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 ;
128
158
}
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 ;
135
164
}
136
165
137
166
public static void CreateLaunchScript ( string script ) {
0 commit comments