Skip to content

Commit 5e42a02

Browse files
committed
Fixed SAS not appearing in userdev
1 parent 38a52a9 commit 5e42a02

File tree

2 files changed

+124
-10
lines changed

2 files changed

+124
-10
lines changed

src/main/groovy/net/minecraftforge/forgedev/ForgeDevExtension.java

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import net.minecraftforge.forgedev.tasks.patching.diff.ApplyPatches;
2222
import net.minecraftforge.forgedev.tasks.patching.diff.BakePatches;
2323
import net.minecraftforge.forgedev.tasks.patching.diff.GeneratePatches;
24+
import net.minecraftforge.forgedev.tasks.sas.CreateFakeSASPatches;
2425
import net.minecraftforge.forgedev.tasks.srg2source.ApplyRangeMap;
2526
import net.minecraftforge.forgedev.tasks.srg2source.ExtractRangeMap;
2627
import net.minecraftforge.gradleutils.shared.Closures;
@@ -32,7 +33,9 @@
3233
import org.gradle.api.attributes.Attribute;
3334
import org.gradle.api.file.Directory;
3435
import org.gradle.api.file.DirectoryProperty;
36+
import org.gradle.api.file.FileSystemLocationProperty;
3537
import org.gradle.api.file.ProjectLayout;
38+
import org.gradle.api.file.RegularFileProperty;
3639
import org.gradle.api.model.ObjectFactory;
3740
import org.gradle.api.plugins.JavaPlugin;
3841
import org.gradle.api.plugins.JavaPluginExtension;
@@ -46,6 +49,7 @@
4649
import org.gradle.api.tasks.compile.JavaCompile;
4750
import org.gradle.language.base.plugins.LifecycleBasePlugin;
4851
import org.gradle.plugins.ide.eclipse.model.EclipseModel;
52+
import org.jetbrains.annotations.Nullable;
4953
import org.jetbrains.annotations.VisibleForTesting;
5054

5155
import javax.inject.Inject;
@@ -209,6 +213,7 @@ private void setup(ForgeDevPlugin plugin, Project project) {
209213
task.getCreate().from(reobfJar.flatMap(LegacyReobfuscateJar::getOutput));
210214
task.getOutput().convention(project.getLayout().getBuildDirectory().dir(task.getName()).map(d -> d.file("server.lzma")));
211215
});
216+
var genBinPatchesTasks = List.of(genJoinedBinPatches, genClientBinPatches, genServerBinPatches);
212217
var genBinPatches = tasks.register("genBinPatches", task -> task.dependsOn(genJoinedBinPatches, genClientBinPatches, genServerBinPatches));
213218

214219
var filterNew = tasks.register("filterJarNew", LegacyFilterNewJar.class, task -> task.getInput().set(reobfJar.flatMap(LegacyReobfuscateJar::getOutput)));
@@ -261,7 +266,6 @@ private void setup(ForgeDevPlugin plugin, Project project) {
261266
var assemble = tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME, task ->
262267
task.dependsOn(universalJar, userdevJar)
263268
);
264-
var release = tasks.register("release", task -> task.dependsOn(srgSourcesJar, universalJar, userdevJar));
265269

266270
var sourceSetsDir = this.getObjects().directoryProperty().value(this.getProjectLayout().getBuildDirectory().dir("sourceSets"));
267271
var mergeSourceSets = this.problems.test("net.minecraftforge.gradle.merge-source-sets");
@@ -358,11 +362,24 @@ private void setup(ForgeDevPlugin plugin, Project project) {
358362
}
359363
}
360364

361-
setupMCP.configure(task -> {
362-
task.getSideAnnotationStripperConfig().fileProvider(getProviders().provider(() -> legacyPatcher.getSideAnnotationStrippers().getSingleFile()));
363-
});
365+
if (!legacyPatcher.getSideAnnotationStrippers().isEmpty()) {
366+
setupMCP.configure(task -> {
367+
// TODO do this better
368+
task.getSideAnnotationStripperConfig().fileProvider(getProviders().provider(() -> legacyPatcher.getSideAnnotationStrippers().getSingleFile()));
369+
});
370+
371+
userdevConfig.configure(task -> task.getSASs().from(legacyPatcher.getSideAnnotationStrippers()));
372+
for (var sas : legacyPatcher.getSideAnnotationStrippers()) {
373+
userdevJar.configure(task -> task.from(sas, copy -> copy.into("sas/")));
374+
}
364375

365-
// TODO SAS! Used MCPFunction in FG6, I DON'T GIVE A SHIT RIGHT NOW!!!
376+
var fakePatches = tasks.register("createFakeSASPatches", CreateFakeSASPatches.class, task ->
377+
task.getFiles().from(legacyPatcher.getSideAnnotationStrippers())
378+
);
379+
for (var genBinPatchesTask : genBinPatchesTasks) {
380+
genBinPatchesTask.configure(task -> task.getPatches().from(fakePatches.flatMap(CreateFakeSASPatches::getOutput)));
381+
}
382+
}
366383

