Skip to content

Commit 6b633e6

Browse files
committed
Fix natives. Add VSCProjectWriter
1 parent 62eed30 commit 6b633e6

File tree

9 files changed

+100
-36
lines changed

9 files changed

+100
-36
lines changed

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

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

3+
import static org.mcphackers.mcp.MCPPaths.*;
4+
5+
import java.io.IOException;
6+
import java.nio.file.Files;
7+
import java.nio.file.Path;
8+
39
import org.mcphackers.mcp.MCP;
410
import org.mcphackers.mcp.MCPPaths;
511
import org.mcphackers.mcp.tasks.mode.TaskParameter;
@@ -10,6 +16,7 @@
1016
import org.mcphackers.mcp.tools.mappings.MappingUtil;
1117
import org.mcphackers.mcp.tools.project.EclipseProjectWriter;
1218
import org.mcphackers.mcp.tools.project.IdeaProjectWriter;
19+
import org.mcphackers.mcp.tools.project.VSCProjectWriter;
1320
import org.mcphackers.mcp.tools.source.Source;
1421
import org.mcphackers.rdi.injector.data.ClassStorage;
1522
import org.mcphackers.rdi.injector.data.Mappings;
@@ -19,12 +26,6 @@
1926
import org.mcphackers.rdi.nio.RDInjector;
2027
import org.objectweb.asm.tree.ClassNode;
2128

