Skip to content

Commit e17168e

Browse files
committed
Transfer some mappings related logic to the context
1 parent ffebb6e commit e17168e

13 files changed

Lines changed: 218 additions & 133 deletions

File tree

src/main/java/fr/catcore/modremapperapi/remapping/RemapUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import io.github.fabriccompatibiltylayers.modremappingapi.api.v1.MappingUtils;
44
import io.github.fabriccompatibiltylayers.modremappingapi.impl.MappingsUtilsImpl;
5-
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
5+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v1.ModRemapperV1Context;
66
import net.fabricmc.api.EnvType;
77
import net.fabricmc.loader.api.FabricLoader;
88
import net.fabricmc.mappingio.MappingVisitor;
@@ -14,7 +14,7 @@
1414
@Deprecated
1515
public class RemapUtil {
1616
@Deprecated
17-
public static final List<String> MC_CLASS_NAMES = MappingsRegistry.VANILLA_CLASS_LIST;
17+
public static final List<String> MC_CLASS_NAMES = ModRemapperV1Context.INSTANCE.getMappingsRegistry().getVanillaClassNames();
1818

1919
@Deprecated
2020
public static class MappingList extends ArrayList<MappingBuilder> {

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
@ApiStatus.Internal
2424
public class MappingsUtilsImpl {
2525
private static String sourceNamespace = "official";
26-
private static String defaultPackage = "";
2726

2827
@ApiStatus.Internal
2928
public static String getSourceNamespace() {
@@ -35,14 +34,6 @@ public static void setSourceNamespace(String sourceNamespace) {
3534
MappingsUtilsImpl.sourceNamespace = sourceNamespace;
3635
}
3736

38-
public static String getDefaultPackage() {
39-
return defaultPackage;
40-
}
41-
42-
public static void setDefaultPackage(String defaultPackage) {
43-
MappingsUtilsImpl.defaultPackage = defaultPackage;
44-
}
45-
4637
public static boolean isSourceNamespaceObf() {
4738
return Objects.equals(sourceNamespace, "official");
4839
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import fr.catcore.modremapperapi.utils.Constants;
44
import io.github.fabriccompatibiltylayers.modremappingapi.api.v1.ModRemapper;
55
import io.github.fabriccompatibiltylayers.modremappingapi.impl.compatibility.V0ModRemapper;
6-
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.ModRemapperV1Context;
6+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v1.ModRemapperV1Context;
77
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
88
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.CacheUtils;
99
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.FileUtils;
@@ -71,10 +71,10 @@ public static void init(List<ModRemapper> modRemappers, boolean remapClassEdits,
7171
}
7272

7373
for (Path path : modPaths.keySet()) {
74-
MappingsRegistry.addModMappings(path);
74+
context.getMappingsRegistry().addModMappings(path);
7575
}
7676

77-
MappingsRegistry.generateModMappings();
77+
context.getMappingsRegistry().generateModMappings();
7878

7979
context.remapMods(modPaths);
8080

@@ -112,7 +112,7 @@ private static Map<Path, Path> excludeClassEdits(Map<Path, Path> modPaths, Path
112112
Files.copy(entry.getKey(), entry.getValue(), StandardCopyOption.REPLACE_EXISTING);
113113
}
114114

115-
FileUtils.removeEntriesFromZip(entry.getValue(), MappingsRegistry.VANILLA_CLASS_LIST);
115+
FileUtils.removeEntriesFromZip(entry.getValue(), ModRemappingAPIImpl.getCurrentContext().getMappingsRegistry().getVanillaClassNames());
116116
} catch (IOException | URISyntaxException e) {
117117
e.printStackTrace();
118118
errored.add(entry.getValue());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import fr.catcore.wfvaio.FabricVariants;
44
import fr.catcore.wfvaio.WhichFabricVariantAmIOn;
55
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.ModRemapperContext;
6-
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.ModRemapperV1Context;
6+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.v1.ModRemapperV1Context;
77
import net.fabricmc.loader.api.FabricLoader;
88

99
import java.io.File;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.github.fabriccompatibiltylayers.modremappingapi.impl.context;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public abstract class BaseModRemapperContext implements ModRemapperContext {
7+
private static final Map<String, ModRemapperContext> REGISTRY = new HashMap<>();
8+
9+
public BaseModRemapperContext(String id) {
10+
REGISTRY.put(id, this);
11+
}
12+
13+
public static ModRemapperContext get(String id) {
14+
return REGISTRY.get(id);
15+
}
16+
}
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package io.github.fabriccompatibiltylayers.modremappingapi.impl.context;
2+
3+
import fr.catcore.modremapperapi.utils.Constants;
4+
import fr.catcore.wfvaio.WhichFabricVariantAmIOn;
5+
import io.github.fabriccompatibiltylayers.modremappingapi.api.v1.MappingBuilder;
6+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.MappingBuilderImpl;
7+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.MappingsUtilsImpl;
8+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingTreeHelper;
9+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
10+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.FileUtils;
11+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.VersionHelper;
12+
import net.fabricmc.loader.api.FabricLoader;
13+
import net.fabricmc.mappingio.MappingVisitor;
14+
import net.fabricmc.mappingio.tree.MappingTree;
15+
import net.fabricmc.mappingio.tree.MemoryMappingTree;
16+
17+
import java.io.IOException;
18+
import java.io.InputStream;
19+
import java.nio.file.Path;
20+
import java.util.*;
21+
22+
public class MappingsRegistryInstance extends MappingsRegistry {
23+
public List<String> vanillaClassNames = new ArrayList<>();
24+
private final MemoryMappingTree formatted = new MemoryMappingTree();
25+
private final MemoryMappingTree mods, additional;
26+
27+
private String defaultPackage = "";
28+
29+
public MappingsRegistryInstance() {
30+
super();
31+
32+
try {
33+
this.formatVanillaMappings();
34+
mods = MappingTreeHelper.createMappingTree();
35+
additional = MappingTreeHelper.createMappingTree();
36+
} catch (IOException e) {
37+
throw new RuntimeException(e);
38+
}
39+
}
40+
41+
private void formatVanillaMappings() throws IOException {
42+
Map<String, String> renames = new HashMap<>();
43+
boolean switchNamespace = false;
44+
45+
switch (WhichFabricVariantAmIOn.getVariant()) {
46+
case BABRIC:
47+
renames.put(FabricLoader.getInstance().getEnvironmentType().name().toLowerCase(Locale.ENGLISH), "official");
48+
switchNamespace = true;
49+
break;
50+
case ORNITHE_V2:
51+
Boolean merged = VersionHelper.predicate(">=1.3");
52+
if (merged != null && !merged) {
53+
renames.put(FabricLoader.getInstance().getEnvironmentType().name().toLowerCase(Locale.ENGLISH) + "Official", "official");
54+
switchNamespace = true;
55+
}
56+
break;
57+
case BABRIC_NEW_FORMAT:
58+
renames.put(FabricLoader.getInstance().getEnvironmentType().name().toLowerCase(Locale.ENGLISH) + "Official", "official");
59+
switchNamespace = true;
60+
break;
61+
default:
62+
break;
63+
}
64+
65+
MappingVisitor visitor = MappingTreeHelper.getNsReorderingVisitor(formatted, switchNamespace, renames);
66+
67+
MappingsRegistry.VANILLA.accept(visitor);
68+
}
69+
70+
@Override
71+
public List<String> getVanillaClassNames() {
72+
return vanillaClassNames;
73+
}
74+
75+
@Override
76+
public MemoryMappingTree getFormattedMappings() {
77+
return formatted;
78+
}
79+
80+
@Override
81+
public void addToFormattedMappings(InputStream stream) throws IOException {
82+
MappingTree extra = MappingTreeHelper.readMappings(stream);
83+
84+
MappingTreeHelper.merge(formatted, extra);
85+
}
86+
87+
@Override
88+
public void completeFormattedMappings() throws IOException {
89+
formatted.accept(FULL);
90+
91+
for (MappingTree.ClassMapping classView : formatted.getClasses()) {
92+
String className = classView.getName(MappingsUtilsImpl.getSourceNamespace());
93+
94+
if (className != null) {
95+
vanillaClassNames.add("/" + className + ".class");
96+
}
97+
}
98+
99+
try {
100+
MappingTreeHelper.exportMappings(formatted, Constants.MC_MAPPINGS_FILE.toPath());
101+
} catch (IOException e) {
102+
throw new RuntimeException("Error while writing formatted mappings", e);
103+
}
104+
}
105+
106+
public void setDefaultPackage(String defaultPackage) {
107+
this.defaultPackage = defaultPackage;
108+
}
109+
110+
@Override
111+
public void addModMappings(Path path) {
112+
MappingBuilder mappingBuilder = new MappingBuilderImpl(mods);
113+
114+
try {
115+
FileUtils.listPathContent(path)
116+
.stream()
117+
.filter(file -> file.endsWith(".class"))
118+
.map(file -> file.replace(".class", ""))
119+
.forEach(cl -> mappingBuilder.addMapping(cl, (cl.contains("/") ? "" : this.defaultPackage) + cl));
120+
} catch (IOException e) {
121+
throw new RuntimeException(e);
122+
}
123+
}
124+
125+
@Override
126+
public void generateModMappings() {
127+
try {
128+
mods.visitEnd();
129+
130+
MappingTreeHelper.exportMappings(mods, Constants.REMAPPED_MAPPINGS_FILE.toPath());
131+
} catch (IOException e) {
132+
throw new RuntimeException("Error while generating mods mappings", e);
133+
}
134+
135+
MappingsUtilsImpl.addMappingsToContext(mods);
136+
}
137+
138+
@Override
139+
public MemoryMappingTree getModsMappings() {
140+
return mods;
141+
}
142+
143+
@Override
144+
public MemoryMappingTree getAdditionalMappings() {
145+
return ADDITIONAL;
146+
}
147+
}

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

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

3+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
4+
35
import java.nio.file.Path;
46
import java.util.List;
57
import java.util.Map;
@@ -11,4 +13,5 @@ public interface ModRemapperContext {
1113
void discoverMods(boolean remapClassEdits);
1214
void gatherRemappers();
1315
Map<String, List<String>> getMixin2TargetMap();
16+
MappingsRegistry getMappingsRegistry();
1417
}

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

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

33
import fr.catcore.modremapperapi.utils.Constants;
44
import io.github.fabriccompatibiltylayers.modremappingapi.api.v1.ModRemapper;
55
import io.github.fabriccompatibiltylayers.modremappingapi.impl.LibraryHandler;
66
import io.github.fabriccompatibiltylayers.modremappingapi.impl.MappingsUtilsImpl;
77
import io.github.fabriccompatibiltylayers.modremappingapi.impl.ModDiscoverer;
88
import io.github.fabriccompatibiltylayers.modremappingapi.impl.compatibility.V0ModRemapper;
9+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.BaseModRemapperContext;
10+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.context.MappingsRegistryInstance;
911
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
1012
import io.github.fabriccompatibiltylayers.modremappingapi.impl.remapper.ModTrRemapper;
1113
import io.github.fabriccompatibiltylayers.modremappingapi.impl.remapper.SoftLockFixer;
@@ -20,17 +22,23 @@
2022
import java.util.*;
2123
import java.util.function.Supplier;
2224

23-
public class ModRemapperV1Context implements ModRemapperContext {
25+
public class ModRemapperV1Context extends BaseModRemapperContext {
2426
private final List<ModRemapper> remappers = new ArrayList<>();
2527
private final Map<String, List<String>> mixin2TargetMap = new HashMap<>();
28+
private final MappingsRegistryInstance mappingsRegistry = new MappingsRegistryInstance();
2629

27-
public ModRemapperV1Context() {}
30+
public static ModRemapperV1Context INSTANCE;
31+
32+
public ModRemapperV1Context() {
33+
super("mod-remapping-api:v1");
34+
INSTANCE = this;
35+
}
2836

2937
public void init() {
3038
for (ModRemapper remapper : remappers) {
3139
Optional<String> pkg = remapper.getDefaultPackage();
3240

33-
pkg.ifPresent(MappingsUtilsImpl::setDefaultPackage);
41+
pkg.ifPresent(this.mappingsRegistry::setDefaultPackage);
3442

3543
Optional<String> sourceNamespace = remapper.getSourceNamespace();
3644

@@ -40,19 +48,17 @@ public void init() {
4048

4149
mappings.ifPresent(inputStreamSupplier -> {
4250
try {
43-
MappingsRegistry.generateFormattedMappings(inputStreamSupplier.get());
51+
this.mappingsRegistry.addToFormattedMappings(inputStreamSupplier.get());
4452
} catch (IOException e) {
4553
throw new RuntimeException(e);
4654
}
4755
});
4856
}
4957

50-
if (!MappingsRegistry.generated) {
51-
try {
52-
MappingsRegistry.generateFormattedMappings(null);
53-
} catch (IOException e) {
54-
throw new RuntimeException(e);
55-
}
58+
try {
59+
this.mappingsRegistry.completeFormattedMappings();
60+
} catch (IOException e) {
61+
throw new RuntimeException(e);
5662
}
5763

5864
Path sourceLibraryPath = CacheUtils.getLibraryPath(MappingsUtilsImpl.getSourceNamespace());
@@ -109,4 +115,9 @@ public void gatherRemappers() {
109115
public Map<String, List<String>> getMixin2TargetMap() {
110116
return mixin2TargetMap;
111117
}
118+
119+
@Override
120+
public MappingsRegistry getMappingsRegistry() {
121+
return this.mappingsRegistry;
122+
}
112123
}

0 commit comments

Comments
 (0)