Skip to content

Commit

Permalink
feat: merged KessokuLib:buildSrc
Browse files Browse the repository at this point in the history
  • Loading branch information
Oganesson897 committed Feb 2, 2025
1 parent 86c1f94 commit 8e114fa
Show file tree
Hide file tree
Showing 2 changed files with 168 additions and 19 deletions.
123 changes: 123 additions & 0 deletions src/main/java/band/kessoku/koom/KessokuExtension.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package band.kessoku.koom;

import net.fabricmc.loom.api.LoomGradleExtensionAPI;
import net.fabricmc.loom.util.ModPlatform;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.artifacts.ModuleDependency;
import org.gradle.api.artifacts.dsl.DependencyHandler;
import org.gradle.api.tasks.SourceSetContainer;

import javax.inject.Inject;
import java.util.List;
import java.util.Map;

public abstract class KessokuExtension {
@Inject
protected abstract Project getProject();

protected static final List<String> MODULES = List.of(
"base",
"command",
//"config",
"data",
"entity-events",
"entrypoint",
"event-base",
"keybinding",
"lifecycle-events",
"platform",
"registry"
);

public List<String> getModuleList() {
return MODULES;
}

public void library(String lib) {
Project project = this.getProject();
DependencyHandler dependencies = project.getDependencies();

Dependency dependency = dependencies.project(Map.of(
"path", lib,
"configuration", "namedElements"
));
dependencies.add("implementation", dependency);
}

public void testModules(List<String> names, String plat) {
names.forEach(name -> testModule(name, plat));
}

public void modules(List<String> names, String plat) {
names.forEach(name -> module(name, plat));
}

public void moduleIncludes(List<String> names, String plat) {
names.forEach(name -> moduleInclude(name, plat));
}

public void testModule(String name, String plat) {
Project project = this.getProject();
DependencyHandler dependencies = project.getDependencies();

Dependency dependency = dependencies.project(Map.of(
"path", ":" + name + "-" + plat,
"configuration", "namedElements"
));
dependencies.add("testImplementation", dependency);
}

public void module(String name, String plat) {
Project project = this.getProject();
DependencyHandler dependencies = project.getDependencies();

Dependency dependency = dependencies.project(Map.of(
"path", ":" + name + "-" + plat,
"configuration", "namedElements"
));
dependencies.add("api", dependency);

LoomGradleExtensionAPI loom = project.getExtensions().getByType(LoomGradleExtensionAPI.class);
loom.mods(mods -> mods.register("kessoku-" + name + "-" + plat, settings -> {
Project depProject = project.project(":" + name + "-" + plat);
SourceSetContainer sourceSets = depProject.getExtensions().getByType(SourceSetContainer.class);
settings.sourceSet(sourceSets.getByName("main"), depProject);
}));
}

public void moduleInclude(String name, String plat) {
Project project = this.getProject();
DependencyHandler dependencies = project.getDependencies();

Dependency dependency = dependencies.project(Map.of(
"path", ":" + name + "-" + plat
));
dependencies.add("include", dependency);
}

public void common(String name, ModPlatform platform) {
Project project = this.getProject();
DependencyHandler dependencies = project.getDependencies();

ModuleDependency dependency = (ModuleDependency) dependencies.project(Map.of(
"path", ":" + name + "-common",
"configuration", "namedElements"
));
dependency.setTransitive(false);
dependencies.add("compileOnly", dependency);
dependencies.add("runtimeOnly", dependency);
dependencies.add("development" + platform.displayName(), dependency);
}

public void shadowBundle(String name, ModPlatform platform) {
Project project = this.getProject();
DependencyHandler dependencies = project.getDependencies();

Dependency dependency = dependencies.project(Map.of(
"path", ":" + name + "-common",
"configuration", "transformProduction" + platform.displayName()
));
dependencies.add("shade", dependency);
}
}
64 changes: 45 additions & 19 deletions src/main/java/net/fabricmc/loom/LoomRepositoryPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

import java.util.List;

import band.kessoku.koom.KessokuExtension;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.ArtifactRepositoryContainer;
Expand All @@ -43,37 +44,62 @@

public class LoomRepositoryPlugin implements Plugin<PluginAware> {
private static final List<String> FORGE_GROUPS = List.of(
"net.minecraftforge",
"net.neoforged",
"cpw.mods",
"de.oceanlabs",
"net.jodah",
"org.mcmodlauncher"
);

private static final List<String> NEOFORGE_GROUPS = List.of(
"net.neoforged"
);

@Override
public void apply(@NotNull PluginAware target) {
if (target instanceof Settings settings) {
declareRepositories(settings.getDependencyResolutionManagement().getRepositories(), LoomFiles.create(settings), settings);

// leave a marker so projects don't try to override these
settings.getGradle().getPluginManager().apply(LoomRepositoryPlugin.class);
} else if (target instanceof Project project) {
if (project.getGradle().getPlugins().hasPlugin(LoomRepositoryPlugin.class)) {
return;
switch (target) {
case Settings settings -> {
additionalRepositories(settings.getDependencyResolutionManagement().getRepositories());
declareRepositories(settings.getDependencyResolutionManagement().getRepositories(), LoomFiles.create(settings), settings);

// leave a marker so projects don't try to override these
settings.getGradle().getPluginManager().apply(LoomRepositoryPlugin.class);
}
case Project project -> {
if (project.getGradle().getPlugins().hasPlugin(LoomRepositoryPlugin.class)) {
return;
}
project.getExtensions().create("kessoku", KessokuExtension.class);

declareRepositories(project.getRepositories(), LoomFiles.create(project), project);
} else if (target instanceof Gradle) {
return;
} else {
throw new IllegalArgumentException("Expected target to be a Project or Settings, but was a " + target.getClass());
additionalRepositories(project.getRepositories());
declareRepositories(project.getRepositories(), LoomFiles.create(project), project);
}
case Gradle ignored -> {}
default ->
throw new IllegalArgumentException("Expected target to be a Project or Settings, but was a " + target.getClass());
}
}

public void additionalRepositories(RepositoryHandler repositories) {
repositories.maven(repo -> {
repo.setName("NeoForge");
repo.setUrl("https://maven.neoforged.net/releases/");
});

repositories.maven(repo -> {
repo.setName("AmarokIce's Maven");
repo.setUrl("http://maven.snowlyicewolf.club/");
repo.setAllowInsecureProtocol(true);
repo.mavenContent(context -> {
context.includeGroupByRegex("club\\.someoneice\\..*");
});
});

repositories.maven(repo -> {
repo.setName("Jitpack Maven");
repo.setUrl("https://jitpack.io");
repo.mavenContent(context -> {
context.includeGroupByRegex("com\\.github\\..*");
});
});
}

private void declareRepositories(RepositoryHandler repositories, LoomFiles files, ExtensionAware target) {
declareLocalRepositories(repositories, files);

Expand Down Expand Up @@ -111,7 +137,7 @@ private void declareRepositories(RepositoryHandler repositories, LoomFiles files
repo.content(descriptor -> {
// Only include these groups to avoid slowing down/hanging the build,
// or downloading incorrect artifacts.
for (String group : NEOFORGE_GROUPS) {
for (String group : FORGE_GROUPS) {
descriptor.includeGroupAndSubgroups(group);
}
});
Expand Down

0 comments on commit 8e114fa

Please # to comment.