Skip to content

Commit 19f9a40

Browse files
authored
Merge pull request #4 from AlmostReliable/multi-viewer-deps
2 parents bb4bbc2 + 30487d4 commit 19f9a40

6 files changed

Lines changed: 83 additions & 29 deletions

File tree

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,9 @@ dependency {
415415
}
416416
```
417417

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

420423
Next to the default ones, the plugin offers additional configurations to load dependencies into the classpath.

src/main/java/com/almostreliable/almostgradle/AlmostGradleExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private void createProcessResourcesTask() {
129129
project
130130
.getTasks()
131131
.named("processResources", ProcessResources.class)
132-
.configure(new ProcessResourceHandler(project));
132+
.configure(new ProcessResourceHandler(project, getRecipeViewers()));
133133
}
134134
}
135135

src/main/java/com/almostreliable/almostgradle/ProcessResourceHandler.java

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.almostreliable.almostgradle;
22

3+
import com.almostreliable.almostgradle.dependency.RecipeViewerOptions;
4+
import com.almostreliable.almostgradle.dependency.RecipeViewers;
35
import org.gradle.api.Action;
46
import org.gradle.api.Project;
57
import org.gradle.api.plugins.JavaPluginExtension;
@@ -9,6 +11,8 @@
911
import java.io.File;
1012
import java.io.FileNotFoundException;
1113
import java.util.*;
14+
import java.util.function.Function;
15+
import java.util.function.Supplier;
1216
import java.util.regex.Matcher;
1317
import java.util.regex.Pattern;
1418
import java.util.stream.StreamSupport;
@@ -17,13 +21,20 @@ public class ProcessResourceHandler implements Action<ProcessResources> {
1721

1822
public static final String USER_KEY = "githubUser";
1923
public static final String REPO_KEY = "githubRepo";
24+
public static final Map<String, Function<RecipeViewers, RecipeViewerOptions>> RECIPE_VIEWER_VERSIONS = Map.of(
25+
"jeiVersion", RecipeViewers::getJei,
26+
"emiVersion", RecipeViewers::getEmi,
27+
"reiVersion", RecipeViewers::getRei
28+
);
2029

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

2332
private final Project project;
33+
private final RecipeViewers recipeViewers;
2434

25-
public ProcessResourceHandler(Project project) {
35+
public ProcessResourceHandler(Project project, RecipeViewers recipeViewers) {
2636
this.project = project;
37+
this.recipeViewers = recipeViewers;
2738
}
2839

2940
@Override
@@ -92,11 +103,36 @@ private Optional<String> getPropertyValue(String key) {
92103
"\t* Property '" + USER_KEY + "' found in target but not set, defaulting to 'AlmostReliable'");
93104
return Optional.of("AlmostReliable");
94105
}
106+
107+
for (var entry : RECIPE_VIEWER_VERSIONS.entrySet()) {
108+
var viewerVersion = getRecipeViewerVersion(
109+
key,
110+
entry.getKey(),
111+
() -> entry.getValue().apply(recipeViewers)
112+
);
113+
if (viewerVersion.isPresent()) {
114+
return viewerVersion;
115+
}
116+
}
95117
}
96118

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

122+
private Optional<String> getRecipeViewerVersion(String key, String viewerKey, Supplier<RecipeViewerOptions> recipeViewerOptions) {
123+
if (key.equals(viewerKey)) {
124+
var version = recipeViewerOptions.get().getVersion();
125+
if (version.isPresent()) {
126+
return Optional.of(version.get());
127+
}
128+
129+
var logger = project.getLogger();
130+
logger.lifecycle("\t* Property '" + viewerKey + "' found in target but the recipe viewer is not enabled");
131+
}
132+
133+
return Optional.empty();
134+
}
135+
100136
private Map<String, String> createProperties(Collection<String> keys) {
101137
Set<String> missingProperties = new HashSet<>();
102138
Map<String, String> properties = new LinkedHashMap<>();

src/main/java/com/almostreliable/almostgradle/dependency/ModDependency.java

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.almostreliable.almostgradle.dependency;
22

3-
import org.gradle.api.artifacts.ModuleDependency;
3+
import org.gradle.api.artifacts.Dependency;
44
import org.gradle.api.artifacts.dsl.DependencyFactory;
55

6+
import java.util.List;
7+
68
@SuppressWarnings("UnstableApiUsage")
79
public interface ModDependency {
810
ModDependency EMI = new Emi();
@@ -13,9 +15,9 @@ public interface ModDependency {
1315

1416
String defaultMavenRepo();
1517

16-
ModuleDependency createApiDependency(String minecraftVersion, String depVersion, DependencyFactory factory);
18+
Iterable<Dependency> createApiDependencies(String minecraftVersion, String depVersion, DependencyFactory factory);
1719

18-
ModuleDependency createDependency(String minecraftVersion, String depVersion, DependencyFactory factory);
20+
Iterable<Dependency> createDependencies(String minecraftVersion, String depVersion, DependencyFactory factory);
1921

2022
class Emi implements ModDependency {
2123
@Override
@@ -29,13 +31,17 @@ public String defaultMavenRepo() {
2931
}
3032

3133
@Override
32-
public ModuleDependency createApiDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
33-
return factory.create("dev.emi", "emi-neoforge", depVersion + "+" + minecraftVersion, "api", null);
34+
public Iterable<Dependency> createApiDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
35+
return List.of(
36+
factory.create("dev.emi", "emi-neoforge", depVersion + "+" + minecraftVersion, "api", null)
37+
);
3438
}
3539

3640
@Override
37-
public ModuleDependency createDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
38-
return factory.create("dev.emi", "emi-neoforge", depVersion + "+" + minecraftVersion);
41+
public Iterable<Dependency> createDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
42+
return List.of(
43+
factory.create("dev.emi", "emi-neoforge", depVersion + "+" + minecraftVersion)
44+
);
3945
}
4046
}
4147

@@ -51,13 +57,17 @@ public String defaultMavenRepo() {
5157
}
5258

5359
@Override
54-
public ModuleDependency createApiDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
55-
return factory.create("me.shedaniel", "RoughlyEnoughItems-api-neoforge", depVersion);
60+
public Iterable<Dependency> createApiDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
61+
return List.of(
62+
factory.create("me.shedaniel", "RoughlyEnoughItems-api-neoforge", depVersion)
63+
);
5664
}
5765

5866
@Override
59-
public ModuleDependency createDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
60-
return factory.create("me.shedaniel", "RoughlyEnoughItems-neoforge", depVersion);
67+
public Iterable<Dependency> createDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
68+
return List.of(
69+
factory.create("me.shedaniel", "RoughlyEnoughItems-neoforge", depVersion)
70+
);
6171
}
6272
}
6373

@@ -73,15 +83,20 @@ public String defaultMavenRepo() {
7383
}
7484

7585
@Override
76-
public ModuleDependency createApiDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
77-
return factory
78-
.create("mezz.jei", "jei-" + minecraftVersion + "-neoforge-api", depVersion)
79-
.setTransitive(false);
86+
public Iterable<Dependency> createApiDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
87+
return List.of(
88+
factory.create("mezz.jei", "jei-" + minecraftVersion + "-neoforge-api", depVersion)
89+
.setTransitive(false),
90+
factory.create("mezz.jei", "jei-" + minecraftVersion + "-common-api", depVersion)
91+
.setTransitive(false)
92+
);
8093
}
8194

8295
@Override
83-
public ModuleDependency createDependency(String minecraftVersion, String depVersion, DependencyFactory factory) {
84-
return factory.create("mezz.jei", "jei-" + minecraftVersion + "-neoforge", depVersion).setTransitive(false);
96+
public Iterable<Dependency> createDependencies(String minecraftVersion, String depVersion, DependencyFactory factory) {
97+
return List.of(
98+
factory.create("mezz.jei", "jei-" + minecraftVersion + "-neoforge", depVersion).setTransitive(false)
99+
);
85100
}
86101
}
87102
}

src/main/java/com/almostreliable/almostgradle/dependency/RecipeViewerOptions.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import com.almostreliable.almostgradle.AlmostGradleExtension;
55
import org.gradle.api.Project;
6-
import org.gradle.api.artifacts.ModuleDependency;
6+
import org.gradle.api.artifacts.Dependency;
77
import org.gradle.api.provider.Property;
88
import org.gradle.api.provider.Provider;
99
import org.gradle.api.provider.ProviderFactory;
@@ -53,15 +53,15 @@ public RecipeViewerOptions(Project project, ModDependency mod) {
5353

5454
public abstract Property<Boolean> getTestMod();
5555

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

62-
public Provider<ModuleDependency> getApiDependency() {
62+
public Provider<Iterable<Dependency>> getApiDependencies() {
6363
var almostGradle = project.getExtensions().getByType(AlmostGradleExtension.class);
6464
var mcv = getMinecraftVersion().orElse(almostGradle.getMinecraftVersion()).get();
65-
return getVersion().map(v -> mod.createApiDependency(mcv, v, project.getDependencyFactory()));
65+
return getVersion().map(v -> mod.createApiDependencies(mcv, v, project.getDependencyFactory()));
6666
}
6767
}

src/main/java/com/almostreliable/almostgradle/dependency/RecipeViewers.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ private void createRun(RecipeViewerOptions settings, ModDependency mod) {
9595
var mainMod = neoForge.getMods().maybeCreate(almostGradle.getModId());
9696
var mainSourceSet = java.getSourceSets().getByName("main");
9797

98-
var dep = settings.getDependency();
99-
var apiDep = settings.getApiDependency();
98+
var deps = settings.getDependencies();
99+
var apiDeps = settings.getApiDependencies();
100100

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

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

142142
switch (settings.getMode().get()) {
143143
case API -> {
144-
compileOnly.withDependencies(d -> d.addLater(apiDep));
144+
compileOnly.withDependencies(d -> d.addAllLater(apiDeps));
145145
}
146146
case FULL -> {
147-
compileOnly.withDependencies(d -> d.addLater(dep));
147+
compileOnly.withDependencies(d -> d.addAllLater(deps));
148148
}
149149
}
150150
}

0 commit comments

Comments
 (0)