22-
import java.io.IOException;
23-
import java.nio.file.Files;
24-
import java.nio.file.Path;
25-
26-
import static org.mcphackers.mcp.MCPPaths.*;
27-
2829
public class TaskDecompile extends TaskStaged {
2930
public static final int STAGE_DECOMPILE = 2;
3031
public static final int STAGE_MD5 = 5;
@@ -70,10 +71,14 @@ protected Stage[] setStages() {
7071
for (ClassNode node : storage) {
7172
classVersion = Math.max(classVersion, node.version);
7273
}
74+
// Force Java 8 or later in order to support VSC
75+
// Java extension does not allow compiling under Java 8
76+
classVersion = Math.max(8, classVersion);
7377
}), stage(getLocalizedStage("decompile"), () -> {
7478
new Decompiler(this, rdiOut, ffOut, mcp.getLibraries(), mcp).decompile();
7579
new EclipseProjectWriter().createProject(mcp, side, ClassUtils.getSourceFromClassVersion(classVersion));
7680
new IdeaProjectWriter().createProject(mcp, side, ClassUtils.getSourceFromClassVersion(classVersion));
81+
new VSCProjectWriter().createProject(mcp, side, ClassUtils.getSourceFromClassVersion(classVersion));
7782
}), stage(getLocalizedStage("patch"), 88, () -> {
7883
if (mcp.getOptions().getBooleanParameter(TaskParameter.PATCHES) && Files.exists(patchesPath)) {
7984
TaskApplyPatch.patch(this, ffOut, ffOut, patchesPath);

src/main/java/org/mcphackers/mcp/tools/JSONUtil.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
package org.mcphackers.mcp.tools;
22

3-
import org.json.JSONArray;
4-
import org.json.JSONException;
5-
import org.json.JSONObject;
6-
73
import java.io.IOException;
84
import java.io.InputStream;
95
import java.nio.file.Files;
106
import java.nio.file.Path;
117
import java.util.ArrayList;
128
import java.util.Collections;
139
import java.util.HashMap;
14-
import java.util.Iterator;
1510
import java.util.List;
1611
import java.util.Map;
1712

13+
import org.json.JSONArray;
14+
import org.json.JSONException;
15+
import org.json.JSONObject;
16+
1817
public final class JSONUtil {
1918

2019
public static Object[] getArray(JSONArray array) {

src/main/java/org/mcphackers/mcp/tools/project/IdeaProjectWriter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public void writeProjectIML(MCP mcp, Version version, String moduleName, Path pr
5959
for (DependDownload dependencyDownload : version.libraries) {
6060
if (Rule.apply(dependencyDownload.rules)) {
6161
String lib = dependencyDownload.getArtifactPath(null);
62+
if(lib == null) {
63+
continue;
64+
}
6265
String libraryName = lib.substring(lib.lastIndexOf("/") + 1, lib.length() - 4);
6366
if (Files.exists(MCPPaths.get(mcp, "libraries/" + lib + ".jar"))) {
6467
writer.writeSelfEndingAttribute("orderEntry type=\"library\" name=\"" + libraryName + "\" level=\"project\"");
@@ -127,6 +130,9 @@ public void writeLibraries(MCP mcp, Path projectFolder, Version version) throws
127130
for (DependDownload dependencyDownload : version.libraries) {
128131
if (Rule.apply(dependencyDownload.rules)) {
129132
String lib = dependencyDownload.getArtifactPath(null);
133+
if(lib == null) {
134+
continue;
135+
}
130136
String src = dependencyDownload.getArtifactPath("sources");
131137
if (Files.exists(MCPPaths.get(mcp, "libraries/" + lib))) {
132138
String libraryName = lib.substring(lib.lastIndexOf("/") + 1, lib.length() - 4);
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.mcphackers.mcp.tools.project;
2+
3+
import static org.mcphackers.mcp.MCPPaths.*;
4+
5+
import java.io.BufferedWriter;
6+
import java.io.IOException;
7+
import java.nio.file.Files;
8+
import java.nio.file.Path;
9+
import java.util.List;
10+
11+
import org.json.JSONArray;
12+
import org.json.JSONObject;
13+
import org.mcphackers.mcp.MCP;
14+
import org.mcphackers.mcp.MCPPaths;
15+
import org.mcphackers.mcp.tasks.Task;
16+
import org.mcphackers.mcp.tasks.Task.Side;
17+
import org.mcphackers.mcp.tasks.TaskRun;
18+
19+
public class VSCProjectWriter implements ProjectWriter {
20+
21+
@Override
22+
public void createProject(MCP mcp, Side side, int sourceVersion) throws IOException {
23+
Path proj = MCPPaths.get(mcp, PROJECT, side);
24+
Task.Side[] launchSides = side == Task.Side.MERGED ? new Task.Side[]{Task.Side.CLIENT, Task.Side.SERVER} : new Task.Side[]{side};
25+
26+
String projectName = "Minecraft " + (side == Task.Side.CLIENT ? "Client" : side == Task.Side.SERVER ? "Server" : side == Task.Side.MERGED ? "Merged" : "Project");
27+
28+
Files.createDirectories(proj.resolve(".vscode"));
29+
try (BufferedWriter writer = Files.newBufferedWriter(proj.resolve(".vscode/launch.json"))) {
30+
JSONObject launchJson = new JSONObject();
31+
launchJson.put("version", "0.2.0");
32+
JSONArray configurations = new JSONArray();
33+
for (Task.Side launchSide : launchSides) {
34+
JSONObject config = new JSONObject();
35+
config.put("type", "java");
36+
config.put("name", projectName);
37+
config.put("request", "launch");
38+
config.put("mainClass", TaskRun.getMain(mcp, mcp.getCurrentVersion(), launchSide));
39+
config.put("vmArgs", "-Djava.library.path=${workspaceFolder}/../libraries/natives");
40+
config.put("projectName", projectName);
41+
List<String> args = TaskRun.getLaunchArgs(mcp, launchSide);
42+
JSONArray arguments = new JSONArray();
43+
for(String arg : args) {
44+
arguments.put(arg);
45+
}
46+
config.put("args", arguments);
47+
configurations.put(config);
48+
}
49+
launchJson.put("configurations", configurations);
50+
launchJson.write(writer);
51+
}
52+
}
53+
54+
}

src/main/java/org/mcphackers/mcp/tools/project/eclipse/EclipseClasspath.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ public void toXML(XMLWriter writer, Task.Side side) throws IOException {
4040
for (DependDownload dependencyDownload : this.dependencies) {
4141
if (Rule.apply(dependencyDownload.rules)) {
4242
String lib = dependencyDownload.getArtifactPath(null);
43+
if(lib == null) {
44+
continue;
45+
}
4346
String src = dependencyDownload.getArtifactPath("sources");
4447
if (Files.exists(MCPPaths.get(mcp, "libraries/" + lib))) {
4548
if (src != null) {

src/main/java/org/mcphackers/mcp/tools/project/eclipse/EclipseProject.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,19 @@ public void toXML(XMLWriter writer) throws IOException {
3939
// Filter out src and jars
4040
long id = new Random().nextLong();
4141
writer.startAttribute("filteredResources");
42-
String[] matches = {"src", "jars", "source"};
43-
for (String match : matches) {
44-
writer.startAttribute("filter");
45-
writer.stringAttribute("id", Long.toString(id++));
46-
writer.stringAttribute("name", "");
47-
writer.stringAttribute("type", "9");
48-
writer.startAttribute("matcher");
49-
writer.stringAttribute("id", "org.eclipse.ui.ide.multiFilter");
50-
writer.stringAttribute("arguments", "1.0-name-matches-false-false-" + match);
51-
writer.closeAttribute("matcher");
52-
writer.closeAttribute("filter");
53-
}
42+
// Broken for VSCode even though it's supposedly eclipse-project compatible
43+
// String[] matches = {"src", "jars", "source"};
44+
// for (String match : matches) {
45+
// writer.startAttribute("filter");
46+
// writer.stringAttribute("id", Long.toString(id++));
47+
// writer.stringAttribute("name", "");
48+
// writer.stringAttribute("type", "9");
49+
// writer.startAttribute("matcher");
50+
// writer.stringAttribute("id", "org.eclipse.ui.ide.multiFilter");
51+
// writer.stringAttribute("arguments", "1.0-name-matches-false-false-" + match);
52+
// writer.closeAttribute("matcher");
53+
// writer.closeAttribute("filter");
54+
// }
5455
writer.closeAttribute("filteredResources");
5556
writer.closeAttribute("projectDescription");
5657
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.json.JSONArray;
1616
import org.json.JSONObject;
1717
import org.mcphackers.mcp.tools.JSONUtil;
18-
import org.mcphackers.mcp.tools.Util;
1918
import org.mcphackers.mcp.tools.versions.json.VersionMetadata;
2019

2120
public class VersionParser {

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package org.mcphackers.mcp.tools.versions.json;
22

3-
import java.nio.file.Files;
4-
import java.nio.file.Path;
53
import java.util.LinkedHashMap;
64
import java.util.Map;
75

86
import org.json.JSONObject;
9-
import org.mcphackers.mcp.tools.FileUtil;
107
import org.mcphackers.mcp.tools.versions.IDownload;
118

129
public class AssetIndex {

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public static DependDownload from(JSONObject obj) {
2121
return new DependDownload() {
2222
{
2323
name = obj.getString("name");
24-
url = obj.optString("url");
24+
url = obj.optString("url", null);
2525
downloads = Downloads.from(obj.optJSONObject("downloads"));
2626
JSONArray a = obj.optJSONArray("rules");
2727
if (a != null) {
@@ -111,21 +111,21 @@ private Artifact getArtifact(String name) {
111111
public String getNatives() {
112112
switch (OS.getOs()) {
113113
case windows:
114-
if (getArtifact("natives_windows") != null) {
115-
return "natives_windows";
114+
if (getArtifact("natives-windows") != null) {
115+
return "natives-windows";
116116
}
117117
break;
118118
case linux:
119-
if (getArtifact("natives_linux") != null) {
120-
return "natives_linux";
119+
if (getArtifact("natives-linux") != null) {
120+
return "natives-linux";
121121
}
122122
break;
123123
case osx:
124-
if (getArtifact("natives_osx") != null) {
125-
return "natives_osx";
124+
if (getArtifact("natives-osx") != null) {
125+
return "natives-osx";
126126
}
127-
if (getArtifact("natives_macos") != null) {
128-
return "natives_macos";
127+
if (getArtifact("natives-macos") != null) {
128+
return "natives-macos";
129129
}
130130
break;
131131
default:

0 commit comments

Comments
 (0)