Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion legacytest/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.apache.commons.lang3.StringUtils;
import org.gradle.api.Action;
import org.gradle.api.InvalidUserCodeException;
import org.gradle.api.NamedDomainObjectProvider;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ExternalModuleDependency;
Expand All @@ -28,16 +29,17 @@

public abstract class ObfuscationExtension {
private final Project project;
private final Configuration autoRenamingToolRuntime;
private final Configuration installerToolsRuntime;
private final Provider<Configuration> autoRenamingToolRuntime;
private final Provider<Configuration> installerToolsRuntime;
private final FileCollection extraMixinMappings;

private final MinecraftMappings namedMappings;

@ApiStatus.Internal
@Inject
public ObfuscationExtension(Project project,
Configuration autoRenamingToolRuntime,
Configuration installerToolsRuntime,
Provider<Configuration> autoRenamingToolRuntime,
Provider<Configuration> installerToolsRuntime,
FileCollection extraMixinMappings) {
this.project = project;
this.autoRenamingToolRuntime = autoRenamingToolRuntime;
Expand Down Expand Up @@ -130,6 +132,7 @@ public TaskProvider<RemapJar> reobfuscate(TaskProvider<? extends AbstractArchive
config.getAttributes().attribute(MinecraftMappings.ATTRIBUTE, namedMappings);

// Now create a reobf configuration
// TODO: not lazy!
var reobfConfig = configurations.maybeCreate("reobf" + StringUtils.capitalize(configurationName));
reobfConfig.setDescription("The artifacts remapped to intermediate (SRG) Minecraft names for use in a production environment");
reobfConfig.getArtifacts().clear(); // If this is called multiple times...
Expand All @@ -156,12 +159,18 @@ private static <T> void copyAttribute(Project project, Attribute<T> attribute, C
}));
}

public Configuration createRemappingConfiguration(Configuration parent) {
// TODO: what if parent comes from a different project? We should at least warn in that case...
return registerRemappingConfiguration(project.getConfigurations().named(parent.getName())).get();
}

