Skip to content

Commit 0fc5da2

Browse files
committed
MappingsRegistry refactoring
1 parent efa3f79 commit 0fc5da2

File tree

10 files changed

+488
-505
lines changed

10 files changed

+488
-505
lines changed

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

Lines changed: 24 additions & 296 deletions
Large diffs are not rendered by default.

src/main/java/fr/catcore/modremapperapi/utils/MappingsUtils.java

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

33
import io.github.fabriccompatibiltylayers.modremappingapi.impl.MappingsUtilsImpl;
44
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingTreeHelper;
5+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
56
import net.fabricmc.mappingio.tree.MappingTree;
67
import net.fabricmc.tinyremapper.*;
78

@@ -19,7 +20,7 @@ public static String getTargetNamespace() {
1920

2021
@Deprecated
2122
public static MappingTree getMinecraftMappings() {
22-
return MappingsUtilsImpl.getVanillaMappings();
23+
return MappingsRegistry.VANILLA;
2324
}
2425

2526
@Deprecated

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

Lines changed: 52 additions & 204 deletions
Large diffs are not rendered by default.

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.github.fabriccompatibiltylayers.modremappingapi.api.v1.ModRemapper;
55
import fr.catcore.modremapperapi.remapping.RemapUtil;
66
import io.github.fabriccompatibiltylayers.modremappingapi.impl.compatibility.V0ModRemapper;
7+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings.MappingsRegistry;
78
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.CacheUtils;
89
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.FileUtils;
910
import net.fabricmc.loader.api.FabricLoader;
@@ -72,10 +73,10 @@ protected static void init(List<ModRemapper> modRemappers, boolean remapClassEdi
7273
}
7374

7475
for (Path path : modPaths.keySet()) {
75-
RemapUtil.makeModMappings(path);
76+
MappingsRegistry.addModMappings(path);
7677
}
7778

78-
RemapUtil.generateModMappings();
79+
MappingsRegistry.generateModMappings();
7980

8081
RemapUtil.remapMods(modPaths);
8182

src/main/java/io/github/fabriccompatibiltylayers/modremappingapi/impl/mappings/MappingTreeHelper.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings;
22

33
import io.github.fabriccompatibiltylayers.modremappingapi.impl.MappingsUtilsImpl;
4+
import net.fabricmc.loader.api.FabricLoader;
45
import net.fabricmc.loader.impl.util.log.Log;
56
import net.fabricmc.loader.impl.util.log.LogCategory;
67
import net.fabricmc.mappingio.MappingReader;
78
import net.fabricmc.mappingio.MappingVisitor;
89
import net.fabricmc.mappingio.MappingWriter;
910
import net.fabricmc.mappingio.adapter.MappingDstNsReorder;
11+
import net.fabricmc.mappingio.adapter.MappingNsRenamer;
1012
import net.fabricmc.mappingio.adapter.MappingSourceNsSwitch;
1113
import net.fabricmc.mappingio.format.MappingFormat;
1214
import net.fabricmc.mappingio.format.tiny.Tiny1FileReader;
@@ -15,6 +17,7 @@
1517
import net.fabricmc.tinyremapper.IMappingProvider;
1618
import net.fabricmc.tinyremapper.TinyUtils;
1719
import org.jetbrains.annotations.ApiStatus;
20+
import org.jetbrains.annotations.NotNull;
1821

1922
import java.io.BufferedReader;
2023
import java.io.IOException;
@@ -23,6 +26,7 @@
2326
import java.nio.file.Path;
2427
import java.util.ArrayList;
2528
import java.util.List;
29+
import java.util.Map;
2630
import java.util.Objects;
2731

2832
@ApiStatus.Internal
@@ -141,4 +145,26 @@ public static void exportMappings(MappingTreeView mappingTreeView, Path outputPa
141145
mappingTreeView.accept(writer);
142146
}
143147
}
148+
149+
public static @NotNull MappingVisitor getNsReorderingVisitor(MemoryMappingTree tempTree, boolean switchNamespace, Map<String, String> renames) {
150+
List<String> targetNamespace = new ArrayList<>();
151+
targetNamespace.add("intermediary");
152+
153+
if (FabricLoader.getInstance().getMappingResolver().getNamespaces().contains("named")) targetNamespace.add("named");
154+
155+
MappingVisitor visitor = tempTree;
156+
157+
if (switchNamespace) {
158+
visitor = new MappingSourceNsSwitch(
159+
new MappingDstNsReorder(
160+
visitor,
161+
targetNamespace
162+
),
163+
"official"
164+
);
165+
}
166+
167+
visitor = new MappingNsRenamer(visitor, renames);
168+
return visitor;
169+
}
144170
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,135 @@
11
package io.github.fabriccompatibiltylayers.modremappingapi.impl.mappings;
22

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.utils.FileUtils;
9+
import io.github.fabriccompatibiltylayers.modremappingapi.impl.utils.VersionHelper;
10+
import net.fabricmc.loader.api.FabricLoader;
11+
import net.fabricmc.loader.impl.launch.MappingConfiguration;
12+
import net.fabricmc.mappingio.MappingVisitor;
13+
import net.fabricmc.mappingio.tree.MappingTree;
14+
import net.fabricmc.mappingio.tree.MemoryMappingTree;
315
import org.jetbrains.annotations.ApiStatus;
16+
import org.jetbrains.annotations.Nullable;
17+
18+
import java.io.IOException;
19+
import java.io.InputStream;
20+
import java.net.URL;
21+
import java.net.URLConnection;
22+
import java.nio.file.Path;
23+
import java.util.HashMap;
24+
import java.util.Locale;
25+
import java.util.Map;
26+
import java.util.zip.ZipError;
27+
28+
import static fr.catcore.modremapperapi.remapping.RemapUtil.defaultPackage;
429

