Skip to content

Commit 5625e51

Browse files
committed
Support arguments array. Fix classic server downloads. Better architecture detection
1 parent 0d0c216 commit 5625e51

File tree

5 files changed

+88
-19
lines changed

5 files changed

+88
-19
lines changed

src/main/java/org/mcphackers/mcp/MCP.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.mcphackers.mcp;
22

3-
import java.io.IOException;
43
import java.nio.file.Files;
54
import java.nio.file.Path;
65
import java.nio.file.Paths;
@@ -23,13 +22,12 @@
2322
import org.mcphackers.mcp.tasks.TaskStaged;
2423
import org.mcphackers.mcp.tasks.mode.TaskMode;
2524
import org.mcphackers.mcp.tasks.mode.TaskParameter;
26-
import org.mcphackers.mcp.tools.FileUtil;
2725
import org.mcphackers.mcp.tools.source.Source;
2826
import org.mcphackers.mcp.tools.versions.DownloadData;
2927
import org.mcphackers.mcp.tools.versions.json.Version;
3028

3129
public abstract class MCP {
32-
public static final String VERSION = "v1.0.1";
30+
public static final String VERSION = "v1.1";
3331
public static final String GITHUB_URL = "https://github.com/MCPHackers/RetroMCP-Java";
3432
public static final TranslatorUtil TRANSLATOR = new TranslatorUtil();
3533
private static final PluginManager pluginManager = new PluginManager();

src/main/java/org/mcphackers/mcp/tasks/TaskRun.java

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@
1313
import java.util.zip.ZipEntry;
1414
import java.util.zip.ZipInputStream;
1515

16+
import org.json.JSONArray;
1617
import org.mcphackers.mcp.MCP;
1718
import org.mcphackers.mcp.MCPPaths;
1819
import org.mcphackers.mcp.tasks.mode.TaskParameter;
1920
import org.mcphackers.mcp.tools.Util;
21+
import org.mcphackers.mcp.tools.versions.json.Rule;
2022
import org.mcphackers.mcp.tools.versions.json.Version;
23+
import org.mcphackers.mcp.tools.versions.json.Version.Argument;
2124
import org.mcphackers.mcp.tools.versions.json.Version.Arguments;
2225

2326
public 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
}

src/main/java/org/mcphackers/mcp/tools/versions/DownloadData.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.mcphackers.mcp.tasks.Task.Side;
1616
import org.mcphackers.mcp.tools.FileUtil;
1717
import org.mcphackers.mcp.tools.Util;
18+
import org.mcphackers.mcp.tools.versions.json.Artifact;
1819
import org.mcphackers.mcp.tools.versions.json.AssetIndex;
1920
import org.mcphackers.mcp.tools.versions.json.AssetIndex.Asset;
2021
import org.mcphackers.mcp.tools.versions.json.DependDownload;
@@ -35,7 +36,24 @@ public DownloadData(MCP mcp, Version version) {
3536
public DownloadData(Path libraries, Path gameDir, Path client, Path server, Version version) {
3637
this.gameDir = gameDir;
3738
queueDownload(version.downloads.artifacts.get("client"), client);
38-
queueDownload(version.downloads.artifacts.get("server"), server);
39+
Artifact serverArtifact = version.downloads.artifacts.get("server");
40+
if(serverArtifact != null) {
41+
Path serverOut = server;
42+
if(serverArtifact.url.endsWith(".zip")) {
43+
serverOut = server.getParent().resolve("minecraft_server.zip");
44+
}
45+
queueDownload(serverArtifact, serverOut);
46+
if(serverArtifact.url.endsWith(".zip")) {
47+
try {
48+
FileUtil.extractByExtension(serverOut, serverOut.getParent(), ".jar");
49+
if(Files.exists(serverOut.getParent().resolve("minecraft-server.jar"))) {
50+
Files.move(serverOut.getParent().resolve("minecraft-server.jar"), server);
51+
}
52+
} catch (IOException e) {
53+
e.printStackTrace();
54+
}
55+
}
56+
}
3957
for (DependDownload dependencyDownload : version.libraries) {
4058
if (Rule.apply(dependencyDownload.rules)) {
4159
queueDownload(dependencyDownload.getDownload(null), libraries);

src/main/java/org/mcphackers/mcp/tools/versions/json/Rule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public enum Action {
7070

7171
public static class OSInfo {
7272
public OS name;
73+
public String arch;
7374
public String version;
7475

7576
public static OSInfo from(JSONObject obj) {
@@ -79,6 +80,7 @@ public static OSInfo from(JSONObject obj) {
7980
return new OSInfo() {
8081
{
8182
name = OS.valueOf(obj.getString("name"));
83+
arch = obj.optString("arch");
8284
version = obj.optString("version");
8385
}
8486
};
@@ -88,6 +90,9 @@ public boolean equalsOS(OS os) {
8890
if (this.name != null && this.name != os) {
8991
return false;
9092
} else {
93+
if(this.arch != null && !arch.equals(System.getProperty("os.arch"))) {
94+
return false;
95+
}
9196
if (this.version != null) {
9297
try {
9398
Pattern pattern = Pattern.compile(this.version);

src/main/java/org/mcphackers/mcp/tools/versions/json/Version.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,15 @@ public static Version from(JSONObject obj) {
4343
}
4444
}
4545
mainClass = obj.getString("mainClass");
46+
arguments = Arguments.from(obj.optJSONObject("arguments"));
4647
minecraftArguments = obj.optString("minecraftArguments", null);
4748
}
4849
};
4950
}
5051

5152
public static class Arguments {
52-
public List<Object> game;
53-
public List<Object> jvm;
53+
public List<Object> game = new ArrayList<>();
54+
public List<Object> jvm = new ArrayList<>();
5455

5556
public static Arguments from(JSONObject obj) {
5657
if (obj == null) {
@@ -61,22 +62,24 @@ public static Arguments from(JSONObject obj) {
6162
for (Object o : obj.getJSONArray("game")) {
6263
if (o instanceof JSONObject) {
6364
game.add(Argument.from((JSONObject) o));
65+
} else {
66+
game.add(o);
6467
}
65-
game.add(o);
6668
}
6769
for (Object o : obj.getJSONArray("jvm")) {
6870
if (o instanceof JSONObject) {
6971
jvm.add(Argument.from((JSONObject) o));
72+
} else {
73+
jvm.add(o);
7074
}
71-
jvm.add(o);
7275
}
7376
}
7477
};
7578
}
7679
}
7780

7881
public static class Argument {
79-
public List<Rule> rules;
82+
public List<Rule> rules = new ArrayList<>();
8083
public Object value;
8184

8285
public static Argument from(JSONObject obj) {

0 commit comments

Comments
 (0)