Skip to content

Commit 7b600ca

Browse files
committed
Move the entire Forge buildSrc into this
Warning: this is **super duper incredibly scuffed!** But I did it in a way that Gradle likes. Dependencies are totally messed up, too, but it works. This is due for a huge cleanup, ***but it works.*** That being said, I may need to do some extra testing with the Forge repo without the submodules initialized. The idea is that the Forge repo should work with the ForgeDevPlugin repo uninitialized (this is by checking if `forgedev/settings.gradle` exists). But the ForgeDev 7 side of the move is done with this commit.
1 parent 101ec46 commit 7b600ca

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+3412
-9
lines changed

build.gradle

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ java {
3232
gradleutils.pluginDevDefaults(configurations, libs.versions.gradle)
3333

3434
dependencies {
35-
compileOnly libs.srgutils
36-
compileOnly libs.fastcsv
35+
implementation libs.srgutils
36+
implementation libs.fastcsv
3737

3838
// Static Analysis
3939
compileOnly libs.nulls
@@ -44,7 +44,11 @@ dependencies {
4444
// GradleUtils Shared Base
4545
implementation libs.gradleutils.shared
4646

47+
// Plugins
48+
compileOnly libs.gradle.download
49+
4750
// Utils
51+
implementation libs.bundles.asm
4852
implementation libs.bundles.utils
4953
}
5054

@@ -76,12 +80,24 @@ gradlePlugin {
7680
website = gitversion.url
7781
vcsUrl = gitversion.url + '.git'
7882

79-
plugins.register('forgedev') {
80-
id = 'net.minecraftforge.forgedev'
81-
implementationClass = 'net.minecraftforge.forgedev.ForgeDevPlugin'
82-
displayName = gradleutils.displayName.get()
83-
description = project.description
84-
tags = ['minecraftforge']
83+
plugins {
84+
register('forgedev') {
85+
id = 'net.minecraftforge.forgedev'
86+
implementationClass = 'net.minecraftforge.forgedev.ForgeDevPlugin'
87+
displayName = gradleutils.displayName.get()
88+
description = project.description
89+
tags = ['minecraftforge']
90+
}
91+
92+
register('forge') {
93+
id = 'net.minecraftforge.forge.build.forge'
94+
implementationClass = 'net.minecraftforge.forgedev.legacy.ForgeBuildPlugin'
95+
}
96+
97+
register('convention') {
98+
id = 'net.minecraftforge.forge.build.convention'
99+
implementationClass = 'net.minecraftforge.forgedev.legacy.SharedBuildPlugin'
100+
}
85101
}
86102
}
87103

settings.gradle

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ gradle.beforeProject { Project project ->
2020

2121
//@formatter:off
2222
dependencyResolutionManagement.versionCatalogs.register('libs') {
23-
version 'gradleutils', '3.3.34'
23+
version 'gradleutils', '3.3.35'
2424

2525
plugin 'licenser', 'net.minecraftforge.licenser' version '1.2.0'
2626
plugin 'gradleutils', 'net.minecraftforge.gradleutils' versionRef 'gradleutils'
@@ -39,6 +39,14 @@ dependencyResolutionManagement.versionCatalogs.register('libs') {
3939
// GradleUtils Shared Base
4040
library 'gradleutils-shared', 'net.minecraftforge', 'gradleutils-shared' versionRef 'gradleutils'
4141

42+
// Plugins
43+
library 'gradle-download', 'de.undercouch.download', 'de.undercouch.download.gradle.plugin' version '5.6.0'
44+
45+
version 'asm', '9.8'
46+
library 'asm', 'org.ow2.asm', 'asm' versionRef 'asm'
47+
library 'asm-tree', 'org.ow2.asm', 'asm-tree' versionRef 'asm'
48+
bundle 'asm', ['asm', 'asm-tree']
49+
4250
library 'srgutils', 'net.minecraftforge', 'srgutils' version '0.5.14'
4351
library 'fastcsv', 'de.siegmar', 'fastcsv' version '3.7.0'
4452

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
package net.minecraftforge.forgedev.legacy;
2+
3+
import net.minecraftforge.forgedev.legacy.tasks.BundleList;
4+
import net.minecraftforge.forgedev.tasks.filtering.LegacyFilterNewJar;
5+
import net.minecraftforge.forgedev.tasks.generation.GeneratePatcherConfigV2;
6+
import net.minecraftforge.forgedev.tasks.installertools.DownloadMappings;
7+
import net.minecraftforge.forgedev.tasks.installertools.ExtractInheritance;
8+
import net.minecraftforge.forgedev.tasks.mcp.MavenizerMCPSetup;
9+
import net.minecraftforge.forgedev.tasks.mcp.MavenizerRawArtifact;
10+
import net.minecraftforge.forgedev.tasks.obfuscation.LegacyRenameJar;
11+
import net.minecraftforge.forgedev.tasks.obfuscation.LegacyReobfuscateJar;
12+
import net.minecraftforge.forgedev.tasks.patching.binary.ApplyBinPatches;
13+
import net.minecraftforge.forgedev.tasks.patching.binary.CreateBinPatches;
14+
import net.minecraftforge.forgedev.tasks.patching.diff.ApplyPatches;
15+
import net.minecraftforge.gradleutils.shared.EnhancedPlugin;
16+
import org.gradle.api.Project;
17+
import org.gradle.api.file.ArchiveOperations;
18+
import org.gradle.api.file.Directory;
19+
import org.gradle.api.file.DuplicatesStrategy;
20+
import org.gradle.api.file.ProjectLayout;
21+
import org.gradle.api.model.ObjectFactory;
22+
import org.gradle.api.provider.ProviderFactory;
23+
import org.gradle.api.tasks.bundling.Jar;
24+
import org.gradle.api.tasks.bundling.Zip;
25+
26+
import javax.inject.Inject;
27+
import java.io.File;
28+
import java.io.IOException;
29+
import java.nio.file.Files;
30+
31+
abstract class ForgeBuildPlugin extends EnhancedPlugin<Project> {
32+
static final String NAME = "forge-build";
33+
static final String DISPLAY_NAME = "Forge Build";
34+
35+
private final ForgeBuildProblems problems = getObjects().newInstance(ForgeBuildProblems.class);
36+
37+
protected abstract @Inject ObjectFactory getObjects();
38+
39+
protected abstract @Inject ProviderFactory getProviders();
40+
41+
protected abstract @Inject ProjectLayout getLayout();
42+
43+
protected abstract @Inject ArchiveOperations getArchiveOperations();
44+
45+
@Inject
46+
public ForgeBuildPlugin() {
47+
super(NAME, DISPLAY_NAME, "forgeTools");
48+
}
49+
50+
@Override
51+
public void setup(Project project) {
52+
project.getPluginManager().apply("de.undercouch.download");
53+
54+
var providers = getProviders();
55+
var layout = getLayout();
56+
var archiveOperations = getArchiveOperations();
57+
58+
var tasks = project.getTasks();
59+
60+
project.getPluginManager().withPlugin("net.minecraftforge.forgedev", forgedevAppliedPlugin -> {
61+
var setupMCP = tasks.named("setupMCP", MavenizerMCPSetup.class);
62+
var downloadClientMappings = tasks.named("downloadClientMappings", DownloadMappings.class);
63+
var downloadServerMappings = tasks.named("downloadServerMappings", DownloadMappings.class);
64+
var jar = tasks.named("jar", Jar.class);
65+
66+
var extractInheritance = tasks.register("extractInheritance", ExtractInheritance.class, task -> {
67+
task.setGroup("Forge downloads");
68+
task.dependsOn(setupMCP);
69+
70+
task.getAdditionalArgs().add("--annotations");
71+
task.getInput().fileProvider(tasks.named("genJoinedBinPatches", CreateBinPatches.class).map(t -> t.getClean().getSingleFile()));
72+
task.getLibraries().from(setupMCP.flatMap(MavenizerMCPSetup::getLibrariesList).map(libraries -> {
73+
try {
74+
return Files.readAllLines(libraries.getAsFile().toPath()).stream().map(File::new).toList();
75+
} catch (IOException e) {
76+
throw new RuntimeException(e);
77+
}
78+
}));
79+
});
80+
81+
var createClientOfficial = tasks.register("createClientOfficial", LegacyRenameJar.class, task -> {
82+
task.dependsOn(setupMCP);
83+
84+
task.getAdditionalArgs().addAll("--ann-fix", "--ids-fix", "--src-fix", "--record-fix", "--strip-sigs", "--reverse");
85+
task.getMappings().set(downloadClientMappings.flatMap(DownloadMappings::getOutput));
86+
task.getInput().set(setupMCP.flatMap(MavenizerMCPSetup::getClientRaw));
87+
task.getOutput().set(task.getDefaultOutputFile());
88+
});
89+
90+
var createServerOfficial = tasks.register("createServerOfficial", LegacyRenameJar.class, task -> {
91+
task.dependsOn(setupMCP);
92+
93+
task.getAdditionalArgs().addAll("--ann-fix", "--ids-fix", "--src-fix", "--record-fix", "--strip-sigs", "--reverse");
94+
task.getMappings().set(downloadServerMappings.flatMap(DownloadMappings::getOutput));
95+
task.getInput().set(setupMCP.flatMap(MavenizerMCPSetup::getServerExtracted));
96+
task.getOutput().set(task.getDefaultOutputFile());
97+
});
98+
99+
var createServerShimClasspath = tasks.register("createServerShimClasspath", BundleList.class, task -> {
100+
task.dependsOn(setupMCP);
101+
102+
task.getServerBundle().set(setupMCP.flatMap(MavenizerMCPSetup::getServerRaw));
103+
});
104+
105+
var genClientBinPatches = tasks.named("genClientBinPatches", CreateBinPatches.class, task -> {
106+
task.getClean().setFrom(createClientOfficial.flatMap(LegacyRenameJar::getOutput));
107+
task.getCreate().setFrom(jar.flatMap(Jar::getArchiveFile));
108+
});
109+
110+
var genServerBinPatches = tasks.named("genServerBinPatches", CreateBinPatches.class, task -> {
111+
task.getClean().setFrom(createServerOfficial.flatMap(LegacyRenameJar::getOutput));
112+
task.getCreate().setFrom(jar.flatMap(Jar::getArchiveFile));
113+
});
114+
115+
var genJoinedBinPatches = tasks.named("genJoinedBinPatches", CreateBinPatches.class, task -> {
116+
task.getClean().setFrom(tasks.named("rawJoinedJarSrg", MavenizerRawArtifact.class).map(t -> t.getOutputs().getFiles()));
117+
});
118+
119+
var applyClientBinPatches = tasks.register("applyClientBinPatches", ApplyBinPatches.class, task -> {
120+
task.getClean().setFrom(createClientOfficial.flatMap(LegacyRenameJar::getOutput));
121+
task.getApply().setFrom(genClientBinPatches.flatMap(CreateBinPatches::getOutput));
122+
task.getData().set(true);
123+
task.getUnpatched().set(true);
124+
});
125+
126+
var applyServerBinPatches = tasks.register("applyServerBinPatches", ApplyBinPatches.class, task -> {
127+
task.getClean().setFrom(createServerOfficial.flatMap(LegacyRenameJar::getOutput));
128+
task.getApply().setFrom(genServerBinPatches.flatMap(CreateBinPatches::getOutput));
129+
task.getData().set(true);
130+
task.getUnpatched().set(true);
131+
});
132+
133+
var applyJoinedBinPatches = tasks.register("applyJoinedBinPatches", ApplyBinPatches.class, task -> {
134+
task.getClean().setFrom(genJoinedBinPatches.map(CreateBinPatches::getClean));
135+
task.getApply().setFrom(genJoinedBinPatches.flatMap(CreateBinPatches::getOutput));
136+
});
137+
138+
var applyPatches = tasks.named("applyPatches", ApplyPatches.class, task -> {
139+
task.getFailOnError().set(!problems.test("net.minecraftforge.forge.build.updating"));
140+
task.getRejects().convention(project.getRootProject().getLayout().getProjectDirectory().dir(providers.provider(() -> "rejects")).map(Directory::getAsFile));
141+
task.getArchiveRejects().unsetConvention();
142+
});
143+
144+
var reobfJar = tasks.named("reobfJar", LegacyReobfuscateJar.class);
145+
146+
var officialClassesJar = tasks.register("officialClassesJar", Zip.class, task -> {
147+
task.dependsOn(jar);
148+
149+
task.getDestinationDirectory().set(layout.getBuildDirectory().dir("libs"));
150+
task.getArchiveClassifier().set("official-classes");
151+
task.getArchiveExtension().set("jar");
152+
153+
task.from(providers.provider(() -> archiveOperations.zipTree(jar.flatMap(Jar::getArchiveFile))), copy -> copy
154+
.include("**/*.class")
155+
.exclude("mcp/**"));
156+
});
157+
158+
var filterJarNew = tasks.named("filterJarNew", LegacyFilterNewJar.class, task -> {
159+
task.dependsOn(officialClassesJar);
160+
161+
task.getInput().set(officialClassesJar.flatMap(Zip::getArchiveFile));
162+
});
163+
164+
var filterJarNewSrg = tasks.register("filterJarNewSrg", LegacyFilterNewJar.class, task -> {
165+
task.dependsOn(reobfJar, filterJarNew);
166+
167+
task.getInput().set(reobfJar.flatMap(LegacyReobfuscateJar::getOutput));
168+
task.getSrg().set(filterJarNew.flatMap(LegacyFilterNewJar::getSrg));
169+
task.getBlacklist().setFrom(filterJarNew.map(LegacyFilterNewJar::getBlacklist));
170+
});
171+
172+
var universalJar = tasks.named("universalJar", Jar.class);
173+
174+
var universalJarSrg = tasks.register("universalJarSrg", Jar.class, task -> {
175+
task.dependsOn(filterJarNewSrg, universalJar);
176+
177+
var filterNewJarSrgOutput = filterJarNewSrg.flatMap(LegacyFilterNewJar::getOutput);
178+
var universalJarOutput = universalJar.flatMap(Jar::getArchiveFile);
179+
task.from(providers.provider(() -> archiveOperations.zipTree(filterNewJarSrgOutput)));
180+
task.from(providers.provider(() -> archiveOperations.zipTree(universalJarOutput)));
181+
task.setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE);
182+
183+
task.getArchiveClassifier().set("universal-srg");
184+
task.setManifest(universalJar.map(Jar::getManifest).get());
185+
});
186+
187+
var userdevConfig = tasks.named("userdevConfig", GeneratePatcherConfigV2.class, task -> {
188+
task.getUniversal().set("%s:%s:%s:universal-srg@jar".formatted(project.getGroup(), project.getName(), project.getVersion()));
189+
});
190+
});
191+
}
192+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package net.minecraftforge.forgedev.legacy;
2+
3+
import net.minecraftforge.gradleutils.shared.EnhancedProblems;
4+
5+
import javax.inject.Inject;
6+
import java.io.Serial;
7+
8+
public abstract class ForgeBuildProblems extends EnhancedProblems {
9+
private static final @Serial long serialVersionUID = -34777297274844674L;
10+
11+
@Inject
12+
public ForgeBuildProblems() {
13+
super(ForgeBuildPlugin.NAME, ForgeBuildPlugin.DISPLAY_NAME);
14+
}
15+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package net.minecraftforge.forgedev.legacy;
2+
3+
import net.minecraftforge.gradleutils.shared.EnhancedPlugin;
4+
import net.minecraftforge.gradleutils.shared.EnhancedTask;
5+
import org.gradle.api.Project;
6+
7+
public interface ForgeBuildTask extends EnhancedTask<ForgeBuildProblems> {
8+
@Override
9+
default Class<? extends EnhancedPlugin<? super Project>> pluginType() {
10+
return ForgeBuildPlugin.class;
11+
}
12+
13+
@Override
14+
default Class<ForgeBuildProblems> problemsType() {
15+
return ForgeBuildProblems.class;
16+
}
17+
}

0 commit comments

Comments
 (0)