|
5 | 5 | package net.minecraftforge.mcmaven.cli; |
6 | 6 |
|
7 | 7 | import java.io.File; |
8 | | -import java.util.Set; |
| 8 | +import java.io.IOException; |
| 9 | +import java.nio.file.Files; |
9 | 10 |
|
10 | 11 | import joptsimple.OptionParser; |
11 | 12 | import net.minecraftforge.mcmaven.impl.MinecraftMaven; |
12 | 13 | import net.minecraftforge.mcmaven.impl.cache.Cache; |
| 14 | +import net.minecraftforge.mcmaven.impl.data.MCPSetupFiles; |
13 | 15 | import net.minecraftforge.mcmaven.impl.mappings.Mappings; |
14 | 16 | import net.minecraftforge.mcmaven.impl.mappings.ParchmentMappings; |
15 | 17 | import net.minecraftforge.mcmaven.impl.repo.forge.Patcher; |
16 | 18 | import net.minecraftforge.mcmaven.impl.repo.mcpconfig.MCPConfigRepo; |
| 19 | +import net.minecraftforge.mcmaven.impl.repo.mcpconfig.MCPTaskFactory; |
17 | 20 | import net.minecraftforge.mcmaven.impl.tasks.RenameTask; |
18 | 21 | import net.minecraftforge.mcmaven.impl.util.Artifact; |
19 | 22 | import net.minecraftforge.mcmaven.impl.util.Task; |
20 | 23 | import net.minecraftforge.mcmaven.impl.util.Util; |
| 24 | +import net.minecraftforge.util.data.json.JsonData; |
21 | 25 | import net.minecraftforge.util.hash.HashFunction; |
22 | 26 | import net.minecraftforge.util.hash.HashStore; |
23 | 27 | import net.minecraftforge.util.logging.Log; |
| 28 | +import org.jetbrains.annotations.Nullable; |
24 | 29 |
|
25 | 30 | // TODO [Mavenizer][MCPTask] Cleanup. Works well but is a mess. |
26 | 31 | public class MCPTask { |
@@ -49,9 +54,14 @@ public static void run(String[] args) throws Exception { |
49 | 54 |
|
50 | 55 | // mcp artifact output |
51 | 56 | var outputO = parser.accepts("output", |
52 | | - "Root directory to generate the maven repository") |
| 57 | + "File to output the final jar") |
53 | 58 | .withRequiredArg().ofType(File.class).defaultsTo(new File("output.jar")); |
54 | 59 |
|
| 60 | + // mcp artifact output |
| 61 | + var outputFilesO = parser.accepts("output-files", |
| 62 | + "File to output a JSON containing paths to extra files") |
| 63 | + .withRequiredArg().ofType(File.class).defaultsTo(new File("files.json")); |
| 64 | + |
55 | 65 | var artifactO = parser.accepts("artifact", |
56 | 66 | "MCPConfig artifact coordinates") |
57 | 67 | .withRequiredArg(); |
@@ -96,6 +106,7 @@ public static void run(String[] args) throws Exception { |
96 | 106 | } |
97 | 107 |
|
98 | 108 | var output = options.valueOf(outputO); |
| 109 | + var outputFiles = options.valueOf(outputFilesO); |
99 | 110 | var cacheRoot = options.valueOf(cacheO); |
100 | 111 | var jdkCacheRoot = !options.has(cacheO) || options.has(jdkCacheO) |
101 | 112 | ? options.valueOf(jdkCacheO) |
@@ -153,6 +164,8 @@ public static void run(String[] args) throws Exception { |
153 | 164 | if (!output.exists() || !cache.isSame()) { |
154 | 165 | try { |
155 | 166 | org.apache.commons.io.FileUtils.copyFile(raw, output); |
| 167 | + if (outputFiles != null) |
| 168 | + writeFiles(side.getTasks(), outputFiles); |
156 | 169 | cache.save(); |
157 | 170 | } catch (Throwable t) { |
158 | 171 | throw new RuntimeException("Failed to generate artifact: %s".formatted(artifact), t); |
@@ -217,10 +230,31 @@ public static void run(String[] args) throws Exception { |
217 | 230 | if (!output.exists() || !cache.isSame()) { |
218 | 231 | try { |
219 | 232 | org.apache.commons.io.FileUtils.copyFile(sources, output); |
| 233 | + if (outputFiles != null) |
| 234 | + writeFiles(side.getTasks(), outputFiles); |
220 | 235 | cache.save(); |
221 | 236 | } catch (Throwable t) { |
222 | 237 | throw new RuntimeException("Failed to generate artifact: %s".formatted(artifact), t); |
223 | 238 | } |
224 | 239 | } |
225 | 240 | } |
| 241 | + |
| 242 | + // TODO [Mavenizer][Extra MCPTask Files] do this better |
| 243 | + private static void writeFiles(MCPTaskFactory mcpTaskFactory, File output) { |
| 244 | + var files = new MCPSetupFiles(); |
| 245 | + files.versionManifest = mcpTaskFactory.findStep("downloadManifest").execute(); |
| 246 | + files.versionJson = mcpTaskFactory.findStep("downloadJson").execute(); |
| 247 | + files.clientRaw = mcpTaskFactory.findStep("downloadClient").execute(); |
| 248 | + files.serverRaw = mcpTaskFactory.findStep("downloadServer").execute(); |
| 249 | + files.serverExtracted = mcpTaskFactory.findStep("extractServer").execute(); |
| 250 | + files.clientMappings = mcpTaskFactory.findStep("downloadClientMappings").execute(); |
| 251 | + files.serverMappings = mcpTaskFactory.findStep("downloadServerMappings").execute(); |
| 252 | + files.librariesList = mcpTaskFactory.findStep("listLibraries").execute(); |
| 253 | + |
| 254 | + try { |
| 255 | + JsonData.toJson(files, output); |
| 256 | + } catch (IOException e) { |
| 257 | + throw new RuntimeException("Failed to write extra files data: " + output.getPath(), e); |
| 258 | + } |
| 259 | + } |
226 | 260 | } |
0 commit comments