Skip to content

Commit a806ce1

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

2 files changed

Lines changed: 120 additions & 10 deletions

File tree

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

0 commit comments

Comments
 (0)