Skip to content

Commit 7c8880c

Browse files
committed
Update dependencies to fix resolution issues
1 parent de7cdbf commit 7c8880c

File tree

10 files changed

+90
-130
lines changed

10 files changed

+90
-130
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
id 'idea'
88
id 'eclipse'
99
id 'maven-publish'
10-
id 'io.freefair.javadoc-links'
10+
//id 'io.freefair.javadoc-links'
1111
id 'net.minecraftforge.gradleutils'
1212
alias libs.plugins.gitversion
1313
alias libs.plugins.changelog

settings.gradle

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
plugins {
2-
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' // https://plugins.gradle.org/plugin/org.gradle.toolchains.foojay-resolver-convention
3-
4-
// NOTE: We need to load this into the classpath before GradleUtils for the service to load correctly
5-
id 'io.freefair.javadoc-links' version '8.14' apply false // https://plugins.gradle.org/plugin/io.freefair.javadoc-links
6-
7-
id 'net.minecraftforge.gradleutils' version '3.2.7' // https://plugins.gradle.org/plugin/net.minecraftforge.gradleutils
2+
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
3+
id 'io.freefair.javadoc-links' version '8.14' apply false
4+
id 'net.minecraftforge.gradleutils' version '3.3.11'
85
}
96

107
rootProject.name = 'forgegradle'
@@ -15,6 +12,7 @@ dependencyResolutionManagement {
1512
mavenCentral()
1613
maven gradleutils.forgeMaven
1714
maven { url = 'https://maven.moddinglegacy.com/maven' } // Gradle API
15+
mavenLocal()
1816
}
1917

