Skip to content

Commit e3d0235

Browse files
lukebemishshartte
andauthored
Add legacy forge repositories plugin (#261)
Co-authored-by: shartte <[email protected]>
1 parent 6e06582 commit e3d0235

File tree

5 files changed

+60
-13
lines changed

5 files changed

+60
-13
lines changed

build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,13 @@ gradlePlugin {
215215
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."
216216
tags = ["minecraft", "neoforge", "java", "mod"]
217217
}
218+
legacyrepositories {
219+
id = 'net.neoforged.moddev.legacyforge.repositories'
220+
implementationClass = 'net.neoforged.moddevgradle.boot.LegacyRepositoriesPlugin'
221+
displayName = "Mod Development Repositories Plugin for Legacy Forge"
222+
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."
223+
tags = ["minecraft", "neoforge", "forge", "java", "mod"]
224+
}
218225
}
219226
}
220227

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package net.neoforged.moddevgradle.boot;
2+
3+
import org.gradle.api.plugins.PluginAware;
4+
5+
public class LegacyRepositoriesPlugin extends TrampolinePlugin<PluginAware> {
6+
public LegacyRepositoriesPlugin() {
7+
super("net.neoforged.moddevgradle.legacyforge.internal.LegacyRepositoriesPlugin");
8+
}
9+
}

src/java8/java/net/neoforged/moddevgradle/boot/RepositoriesPlugin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package net.neoforged.moddevgradle.boot;
22

3-
import org.gradle.api.Project;
3+
import org.gradle.api.plugins.PluginAware;
44

5-
public class RepositoriesPlugin extends TrampolinePlugin<Project> {
5+
public class RepositoriesPlugin extends TrampolinePlugin<PluginAware> {
66
public RepositoriesPlugin() {
77
super("net.neoforged.moddevgradle.internal.RepositoriesPlugin");
88
}

src/legacy/java/net/neoforged/moddevgradle/legacyforge/internal/LegacyForgeModDevPlugin.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package net.neoforged.moddevgradle.legacyforge.internal;
22

3-
import java.net.URI;
43
import java.util.stream.Stream;
54
import javax.inject.Inject;
65
import net.neoforged.minecraftdependencies.MinecraftDependenciesPlugin;
@@ -10,7 +9,6 @@
109
import net.neoforged.moddevgradle.internal.ModDevArtifactsWorkflow;
1110
import net.neoforged.moddevgradle.internal.ModDevRunWorkflow;
1211
import net.neoforged.moddevgradle.internal.ModdingDependencies;
13-
import net.neoforged.moddevgradle.internal.RepositoriesPlugin;
1412
import net.neoforged.moddevgradle.internal.jarjar.JarJarPlugin;
1513
import net.neoforged.moddevgradle.internal.utils.ExtensionUtils;
1614
import net.neoforged.moddevgradle.internal.utils.VersionCapabilitiesInternal;
@@ -61,20 +59,14 @@ public void apply(Project project) {
6159
project.getPlugins().apply(MinecraftDependenciesPlugin.class);
6260
project.getPlugins().apply(JarJarPlugin.class);
6361

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

73-
project.getRepositories().maven(repo -> {
74-
repo.setName("MinecraftForge");
75-
repo.setUrl(URI.create("https://maven.minecraftforge.net/"));
76-
});
77-
7870
// This module is for supporting NeoForge 1.20.1, which is technically the same as Legacy Forge 1.20.1
7971
project.getDependencies().getComponents().withModule("net.neoforged:forge", LegacyForgeMetadataTransform.class);
8072
project.getDependencies().getComponents().withModule("net.minecraftforge:forge", LegacyForgeMetadataTransform.class);
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package net.neoforged.moddevgradle.legacyforge.internal;
2+
3+
import java.net.URI;
4+
import net.neoforged.moddevgradle.internal.RepositoriesPlugin;
5+
import org.gradle.api.GradleException;
6+
import org.gradle.api.Plugin;
7+
import org.gradle.api.Project;
8+
import org.gradle.api.artifacts.dsl.RepositoryHandler;
9+
import org.gradle.api.initialization.Settings;
10+
import org.gradle.api.invocation.Gradle;
11+
import org.gradle.api.plugins.PluginAware;
12+
13+
/**
14+
* Like {@link net.neoforged.moddevgradle.internal.RepositoriesPlugin}, this plugin acts differently depending on where
15+
* it is applied. It also applies {@link net.neoforged.moddevgradle.internal.RepositoriesPlugin} no matter where it is applied.
16+
*/
17+
public class LegacyRepositoriesPlugin implements Plugin<PluginAware> {
18+
@Override
19+
public void apply(PluginAware target) {
20+
target.getPluginManager().apply(RepositoriesPlugin.class);
21+
if (target instanceof Project project) {
22+
applyRepositories(project.getRepositories());
23+
} else if (target instanceof Settings settings) {
24+
applyRepositories(settings.getDependencyResolutionManagement().getRepositories());
25+
settings.getGradle().getPlugins().apply(getClass()); // Add a marker to Gradle
26+
} else if (target instanceof Gradle gradle) {
27+
// Do nothing
28+
} else {
29+
throw new GradleException("This plugin does not support being applied to " + target);
30+
}
31+
}
32+
33+
private void applyRepositories(RepositoryHandler repositories) {
34+
repositories.maven(repo -> {
35+
repo.setName("MinecraftForge");
36+
repo.setUrl(URI.create("https://maven.minecraftforge.net/"));
37+
});
38+
}
39+
}

0 commit comments

Comments
 (0)