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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,9 @@ dependency {
}
```

If you depend on a recipe viewer at compile time and need a version range, the specified recipe viewer version can be
accessed via the `<viewer>Version` property. For example `versionRange = "[${jeiVersion},)"`.

# Configurations

Next to the default ones, the plugin offers additional configurations to load dependencies into the classpath.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ private void createProcessResourcesTask() {
project
.getTasks()
.named("processResources", ProcessResources.class)
.configure(new ProcessResourceHandler(project));
.configure(new ProcessResourceHandler(project, getRecipeViewers()));
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.almostreliable.almostgradle;

import com.almostreliable.almostgradle.dependency.RecipeViewerOptions;
import com.almostreliable.almostgradle.dependency.RecipeViewers;
import org.gradle.api.Action;
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaPluginExtension;
Expand All @@ -9,6 +11,8 @@
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.StreamSupport;
Expand All @@ -17,13 +21,20 @@ public class ProcessResourceHandler implements Action<ProcessResources> {

public static final String USER_KEY = "githubUser";
public static final String REPO_KEY = "githubRepo";
public static final Map<String, Function<RecipeViewers, RecipeViewerOptions>> RECIPE_VIEWER_VERSIONS = Map.of(
"jeiVersion", RecipeViewers::getJei,
"emiVersion", RecipeViewers::getEmi,
"reiVersion", RecipeViewers::getRei
);

private final List<String> targets = List.of("META-INF/neoforge.mods.toml", "pack.mcmeta");

private final Project project;
private final RecipeViewers recipeViewers;

public ProcessResourceHandler(Project project) {
public ProcessResourceHandler(Project project, RecipeViewers recipeViewers) {
this.project = project;
this.recipeViewers = recipeViewers;
}

@Override
Expand Down Expand Up @@ -92,11 +103,36 @@ private Optional<String> getPropertyValue(String key) {
"\t* Property '" + USER_KEY + "' found in target but not set, defaulting to 'AlmostReliable'");
return Optional.of("AlmostReliable");
}

for (var entry : RECIPE_VIEWER_VERSIONS.entrySet()) {
var viewerVersion = getRecipeViewerVersion(
key,
entry.getKey(),
() -> entry.getValue().apply(recipeViewers)
);
if (viewerVersion.isPresent()) {
return viewerVersion;
}
}
}

return Optional.ofNullable(property).map(Object::toString);
}

private Optional<String> getRecipeViewerVersion(String key, String viewerKey, Supplier<RecipeViewerOptions> recipeViewerOptions) {
if (key.equals(viewerKey)) {
var version = recipeViewerOptions.get().getVersion();
if (version.isPresent()) {
return Optional.of(version.get());
}

var logger = project.getLogger();
logger.lifecycle("\t* Property '" + viewerKey + "' found in target but the recipe viewer is not enabled");
}

return Optional.empty();
}

private Map<String, String> createProperties(Collection<String> keys) {
Set<String> missingProperties = new HashSet<>();
Map<String, String> properties = new LinkedHashMap<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.almostreliable.almostgradle.dependency;

import org.gradle.api.artifacts.ModuleDependency;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.artifacts.dsl.DependencyFactory;

import java.util.List;

@SuppressWarnings("UnstableApiUsage")
public interface ModDependency {
ModDependency EMI = new Emi();
Expand All @@ -13,9 +15,9 @@ public interface ModDependency {

String defaultMavenRepo();

ModuleDependency createApiDependency(String minecraftVersion, String depVersion, DependencyFactory factory);
Iterable<Dependency> createApiDependencies(String minecraftVersion, String depVersion, DependencyFactory factory);

ModuleDependency createDependency(String minecraftVersion, String depVersion, DependencyFactory factory);
Iterable<Dependency> createDependencies(String minecraftVersion, String depVersion, DependencyFactory factory);

class Emi implements ModDependency {
@Override
Expand All @@ -29,13 +31,17 @@ public String defaultMavenRepo() {
}

@Override
public ModuleDependency createApiDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
return factory.create("dev.emi", "emi-neoforge", depVersion + "+" + minecraftVersion, "api", null);
public Iterable<Dependency> createApiDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
return List.of(
factory.create("dev.emi", "emi-neoforge", depVersion + "+" + minecraftVersion, "api", null)
);
}

@Override
public ModuleDependency createDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
return factory.create("dev.emi", "emi-neoforge", depVersion + "+" + minecraftVersion);
public Iterable<Dependency> createDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
return List.of(
factory.create("dev.emi", "emi-neoforge", depVersion + "+" + minecraftVersion)
);
}
}

Expand All @@ -51,13 +57,17 @@ public String defaultMavenRepo() {
}

@Override
public ModuleDependency createApiDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
return factory.create("me.shedaniel", "RoughlyEnoughItems-api-neoforge", depVersion);
public Iterable<Dependency> createApiDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
return List.of(
factory.create("me.shedaniel", "RoughlyEnoughItems-api-neoforge", depVersion)
);
}

@Override
public ModuleDependency createDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
return factory.create("me.shedaniel", "RoughlyEnoughItems-neoforge", depVersion);
public Iterable<Dependency> createDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
return List.of(
factory.create("me.shedaniel", "RoughlyEnoughItems-neoforge", depVersion)
);
}
}

Expand All @@ -73,15 +83,20 @@ public String defaultMavenRepo() {
}

@Override
public ModuleDependency createApiDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
return factory
.create("mezz.jei", "jei-" + minecraftVersion + "-neoforge-api", depVersion)
.setTransitive(false);
public Iterable<Dependency> createApiDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
return List.of(
factory.create("mezz.jei", "jei-" + minecraftVersion + "-neoforge-api", depVersion)
.setTransitive(false),
factory.create("mezz.jei", "jei-" + minecraftVersion + "-common-api", depVersion)
.setTransitive(false)
);
}

@Override
public ModuleDependency createDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
return factory.create("mezz.jei", "jei-" + minecraftVersion + "-neoforge", depVersion).setTransitive(false);
public Iterable<Dependency> createDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
return List.of(
factory.create("mezz.jei", "jei-" + minecraftVersion + "-neoforge", depVersion).setTransitive(false)
);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import com.almostreliable.almostgradle.AlmostGradleExtension;
import org.gradle.api.Project;
import org.gradle.api.artifacts.ModuleDependency;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.provider.ProviderFactory;
Expand Down Expand Up @@ -53,15 +53,15 @@ public RecipeViewerOptions(Project project, ModDependency mod) {

public abstract Property<Boolean> getTestMod();

public Provider<ModuleDependency> getDependency() {
public Provider<Iterable<Dependency>> getDependencies() {
var almostGradle = project.getExtensions().getByType(AlmostGradleExtension.class);
var mcv = getMinecraftVersion().orElse(almostGradle.getMinecraftVersion()).get();
return getVersion().map(v -> mod.createDependency(mcv, v, project.getDependencyFactory()));
return getVersion().map(v -> mod.createDependencies(mcv, v, project.getDependencyFactory()));
}

public Provider<ModuleDependency> getApiDependency() {
public Provider<Iterable<Dependency>> getApiDependencies() {
var almostGradle = project.getExtensions().getByType(AlmostGradleExtension.class);
var mcv = getMinecraftVersion().orElse(almostGradle.getMinecraftVersion()).get();
return getVersion().map(v -> mod.createApiDependency(mcv, v, project.getDependencyFactory()));
return getVersion().map(v -> mod.createApiDependencies(mcv, v, project.getDependencyFactory()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ private void createRun(RecipeViewerOptions settings, ModDependency mod) {
var mainMod = neoForge.getMods().maybeCreate(almostGradle.getModId());
var mainSourceSet = java.getSourceSets().getByName("main");

var dep = settings.getDependency();
var apiDep = settings.getApiDependency();
var deps = settings.getDependencies();
var apiDeps = settings.getApiDependencies();

if (settings.getRunConfig().isPresent() && settings.getRunConfig().get()) {
var sourceSet = java.getSourceSets().create(mod.id() + "Run");
Expand Down Expand Up @@ -131,7 +131,7 @@ private void createRun(RecipeViewerOptions settings, ModDependency mod) {
var config = Utils.createLocalRuntime(project,
sourceSet.getRuntimeClasspathConfigurationName(),
mod.id());
config.withDependencies(d -> d.addLater(dep));
config.withDependencies(d -> d.addAllLater(deps));
}

var runtimeOnly = project.getConfigurations().getByName("localRuntime");
Expand All @@ -141,10 +141,10 @@ private void createRun(RecipeViewerOptions settings, ModDependency mod) {

switch (settings.getMode().get()) {
case API -> {
compileOnly.withDependencies(d -> d.addLater(apiDep));
compileOnly.withDependencies(d -> d.addAllLater(apiDeps));
}
case FULL -> {
compileOnly.withDependencies(d -> d.addLater(dep));
compileOnly.withDependencies(d -> d.addAllLater(deps));
}
}
}
Expand Down