2018
//@formatter:off
@@ -35,11 +33,11 @@ dependencyResolutionManagement {
3533
library 'gradle', 'name.remal.gradle-api', 'gradle-api' versionRef 'gradle'
3634

3735
// GradleUtils Shared Base
38-
library 'gradleutils-shared', 'net.minecraftforge', 'gradleutils-shared' version '3.2.7'
36+
library 'gradleutils-shared', 'net.minecraftforge', 'gradleutils-shared' version '3.3.11'
3937

4038
// AccessTransformers Gradle Plugin
4139
// https://plugins.gradle.org/plugin/net.minecraftforge.accesstransformers
42-
library 'accesstransformers-gradle', 'net.minecraftforge.accesstransformers', 'net.minecraftforge.accesstransformers.gradle.plugin' version '4.0.1'
40+
library 'accesstransformers-gradle', 'net.minecraftforge.accesstransformers', 'net.minecraftforge.accesstransformers.gradle.plugin' version '4.0.2'
4341

4442
library 'utils-data', 'net.minecraftforge', 'json-data-utils' version '0.2.1' // https://files.minecraftforge.net/net/minecraftforge/json-data-utils/index.html
4543
library 'utils-hash', 'net.minecraftforge', 'hash-utils' version '0.1.9' // https://files.minecraftforge.net/net/minecraftforge/hash-utils/index.html

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ForgeGradleProblems() {
3131
//region Minecraft
3232
//region Mappings
3333
RuntimeException missingMappings(Throwable throwable) {
34-
return this.getReporter().throwing(throwable, this.id("missing-mappings", "Missing Minecraft mappings"), spec -> spec
34+
return this.throwing(throwable, "missing-mappings", "Missing Minecraft mappings", spec -> spec
3535
.details("""
3636
Attempted to consume Minecraft mappings, but none were declared.
3737
Minecraft dependencies cannot be resolved without mappings.""")
@@ -44,7 +44,7 @@ RuntimeException missingMappings(Throwable throwable) {
4444
}
4545

4646
RuntimeException nullMappingsParam(String name) {
47-
return this.getReporter().throwing(new IllegalArgumentException("Mappings %s cannot be null".formatted(name)), this.id("null-mappings-param", "Null mappings parameter"), spec -> spec
47+
return this.throwing(new IllegalArgumentException("Mappings %s cannot be null".formatted(name)), "null-mappings-param", "Null mappings parameter", spec -> spec
4848
.details("""
4949
Attempted to create a Mappings object, but the %s parameter was null.
5050
The parameters for the Mappings object are not null.""".formatted(name))
@@ -61,7 +61,7 @@ void reportOverriddenMappings(MinecraftMappings original, MinecraftMappings repl
6161
var comparison = "Old: (channel: %s, version: %s), New: (channel: %s, version: %s)"
6262
.formatted(original.channel(), original.version(), replacement.channel(), replacement.version());
6363
LOGGER.warn("WARNING: Overriding previously declared mappings! {}", comparison);
64-
this.getReporter().report(id("multiple-mappings", "Multiple mappings declared"), spec -> spec
64+
this.report("multiple-mappings", "Multiple mappings declared", spec -> spec
6565
.details("""
6666
Mappings are being set, even though they have already been declared.
6767
This will cause the current mappings to be overridden, which may lead to unexpected behavior.
@@ -79,7 +79,7 @@ void reportMissingMinecraftDependency() {
7979
if (!this.test("net.minecraftforge.gradle.warnings.missingMinecraftDependency")) return;
8080

8181
LOGGER.error("ERROR: No Minecraft dependency declared! Disabling ForgeGradle. See Problems report for details.");
82-
this.getReporter().report(id("missing-dependency", "Missing Minecraft dependency"), spec -> spec
82+
this.report("missing-dependency", "Missing Minecraft dependency", spec -> spec
8383
.details("""
8484
ForgeGradle was applied, but no Minecraft dependency was declared.
8585
ForgeGradle will now be disabled and stop all further registrations.""")
@@ -94,7 +94,7 @@ void reportMissingMinecraftDependency() {
9494
}
9595

9696
RuntimeException invalidMinecraftDependencyType(Dependency dependency) {
97-
return this.getReporter().throwing(new IllegalArgumentException("Minecraft dependency is not a module dependency"), this.id("unsupported-minecraft-dependency-type", "Non-module dependency used as Minecraft dependency"), spec -> spec
97+
return this.throwing(new IllegalArgumentException("Minecraft dependency is not a module dependency"), "unsupported-minecraft-dependency-type", "Non-module dependency used as Minecraft dependency", spec -> spec
9898
.details("""
9999
Attempted to use a non-module (or internal module) dependency as a Minecraft dependency.
100100
The Minecraft dependency must be an external module dependency, as it is resolved from the Minecraft Maven.
@@ -111,7 +111,7 @@ RuntimeException invalidMinecraftDependencyType(Dependency dependency) {
111111

112112
@Deprecated(forRemoval = true)
113113
void reportMissingMetadata(Throwable throwable) {
114-
this.getReporter().report(id("missing-metadata", "Failed to extract metadata"), spec -> spec
114+
this.report("missing-metadata", "Failed to extract metadata", spec -> spec
115115
.details("""
116116
ForgeGradle failed to locate or extract the metadata generated for the Minecraft dependency.
117117
This is expected if the Minecraft Maven has not yet been synced.
@@ -126,7 +126,7 @@ void reportMissingMetadata(Throwable throwable) {
126126
}
127127

128128
RuntimeException changingMinecraftDependency(Dependency dependency) {
129-
return this.getReporter().throwing(new IllegalArgumentException("Minecraft dependency cannot be changing"), this.id("changing-minecraft-dependency", "Minecraft dependency marked as changing"), spec -> spec
129+
return this.throwing(new IllegalArgumentException("Minecraft dependency cannot be changing"), "changing-minecraft-dependency", "Minecraft dependency marked as changing", spec -> spec
130130
.details("""
131131
Attempted to use a Minecraft dependency that was marked as changing.
132132
This is currently unsupported.
@@ -143,7 +143,7 @@ RuntimeException changingMinecraftDependency(Dependency dependency) {
143143
void reportMcMavenNotDeclared() {
144144
if (!this.test("net.minecraftforge.gradle.warnings.missingRepository.mcmaven")) return;
145145

146-
this.getReporter().report(id("minecraft-maven-not-declared", "Minecraft Maven not declared"), spec -> spec
146+
this.report("minecraft-maven-not-declared", "Minecraft Maven not declared", spec -> spec
147147
.details("""
148148
ForgeGradle was configured to sync the Minecraft Maven, but it was not declared as a repository!
149149
This will result in a "cannot resolve dependency" error.""")
@@ -156,7 +156,7 @@ void reportMcMavenNotDeclared() {
156156
void reportMcLibsMavenNotDeclared() {
157157
if (!this.test("net.minecraftforge.gradle.warnings.missingRepository.mclibs")) return;
158158

159-
this.getReporter().report(id("minecraft-libs-maven-not-declared", "Minecraft Libraries maven not declared"), spec -> spec
159+
this.report("minecraft-libs-maven-not-declared", "Minecraft Libraries maven not declared", spec -> spec
160160
.details("""
161161
ForgeGradle was configured to sync the Minecraft Maven, but the Minecraft Libraries maven was not declared!
162162
The generated Minecraft artifact has dependencies from libraries that may only exist on there.
@@ -170,7 +170,7 @@ void reportMcLibsMavenNotDeclared() {
170170
void reportForgeMavenNotDeclared() {
171171
if (!this.test("net.minecraftforge.gradle.warnings.missingRepository.forge")) return;
172172

173-
this.getReporter().report(id("forge-maven-not-declared", "Forge maven not declared"), spec -> spec
173+
this.report("forge-maven-not-declared", "Forge maven not declared", spec -> spec
174174
.details("""
175175
ForgeGradle was configured to sync the Minecraft Maven, but the Forge maven was not declared!
176176
The generated Minecraft artifact has dependencies from libraries that may only exist on there.
@@ -184,7 +184,7 @@ void reportForgeMavenNotDeclared() {
184184
//endregion
185185

186186
void reportAccessTransformersNotApplied(Throwable e) {
187-
this.getReporter().report(this.id("access-transformers-not-applied", "AccessTransformers plugin not applied"), spec -> spec
187+
this.report("access-transformers-not-applied", "AccessTransformers plugin not applied", spec -> spec
188188
.details("""
189189
The build failed with an exception when trying to access access transformers.
190190
The project using ForgeGradle does not have the AccessTransformers Gradle plugin applied, and thus it cannot be used.
@@ -198,7 +198,7 @@ void reportAccessTransformersNotApplied(Throwable e) {
198198
}
199199

200200
RuntimeException accessTransformersNotOnClasspath(Throwable e) {
201-
return this.getReporter().throwing(e, this.id("access-transformers-not-on-classpath", "AccessTransformers plugin not on classpath"), spec -> spec
201+
return this.throwing(e, "access-transformers-not-on-classpath", "AccessTransformers plugin not on classpath", spec -> spec
202202
.details("""
203203
The AccessTransformers plugin was not loaded in the classpath before ForgeGradle.
204204
ForgeGradle cannot create the 'minecraft' extension without referencing classes from the plugin.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package net.minecraftforge.gradle;
2+
3+
import net.minecraftforge.gradleutils.shared.EnhancedPlugin;
4+
import net.minecraftforge.gradleutils.shared.EnhancedTask;
5+
import org.gradle.api.Project;
6+
import org.gradle.api.Task;
7+
8+
interface ForgeGradleTask extends Task, EnhancedTask<ForgeGradleProblems> {
9+
@Override
10+
default Class<? extends EnhancedPlugin<? super Project>> pluginType() {
11+
return ForgeGradlePlugin.class;
12+
}
13+
14+
@Override
15+
default Class<ForgeGradleProblems> problemsType() {
16+
return ForgeGradleProblems.class;
17+
}
18+
}

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

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@
1111
import net.minecraftforge.accesstransformers.gradle.AccessTransformersContainer;
1212
import net.minecraftforge.gradleutils.shared.Closures;
1313
import org.gradle.api.Action;
14+
import org.gradle.api.InvalidUserDataException;
15+
import org.gradle.api.NamedDomainObjectProvider;
1416
import org.gradle.api.Project;
17+
import org.gradle.api.artifacts.Configuration;
1518
import org.gradle.api.artifacts.Dependency;
19+
import org.gradle.api.artifacts.DependencyScopeConfiguration;
1620
import org.gradle.api.artifacts.ExternalModuleDependency;
1721
import org.gradle.api.attributes.Attribute;
1822
import org.gradle.api.file.ProjectLayout;
@@ -64,23 +68,6 @@ public Provider<ExternalModuleDependency> getDelegate() {
6468
}
6569

6670
Provider<ExternalModuleDependency> setDelegate(Object dependencyNotation, Closure<?> closure) {
67-
var hash = this.hashCode();
68-
69-
this.project.afterEvaluate(project -> project.getConfigurations().forEach(configuration -> {
70-
configuration.getDependencies().matching(dependency -> {
71-
var ext = ((ExtensionAware) dependency).getExtensions().getExtraProperties();
72-
return ext.has("__mc_dep_hash") && (int) ext.get("__mc_dep_hash") == hash;
73-
}).configureEach(dependency -> configuration.getDependencyConstraints().add(this.project.getDependencies().getConstraints().create(((ExternalModuleDependency) dependency).getModule().toString(), constraint -> {
74-
constraint.because("Accounts for mappings used and natives variants");
75-
76-
constraint.attributes(attributes -> {
77-
attributes.attribute(MinecraftExtension.Attributes.os, this.getObjects().named(OperatingSystemFamily.class, OperatingSystem.current().getFamilyName()));
78-
attributes.attributeProvider(MinecraftExtension.Attributes.mappingsChannel, mappings.map(MinecraftMappings::channel));
79-
attributes.attributeProvider(MinecraftExtension.Attributes.mappingsVersion, mappings.map(MinecraftMappings::version));
80-
});
81-
})));
82-
}));
83-
8471
return this.delegate = this.getObjects().property(ExternalModuleDependency.class).value(this.getProviders().provider(
8572
() -> (ExternalModuleDependency) this.project.getDependencies().create(dependencyNotation, Closures.<Dependency, ExternalModuleDependency>function(dependency -> {
8673
if (!(dependency instanceof ExternalModuleDependency module))
@@ -91,8 +78,6 @@ Provider<ExternalModuleDependency> setDelegate(Object dependencyNotation, Closur
9178

9279
Closures.invoke(this.closure(closure), module);
9380

94-
((ExtensionAware) module).getExtensions().getExtraProperties().set("__mc_dep_hash", hash);
95-
9681
return module;
9782
}))
9883
));
@@ -103,7 +88,32 @@ void resolve() {
10388
}
10489

10590
@Override
106-
public void handle(SourceSet sourceSet) { }
91+
public void handle(SourceSet sourceSet) {
92+
var configurations = this.project.getConfigurations();
93+
var dependency = this.getDelegate().get();
94+
95+
NamedDomainObjectProvider<DependencyScopeConfiguration> minecraftDependencyConstraints;
96+
try {
97+
minecraftDependencyConstraints = configurations.dependencyScope("minecraftDependencyConstraints", configuration -> {
98+
configuration.setDescription("Transient dependency constraints for Minecraft dependencies.");
99+
});
100+
} catch (InvalidUserDataException e) {
101+
minecraftDependencyConstraints = configurations.named("minecraftDependencyConstraints", DependencyScopeConfiguration.class);
102+
}
103+
104+
configurations.getByName(sourceSet.getCompileClasspathConfigurationName()).extendsFrom(minecraftDependencyConstraints.get());
105+
configurations.getByName(sourceSet.getRuntimeClasspathConfigurationName()).extendsFrom(minecraftDependencyConstraints.get());
106+
107+
minecraftDependencyConstraints.get().getDependencyConstraints().add(this.project.getDependencies().getConstraints().create(dependency.getModule().toString(), constraint -> {
108+
constraint.because("Accounts for mappings used and natives variants");
109+
110+
constraint.attributes(attributes -> {
111+
attributes.attribute(MinecraftExtension.Attributes.os, this.getObjects().named(OperatingSystemFamily.class, OperatingSystem.current().getFamilyName()));
112+
attributes.attributeProvider(MinecraftExtension.Attributes.mappingsChannel, mappings.map(MinecraftMappings::channel));
113+
attributes.attributeProvider(MinecraftExtension.Attributes.mappingsVersion, mappings.map(MinecraftMappings::version));
114+
});
115+
}));
116+
}
107117

108118
@Override
109119
public MinecraftMappings getMappings() {
@@ -164,16 +174,15 @@ public Provider<ExternalModuleDependency> getDelegate() {
164174

165175
@Override
166176
Provider<ExternalModuleDependency> setDelegate(Object dependencyNotation, Closure<?> closure) {
167-
return this.delegate = this.getObjects().property(ExternalModuleDependency.class).value(this.getProviders().provider(() -> {
168-
var dependency = super.setDelegate(dependencyNotation, closure);
169-
return this.atPath.isPresent() || this.getAccessTransformer().isPresent() ? (ExternalModuleDependency) this.atContainer.dep(dependency).get() : dependency.get();
170-
}));
177+
var dependency = super.setDelegate(dependencyNotation, closure);
178+
return this.delegate = this.atPath.map(path -> (ExternalModuleDependency) this.atContainer.dep(dependency).get()).orElse(dependency);
171179
}
172180

173181
@Override
174182
public void handle(SourceSet sourceSet) {
175183
super.handle(sourceSet);
176184

185+
if (!Util.contains(project.getConfigurations(), sourceSet, false, this.getDelegate().get())) return;
177186
if (!this.atPath.isPresent()) return;
178187

179188
var itor = sourceSet.getResources().getSrcDirs().iterator();

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,14 @@
4040
import org.gradle.api.provider.Provider;
4141
import org.gradle.api.provider.ProviderFactory;
4242
import org.gradle.api.reflect.TypeOf;
43-
import org.gradle.api.tasks.SourceSet;
4443

4544
import javax.inject.Inject;
4645
import java.util.ArrayList;
47-
import java.util.Collections;
4846
import java.util.List;
4947
import java.util.Locale;
5048
import java.util.Map;
5149
import java.util.Objects;
52-
import java.util.Set;
53-
import java.util.function.BiFunction;
54-
import java.util.function.Function;
5550
import java.util.stream.Collectors;
56-
import java.util.stream.Stream;
5751

5852
abstract class MinecraftExtensionImpl implements MinecraftExtensionInternal {
5953
private static final String EXT_MAVEN_REPOS = "fg_mc_maven_repos";
@@ -267,8 +261,9 @@ void finish(Project project) {
267261
var sourceSetsDir = this.getObjects().directoryProperty().value(this.getProjectLayout().getBuildDirectory().dir("sourceSets"));
268262
sourceSets.configureEach(sourceSet -> {
269263
for (var minecraftDependency : this.minecraftDependencies) {
270-
if (Util.contains(configurations, sourceSet, minecraftDependency.getDelegate().get()))
264+
if (Util.contains(configurations, sourceSet, true, minecraftDependency.getDelegate().get())) {
271265
minecraftDependency.handle(sourceSet);
266+
}
272267
}
273268

274269
if (this.problems.test("net.minecraftforge.gradle.mergeSourceSets")) {

0 commit comments

Comments
 (0)