1313import java .util .zip .ZipEntry ;
1414import java .util .zip .ZipInputStream ;
1515
16+ import org .json .JSONArray ;
1617import org .mcphackers .mcp .MCP ;
1718import org .mcphackers .mcp .MCPPaths ;
1819import org .mcphackers .mcp .tasks .mode .TaskParameter ;
1920import org .mcphackers .mcp .tools .Util ;
21+ import org .mcphackers .mcp .tools .versions .json .Rule ;
2022import org .mcphackers .mcp .tools .versions .json .Version ;
23+ import org .mcphackers .mcp .tools .versions .json .Version .Argument ;
2124import org .mcphackers .mcp .tools .versions .json .Version .Arguments ;
2225
2326public class TaskRun extends TaskStaged {
@@ -43,6 +46,7 @@ protected Stage[] setStages() {
4346 mcp .log ("Start class not found" );
4447 return ;
4548 }
49+ mcp .log ("Using main class: " + main );
4650
4751 boolean runBuild = mcp .getOptions ().getBooleanParameter (TaskParameter .RUN_BUILD );
4852 boolean fullBuild = mcp .getOptions ().getBooleanParameter (TaskParameter .FULL_BUILD );
@@ -55,16 +59,24 @@ protected Stage[] setStages() {
5559 Path natives = MCPPaths .get (mcp , NATIVES ).toAbsolutePath ();
5660
5761 List <String > args = new ArrayList <>();
62+ List <String > gameArgs = new ArrayList <>();
5863 args .add (Util .getJava ());
64+ String cpString = String .join (File .pathSeparator , classPath );
65+ for (String s : getJvmArgs (mcp , mcpSide )) {
66+ args .add (s .replace ("${classpath}" , cpString )
67+ .replace ("${natives_directory}" , natives .toAbsolutePath ().toString ())
68+ .replace ("${launcher_name}" , "RetroMCP" )
69+ .replace ("${launcher_version}" , MCP .VERSION ));
70+ }
5971 Collections .addAll (args , runArgs );
60- args .add ("-Djava.library.path=" + natives );
61- args .add ("-cp" );
62- args .add (String .join (File .pathSeparator , classPath ));
6372 args .add (main );
6473 if (side == Side .CLIENT ) {
65- args .addAll (getLaunchArgs (mcp , mcpSide ));
66- Collections .addAll (args , mcp .getOptions ().getStringParameter (TaskParameter .GAME_ARGS ).split (" " ));
74+ gameArgs .addAll (getLaunchArgs (mcp , mcpSide ));
75+ Collections .addAll (gameArgs , mcp .getOptions ().getStringParameter (TaskParameter .GAME_ARGS ).split (" " ));
76+ args .addAll (gameArgs );
6777 }
78+ mcp .log ("Launch arguments: " + String .join (", " , args ));
79+ // mcp.log("Classpath:\n" + String.join("\n", classPath));
6880
6981 Util .runCommand (args .toArray (new String [0 ]), getMCDir (mcp , mcpSide ), true );
7082 })
@@ -92,6 +104,43 @@ public static String getMain(MCP mcp, Version version, Side side) throws IOExcep
92104 return null ;
93105 }
94106
107+ private static List <String > getStringArguments (List <Object > objects ) {
108+ List <String > argsList = new ArrayList <>();
109+ for (Object o : objects ) {
110+ if (o instanceof String ) {
111+ argsList .add ((String ) o );
112+ }
113+ else if (o instanceof Argument ) {
114+ Argument arg = (Argument )o ;
115+ if (Rule .apply (arg .rules )) {
116+ if (arg .value instanceof String ) {
117+ argsList .add ((String )arg .value );
118+ }
119+ else if (arg .value instanceof JSONArray ) {
120+ JSONArray arr = (JSONArray )arg .value ;
121+ for (int i = 0 ; i < arr .length (); i ++) {
122+ argsList .add (arr .getString (i ));
123+ }
124+ }
125+ }
126+ }
127+ }
128+ return argsList ;
129+ }
130+
131+ public static List <String > getJvmArgs (MCP mcp , Side side ) {
132+ List <String > argsList = new ArrayList <>();
133+ Version ver = mcp .getCurrentVersion ();
134+ if (ver .arguments != null ) {
135+ argsList .addAll (getStringArguments (ver .arguments .jvm ));
136+ } else {
137+ argsList .add ("-Djava.library.path=${natives_directory}" );
138+ argsList .add ("-cp" );
139+ argsList .add ("${classpath}" );
140+ }
141+ return argsList ;
142+ }
143+
95144 /**
96145 * @param mcp
97146 * @return arguments for launching client
@@ -102,11 +151,7 @@ public static List<String> getLaunchArgs(MCP mcp, Side side) {
102151 String mcArgs = ver .minecraftArguments ;
103152 List <String > argsList = new ArrayList <>();
104153 if (args != null ) {
105- for (Object o : args .game ) {
106- if (o instanceof String ) {
107- argsList .add ((String ) o );
108- }
109- }
154+ argsList .addAll (getStringArguments (args .game ));
110155 } else {
111156 argsList .addAll (Arrays .asList (mcArgs .split (" " )));
112157 }
0 commit comments