Skip to content

Commit 3d095dc

Browse files
committed
add preen to processing tasks
1 parent baee37b commit 3d095dc

File tree

9 files changed

+173
-9
lines changed

9 files changed

+173
-9
lines changed

build.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,13 @@ dependencies {
4343
implementation 'net.ornithemc:enigma-cli:1.2.7'
4444
implementation 'net.ornithemc:stitch:0.19.8'
4545
implementation 'net.ornithemc:mapping-utils:0.16.1'
46-
implementation 'net.ornithemc:exceptor:1.0.0'
46+
implementation 'net.ornithemc:exceptor:1.1.0'
47+
implementation 'net.ornithemc:preen:1.0.0'
4748
implementation 'net.ornithemc:nester:1.3.2'
4849
implementation 'net.fabricmc:tiny-remapper:0.9.0'
4950
implementation 'net.fabricmc:name-proposal:0.2.0'
5051
implementation 'net.fabricmc:mapping-io:0.5.1'
51-
implementation 'io.github.gaming32:signature-changer:1.0.0-beta.3'
52+
implementation 'io.github.gaming32:signature-changer:1.0.0'
5253
}
5354

5455
tasks.withType(JavaCompile).configureEach {

src/main/java/net/ornithemc/keratin/KeratinGradleExtension.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
import net.ornithemc.keratin.api.task.setup.MapSetupJarsTask;
106106
import net.ornithemc.keratin.api.task.setup.MapSourceJarsTask;
107107
import net.ornithemc.keratin.api.task.setup.MergeSourceJarsTask;
108+
import net.ornithemc.keratin.api.task.setup.ProcessSourceJarsTask;
108109
import net.ornithemc.keratin.api.task.setup.SetUpSourceTask;
109110
import net.ornithemc.keratin.matching.Matches;
110111
import net.ornithemc.keratin.util.Versioned;
@@ -773,9 +774,12 @@ public void tasks(TaskSelection selection) throws Exception {
773774
TaskProvider<?> mergeSourceJars = tasks.register("mergeSourceJars", MergeSourceJarsTask.class, task -> {
774775
task.dependsOn(mapSourceJars);
775776
});
777+
TaskProvider<?> processSourceJars = tasks.register("processSourceJars", ProcessSourceJarsTask.class, task -> {
778+
task.dependsOn(mergeSourceJars);
779+
});
776780

777781
TaskProvider<?> makeSource = tasks.register("makeSource", MakeSourceTask.class, task -> {
778-
task.dependsOn(mergeSourceJars);
782+
task.dependsOn(processSourceJars);
779783
});
780784
TaskProvider<?> setUpSource = tasks.register("setUpSource", SetUpSourceTask.class, task -> {
781785
task.dependsOn(makeSource);

src/main/java/net/ornithemc/keratin/OrnitheFiles.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ public class OrnitheFiles implements OrnitheFilesAPI {
6969
private final Versioned<MinecraftVersion, File> signaturePatchedIntermediaryClientJar;
7070
private final Versioned<MinecraftVersion, File> signaturePatchedIntermediaryServerJar;
7171
private final Versioned<MinecraftVersion, File> signaturePatchedIntermediaryMergedJar;
72+
private final Versioned<MinecraftVersion, File> preenedIntermediaryClientJar;
73+
private final Versioned<MinecraftVersion, File> preenedIntermediaryServerJar;
74+
private final Versioned<MinecraftVersion, File> preenedIntermediaryMergedJar;
7275
private final Versioned<MinecraftVersion, File> nestedIntermediaryClientJar;
7376
private final Versioned<MinecraftVersion, File> nestedIntermediaryServerJar;
7477
private final Versioned<MinecraftVersion, File> nestedIntermediaryMergedJar;
@@ -147,6 +150,7 @@ public class OrnitheFiles implements OrnitheFilesAPI {
147150
private final Versioned<MinecraftVersion, File> namedSourceClientJar;
148151
private final Versioned<MinecraftVersion, File> namedSourceServerJar;
149152
private final Versioned<MinecraftVersion, File> namedSourceMergedJar;
153+
private final Versioned<MinecraftVersion, File> processedNamedSourceJar;
150154

151155
private final Versioned<MinecraftVersion, File> setupClientIntermediaryMappings;
152156
private final Versioned<MinecraftVersion, File> setupServerIntermediaryMappings;
@@ -372,6 +376,27 @@ public OrnitheFiles(KeratinGradleExtension keratin) {
372376
}
373377
}
374378
});
379+
this.preenedIntermediaryClientJar = new Versioned<>(minecraftVersion -> {
380+
if (!minecraftVersion.hasClient() || minecraftVersion.hasServer()) {
381+
throw new NoSuchFileException("intermediary client jar for Minecraft version " + minecraftVersion.id() + " does not exist!");
382+
} else {
383+
return new File(getProcessedJarsCache(), "%s-preened-intermediary-gen%d-client.jar".formatted(minecraftVersion.client().id(), getIntermediaryGen()));
384+
}
385+
});
386+
this.preenedIntermediaryServerJar = new Versioned<>(minecraftVersion -> {
387+
if (!minecraftVersion.hasServer() || minecraftVersion.hasClient()) {
388+
throw new NoSuchFileException("intermediary server jar for Minecraft version " + minecraftVersion.id() + " does not exist!");
389+
} else {
390+
return new File(getProcessedJarsCache(), "%s-preened-intermediary-gen%d-server.jar".formatted(minecraftVersion.server().id(), getIntermediaryGen()));
391+
}
392+
});
393+
this.preenedIntermediaryMergedJar = new Versioned<>(minecraftVersion -> {
394+
if (!minecraftVersion.hasClient() || !minecraftVersion.hasServer()) {
395+
throw new NoSuchFileException("intermediary jars for Minecraft version " + minecraftVersion.id() + " cannot be merged: either the client or server jar does not exist!");
396+
} else {
397+
return new File(getProcessedJarsCache(), "%s-preened-intermediary-gen%d-merged.jar".formatted(minecraftVersion.id(), getIntermediaryGen()));
398+
}
399+
});
375400
this.nestedIntermediaryClientJar = new Versioned<>(minecraftVersion -> {
376401
if (!minecraftVersion.hasClient() || minecraftVersion.hasServer()) {
377402
throw new NoSuchFileException("intermediary client jar for Minecraft version " + minecraftVersion.id() + " does not exist!");
@@ -948,6 +973,7 @@ public OrnitheFiles(KeratinGradleExtension keratin) {
948973
return new File(getLocalBuildCache(), "%s-named-source-merged.jar".formatted(minecraftVersion.id()));
949974
}
950975
});
976+
this.processedNamedSourceJar = new Versioned<>(minecraftVersion -> new File(getLocalBuildCache(), "%s-processed-named-source.jar".formatted(minecraftVersion.id())));
951977

952978
this.setupClientIntermediaryMappings = new Versioned<>(minecraftVersion -> {
953979
if (!minecraftVersion.hasClient()) {
@@ -1452,6 +1478,26 @@ public File getMainSignaturePatchedIntermediaryJar(MinecraftVersion minecraftVer
14521478
return pickFileForPresentSides(minecraftVersion, signaturePatchedIntermediaryClientJar, signaturePatchedIntermediaryServerJar, signaturePatchedIntermediaryMergedJar);
14531479
}
14541480

1481+
@Override
1482+
public File getPreenedIntermediaryClientJar(MinecraftVersion minecraftVersion) {
1483+
return preenedIntermediaryClientJar.get(minecraftVersion);
1484+
}
1485+
1486+
@Override
1487+
public File getPreenedIntermediaryServerJar(MinecraftVersion minecraftVersion) {
1488+
return preenedIntermediaryServerJar.get(minecraftVersion);
1489+
}
1490+
1491+
@Override
1492+
public File getPreenedIntermediaryMergedJar(MinecraftVersion minecraftVersion) {
1493+
return preenedIntermediaryMergedJar.get(minecraftVersion);
1494+
}
1495+
1496+
@Override
1497+
public File getMainPreenedIntermediaryJar(MinecraftVersion minecraftVersion) {
1498+
return pickFileForPresentSides(minecraftVersion, preenedIntermediaryClientJar, preenedIntermediaryServerJar, preenedIntermediaryMergedJar);
1499+
}
1500+
14551501
@Override
14561502
public File getNestedIntermediaryClientJar(MinecraftVersion minecraftVersion) {
14571503
return nestedIntermediaryClientJar.get(minecraftVersion);
@@ -1807,6 +1853,11 @@ public File getNamedSourceMergedJar(MinecraftVersion minecraftVersion) {
18071853
return namedSourceMergedJar.get(minecraftVersion);
18081854
}
18091855

1856+
@Override
1857+
public File getProcessedNamedSourceJar(MinecraftVersion minecraftVersion) {
1858+
return processedNamedSourceJar.get(minecraftVersion);
1859+
}
1860+
18101861
@Override
18111862
public File getSetupClientIntermediaryMappings(MinecraftVersion minecraftVersion) {
18121863
return setupClientIntermediaryMappings.get(minecraftVersion);

src/main/java/net/ornithemc/keratin/api/OrnitheFilesAPI.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ public interface OrnitheFilesAPI {
9797

9898
File getMainSignaturePatchedIntermediaryJar(MinecraftVersion minecraftVersion);
9999

100+
File getPreenedIntermediaryClientJar(MinecraftVersion minecraftVersion);
101+
102+
File getPreenedIntermediaryServerJar(MinecraftVersion minecraftVersion);
103+
104+
File getPreenedIntermediaryMergedJar(MinecraftVersion minecraftVersion);
105+
106+
File getMainPreenedIntermediaryJar(MinecraftVersion minecraftVersion);
107+
100108
File getNestedIntermediaryClientJar(MinecraftVersion minecraftVersion);
101109

102110
File getNestedIntermediaryServerJar(MinecraftVersion minecraftVersion);
@@ -239,6 +247,8 @@ public interface OrnitheFilesAPI {
239247

240248
File getNamedSourceMergedJar(MinecraftVersion minecraftVersion);
241249

250+
File getProcessedNamedSourceJar(MinecraftVersion minecraftVersion);
251+
242252
File getSetupClientIntermediaryMappings(MinecraftVersion minecraftVersion);
243253

244254
File getSetupServerIntermediaryMappings(MinecraftVersion minecraftVersion);
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package net.ornithemc.keratin.api.task.processing;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
6+
import com.google.common.io.Files;
7+
8+
public interface Preen {
9+
10+
default void splitMergedBridgeMethods(File input, File output) throws IOException {
11+
_splitMergedBridgeMethods(input, output);
12+
}
13+
14+
static void _splitMergedBridgeMethods(File input, File output) throws IOException {
15+
if (!input.equals(output)) {
16+
Files.copy(input, output);
17+
}
18+
net.ornithemc.preen.Preen.splitMergedBridgeMethods(output.toPath());
19+
}
20+
21+
default void modifyMergedBridgeMethodsAccess(File input, File output) throws IOException {
22+
_modifyMergedBridgeMethodsAccess(input, output);
23+
}
24+
25+
static void _modifyMergedBridgeMethodsAccess(File input, File output) throws IOException {
26+
if (!input.equals(output)) {
27+
Files.copy(input, output);
28+
}
29+
net.ornithemc.preen.Preen.modifyMergedBridgeMethodsAccess(output.toPath());
30+
}
31+
}

src/main/java/net/ornithemc/keratin/api/task/processing/ProcessMinecraftTask.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public void run(WorkQueue workQueue, MinecraftVersion minecraftVersion) {
2020
parameters.getExceptionsPatchedJar().set(files.getMainExceptionsPatchedIntermediaryJar(minecraftVersion));
2121
parameters.getSparrowFile().set(files.getMainIntermediarySparrowFile(minecraftVersion));
2222
parameters.getSignaturePatchedJar().set(files.getMainSignaturePatchedIntermediaryJar(minecraftVersion));
23+
parameters.getPreenedJar().set(files.getMainPreenedIntermediaryJar(minecraftVersion));
2324
parameters.getNestsFile().set(files.getMainIntermediaryNests(minecraftVersion));
2425
parameters.getNestedJar().set(files.getMainNestedIntermediaryJar(minecraftVersion));
2526
parameters.getOutputJar().set(files.getMainProcessedIntermediaryJar(minecraftVersion));

src/main/java/net/ornithemc/keratin/api/task/processing/Processor.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ interface MinecraftProcessorParameters extends WorkParameters {
2222

2323
Property<File> getSignaturePatchedJar();
2424

25+
Property<File> getPreenedJar();
26+
2527
Property<File> getNestsFile();
2628

2729
Property<File> getNestedJar();
@@ -30,7 +32,7 @@ interface MinecraftProcessorParameters extends WorkParameters {
3032

3133
}
3234

33-
abstract class ProcessMinecraft implements WorkAction<MinecraftProcessorParameters>, Exceptor, SignaturePatcher, Nester {
35+
abstract class ProcessMinecraft implements WorkAction<MinecraftProcessorParameters>, Exceptor, SignaturePatcher, Preen, Nester {
3436

3537
@Override
3638
public void execute() {
@@ -57,6 +59,15 @@ public void execute() {
5759
signaturePatchJar(jarIn, jarOut, data);
5860
}
5961

62+
data = null;
63+
64+
{
65+
jarIn = jarOut;
66+
jarOut = getParameters().getPreenedJar().get();
67+
68+
modifyMergedBridgeMethodsAccess(jarIn, jarOut);
69+
}
70+
6071
data = getParameters().getNestsFile().getOrNull();
6172

6273
if (data != null) {

src/main/java/net/ornithemc/keratin/api/task/setup/MakeSourceTask.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,7 @@ public void run(WorkQueue workQueue, MinecraftVersion minecraftVersion) {
1919
Project project = keratin.getProject();
2020
OrnitheFilesAPI files = keratin.getFiles();
2121

22-
File sourceJar = minecraftVersion.canBeMerged()
23-
? files.getNamedSourceMergedJar(minecraftVersion)
24-
: minecraftVersion.hasClient()
25-
? files.getNamedSourceClientJar(minecraftVersion)
26-
: files.getNamedSourceServerJar(minecraftVersion);
22+
File sourceJar = files.getProcessedNamedSourceJar(minecraftVersion);
2723
File decompSrcDir = files.getDecompiledSourceDirectory(minecraftVersion);
2824

2925
submitJavaExecDecompileTask(
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package net.ornithemc.keratin.api.task.setup;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
6+
import org.gradle.api.provider.Property;
7+
import org.gradle.workers.WorkAction;
8+
import org.gradle.workers.WorkParameters;
9+
import org.gradle.workers.WorkQueue;
10+
11+
import net.ornithemc.keratin.KeratinGradleExtension;
12+
import net.ornithemc.keratin.api.MinecraftVersion;
13+
import net.ornithemc.keratin.api.OrnitheFilesAPI;
14+
import net.ornithemc.keratin.api.task.MinecraftTask;
15+
import net.ornithemc.keratin.api.task.processing.Preen;
16+
17+
public abstract class ProcessSourceJarsTask extends MinecraftTask {
18+
19+
@Override
20+
public void run(WorkQueue workQueue, MinecraftVersion minecraftVersion) throws Exception {
21+
KeratinGradleExtension keratin = getExtension();
22+
OrnitheFilesAPI files = keratin.getFiles();
23+
24+
File sourceJar = minecraftVersion.canBeMerged()
25+
? files.getNamedSourceMergedJar(minecraftVersion)
26+
: minecraftVersion.hasClient()
27+
? files.getNamedSourceClientJar(minecraftVersion)
28+
: files.getNamedSourceServerJar(minecraftVersion);
29+
File processedSourceJar = files.getProcessedNamedSourceJar(minecraftVersion);
30+
31+
workQueue.submit(ProcessSourceJar.class, parameters -> {
32+
parameters.getInput().set(sourceJar);
33+
parameters.getOutput().set(processedSourceJar);
34+
});
35+
}
36+
37+
public interface ProcessSourceJarParameters extends WorkParameters {
38+
39+
Property<File> getInput();
40+
41+
Property<File> getOutput();
42+
43+
}
44+
45+
public static abstract class ProcessSourceJar implements WorkAction<ProcessSourceJarParameters>, Preen {
46+
47+
@Override
48+
public void execute() {
49+
File input = getParameters().getInput().get();
50+
File output = getParameters().getOutput().get();
51+
52+
try {
53+
splitMergedBridgeMethods(input, output);
54+
} catch (IOException e) {
55+
throw new RuntimeException("error while processing jar", e);
56+
}
57+
}
58+
}
59+
}

0 commit comments

Comments
 (0)