Skip to content

Commit c3c0b3a

Browse files
committed
Some work on the mod discovery api
1 parent f963f6d commit c3c0b3a

File tree

11 files changed

+256
-84
lines changed

11 files changed

+256
-84
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ dependencies {
5858

5959
implementation(include("io.github.llamalad7:mixinextras-fabric:${project.mixin_extras_version}"))
6060
implementation(include("com.github.thecatcore.CursedMixinExtensions:fabric:1.0.0"))
61-
implementation(include("com.github.thecatcore:WFVAIO:1.1.0"))
61+
implementation(include("com.github.thecatcore:WFVAIO:1.2.0"))
6262

6363
testImplementation "net.fabricmc:fabric-loader-junit:${project.loader_version}"
6464
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ org.gradle.jvmargs=-Xmx1G
66
# Fabric Properties
77
minecraft_version = 1.6.4
88
yarn_build = 458
9-
loader_version = 0.15.10
9+
loader_version = 0.16.11
1010
fabric_version = 1.9.1+1.12.2
1111
mixin_extras_version=0.2.1
1212
spasm_version=0.2
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi.api.v2;
2+
3+
import org.jetbrains.annotations.Nullable;
4+
5+
import java.nio.file.Path;
6+
7+
public interface ModCandidate {
8+
String getId();
9+
Path getPath();
10+
String getType();
11+
@Nullable String getAccessWidenerPath();
12+
@Nullable ModCandidate getParent();
13+
}
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,30 @@
11
package io.github.fabriccompatibilitylayers.modremappingapi.api.v2;
22

3-
import io.github.fabriccompatibilitylayers.modremappingapi.impl.ModDiscovererImpl;
3+
import io.github.fabriccompatibilitylayers.modremappingapi.impl.ModDiscovererConfigImpl;
44

5+
import java.nio.file.Path;
6+
import java.util.List;
7+
import java.util.function.BiFunction;
58
import java.util.function.Predicate;
69
import java.util.regex.Pattern;
710

8-
public interface ModDiscoverer {
11+
public interface ModDiscovererConfig {
912
static Builder builder(String folderName) {
10-
return new ModDiscovererImpl.BuilderImpl(folderName);
13+
return new ModDiscovererConfigImpl.BuilderImpl(folderName);
1114
}
1215

1316
String getFolderName();
1417
Pattern getFileNameMatcher();
1518
boolean searchRecursively();
1619
Predicate<String> getDirectoryFilter();
20+
BiFunction<Path, List<String>, List<ModCandidate>> getCandidateCollector();
1721

1822
interface Builder {
1923
Builder fileNameMatcher(String pattern);
2024
Builder searchRecursively(boolean searchRecursively);
2125
Builder directoryFilter(Predicate<String> filter);
26+
Builder candidateCollector(BiFunction<Path, List<String>, List<ModCandidate>> collector);
2227

23-
ModDiscoverer build();
28+
ModDiscovererConfig build();
2429
}
2530
}

src/main/java/io/github/fabriccompatibilitylayers/modremappingapi/api/v2/ModRemapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
public interface ModRemapper {
66
String getContextId();
77

8-
List<ModDiscoverer> getModDiscoverers();
8+
List<ModDiscovererConfig> getModDiscoverers();
9+
List<ModRemapper> collectSubRemappers(List<ModCandidate> discoveredMods);
910
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi.impl;
2+
3+
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModCandidate;
4+
import org.jetbrains.annotations.Nullable;
5+
6+
import java.nio.file.Path;
7+
8+
public class DefaultModCandidate implements ModCandidate {
9+
private final String id;
10+
private final Path path;
11+
12+
public DefaultModCandidate(Path path) {
13+
this.id = path.getFileName().toString().replace(".jar", "").replace(".zip", "").replace(" ", "_");
14+
this.path = path;
15+
}
16+
17+
@Override
18+
public String getId() {
19+
return id;
20+
}
21+
22+
@Override
23+
public Path getPath() {
24+
return path;
25+
}
26+
27+
@Override
28+
public String getType() {
29+
return "default";
30+
}
31+
32+
@Override
33+
public @Nullable String getAccessWidenerPath() {
34+
return null;
35+
}
36+
37+
@Override
38+
public @Nullable ModCandidate getParent() {
39+
return null;
40+
}
41+
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi.impl;
2+
3+
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModCandidate;
4+
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModDiscovererConfig;
5+
import org.jetbrains.annotations.ApiStatus;
6+
import org.jetbrains.annotations.Nullable;
7+
8+
import java.nio.file.Path;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.function.BiFunction;
12+
import java.util.function.Predicate;
13+
import java.util.regex.Pattern;
14+
15+
@ApiStatus.Internal
16+
public class ModDiscovererConfigImpl implements ModDiscovererConfig {
17+
private final String folderName;
18+
private final Pattern fileNameMatcher;
19+
private final boolean searchRecursively;
20+
private final Predicate<String> directoryFilter;
21+
private final @Nullable BiFunction<Path, List<String>, List<ModCandidate>> candidateCollector;
22+
23+
private ModDiscovererConfigImpl(String folderName, Pattern fileNameMatcher, boolean searchRecursively, Predicate<String> directoryFilter, @Nullable BiFunction<Path, List<String>, List<ModCandidate>> candidateCollector) {
24+
this.folderName = folderName;
25+
this.fileNameMatcher = fileNameMatcher;
26+
this.searchRecursively = searchRecursively;
27+
this.directoryFilter = directoryFilter;
28+
this.candidateCollector = candidateCollector;
29+
}
30+
31+
@Override
32+
public String getFolderName() {
33+
return folderName;
34+
}
35+
36+
@Override
37+
public Pattern getFileNameMatcher() {
38+
return fileNameMatcher;
39+
}
40+
41+
@Override
42+
public boolean searchRecursively() {
43+
return searchRecursively;
44+
}
45+
46+
@Override
47+
public Predicate<String> getDirectoryFilter() {
48+
return directoryFilter;
49+
}
50+
51+
@Override
52+
public BiFunction<Path, List<String>, List<ModCandidate>> getCandidateCollector() {
53+
return this.candidateCollector == null ? this::defaultCandidateCollector : this.candidateCollector;
54+
}
55+
56+
private List<ModCandidate> defaultCandidateCollector(Path modPath, List<String> fileList) {
57+
List<ModCandidate> candidates = new ArrayList<>();
58+
59+
for (String file : fileList) {
60+
if (file.endsWith(".class")) {
61+
candidates.add(new DefaultModCandidate(modPath));
62+
break;
63+
}
64+
}
65+
66+
return candidates;
67+
}
68+
69+
public static class BuilderImpl implements ModDiscovererConfig.Builder {
70+
private final String folderName;
71+
private String fileNameMatcher = "(.+).jar$";
72+
private boolean searchRecursively = false;
73+
private Predicate<String> directoryFilter = s -> true;
74+
private BiFunction<Path, List<String>, List<ModCandidate>> candidateCollector;
75+
76+
public BuilderImpl(String folderName) {
77+
this.folderName = folderName;
78+
}
79+
80+
@Override
81+
public Builder fileNameMatcher(String pattern) {
82+
this.fileNameMatcher = pattern;
83+
return this;
84+
}
85+
86+
@Override
87+
public Builder searchRecursively(boolean searchRecursively) {
88+
this.searchRecursively = searchRecursively;
89+
return this;
90+
}
91+
92+
@Override
93+
public Builder directoryFilter(Predicate<String> filter) {
94+
this.directoryFilter = filter;
95+
return this;
96+
}
97+
98+
@Override
99+
public Builder candidateCollector(BiFunction<Path, List<String>, List<ModCandidate>> collector) {
100+
this.candidateCollector = collector;
101+
return this;
102+
}
103+
104+
@Override
105+
public ModDiscovererConfig build() {
106+
return new ModDiscovererConfigImpl(folderName, Pattern.compile(fileNameMatcher), searchRecursively, directoryFilter, candidateCollector);
107+
}
108+
}
109+
}

src/main/java/io/github/fabriccompatibilitylayers/modremappingapi/impl/ModDiscovererImpl.java

Lines changed: 0 additions & 76 deletions
This file was deleted.

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/ModRemappingAPIImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static void init() {
6363
}
6464
}
6565

66-
public static ModRemapperContext getCurrentContext() {
66+
public static ModRemapperContext<?> getCurrentContext() {
6767
return CURRENT_CONTEXT;
6868
}
6969
}

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/context/v2/ModRemmaperV2Context.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v2;
22

3+
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModDiscovererConfig;
34
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModRemapper;
45
import io.github.fabriccompatibiltylayers.modremappingapi.impl.LibraryHandler;
56
import io.github.fabriccompatibiltylayers.modremappingapi.impl.ModCandidate;
@@ -42,9 +43,21 @@ public void afterRemap() {
4243

4344
@Override
4445
public List<ModRemapper> discoverMods(boolean remapClassEdits) {
46+
List<ModRemapper> collected = new ArrayList<>();
47+
List<io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModCandidate> candidates = new ArrayList<>();
48+
4549
for (ModRemapper remapper : remappers) {
50+
for (ModDiscovererConfig config : remapper.getModDiscoverers()) {
51+
V2ModDiscoverer discoverer = new V2ModDiscoverer(config);
52+
candidates.addAll(discoverer.collect());
53+
}
54+
}
4655

56+
for (ModRemapper remapper : remappers) {
57+
collected.addAll(remapper.collectSubRemappers(candidates));
4758
}
59+
60+
return collected;
4861
}
4962

5063
@Override

0 commit comments

Comments
 (0)