367384
if (!legacyPatcher.getExtraMappings().isEmpty()) {
368385
for (var extraMapping : legacyPatcher.getExtraMappings()) {
@@ -400,6 +417,13 @@ private void setup(ForgeDevPlugin plugin, Project project) {
400417
if (legacyPatcher.isSrgPatches()) {
401418
genPatches.configure(task -> task.getModified().set(applyRangeMapBase.flatMap(ApplyRangeMap::getOutput)));
402419
} else {
420+
// Remap the 'clean' with out mappings.
421+
TaskProvider<LegacyApplyMappings> toMCPClean = tasks.register("srg2mcpClean", LegacyApplyMappings.class, task -> {
422+
task.getInput().set(legacyPatcher.getCleanSrc());
423+
task.getMappingsZip().fileProvider(mappingsZipFile);
424+
task.getLambdas().set(false);
425+
});
426+
403427
var dirtyZip = tasks.register("patchedZip", Zip.class, task -> {
404428
task.from(legacyPatcher.getPatchedSrc());
405429
task.getArchiveFileName().set("output.zip");
@@ -408,13 +432,11 @@ private void setup(ForgeDevPlugin plugin, Project project) {
408432

409433
// Fixup the inputs.
410434
applyPatches.configure(task -> {
411-
//task.getInput().set(toMCPClean.flatMap(LegacyApplyMappings::getOutput));
412-
//task.getInput().fileProvider(applyPatches.flatMap(a -> a.getInput().getAsFile()));
413-
task.getArchiveBase().set("zip");
435+
task.dependsOn(toMCPClean);
436+
task.getInput().set(toMCPClean.flatMap(LegacyApplyMappings::getOutput));
414437
});
415438
genPatches.configure(task -> {
416-
//task.getInput().set(toMCPClean.flatMap(LegacyApplyMappings::getOutput));
417-
task.getInput().fileProvider(applyPatches.flatMap(a -> a.getInput().getAsFile()));
439+
task.getInput().set(toMCPClean.flatMap(LegacyApplyMappings::getOutput));
418440
task.getModified().set(dirtyZip.flatMap(AbstractArchiveTask::getArchiveFile));
419441
});
420442

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*
2+
* Copyright (c) Forge Development LLC and contributors
3+
* SPDX-License-Identifier: LGPL-2.1-only
4+
*/
5+
package net.minecraftforge.forgedev.tasks.sas;
6+
7+
import net.minecraftforge.forgedev.ForgeDevTask;
8+
import org.codehaus.groovy.runtime.ResourceGroovyMethods;
9+
import org.gradle.api.DefaultTask;
10+
import org.gradle.api.file.ConfigurableFileCollection;
11+
import org.gradle.api.file.DirectoryProperty;
12+
import org.gradle.api.provider.Property;
13+
import org.gradle.api.tasks.InputFiles;
14+
import org.gradle.api.tasks.OutputDirectory;
15+
import org.gradle.api.tasks.TaskAction;
16+
import org.gradle.workers.WorkAction;
17+
import org.gradle.workers.WorkParameters;
18+
import org.gradle.workers.WorkerExecutor;
19+
20+
import javax.inject.Inject;
21+
import java.io.File;
22+
import java.io.IOException;
23+
24+
// TODO [ForgeDev] This does not account for incremental changes.
25+
public abstract class CreateFakeSASPatches extends DefaultTask implements ForgeDevTask {
26+
public abstract @InputFiles ConfigurableFileCollection getFiles();
27+
28+
public abstract @OutputDirectory DirectoryProperty getOutput();
29+
30+
protected abstract @Inject WorkerExecutor getWorkerExecutor();
31+
32+
public CreateFakeSASPatches() {
33+
getOutput().convention(getDefaultOutputDirectory().map(d -> d.dir("patches")));
34+
}
35+
36+
@TaskAction
37+
public void apply() throws IOException {
38+
{
39+
var output = getOutput().get().getAsFile();
40+
if (!output.exists() && !output.mkdirs())
41+
throw new IllegalStateException("Failed to make directory: " + output);
42+
}
43+
44+
var queue = getWorkerExecutor().noIsolation();
45+
46+
for (var file : getFiles()) {
47+
for (var line : ResourceGroovyMethods.readLines(file)) {
48+
if (line.isBlank()) continue;
49+
50+
queue.submit(Action.class, parameters -> {
51+
parameters.getOutput().set(this.getOutput());
52+
parameters.getLine().set(line);
53+
});
54+
}
55+
}
56+
57+
queue.await();
58+
}
59+
60+
static abstract class Action implements WorkAction<Action.Parameters> {
61+
interface Parameters extends WorkParameters {
62+
DirectoryProperty getOutput();
63+
64+
Property<String> getLine();
65+
}
66+
67+
@Inject
68+
public Action() { }
69+
70+
@Override
71+
public void execute() {
72+
var output = getParameters().getOutput().getAsFile().get();
73+
var line = getParameters().getLine().get();
74+
75+
int idx = line.indexOf('#');
76+
if (idx == 0) return;
77+
78+
if (idx != -1) line = line.substring(0, idx - 1);
79+
if (line.charAt(0) == '\t') line = line.substring(1);
80+
var cls = (line.trim() + " ").split(" ", -1)[0];
81+
var patch = new File(output, cls + ".java.patch");
82+
if (!patch.getParentFile().exists() && !patch.getParentFile().mkdirs())
83+
throw new IllegalStateException("Failed to make directory: " + patch.getParentFile());
84+
85+
try {
86+
patch.createNewFile();
87+
} catch (IOException e) {
88+
throw new IllegalStateException("Failed to create empty file: " + patch, e);
89+
}
90+
}
91+
}
92+
}

0 commit comments

Comments
 (0)