/**
* Creates a configuration that will remap its dependencies, and adds it as a children of the provided {@code parent}.
* The created configuration uses the name of its parent capitalized and prefixed by "mod".
*/
public Configuration createRemappingConfiguration(Configuration parent) {
var remappingConfig = project.getConfigurations().create("mod" + StringUtils.capitalize(parent.getName()), spec -> {
public NamedDomainObjectProvider<Configuration> registerRemappingConfiguration(NamedDomainObjectProvider<Configuration> parent) {
String remappingConfigName = "mod" + StringUtils.capitalize(parent.getName());
var remappingConfig = project.getConfigurations().register(remappingConfigName, spec -> {
spec.setDescription("Configuration for dependencies of " + parent.getName() + " that needs to be remapped");
spec.setCanBeConsumed(false);
spec.setCanBeResolved(false);
Expand Down Expand Up @@ -195,7 +204,7 @@ public Configuration createRemappingConfiguration(Configuration parent) {
}
}));
});
parent.extendsFrom(remappingConfig);
parent.configure(p -> p.extendsFrom(remappingConfig.get()));

return remappingConfig;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.neoforged.moddevgradle.legacyforge.internal;

import java.net.URI;
import java.util.List;
import java.util.stream.Stream;
import javax.inject.Inject;
import net.neoforged.minecraftdependencies.MinecraftDependenciesPlugin;
Expand All @@ -19,6 +20,7 @@
import net.neoforged.moddevgradle.legacyforge.dsl.MixinExtension;
import net.neoforged.moddevgradle.legacyforge.dsl.ObfuscationExtension;
import net.neoforged.nfrtgradle.NeoFormRuntimePlugin;
import org.gradle.api.GradleException;
import org.gradle.api.InvalidUserCodeException;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
Expand Down Expand Up @@ -56,6 +58,11 @@ public LegacyForgeModDevPlugin(ObjectFactory objectFactory) {

@Override
public void apply(Project project) {
project.getConfigurations().configureEach(c -> {
LOG.warn("Configuring configuration " + c.getName());
throw new GradleException("Configuring configuration " + c.getName());
});

project.getPlugins().apply(JavaLibraryPlugin.class);
project.getPlugins().apply(NeoFormRuntimePlugin.class);
project.getPlugins().apply(MinecraftDependenciesPlugin.class);
Expand Down Expand Up @@ -84,14 +91,14 @@ public void apply(Project project) {
project.getDependencies().getComponents().withModule("net.neoforged:minecraft-dependencies", NonStrictDependencyTransform.class);

var depFactory = project.getDependencyFactory();
var autoRenamingToolRuntime = project.getConfigurations().create(CONFIGURATION_TOOL_ART, spec -> {
var autoRenamingToolRuntime = project.getConfigurations().register(CONFIGURATION_TOOL_ART, spec -> {
spec.setDescription("The AutoRenamingTool CLI tool");
spec.setCanBeConsumed(false);
spec.setCanBeResolved(true);
spec.setTransitive(false);
spec.getDependencies().add(depFactory.create("net.neoforged:AutoRenamingTool:2.0.4:all"));
});
var installerToolsRuntime = project.getConfigurations().create(CONFIGURATION_TOOL_INSTALLERTOOLS, spec -> {
var installerToolsRuntime = project.getConfigurations().register(CONFIGURATION_TOOL_INSTALLERTOOLS, spec -> {
spec.setDescription("The InstallerTools CLI tool");
spec.setCanBeConsumed(false);
spec.setCanBeResolved(true);
Expand Down Expand Up @@ -198,15 +205,17 @@ public void enable(Project project, LegacyForgeModdingSettings settings, LegacyF
project.getTasks().named("assemble", assemble -> assemble.dependsOn(reobfJar));

// Forge expects the mapping csv files on the root classpath
artifacts.runtimeDependencies()
.getDependencies().add(project.getDependencyFactory().create(project.files(mappingsCsv)));
artifacts.runtimeDependencies().configure(c -> {
c.getDependencies().add(project.getDependencyFactory().create(project.files(mappingsCsv)));
});

var remapDeps = project.getConfigurations().create("remappingDependencies", spec -> {
var remapDeps = project.getConfigurations().register("remappingDependencies", spec -> {
spec.setDescription("An internal configuration that contains the Minecraft dependencies, used for remapping mods");
spec.setCanBeConsumed(false);
spec.setCanBeDeclared(false);
spec.setCanBeResolved(true);
spec.extendsFrom(artifacts.runtimeDependencies());
// TODO: is there no better way?
spec.extendsFrom(artifacts.runtimeDependencies().get());
});

project.getDependencies().registerTransform(RemappingTransform.class, params -> {
Expand All @@ -232,13 +241,15 @@ private void configureDependencyRemapping(Project project, ObfuscationExtension
var sourceSets = ExtensionUtils.getSourceSets(project);
sourceSets.all(sourceSet -> {
var configurationName = sourceSet.getTaskName(null, "jarJar");
project.getConfigurations().getByName(configurationName).withDependencies(dependencies -> {
dependencies.forEach(dep -> {
if (dep instanceof ProjectDependency projectDependency) {
projectDependency.attributes(a -> {
a.attribute(MinecraftMappings.ATTRIBUTE, srgMappings);
});
}
project.getConfigurations().named(configurationName, c -> {
c.withDependencies(dependencies -> {
dependencies.forEach(dep -> {
if (dep instanceof ProjectDependency projectDependency) {
projectDependency.attributes(a -> {
a.attribute(MinecraftMappings.ATTRIBUTE, srgMappings);
});
}
});
});
});
});
Expand All @@ -257,10 +268,10 @@ private void configureDependencyRemapping(Project project, ObfuscationExtension
type.getAttributes().attribute(MinecraftMappings.ATTRIBUTE, srgMappings);
});

obf.createRemappingConfiguration(project.getConfigurations().getByName(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME));
obf.createRemappingConfiguration(project.getConfigurations().getByName(JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME));
obf.createRemappingConfiguration(project.getConfigurations().getByName(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME));
obf.createRemappingConfiguration(project.getConfigurations().getByName(JavaPlugin.API_CONFIGURATION_NAME));
obf.createRemappingConfiguration(project.getConfigurations().getByName(JavaPlugin.COMPILE_ONLY_API_CONFIGURATION_NAME));
obf.registerRemappingConfiguration(project.getConfigurations().named(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME));
obf.registerRemappingConfiguration(project.getConfigurations().named(JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME));
obf.registerRemappingConfiguration(project.getConfigurations().named(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME));
obf.registerRemappingConfiguration(project.getConfigurations().named(JavaPlugin.API_CONFIGURATION_NAME));
obf.registerRemappingConfiguration(project.getConfigurations().named(JavaPlugin.COMPILE_ONLY_API_CONFIGURATION_NAME));
}
}
7 changes: 4 additions & 3 deletions src/main/java/net/neoforged/moddevgradle/dsl/RunModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import net.neoforged.moddevgradle.internal.utils.StringUtils;
import org.gradle.api.GradleException;
import org.gradle.api.Named;
import org.gradle.api.NamedDomainObjectProvider;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.Configuration;
Expand All @@ -32,7 +33,7 @@ public abstract class RunModel implements Named, Dependencies {

private final String name;

private final Configuration configuration;
private final NamedDomainObjectProvider<Configuration> configuration;

/**
* The Gradle tasks that should be run before running this run.
Expand All @@ -50,7 +51,7 @@ public RunModel(String name, Project project, Iterable<ModModel> defaultMods) {

getGameDirectory().convention(project.getLayout().getProjectDirectory().dir("run"));

configuration = project.getConfigurations().create(InternalModelHelper.nameOfRun(this, "", "additionalRuntimeClasspath"), configuration -> {
configuration = project.getConfigurations().register(InternalModelHelper.nameOfRun(this, "", "additionalRuntimeClasspath"), configuration -> {
configuration.setCanBeResolved(false);
configuration.setCanBeConsumed(false);
});
Expand Down Expand Up @@ -236,7 +237,7 @@ public void taskBefore(Task task) {
}

public Configuration getAdditionalRuntimeClasspathConfiguration() {
return configuration;
return configuration.get();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.attributes.Category;
import org.gradle.api.component.AdhocComponentWithVariants;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.SourceSet;
import org.jetbrains.annotations.ApiStatus;

Expand Down Expand Up @@ -64,10 +65,10 @@ public static DataFileCollections create(Project project) {

return new DataFileCollections(accessTransformers, interfaceInjectionData);
}
public record CollectionWrapper(DataFileCollection extension, Configuration configuration) {}
public record CollectionWrapper(DataFileCollection extension, Provider<Configuration> configuration) {}

private static CollectionWrapper createCollection(Project project, String name, String description, String category) {
var configuration = project.getConfigurations().create(name, spec -> {
var configuration = project.getConfigurations().register(name, spec -> {
spec.setDescription(description);
spec.setCanBeConsumed(false);
spec.setCanBeResolved(true);
Expand All @@ -76,7 +77,7 @@ private static CollectionWrapper createCollection(Project project, String name,
});
});

var elementsConfiguration = project.getConfigurations().create(name + "Elements", spec -> {
var elementsConfiguration = project.getConfigurations().register(name + "Elements", spec -> {
spec.setDescription("Published data files for " + name);
spec.setCanBeConsumed(true);
spec.setCanBeResolved(false);
Expand All @@ -87,7 +88,8 @@ private static CollectionWrapper createCollection(Project project, String name,

// Set up the variant publishing conditionally
var java = (AdhocComponentWithVariants) project.getComponents().getByName("java");
java.addVariantsFromConfiguration(elementsConfiguration, variant -> {
// TODO: no better way?
java.addVariantsFromConfiguration(elementsConfiguration.get(), variant -> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use project.getComponents().named(...) to make this lazy

// This should be invoked lazily, so checking if the artifacts are empty is fine:
// "The details object used to determine what to do with a configuration variant **when publishing**."
if (variant.getConfigurationVariant().getArtifacts().isEmpty()) {
Expand All @@ -110,7 +112,8 @@ public void accept(Object artifactNotation) {

var artifactFile = dummyArtifact.getFile();
var artifactDependencies = dummyArtifact.getBuildDependencies();
elementsConfiguration.getArtifacts().remove(dummyArtifact);
// TODO: no better way?
elementsConfiguration.get().getArtifacts().remove(dummyArtifact);

var copyOutput = project.getLayout().getBuildDirectory().file(copyTaskName + "/" + artifactCount + "-" + artifactFile.getName());
copyTask.configure(t -> {
Expand All @@ -136,7 +139,9 @@ public void accept(Object artifactNotation) {
};

var extension = project.getObjects().newInstance(DataFileCollection.class, publishCallback);
configuration.getDependencies().add(depFactory.create(extension.getFiles()));
configuration.configure(c -> {
c.getDependencies().add(depFactory.create(extension.getFiles()));
});

return new CollectionWrapper(extension, configuration);
}
Expand Down
Loading
Loading