@@ -418,9 +418,10 @@ private static List<string> MakeGameArg(this GameSettingObj obj, SaveObj? world,
418418 /// </summary>
419419 /// <param name="obj">游戏实例</param>
420420 /// <param name="login">登录的账户</param>
421+ /// <param name="java">JAVA主版本</param>
421422 /// <param name="mixinport">注入通信端口</param>
422423 /// <returns>Jvm参数</returns>
423- private static async Task < ( List < string > , bool ) > MakeJvmArgAsync ( this GameSettingObj obj , LoginObj login , int ? mixinport = null )
424+ private static async Task < JvmArgRes > MakeJvmArgAsync ( this GameSettingObj obj , LoginObj login , int java , int ? mixinport = null )
424425 {
425426 RunArgObj ? args ;
426427
@@ -433,7 +434,6 @@ private static List<string> MakeGameArg(this GameSettingObj obj, SaveObj? world,
433434 args = new RunArgObj
434435 {
435436 JvmArgs = obj . JvmArg . JvmArgs ?? ConfigUtils . Config . DefaultJvmArg . JvmArgs ,
436- GCArgument = obj . JvmArg . GCArgument ?? ConfigUtils . Config . DefaultJvmArg . GCArgument ,
437437 GC = obj . JvmArg . GC ?? ConfigUtils . Config . DefaultJvmArg . GC ,
438438 JavaAgent = obj . JvmArg . JavaAgent ?? ConfigUtils . Config . DefaultJvmArg . JavaAgent ,
439439 MaxMemory = obj . JvmArg . MaxMemory ?? ConfigUtils . Config . DefaultJvmArg . MaxMemory ,
@@ -460,24 +460,28 @@ private static List<string> MakeGameArg(this GameSettingObj obj, SaveObj? world,
460460 jvm . Add ( $ "-javaagent:{ GameHelper . ColorMCASM . Local } ") ;
461461 }
462462
463+ var gc = args . GC ;
464+
465+ if ( gc == GCType . Auto )
466+ {
467+ if ( java >= 21 )
468+ {
469+ gc = GCType . ZGC ;
470+ }
471+ else
472+ {
473+ gc = GCType . G1GC ;
474+ }
475+ }
476+
463477 //gc
464- switch ( args . GC )
478+ switch ( gc )
465479 {
466480 case GCType . G1GC :
467- jvm . Add ( "-XX:+UseG1GC" ) ;
481+ jvm . AddRange ( Names . NameGCArgG1GC ) ;
468482 break ;
469- case GCType . SerialGC :
470- jvm . Add ( "-XX:+UseSerialGC" ) ;
471- break ;
472- case GCType . ParallelGC :
473- jvm . Add ( "-XX:+UseParallelGC" ) ;
474- break ;
475- case GCType . CMSGC :
476- jvm . Add ( "-XX:+UseConcMarkSweepGC" ) ;
477- break ;
478- case GCType . User :
479- if ( ! string . IsNullOrWhiteSpace ( args . GCArgument ) )
480- jvm . Add ( args . GCArgument . Trim ( ) ) ;
483+ case GCType . ZGC :
484+ jvm . AddRange ( Names . NameGCZGC ) ;
481485 break ;
482486 }
483487
@@ -540,7 +544,11 @@ private static List<string> MakeGameArg(this GameSettingObj obj, SaveObj? world,
540544 jvm . Add ( $ "-Dcolormc.game.version={ obj . Version } ") ;
541545 jvm . Add ( $ "-Dcolormc.game.dir={ obj . GetGamePath ( ) } ") ;
542546
543- return ( jvm , useasm ) ;
547+ return new JvmArgRes
548+ {
549+ Args = jvm ,
550+ Asm = useasm
551+ } ;
544552 }
545553
546554 /// <summary>
@@ -712,13 +720,6 @@ public static async Task<GameLaunchObj> MakeArgAsync(this GameSettingObj obj, Ga
712720 {
713721 var arg = new GameLaunchObj ( ) ;
714722
715- //创建启动器自定义jvmarg
716- var jvmarg = await obj . MakeJvmArgAsync ( arg1 . Auth , arg1 . Mixinport ) ;
717- //创建启动器自定义gamearg
718- var gamearg = obj . MakeGameArg ( arg1 . World , arg1 . Server ) ;
719-
720- arg . UseColorMCASM = jvmarg . Item2 ;
721-
722723 void DoLibItem ( FileItemObj item )
723724 {
724725 if ( ! string . IsNullOrWhiteSpace ( item . Local ) )
@@ -861,7 +862,13 @@ await Task.Run(async () =>
861862 arg . JvmArgs . AddRange ( MakeLoaderJvmArg ( v2 , obj ) ) ;
862863 }
863864
864- arg . JvmArgs . AddRange ( jvmarg . Item1 ) ;
865+ //创建启动器自定义jvmarg
866+ var jvmarg = await obj . MakeJvmArgAsync ( arg1 . Auth , arg . JavaVersions . First ( ) , arg1 . Mixinport ) ;
867+ //创建启动器自定义gamearg
868+ var gamearg = obj . MakeGameArg ( arg1 . World , arg1 . Server ) ;
869+ arg . UseColorMCASM = jvmarg . Asm ;
870+
871+ arg . JvmArgs . AddRange ( jvmarg . Args ) ;
865872
866873 if ( obj . JvmArg ? . RemoveGameArg != true )
867874 {
@@ -1042,7 +1049,13 @@ await Task.Run(async () =>
10421049 arg . JvmArgs . AddRange ( s_v1JvmArg ) ;
10431050 }
10441051
1045- arg . JvmArgs . AddRange ( jvmarg . Item1 ) ;
1052+ //创建启动器自定义jvmarg
1053+ var jvmarg = await obj . MakeJvmArgAsync ( arg1 . Auth , arg . JavaVersions . First ( ) , arg1 . Mixinport ) ;
1054+ //创建启动器自定义gamearg
1055+ var gamearg = obj . MakeGameArg ( arg1 . World , arg1 . Server ) ;
1056+ arg . UseColorMCASM = jvmarg . Asm ;
1057+
1058+ arg . JvmArgs . AddRange ( jvmarg . Args ) ;
10461059 arg . GameArgs . AddRange ( gamearg ) ;
10471060
10481061 //log4j2-xml
0 commit comments