Skip to content

Commit f963f6d

Browse files
committed
Start working on V2 api
1 parent 3e821fa commit f963f6d

9 files changed

Lines changed: 231 additions & 5 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi;
2+
3+
public class Dummy {
4+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi.api.v2;
2+
3+
import io.github.fabriccompatibilitylayers.modremappingapi.impl.ModDiscovererImpl;
4+
5+
import java.util.function.Predicate;
6+
import java.util.regex.Pattern;
7+
8+
public interface ModDiscoverer {
9+
static Builder builder(String folderName) {
10+
return new ModDiscovererImpl.BuilderImpl(folderName);
11+
}
12+
13+
String getFolderName();
14+
Pattern getFileNameMatcher();
15+
boolean searchRecursively();
16+
Predicate<String> getDirectoryFilter();
17+
18+
interface Builder {
19+
Builder fileNameMatcher(String pattern);
20+
Builder searchRecursively(boolean searchRecursively);
21+
Builder directoryFilter(Predicate<String> filter);
22+
23+
ModDiscoverer build();
24+
}
25+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi.api.v2;
2+
3+
import java.util.List;
4+
5+
public interface ModRemapper {
6+
String getContextId();
7+
8+
List<ModDiscoverer> getModDiscoverers();
9+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package io.github.fabriccompatibilitylayers.modremappingapi.impl;
2+
3+
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModDiscoverer;
4+
import org.jetbrains.annotations.ApiStatus;
5+
6+
import java.util.function.Predicate;
7+
import java.util.regex.Pattern;
8+
9+
@ApiStatus.Internal
10+
public class ModDiscovererImpl implements ModDiscoverer {
11+
private final String folderName;
12+
private final Pattern fileNameMatcher;
13+
private final boolean searchRecursively;
14+
private final Predicate<String> directoryFilter;
15+
16+
private ModDiscovererImpl(String folderName, Pattern fileNameMatcher, boolean searchRecursively, Predicate<String> directoryFilter) {
17+
this.folderName = folderName;
18+
this.fileNameMatcher = fileNameMatcher;
19+
this.searchRecursively = searchRecursively;
20+
this.directoryFilter = directoryFilter;
21+
}
22+
23+
@Override
24+
public String getFolderName() {
25+
return folderName;
26+
}
27+
28+
@Override
29+
public Pattern getFileNameMatcher() {
30+
return fileNameMatcher;
31+
}
32+
33+
@Override
34+
public boolean searchRecursively() {
35+
return searchRecursively;
36+
}
37+
38+
@Override
39+
public Predicate<String> getDirectoryFilter() {
40+
return directoryFilter;
41+
}
42+
43+
public static class BuilderImpl implements ModDiscoverer.Builder {
44+
private final String folderName;
45+
private String fileNameMatcher = "(.+).jar$";
46+
private boolean searchRecursively = false;
47+
private Predicate<String> directoryFilter = s -> true;
48+
49+
public BuilderImpl(String folderName) {
50+
this.folderName = folderName;
51+
}
52+
53+
@Override
54+
public Builder fileNameMatcher(String pattern) {
55+
this.fileNameMatcher = pattern;
56+
return this;
57+
}
58+
59+
@Override
60+
public Builder searchRecursively(boolean searchRecursively) {
61+
this.searchRecursively = searchRecursively;
62+
return this;
63+
}
64+
65+
@Override
66+
public Builder directoryFilter(Predicate<String> filter) {
67+
this.directoryFilter = filter;
68+
return this;
69+
}
70+
71+
@Override
72+
public ModDiscoverer build() {
73+
return new ModDiscovererImpl(folderName, Pattern.compile(fileNameMatcher), searchRecursively, directoryFilter);
74+
}
75+
}
76+
}

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
import fr.catcore.wfvaio.FabricVariants;
44
import fr.catcore.wfvaio.WhichFabricVariantAmIOn;
5+
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModRemapper;
56
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.ModRemapperContext;
67
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v1.ModRemapperV1Context;
8+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v2.ModRemmaperV2Context;
79
import net.fabricmc.loader.api.FabricLoader;
810

911
import java.io.File;
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
import java.util.Map;
15+
import java.util.stream.Collectors;
1016

1117
public class ModRemappingAPIImpl {
1218
private static ModRemapperContext CURRENT_CONTEXT = null;
@@ -16,6 +22,7 @@ public class ModRemappingAPIImpl {
1622

1723
private static boolean init = false;
1824
private static boolean initializing = false;
25+
private static final String v2EntrypointName = "mod-remapper-api:modremapper_v2";
1926

2027
public static void init() {
2128
if (!init && !initializing) {
@@ -32,6 +39,25 @@ public static void init() {
3239

3340
CURRENT_CONTEXT.afterRemap();
3441

42+
Map<String, List<ModRemapper>> v2Remappers = FabricLoader.getInstance()
43+
.getEntrypoints(v2EntrypointName, ModRemapper.class)
44+
.stream().collect(Collectors.groupingBy(ModRemapper::getContextId));
45+
46+
List<String> v2Keys = new ArrayList<>(v2Remappers.keySet());
47+
48+
for (String contextKey : v2Keys) {
49+
ModRemmaperV2Context context = new ModRemmaperV2Context(contextKey, v2Remappers.get(contextKey));
50+
CURRENT_CONTEXT = context;
51+
52+
Map<String, List<ModRemapper>> newRemappers = context.discoverMods(remapClassEdits)
53+
.stream().collect(Collectors.groupingBy(ModRemapper::getContextId));
54+
55+
v2Keys.addAll(newRemappers.keySet());
56+
v2Remappers.putAll(newRemappers);
57+
58+
context.afterRemap();
59+
}
60+
3561
initializing = false;
3662
init = true;
3763
}

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/context/BaseModRemapperContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.HashMap;
44
import java.util.Map;
55

6-
public abstract class BaseModRemapperContext implements ModRemapperContext {
6+
public abstract class BaseModRemapperContext<T> implements ModRemapperContext<T> {
77
private static final Map<String, ModRemapperContext> REGISTRY = new HashMap<>();
88

99
public BaseModRemapperContext(String id) {

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/context/ModRemapperContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
import java.util.Map;
1212
import java.util.Set;
1313

14-
public interface ModRemapperContext {
14+
public interface ModRemapperContext<T> {
1515
void init();
1616
void remapMods(Map<ModCandidate, Path> pathMap);
1717
void afterRemap();
18-
void discoverMods(boolean remapClassEdits);
18+
List<T> discoverMods(boolean remapClassEdits);
1919
void gatherRemappers();
2020
Map<String, List<String>> getMixin2TargetMap();
2121
MappingsRegistry getMappingsRegistry();

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/context/v1/ModRemapperV1Context.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.github.fabriccompatibiltylayers.modremappingapi.impl.compatibility.V0ModRemapper;
88
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.BaseModRemapperContext;
99
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.MappingsRegistryInstance;
10+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.ModRemapperContext;
1011
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
1112
import io.github.fabriccompatibiltylayers.modremappingapi.impl.remapper.ModTrRemapper;
1213
import io.github.fabriccompatibiltylayers.modremappingapi.impl.remapper.RemappingFlags;
@@ -22,7 +23,7 @@
2223
import java.util.*;
2324
import java.util.function.Supplier;
2425

25-
public class ModRemapperV1Context extends BaseModRemapperContext {
26+
public class ModRemapperV1Context extends BaseModRemapperContext<ModRemapper> {
2627
private final Set<RemappingFlags> remapFlags = new HashSet<>();
2728
private final List<ModRemapper> remappers = new ArrayList<>();
2829
private final Map<String, List<String>> mixin2TargetMap = new HashMap<>();
@@ -93,7 +94,7 @@ public void afterRemap() {
9394
}
9495

9596
@Override
96-
public void discoverMods(boolean remapClassEdits) {
97+
public List<ModRemapper> discoverMods(boolean remapClassEdits) {
9798
Map<ModCandidate, Path> modPaths = this.modDiscoverer.init(remappers, remapClassEdits, this);
9899

99100
for (ModCandidate candidate : modPaths.keySet()) {
@@ -105,6 +106,8 @@ public void discoverMods(boolean remapClassEdits) {
105106
this.remapMods(modPaths);
106107

107108
modPaths.values().forEach(FabricLauncherBase.getLauncher()::addToClassPath);
109+
110+
return new ArrayList<>();
108111
}
109112

110113
private static final String v0EntrypointName = "mod-remapper-api:modremapper";
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v2;
2+
3+
import io.github.fabriccompatibilitylayers.modremappingapi.api.v2.ModRemapper;
4+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.LibraryHandler;
5+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.ModCandidate;
6+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.BaseModRemapperContext;
7+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.MappingsRegistryInstance;
8+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.ModRemapperContext;
9+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
10+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.remapper.RemappingFlags;
11+
import net.fabricmc.tinyremapper.TinyRemapper;
12+
13+
import java.nio.file.Path;
14+
import java.util.*;
15+
16+
public class ModRemmaperV2Context extends BaseModRemapperContext<ModRemapper> {
17+
private final List<ModRemapper> remappers;
18+
private final Set<RemappingFlags> remapFlags = new HashSet<>();
19+
private final Map<String, List<String>> mixin2TargetMap = new HashMap<>();
20+
private final MappingsRegistryInstance mappingsRegistry = new MappingsRegistryInstance();
21+
private final LibraryHandler libraryHandler = new LibraryHandler();
22+
23+
public ModRemmaperV2Context(String id, List<ModRemapper> remappers) {
24+
super(id);
25+
this.remappers = remappers;
26+
}
27+
28+
@Override
29+
public void init() {
30+
31+
}
32+
33+
@Override
34+
public void remapMods(Map<ModCandidate, Path> pathMap) {
35+
36+
}
37+
38+
@Override
39+
public void afterRemap() {
40+
41+
}
42+
43+
@Override
44+
public List<ModRemapper> discoverMods(boolean remapClassEdits) {
45+
for (ModRemapper remapper : remappers) {
46+
47+
}
48+
}
49+
50+
@Override
51+
public void gatherRemappers() {
52+
53+
}
54+
55+
@Override
56+
public Map<String, List<String>> getMixin2TargetMap() {
57+
return mixin2TargetMap;
58+
}
59+
60+
@Override
61+
public MappingsRegistry getMappingsRegistry() {
62+
return mappingsRegistry;
63+
}
64+
65+
@Override
66+
public void addToRemapperBuilder(TinyRemapper.Builder builder) {
67+
68+
}
69+
70+
@Override
71+
public Set<RemappingFlags> getRemappingFlags() {
72+
return remapFlags;
73+
}
74+
75+
@Override
76+
public LibraryHandler getLibraryHandler() {
77+
return libraryHandler;
78+
}
79+
80+
public List<ModRemapper> getRemappers() {
81+
return remappers;
82+
}
83+
}

0 commit comments

Comments
 (0)