diff --git a/build.gradle b/build.gradle index 94286af8..c40a5e1d 100644 --- a/build.gradle +++ b/build.gradle @@ -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"] + } } } diff --git a/src/java8/java/net/neoforged/moddevgradle/boot/LegacyRepositoriesPlugin.java b/src/java8/java/net/neoforged/moddevgradle/boot/LegacyRepositoriesPlugin.java new file mode 100644 index 00000000..d749e50f --- /dev/null +++ b/src/java8/java/net/neoforged/moddevgradle/boot/LegacyRepositoriesPlugin.java @@ -0,0 +1,9 @@ +package net.neoforged.moddevgradle.boot; + +import org.gradle.api.plugins.PluginAware; + +public class LegacyRepositoriesPlugin extends TrampolinePlugin { + public LegacyRepositoriesPlugin() { + super("net.neoforged.moddevgradle.legacyforge.internal.LegacyRepositoriesPlugin"); + } +} diff --git a/src/java8/java/net/neoforged/moddevgradle/boot/RepositoriesPlugin.java b/src/java8/java/net/neoforged/moddevgradle/boot/RepositoriesPlugin.java index 2b1c9b0f..79271d15 100644 --- a/src/java8/java/net/neoforged/moddevgradle/boot/RepositoriesPlugin.java +++ b/src/java8/java/net/neoforged/moddevgradle/boot/RepositoriesPlugin.java @@ -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 { +public class RepositoriesPlugin extends TrampolinePlugin { public RepositoriesPlugin() { super("net.neoforged.moddevgradle.internal.RepositoriesPlugin"); } diff --git a/src/legacy/java/net/neoforged/moddevgradle/legacyforge/internal/LegacyForgeModDevPlugin.java b/src/legacy/java/net/neoforged/moddevgradle/legacyforge/internal/LegacyForgeModDevPlugin.java index b86a6062..2b0e8035 100644 --- a/src/legacy/java/net/neoforged/moddevgradle/legacyforge/internal/LegacyForgeModDevPlugin.java +++ b/src/legacy/java/net/neoforged/moddevgradle/legacyforge/internal/LegacyForgeModDevPlugin.java @@ -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; @@ -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; @@ -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); diff --git a/src/legacy/java/net/neoforged/moddevgradle/legacyforge/internal/LegacyRepositoriesPlugin.java b/src/legacy/java/net/neoforged/moddevgradle/legacyforge/internal/LegacyRepositoriesPlugin.java new file mode 100644 index 00000000..20e5d2a7 --- /dev/null +++ b/src/legacy/java/net/neoforged/moddevgradle/legacyforge/internal/LegacyRepositoriesPlugin.java @@ -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 { + @Override + public void apply(PluginAware target) { + target.getPluginManager().apply(RepositoriesPlugin.class); + 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/")); + }); + } +}