Skip to content

Commit 1aa3e88

Browse files
committed
feature: Allow multiple version JSONs to be read.
feature: Allow custom Java Compiler arguments. style: format code (editorconfig). todo: Work on setting up `maven-publish`.
1 parent 5f38645 commit 1aa3e88

File tree

14 files changed

+171
-126
lines changed

14 files changed

+171
-126
lines changed

build.gradle

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ plugins {
44

55
allprojects {
66
apply plugin: "java"
7+
apply plugin: "maven-publish"
8+
9+
def retromcp_version = '1.2'
710

811
repositories {
912
mavenCentral()
@@ -60,6 +63,39 @@ allprojects {
6063
sourceCompatibility = JavaVersion.VERSION_1_8
6164
targetCompatibility = JavaVersion.VERSION_1_8
6265
}
66+
67+
publishing {
68+
publications {
69+
maven(MavenPublication) {
70+
groupId = 'org.mcphackers'
71+
// Jank hack to have CLI and GUI be retromcp-cli and retromcp-gui
72+
// while still keeping retromcp-java as the main artifact
73+
artifactId = project.name.toLowerCase()
74+
if (!artifactId.contains('retromcp-')) {
75+
artifactId = 'retromcp-' + artifactId
76+
}
77+
version = retromcp_version
78+
79+
pom {
80+
description = 'A rewrite of MCP to provide support for many versions of Minecraft which were never supported by original MCP.'
81+
url = 'https://mcphackers.org'
82+
licenses {
83+
license {
84+
name = 'The MIT License'
85+
url = 'https://spdx.org/licenses/MIT.html'
86+
}
87+
}
88+
scm {
89+
connection = 'scm:git:git@github.com:MCPHackers/RetroMCP-Java.git'
90+
developerConnection = connection
91+
url = 'https://github.com/MCPHackers/RetroMCP-Java'
92+
}
93+
}
94+
95+
from components.java
96+
}
97+
}
98+
}
6399
}
64100

65101
subprojects {

cli/src/main/java/org/mcphackers/mcp/main/MainCLI.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ public MainCLI(String[] args) {
5757
boolean exit = false;
5858
String version = null;
5959
Path versionPath = Paths.get(MCPPaths.VERSION);
60-
VersionParser versionParser = VersionParser.getInstance();
60+
VersionParser versionParser = this.getVersionParser();
6161
if (!VersionParser.mappingsJson.equals(VersionParser.DEFAULT_JSON)) {
6262
warning("Using old or third party manifest URL: " + VersionParser.mappingsJson);
6363
warning("If this is not intentional, please update versionUrl in options.cfg to " + VersionParser.DEFAULT_JSON);
6464
}
65-
List<VersionData> versions = versionParser.getVersions();
65+
List<VersionData> versions = versionParser.getSortedVersions();
6666
if (Files.exists(versionPath)) {
6767
try {
6868
currentVersion = Version.from(new JSONObject(new String(Files.readAllBytes(versionPath))));

gui/src/main/java/org/mcphackers/mcp/gui/MCPFrame.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ public void reloadVersionList() {
139139
AtomicReference<JButton> reloadVersionListButton = new AtomicReference<>();
140140
enqueueRunnable(() -> {
141141
loadingVersions = true;
142-
VersionParser versionParser = VersionParser.getInstance();
142+
VersionParser versionParser = this.mcp.getVersionParser();
143143
if (versionParser.failureCause != null) {
144144
versionParser.failureCause.printStackTrace();
145145
verLabel = new JLabel(MCP.TRANSLATOR.translateKey("mcp.versionList.failure"));
@@ -150,7 +150,7 @@ public void reloadVersionList() {
150150
reloadButton.addActionListener(e -> this.reloadVersionList());
151151
reloadVersionListButton.set(reloadButton);
152152
} else {
153-
verList = new JComboBox<>(versionParser.getVersions().toArray());
153+
verList = new JComboBox<>(versionParser.getSortedVersions().toArray());
154154
verList.addPopupMenuListener(new PopupMenuListener() {
155155

156156
@Override

gui/src/main/java/org/mcphackers/mcp/main/MainGUI.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class MainGUI extends MCP {
5959
public static final String[] TABS = {"task.decompile", "task.recompile", "task.reobfuscate", "task.build", "options.running"};
6060
public static final TaskParameter[][] TAB_PARAMETERS = {
6161
{TaskParameter.PATCHES, TaskParameter.FERNFLOWER_OPTIONS, TaskParameter.IGNORED_PACKAGES, TaskParameter.OUTPUT_SRC, TaskParameter.DECOMPILE_RESOURCES, TaskParameter.GUESS_GENERICS, TaskParameter.STRIP_GENERICS},
62-
{TaskParameter.SOURCE_VERSION, TaskParameter.TARGET_VERSION, TaskParameter.JAVA_HOME}, {TaskParameter.OBFUSCATION, TaskParameter.SRG_OBFUSCATION, TaskParameter.EXCLUDED_CLASSES, TaskParameter.STRIP_SOURCE_FILE},
62+
{TaskParameter.SOURCE_VERSION, TaskParameter.TARGET_VERSION, TaskParameter.JAVA_HOME, TaskParameter.JAVAC_ARGS}, {TaskParameter.OBFUSCATION, TaskParameter.SRG_OBFUSCATION, TaskParameter.EXCLUDED_CLASSES, TaskParameter.STRIP_SOURCE_FILE},
6363
{TaskParameter.FULL_BUILD}, {TaskParameter.RUN_BUILD, TaskParameter.RUN_ARGS, TaskParameter.GAME_ARGS}
6464
};
6565
public Theme theme = Theme.THEMES_MAP.get(UIManager.getCrossPlatformLookAndFeelClassName());
@@ -157,7 +157,7 @@ public Version getCurrentVersion() {
157157
@Override
158158
public void setCurrentVersion(Version version) {
159159
currentVersion = version;
160-
frame.setCurrentVersion(version == null ? null : VersionParser.getInstance().getVersion(version.id));
160+
frame.setCurrentVersion(version == null ? null : this.getVersionParser().getVersion(version.id));
161161
}
162162

163163
@Override
@@ -197,6 +197,7 @@ public String inputString(String title, String msg) {
197197
return JOptionPane.showInputDialog(frame, msg, title, JOptionPane.PLAIN_MESSAGE);
198198
}
199199

200+
@SuppressWarnings("MagicConstant")
200201
@Override
201202
public void showMessage(String title, String msg, int type) {
202203
frame.setState(Frame.NORMAL);
@@ -283,7 +284,7 @@ public void changeWorkingDirectory() {
283284
this.options = new Options(this, Paths.get("options.cfg"));
284285
this.options.workingDir = p;
285286
this.options.save();
286-
VersionParser versionParser = VersionParser.getInstance();
287+
VersionParser versionParser = this.getVersionParser();
287288
Path versionPath = MCPPaths.get(this, MCPPaths.VERSION);
288289
if (Files.exists(versionPath)) {
289290
try {
@@ -313,7 +314,7 @@ public void inputOptionsValue(TaskParameter param) {
313314
}
314315

315316
public void setupVersion(VersionData versionData) {
316-
VersionParser versionParser = VersionParser.getInstance();
317+
VersionParser versionParser = this.getVersionParser();
317318
Version version = getCurrentVersion();
318319
if (versionData != null && !versionData.equals(version == null ? null : versionParser.getVersion(version.id))) {
319320
int response = JOptionPane.showConfirmDialog(frame, MCP.TRANSLATOR.translateKey("mcp.confirmSetup"), MCP.TRANSLATOR.translateKey("mcp.confirmAction"), JOptionPane.YES_NO_OPTION);

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.mcphackers.mcp.tools.project.LegacyProjectAdapter;
2626
import org.mcphackers.mcp.tools.source.Source;
2727
import org.mcphackers.mcp.tools.versions.DownloadData;
28+
import org.mcphackers.mcp.tools.versions.VersionParser;
2829
import org.mcphackers.mcp.tools.versions.json.Version;
2930

3031
public abstract class MCP {
@@ -37,6 +38,7 @@ public abstract class MCP {
3738
protected boolean isGUI = false;
3839

3940
public static final List<? extends Source> SOURCE_ADAPTERS = new ArrayList<>();
41+
private static final VersionParser VERSION_PARSER = new VersionParser();
4042

4143
protected MCP() {
4244
Update.attemptToDeleteUpdateJar();
@@ -136,7 +138,7 @@ public final boolean performTask(TaskMode mode, Side side, boolean completionMsg
136138
} catch (InterruptedException err) {
137139
throw new RuntimeException("Main thread was interrupted while performTask was waiting for tasks to finish", err );
138140
}
139-
};
141+
}
140142
triggerEvent(MCPEvent.FINISHED_TASKS);
141143

142144
byte result = result1.byteValue();
@@ -354,13 +356,15 @@ public final void changeLanguage(Language lang) {
354356
}
355357
}
356358

359+
public VersionParser getVersionParser() {
360+
return VERSION_PARSER;
361+
}
362+
357363
public List<Path> getLibraries() {
358364
return DownloadData.getLibraries(MCPPaths.get(this, MCPPaths.LIB), getCurrentVersion());
359365
}
360366

361367
public static void reloadPluginTranslations() {
362-
pluginManager.getLoadedPlugins().forEach((key, plugin) -> {
363-
MCP.TRANSLATOR.readTranslation(plugin.getClass());
364-
});
368+
pluginManager.getLoadedPlugins().forEach((key, plugin) -> MCP.TRANSLATOR.readTranslation(plugin.getClass()));
365369
}
366370
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public TaskCleanup(MCP instance) {
2828

2929
@Override
3030
protected Stage[] setStages() {
31-
return new Stage[] {
31+
return new Stage[]{
3232
stage(getLocalizedStage("cleaning"), 0, () -> {
3333
Instant startTime = Instant.now();
3434

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,12 @@ protected Stage[] setStages() {
7575

7676
int sourceVersion = mcp.getOptions().getIntParameter(TaskParameter.SOURCE_VERSION);
7777
int targetVersion = mcp.getOptions().getIntParameter(TaskParameter.TARGET_VERSION);
78+
String javacArgs = mcp.getOptions().getStringParameter(TaskParameter.JAVAC_ARGS);
79+
String[] splitJavacArgs = javacArgs != null && !javacArgs.isEmpty() ? javacArgs.split(" ") : null;
80+
81+
if (splitJavacArgs != null) {
82+
options.addAll(Arrays.asList(splitJavacArgs));
83+
}
7884

7985
// Set --release flag for newer Java versions
8086
if (Util.getJavaVersion() > 9) {

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

Lines changed: 60 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -32,57 +32,6 @@ public TaskRun(Side side, MCP instance) {
3232
super(side, instance);
3333
}
3434

35-
@Override
36-
protected Stage[] setStages() {
37-
return new Stage[] {
38-
stage(getLocalizedStage("run"), 0, () -> {
39-
Version currentVersion = mcp.getCurrentVersion();
40-
Side mcpSide = mcp.getOptions().side;
41-
if (mcpSide == Side.ANY) {
42-
mcpSide = side;
43-
}
44-
45-
String main = getMain(mcp, currentVersion, side);
46-
if (main == null) {
47-
mcp.log("Start class not found");
48-
return;
49-
}
50-
mcp.log("Using main class: " + main);
51-
52-
boolean runBuild = mcp.getOptions().getBooleanParameter(TaskParameter.RUN_BUILD);
53-
boolean fullBuild = mcp.getOptions().getBooleanParameter(TaskParameter.FULL_BUILD);
54-
String[] runArgs = mcp.getOptions().getStringArrayParameter(TaskParameter.RUN_ARGS);
55-
List<Path> cpList = getClasspath(mcp, mcpSide, side, runBuild, fullBuild);
56-
57-
List<String> classPath = new ArrayList<>();
58-
cpList.forEach(p -> classPath.add(p.toAbsolutePath().toString()));
59-
60-
Path natives = MCPPaths.get(mcp, NATIVES).toAbsolutePath();
61-
62-
List<String> args = new ArrayList<>();
63-
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-
}
71-
Collections.addAll(args, runArgs);
72-
args.add(main);
73-
if (side == Side.CLIENT) {
74-
List<String> gameArgs = new ArrayList<>(getLaunchArgs(mcp, mcpSide));
75-
Collections.addAll(gameArgs, mcp.getOptions().getStringParameter(TaskParameter.GAME_ARGS).split(" "));
76-
args.addAll(gameArgs);
77-
}
78-
mcp.log("Launch arguments: " + String.join(", ", args));
79-
// mcp.log("Classpath:\n" + String.join("\n", classPath));
80-
81-
Util.runCommand(args.toArray(new String[0]), MCPPaths.get(mcp, GAMEDIR, side), true);
82-
})
83-
};
84-
}
85-
8635
public static String getMain(MCP mcp, Version version, Side side) throws IOException {
8736
if (side == Side.CLIENT) {
8837
return version.mainClass;
@@ -109,16 +58,14 @@ private static List<String> getStringArguments(List<Object> objects) {
10958
for (Object o : objects) {
11059
if (o instanceof String) {
11160
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++) {
61+
} else if (o instanceof Argument) {
62+
Argument arg = (Argument) o;
63+
if (Rule.apply(arg.rules)) {
64+
if (arg.value instanceof String) {
65+
argsList.add((String) arg.value);
66+
} else if (arg.value instanceof JSONArray) {
67+
JSONArray arr = (JSONArray) arg.value;
68+
for (int i = 0; i < arr.length(); i++) {
12269
argsList.add(arr.getString(i));
12370
}
12471
}
@@ -131,7 +78,7 @@ else if(arg.value instanceof JSONArray) {
13178
public static List<String> getJvmArgs(MCP mcp, Side side) {
13279
List<String> argsList = new ArrayList<>();
13380
Version ver = mcp.getCurrentVersion();
134-
if(ver.arguments != null) {
81+
if (ver.arguments != null) {
13582
argsList.addAll(getStringArguments(ver.arguments.jvm));
13683
} else {
13784
argsList.add("-Djava.library.path=${natives_directory}");
@@ -222,4 +169,55 @@ private static List<Path> getClasspath(MCP mcp, Side side, Side runSide, boolean
222169
}
223170
return cpList;
224171
}
172+
173+
@Override
174+
protected Stage[] setStages() {
175+
return new Stage[]{
176+
stage(getLocalizedStage("run"), 0, () -> {
177+
Version currentVersion = mcp.getCurrentVersion();
178+
Side mcpSide = mcp.getOptions().side;
179+
if (mcpSide == Side.ANY) {
180+
mcpSide = side;
181+
}
182+
183+
String main = getMain(mcp, currentVersion, side);
184+
if (main == null) {
185+
mcp.log("Start class not found");
186+
return;
187+
}
188+
mcp.log("Using main class: " + main);
189+
190+
boolean runBuild = mcp.getOptions().getBooleanParameter(TaskParameter.RUN_BUILD);
191+
boolean fullBuild = mcp.getOptions().getBooleanParameter(TaskParameter.FULL_BUILD);
192+
String[] runArgs = mcp.getOptions().getStringArrayParameter(TaskParameter.RUN_ARGS);
193+
List<Path> cpList = getClasspath(mcp, mcpSide, side, runBuild, fullBuild);
194+
195+
List<String> classPath = new ArrayList<>();
196+
cpList.forEach(p -> classPath.add(p.toAbsolutePath().toString()));
197+
198+
Path natives = MCPPaths.get(mcp, NATIVES).toAbsolutePath();
199+
200+
List<String> args = new ArrayList<>();
201+
args.add(Util.getJava());
202+
String cpString = String.join(File.pathSeparator, classPath);
203+
for (String s : getJvmArgs(mcp, mcpSide)) {
204+
args.add(s.replace("${classpath}", cpString)
205+
.replace("${natives_directory}", natives.toAbsolutePath().toString())
206+
.replace("${launcher_name}", "RetroMCP")
207+
.replace("${launcher_version}", MCP.VERSION));
208+
}
209+
Collections.addAll(args, runArgs);
210+
args.add(main);
211+
if (side == Side.CLIENT) {
212+
List<String> gameArgs = new ArrayList<>(getLaunchArgs(mcp, mcpSide));
213+
Collections.addAll(gameArgs, mcp.getOptions().getStringParameter(TaskParameter.GAME_ARGS).split(" "));
214+
args.addAll(gameArgs);
215+
}
216+
mcp.log("Launch arguments: " + String.join(", ", args));
217+
// mcp.log("Classpath:\n" + String.join("\n", classPath));
218+
219+
Util.runCommand(args.toArray(new String[0]), MCPPaths.get(mcp, GAMEDIR, side), true);
220+
})
221+
};
222+
}
225223
}

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

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package org.mcphackers.mcp.tasks;
22

3-
import static org.mcphackers.mcp.MCPPaths.CONF;
4-
import static org.mcphackers.mcp.MCPPaths.JARS;
5-
import static org.mcphackers.mcp.MCPPaths.LIB;
6-
import static org.mcphackers.mcp.MCPPaths.NATIVES;
7-
import static org.mcphackers.mcp.MCPPaths.VERSION;
3+
import static org.mcphackers.mcp.MCPPaths.*;
84

95
import java.io.BufferedWriter;
106
import java.io.InputStream;
@@ -14,7 +10,6 @@
1410
import java.nio.file.Files;
1511
import java.nio.file.Path;
1612
import java.nio.file.Paths;
17-
import java.util.List;
1813

1914
import org.json.JSONObject;
2015
import org.mcphackers.mcp.MCP;
@@ -38,26 +33,23 @@ public TaskSetup(MCP instance) {
3833

3934
@Override
4035
protected Stage[] setStages() {
41-
return new Stage[] {
36+
return new Stage[]{
4237
stage(getLocalizedStage("setup"), 0, () -> {
4338
new TaskCleanup(mcp).cleanup();
4439
FileUtil.createDirectories(MCPPaths.get(mcp, JARS));
4540
FileUtil.createDirectories(MCPPaths.get(mcp, LIB));
4641
FileUtil.createDirectories(MCPPaths.get(mcp, NATIVES));
4742

4843
setProgress(getLocalizedStage("setup"), 1);
49-
List<VersionData> versions = VersionParser.getInstance().getVersions();
44+
VersionParser versionParser = mcp.getVersionParser();
5045
String chosenVersion = mcp.getOptions().getStringParameter(TaskParameter.SETUP_VERSION);
5146
VersionData chosenVersionData;
5247

5348
// Keep asking until chosenVersion equals one of the versionData
54-
input:
5549
while (true) {
56-
for (VersionData data : versions) {
57-
if (data.id.equals(chosenVersion)) {
58-
chosenVersionData = data;
59-
break input;
60-
}
50+
chosenVersionData = versionParser.getVersion(chosenVersion);
51+
if (chosenVersionData != null) {
52+
break;
6153
}
6254
chosenVersion = mcp.inputString(TaskMode.SETUP.getFullName(), MCP.TRANSLATOR.translateKey("task.setup.selectVersion"));
6355
}

0 commit comments

Comments
 (0)