Skip to content

Commit 091d0d6

Browse files
committed
Throw error on run task when MC dep is out-of-date
This is the same error for when the MC dep is out-of-date for the relevant source set's compileJava task.
1 parent 631a2af commit 091d0d6

File tree

4 files changed

+34
-4
lines changed

4 files changed

+34
-4
lines changed

src/main/java/net/minecraftforge/gradle/internal/ForgeGradleProblems.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ RuntimeException changingMinecraftDependency(Dependency dependency) {
128128

129129
//region Minecraft Maven
130130
RuntimeException mavenizerOutOfDateCompile(Object dependency) {
131-
return this.throwing(new IllegalStateException(), "mavenizer-out-of-date", "Minecraft Mavenizer is out-of-date", spec -> spec
131+
return this.throwing(new IllegalStateException(), "mavenizer-out-of-date-for-compile", "Minecraft Mavenizer is out-of-date", spec -> spec
132132
.details("""
133133
Gradle cannot compile your sources because the Minecraft Mavenizer is out-of-date.
134134
The Mavenizer must be re-run in order for the changes made to the Minecraft dependency to take effect.
@@ -142,6 +142,21 @@ RuntimeException mavenizerOutOfDateCompile(Object dependency) {
142142
.solution(HELP_MESSAGE));
143143
}
144144

145+
RuntimeException mavenizerOutOfDateRunTask(Object dependency) {
146+
return this.throwing(new IllegalStateException(), "mavenizer-out-of-date-for-run", "Minecraft Mavenizer is out-of-date", spec -> spec
147+
.details("""
148+
Gradle cannot run the game with Slime Launcher because the Minecraft Mavenizer is out-of-date.
149+
The Mavenizer must be re-run in order for the changes made to the Minecraft dependency to take effect.
150+
Affected dependency: '%s'"""
151+
.formatted(dependency))
152+
.severity(Severity.ERROR)
153+
.solution("Re-import your project in your IDE, as this will automatically synchronize the Mavenizer.")
154+
.solution("Run `gradlew` with no arguments, as this will automatically synchronize the Mavenizer.")
155+
.solution("Manually run the `syncMavenizer` task, located in the 'Build Setup' group.")
156+
.solution("Temporary revert any edits to the Minecraft dependency until the Mavenizer is re-run.")
157+
.solution(HELP_MESSAGE));
158+
}
159+
145160
void reportMcMavenNotDeclared() {
146161
if (!this.test("net.minecraftforge.gradle.warnings.repository.missing.mavenizer")) return;
147162

src/main/java/net/minecraftforge/gradle/internal/MinecraftDependencyImpl.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,18 @@ public void handle(SourceSet sourceSet) {
176176
this.sourceSetName = sourceSet.getName();
177177
}
178178

179+
void handle(TaskProvider<SlimeLauncherExec> runTask) {
180+
var problems = this.problems;
181+
var asString = this.asString.get();
182+
var dependencyOutput = this.mavenizerOutput.map(dir -> dir.dir(this.asPath)).get().get().getAsFile();
183+
runTask.configure(task -> {
184+
task.doFirst(t -> {
185+
if (!dependencyOutput.exists())
186+
throw problems.mavenizerOutOfDateRunTask(asString);
187+
});
188+
});
189+
}
190+
179191
@Override
180192
public MinecraftMappings getMappings() {
181193
try {

src/main/java/net/minecraftforge/gradle/internal/MinecraftExtensionImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,10 @@ private void finish(Project project) {
268268
assert minecraftDependency != null;
269269

270270
var impl = (MinecraftDependencyImpl) minecraftDependency;
271-
this.runs.forEach(options -> SlimeLauncherExec.register(project, sourceSet, options, impl.module.get(), impl.version.get(), impl.asPath.get(), impl.asString.get(), single));
271+
this.runs.forEach(options -> {
272+
var task = SlimeLauncherExec.register(project, sourceSet, options, impl.module.get(), impl.version.get(), impl.asPath.get(), impl.asString.get(), single);
273+
impl.handle(task);
274+
});
272275
}
273276
});
274277
}

src/main/java/net/minecraftforge/gradle/internal/SlimeLauncherExec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
import java.util.Map;
3838

3939
abstract class SlimeLauncherExec extends JavaExec implements ForgeGradleTask, HasPublicType {
40-
static void register(Project project, SourceSet sourceSet, SlimeLauncherOptionsImpl options, ModuleIdentifier module, String version, String asPath, String asString, boolean single) {
40+
static TaskProvider<SlimeLauncherExec> register(Project project, SourceSet sourceSet, SlimeLauncherOptionsImpl options, ModuleIdentifier module, String version, String asPath, String asString, boolean single) {
4141
TaskProvider<SlimeLauncherMetadata> metadata;
4242
{
4343
TaskProvider<SlimeLauncherMetadata> t;
@@ -67,7 +67,7 @@ static void register(Project project, SourceSet sourceSet, SlimeLauncherOptionsI
6767
}
6868

6969
var taskName = sourceSet.getTaskName("run", options.getName()) + (single ? "" : "for" + Util.dependencyToCamelCase(module));
70-
project.getTasks().register(taskName, SlimeLauncherExec.class, task -> {
70+
return project.getTasks().register(taskName, SlimeLauncherExec.class, task -> {
7171
task.getRunName().set(options.getName());
7272
task.setDescription("Runs the '%s' Slime Launcher run configuration.".formatted(options.getName()));
7373

0 commit comments

Comments
 (0)