Skip to content
Merged
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
7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,13 @@ gradlePlugin {
description = "This plugin adds the repositories needed for developing Minecraft mods. It is applied automatically by the moddev plugin, but can be applied manually in settings.gradle to make use of Gradle dependency management."
tags = ["minecraft", "neoforge", "java", "mod"]
}
legacyrepositories {
id = 'net.neoforged.moddev.legacyforge.repositories'
implementationClass = 'net.neoforged.moddevgradle.boot.LegacyRepositoriesPlugin'
displayName = "Mod Development Repositories Plugin for Legacy Forge"
description = "This plugin adds the repositories needed for developing Minecraft mods using the Forge platform, up to 1.20.1. It is applied automatically by the legacyforge plugin, but can be applied manually in settings.gradle to make use of Gradle dependency management."
tags = ["minecraft", "neoforge", "forge", "java", "mod"]
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package net.neoforged.moddevgradle.boot;

import org.gradle.api.plugins.PluginAware;

public class LegacyRepositoriesPlugin extends TrampolinePlugin<PluginAware> {
public LegacyRepositoriesPlugin() {
super("net.neoforged.moddevgradle.legacyforge.internal.LegacyRepositoriesPlugin");
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package net.neoforged.moddevgradle.boot;

import org.gradle.api.Project;
import org.gradle.api.plugins.PluginAware;

public class RepositoriesPlugin extends TrampolinePlugin<Project> {
public class RepositoriesPlugin extends TrampolinePlugin<PluginAware> {
public RepositoriesPlugin() {
super("net.neoforged.moddevgradle.internal.RepositoriesPlugin");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.neoforged.moddevgradle.legacyforge.internal;

import java.net.URI;
import java.util.stream.Stream;
import javax.inject.Inject;
import net.neoforged.minecraftdependencies.MinecraftDependenciesPlugin;
Expand All @@ -10,7 +9,6 @@
import net.neoforged.moddevgradle.internal.ModDevArtifactsWorkflow;
import net.neoforged.moddevgradle.internal.ModDevRunWorkflow;
import net.neoforged.moddevgradle.internal.ModdingDependencies;
import net.neoforged.moddevgradle.internal.RepositoriesPlugin;
import net.neoforged.moddevgradle.internal.jarjar.JarJarPlugin;
import net.neoforged.moddevgradle.internal.utils.ExtensionUtils;
import net.neoforged.moddevgradle.internal.utils.VersionCapabilitiesInternal;
Expand Down Expand Up @@ -61,20 +59,14 @@ public void apply(Project project) {
project.getPlugins().apply(MinecraftDependenciesPlugin.class);
project.getPlugins().apply(JarJarPlugin.class);

// TODO: Introduce a LegacyRepositoryPLugin to still allow repo management in settings.gradle
// Do not apply the repositories automatically if they have been applied at the settings-level.
// It's still possible to apply them manually, though.
if (!project.getGradle().getPlugins().hasPlugin(RepositoriesPlugin.class)) {
project.getPlugins().apply(RepositoriesPlugin.class);
if (!project.getGradle().getPlugins().hasPlugin(LegacyRepositoriesPlugin.class)) {
project.getPlugins().apply(LegacyRepositoriesPlugin.class);
} else {
LOG.info("Not enabling NeoForged repositories since they were applied at the settings level");
LOG.info("Not enabling legacy repositories since they were applied at the settings level");
}

project.getRepositories().maven(repo -> {
repo.setName("MinecraftForge");
repo.setUrl(URI.create("https://maven.minecraftforge.net/"));
});

// This module is for supporting NeoForge 1.20.1, which is technically the same as Legacy Forge 1.20.1
project.getDependencies().getComponents().withModule("net.neoforged:forge", LegacyForgeMetadataTransform.class);
project.getDependencies().getComponents().withModule("net.minecraftforge:forge", LegacyForgeMetadataTransform.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package net.neoforged.moddevgradle.legacyforge.internal;

import java.net.URI;
import net.neoforged.moddevgradle.internal.RepositoriesPlugin;
import org.gradle.api.GradleException;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.dsl.RepositoryHandler;
import org.gradle.api.initialization.Settings;
import org.gradle.api.invocation.Gradle;
import org.gradle.api.plugins.PluginAware;

/**
* Like {@link net.neoforged.moddevgradle.internal.RepositoriesPlugin}, this plugin acts differently depending on where
* it is applied. It also applies {@link net.neoforged.moddevgradle.internal.RepositoriesPlugin} no matter where it is applied.
*/
public class LegacyRepositoriesPlugin implements Plugin<PluginAware> {
@Override
public void apply(PluginAware target) {
target.getPluginManager().apply(RepositoriesPlugin.class);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hm, I wonder: Do we have to consider a case where someone applies the new repositories plugin to settings.gradle? Probably doesn't matter, since they couldn't have enabled the fail flag 🤔

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

What do you mean? This should all just work with either repositories plugin applied to settings.

if (target instanceof Project project) {
applyRepositories(project.getRepositories());
} else if (target instanceof Settings settings) {
applyRepositories(settings.getDependencyResolutionManagement().getRepositories());
settings.getGradle().getPlugins().apply(getClass()); // Add a marker to Gradle
} else if (target instanceof Gradle gradle) {
// Do nothing
} else {
throw new GradleException("This plugin does not support being applied to " + target);
}
}

private void applyRepositories(RepositoryHandler repositories) {
repositories.maven(repo -> {
repo.setName("MinecraftForge");
repo.setUrl(URI.create("https://maven.minecraftforge.net/"));
});
}
}
Loading