Skip to content

Commit

Permalink
Port to Loom 1.7+
Browse files Browse the repository at this point in the history
Bump Version
  • Loading branch information
FirstMegaGame4 committed Jun 24, 2024
1 parent 9fc4962 commit b12bb84
Show file tree
Hide file tree
Showing 8 changed files with 100 additions and 198 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
}

group = "com.mmodding"
version = "0.0.8-alpha"
version = "0.0.9-alpha"
val javaVersion = 17

repositories {
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
jetbrains_annotations = "24.0.1"

# Loom
loom = "1.6.+"
loom = "1.7.+"

# Parsing
quilt_parsers = "0.3.0"
Expand Down
2 changes: 1 addition & 1 deletion 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.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
15 changes: 4 additions & 11 deletions src/main/java/com/mmodding/gradle/MModdingGradle.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@

import com.mmodding.gradle.api.architecture.Modules;
import com.mmodding.gradle.api.mod.json.FabricModJson;
import com.mmodding.gradle.impl.NestedJarsProcessor;
import com.mmodding.gradle.impl.CustomFMJGenerationTask;
import com.mmodding.gradle.task.GenerateFabricModJson;
import com.mmodding.gradle.util.LoomProvider;
import org.gradle.api.Action;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.plugins.JavaPluginExtension;
Expand All @@ -32,17 +31,14 @@ public class MModdingGradle {

private final Project project;
private final LoomProvider loomProvider;
private final NestedJarsProcessor nestedJarsProcessor;

@Inject
public MModdingGradle(final ObjectFactory objects, final Project project) {
this.project = project;
this.loomProvider = new LoomProvider(project);
this.nestedJarsProcessor = new NestedJarsProcessor(project);
}

public void configureFabricModJson(Action<FabricModJson> action) {
Task check = this.project.getTasks().findByPath("generation/generateFmj");
if (this.project.getTasks().findByPath("generateFmj") == null) {
var fmj = new FabricModJson();
fmj.fillDefaults(this.project);
Expand All @@ -66,18 +62,15 @@ public void configureFabricModJson(Action<FabricModJson> action) {
}

public Dependency configureFMJForDependency(Dependency dependency, Action<FabricModJson> action) {
this.nestedJarsProcessor.injectIntoTask(this.project);
CustomFMJGenerationTask task = (CustomFMJGenerationTask) this.project.getTasks().findByPath("customFMJGeneration");
assert task != null;

FabricModJson modJson = new FabricModJson();
modJson.setName(dependency.getName());
modJson.setVersion(dependency.getVersion());

action.execute(modJson);

this.nestedJarsProcessor.addModJson(
new NestedJarsProcessor.Metadata(dependency.getGroup(), dependency.getName(), dependency.getVersion()),
modJson
);
task.addModJson(new CustomFMJGenerationTask.Metadata(dependency.getGroup(), dependency.getName(), dependency.getVersion()), modJson);

return dependency;
}
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/mmodding/gradle/MModdingGradlePlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

package com.mmodding.gradle;

import com.mmodding.gradle.impl.CustomFMJGenerationTask;
import org.gradle.api.Plugin;
import org.gradle.api.Project;

Expand All @@ -28,5 +29,14 @@ public class MModdingGradlePlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getExtensions().create("mmodding", MModdingGradle.class, project);
project.getTasks().register(
"customFMJGeneration",
CustomFMJGenerationTask.class,
task -> {
task.mustRunAfter("processIncludeJars");
project.getTasks().getByName("remapJar").dependsOn(task);
task.getOutputDirectory().set(project.getLayout().getBuildDirectory().dir("processIncludeJars"));
}
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package com.mmodding.gradle.impl;

import com.mmodding.gradle.api.mod.json.ModJson;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.RegularFile;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
* Represents an advanced Task that injects custom mod json before Loom's {@code remapJar} task.
* <p>
* This Task only targets JARs that are not originally mods.
* </p>
* @author FirstMegaGame4, LambdAurora for the original concept
*/
public abstract class CustomFMJGenerationTask extends DefaultTask {

private final Map<Metadata, Set<ModJson<?, ?, ?>>> toProcess = new HashMap<>();

@OutputDirectory
public abstract DirectoryProperty getOutputDirectory();

public void addModJson(@NotNull Metadata metadata, @NotNull ModJson<?, ?, ?> modJson) {
Set<ModJson<?, ?, ?>> set = this.toProcess.computeIfAbsent(metadata, md -> new HashSet<>());

for (var oModJson : set) {
if (oModJson.getClass().equals(modJson.getClass())) {
throw new IllegalArgumentException("Cannot add multiple mod json of the same type to the same dependency.");
}
}

// Add some mod json data that is always relevant for non-mod libraries.
modJson.withCustom(block ->
block.withBlock("modmenu", modMenu -> {
modMenu.withArray("badges", badges ->
badges.addUnique("library"));
modMenu.put("update_checker", false);
})
);

set.add(modJson);
}

@TaskAction
void insertCustomFMJs() {
for (Map.Entry<Metadata, Set<ModJson<?, ?, ?>>> entry : this.toProcess.entrySet()) {
Metadata metadata = entry.getKey();
Provider<RegularFile> provider = this.getOutputDirectory().file(metadata.artifact() + "-" + metadata.version() + ".jar");
if (provider.isPresent()) {
File file = provider.get().getAsFile();
if (file.exists()) {
this.getProject().getLogger().lifecycle("Found dependency {} to process!", metadata);
try (var zipFs = FileSystems.newFileSystem(file.toPath())) {
for (var modJson : entry.getValue()) {
var modJsonPath = zipFs.getPath(modJson.getFileName());
modJson.writeJson(modJsonPath);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
else {
throw new RuntimeException("Did not find dependency " + metadata + "!");
}
}
}
}

public record Metadata(String group, String artifact, String version) {}
}
182 changes: 0 additions & 182 deletions src/main/java/com/mmodding/gradle/impl/NestedJarsProcessor.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ class FabricModJsonTest extends Specification {
buildFile = new File(this.testProjectDir, "build.gradle.kts")
buildFile << """
plugins {
id("fabric-loom").version("1.6-SNAPSHOT")
id("com.mmodding.gradle").version("0.0.6-alpha")
id("fabric-loom").version("1.7-SNAPSHOT")
id("com.mmodding.gradle").version("0.0.9-alpha")
}
version = "0.0.1-test"
Expand Down

0 comments on commit b12bb84

Please sign in to comment.