530
@ApiStatus.Internal
631
public class MappingsRegistry {
32+
public static final MemoryMappingTree VANILLA;
33+
public static MemoryMappingTree FORMATTED = new MemoryMappingTree();
34+
public static boolean generated = false;
35+
36+
public static MemoryMappingTree MODS;
37+
38+
static {
39+
try {
40+
MODS = MappingTreeHelper.createMappingTree();
41+
} catch (IOException e) {
42+
throw new RuntimeException(e);
43+
}
44+
}
45+
46+
public static MemoryMappingTree FULL = new MemoryMappingTree();
47+
48+
static {
49+
URL url = MappingConfiguration.class.getClassLoader().getResource("mappings/mappings.tiny");
50+
51+
if (url != null) {
52+
try {
53+
URLConnection connection = url.openConnection();
54+
55+
VANILLA = MappingTreeHelper.readMappings(connection.getInputStream());
56+
} catch (IOException | ZipError e) {
57+
throw new RuntimeException("Error reading "+url, e);
58+
}
59+
} else {
60+
VANILLA = null;
61+
}
62+
}
63+
64+
public static void generateFormattedMappings(@Nullable InputStream extraStream) throws IOException {
65+
generated = true;
66+
67+
Map<String, String> renames = new HashMap<>();
68+
boolean switchNamespace = false;
69+
70+
switch (WhichFabricVariantAmIOn.getVariant()) {
71+
case BABRIC:
72+
renames.put(FabricLoader.getInstance().getEnvironmentType().name().toLowerCase(Locale.ENGLISH), "official");
73+
switchNamespace = true;
74+
break;
75+
case ORNITHE_V2:
76+
Boolean merged = VersionHelper.predicate(">=1.3");
77+
if (merged != null && !merged) {
78+
renames.put(FabricLoader.getInstance().getEnvironmentType().name().toLowerCase(Locale.ENGLISH) + "Official", "official");
79+
switchNamespace = true;
80+
}
81+
break;
82+
case BABRIC_NEW_FORMAT:
83+
renames.put(FabricLoader.getInstance().getEnvironmentType().name().toLowerCase(Locale.ENGLISH) + "Official", "official");
84+
switchNamespace = true;
85+
break;
86+
default:
87+
break;
88+
}
89+
90+
MemoryMappingTree tempTree = new MemoryMappingTree();
91+
MappingVisitor visitor = MappingTreeHelper.getNsReorderingVisitor(tempTree, switchNamespace, renames);
92+
93+
VANILLA.accept(visitor);
94+
95+
if (extraStream == null) {
96+
tempTree.accept(FORMATTED);
97+
} else {
98+
MappingTree extra = MappingTreeHelper.readMappings(extraStream);
99+
100+
MappingTreeHelper.mergeIntoNew(
101+
FORMATTED,
102+
tempTree,
103+
extra
104+
);
105+
}
106+
107+
FORMATTED.accept(FULL);
108+
}
109+
110+
public static void addModMappings(Path path) {
111+
MappingBuilder mappingBuilder = new MappingBuilderImpl(MODS);
112+
113+
try {
114+
FileUtils.listPathContent(path)
115+
.stream()
116+
.filter(file -> file.endsWith(".class"))
117+
.map(file -> file.replace(".class", ""))
118+
.forEach(cl -> mappingBuilder.addMapping(cl, (cl.contains("/") ? "" : defaultPackage) + cl));
119+
} catch (IOException e) {
120+
throw new RuntimeException(e);
121+
}
122+
}
123+
124+
public static void generateModMappings() {
125+
try {
126+
MODS.visitEnd();
127+
128+
MappingTreeHelper.exportMappings(MODS, Constants.REMAPPED_MAPPINGS_FILE.toPath());
129+
} catch (IOException e) {
130+
throw new RuntimeException("Error while generating mods mappings", e);
131+
}
132+
133+
MappingsUtilsImpl.addMappingsToContext(MODS);
134+
}
7135
}

0 commit comments

Comments
 (0)