Skip to content

Commit 2803cb6

Browse files
committed
Add map2obf and map2srg artifacts to net.minecraft:mappings
1 parent 275f230 commit 2803cb6

File tree

6 files changed

+123
-19
lines changed

6 files changed

+123
-19
lines changed

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ dependencyResolutionManagement.versionCatalogs.register('libs') {
3131
library 'gson', 'com.google.code.gson', 'gson' version '2.10.1'
3232
library 'jopt', 'net.sf.jopt-simple', 'jopt-simple' version '6.0-alpha-3'
3333
library 'jver', 'net.minecraftforge', 'java-provisioner' version '2.0.2'
34-
library 'srgutils', 'net.minecraftforge', 'srgutils' version '0.5.14'
34+
library 'srgutils', 'net.minecraftforge', 'srgutils' version '0.6.0'
3535
library 'diff', 'io.codechicken', 'DiffPatch' version '2.0.0.36' // Fuzzy patching
3636

3737
library 'fastcsv', 'de.siegmar', 'fastcsv' version '3.4.0'

src/main/java/net/minecraftforge/mcmaven/impl/mappings/Mappings.java

Lines changed: 96 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919
import net.minecraftforge.mcmaven.impl.util.Constants;
2020
import net.minecraftforge.mcmaven.impl.util.ProcessUtils;
2121
import net.minecraftforge.mcmaven.impl.util.Task;
22+
import net.minecraftforge.mcmaven.impl.util.Util;
23+
import net.minecraftforge.srgutils.IMappingFile;
24+
import net.minecraftforge.srgutils.IRenamer;
25+
import net.minecraftforge.srgutils.IMappingFile.IField;
26+
import net.minecraftforge.srgutils.IMappingFile.IMethod;
27+
import net.minecraftforge.srgutils.IMappingFile.IParameter;
2228
import net.minecraftforge.util.hash.HashStore;
2329
import org.jetbrains.annotations.Nullable;
2430

@@ -28,7 +34,21 @@ public class Mappings {
2834
public static final String CHANNEL_ATTR = "net.minecraftforge.mappings.channel";
2935
public static final String VERSION_ATTR = "net.minecraftforge.mappings.version";
3036

31-
protected final Map<MCPSide, Task> tasks = new HashMap<>();
37+
protected enum Tasks {
38+
CSVs("srg2names"),
39+
MappedToSrg("mapped2srg"),
40+
MappedToObf("mapped2obf");
41+
42+
private final String name;
43+
44+
private Tasks(String name) {
45+
this.name = name;
46+
}
47+
};
48+
49+
protected record Key(Tasks type, MCPSide side) {}
50+
51+
protected final Map<Key, Task> tasks = new HashMap<>();
3252
private final String channel;
3353
private final @Nullable String version;
3454

@@ -114,7 +134,8 @@ public Artifact getArtifact(MCPSide side) {
114134
}
115135

116136
public Task getCsvZip(MCPSide side) {
117-
var ret = tasks.get(side);
137+
var key = new Key(Tasks.CSVs, side);
138+
var ret = tasks.get(key);
118139
if (ret != null)
119140
return ret;
120141

@@ -126,8 +147,31 @@ public Task getCsvZip(MCPSide side) {
126147
Task.deps(srg, client, server),
127148
() -> getMappings(side, srg, client, server)
128149
);
129-
tasks.put(side, ret);
150+
tasks.put(key, ret);
151+
return ret;
152+
}
130153

154+
public Task getMapped2Srg(MCPSide side) {
155+
return getTsrg(side, Tasks.MappedToSrg);
156+
}
157+
158+
public Task getMapped2Obf(MCPSide side) {
159+
return getTsrg(side, Tasks.MappedToObf);
160+
}
161+
162+
private Task getTsrg(MCPSide side, Tasks type) {
163+
var key = new Key(type, side);
164+
var ret = tasks.get(key);
165+
if (ret != null)
166+
return ret;
167+
168+
var srg = side.getTasks().getMappings();
169+
var csv = getCsvZip(side);
170+
ret = Task.named(type.name + '[' + this + ']',
171+
Task.deps(srg, csv),
172+
() -> makeTsrg(side, srg, csv, type == Tasks.MappedToObf)
173+
);
174+
tasks.put(key, ret);
131175
return ret;
132176
}
133177

@@ -180,4 +224,53 @@ private File getMappings(MCPSide side, Task srgMappings, Task clientTask, Task s
180224
cache.save();
181225
return output;
182226
}
227+
228+
private File makeTsrg(MCPSide side, Task srgTask, Task csvTask, boolean toObf) {
229+
var root = getFolder(new File(side.getMCP().getBuildFolder(), "data/mapings"));
230+
var output = new File(root, channel() + '-' + version + '-' + (toObf ? "srg" : "obf") + ".tsrg.gz");
231+
232+
var srg = srgTask.execute();
233+
var csv = csvTask.execute();
234+
235+
var cache = HashStore.fromFile(output)
236+
.add("srg", srg)
237+
.add("csv", csv);
238+
239+
if (output.exists() && cache.isSame())
240+
return output;
241+
242+
try {
243+
var names = Mappings.load(csv).names();
244+
245+
var map = IMappingFile.load(srg); // obf2srg
246+
if (!toObf)
247+
map = map.reverse().chain(map); // srg2obf + obf2srg = srg2srg
248+
249+
// Now we rename target2mapped
250+
map = map.rename(new IRenamer() {
251+
@Override
252+
public String rename(IField value) {
253+
return names.getOrDefault(value.getMapped(), value.getMapped());
254+
}
255+
256+
@Override
257+
public String rename(IMethod value) {
258+
return names.getOrDefault(value.getMapped(), value.getMapped());
259+
}
260+
261+
@Override
262+
public String rename(IParameter value) {
263+
return names.getOrDefault(value.getMapped(), value.getMapped());
264+
}
265+
});
266+
267+
// Write in reversed == mapped2target
268+
map.write(output.getAbsoluteFile().toPath(), IMappingFile.Format.TSRG2, true);
269+
} catch (IOException e) {
270+
Util.sneak(e);
271+
}
272+
273+
cache.save();
274+
return output;
275+
}
183276
}

src/main/java/net/minecraftforge/mcmaven/impl/mappings/ParchmentMappings.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ public Mappings withMCVersion(String mcVer) {
5757

5858
@Override
5959
public Task getCsvZip(MCPSide side) {
60-
var ret = tasks.get(side);
60+
var key = new Key(Tasks.CSVs, side);
61+
var ret = tasks.get(key);
6162
if (ret != null)
6263
return ret;
6364

@@ -72,8 +73,7 @@ public Task getCsvZip(MCPSide side) {
7273
Task.deps(Set.of(srg, client, server, data).stream().filter(Objects::nonNull).toList()),
7374
() -> getMappings(side.getMCP(), srg, client, server, data)
7475
);
75-
tasks.put(side, ret);
76-
76+
tasks.put(key, ret);
7777
return ret;
7878
}
7979

src/main/java/net/minecraftforge/mcmaven/impl/repo/Repo.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,4 +239,19 @@ public PendingArtifact withVariants(Supplier<GradleModule.Variant[]> variants) {
239239
return new PendingArtifact(message, task, artifact, auxiliary, variantTask(task, variants));
240240
}
241241
}
242+
243+
/*
244+
* Artifacts for the "mappings" object:
245+
* channel-version.zip: Zip file containing csv's for classes,fields,methods akin to old MCP bot data
246+
* channel-verson-map2obf.tsrg.gz: gzip compressed tsrg file for mapped names to obf (notch) names
247+
* channel-verson-map2srg.tsrg.gz: gzip compressed tsrg file for mapped names to srg (intermediate) names
248+
*/
249+
protected List<PendingArtifact> mappingArtifacts(File cache, Mappings mappings, MCPSide side) {
250+
var coords = mappings.getArtifact(side);
251+
var csvs = pending("Mappings Zip", mappings.getCsvZip(side), coords, false);
252+
var pom = pending("Mappings POM", simplePom(cache, coords), coords.withExtension("pom"), false);
253+
var m2o = pending("Mappings map2obf", mappings.getMapped2Obf(side), coords.withClassifier("map2obf").withExtension("tsrg.gz"), false);
254+
var m2s = pending("Mappings map2srg", mappings.getMapped2Srg(side), coords.withClassifier("map2srg").withExtension("tsrg.gz"), false);
255+
return List.of(csvs, pom, m2o, m2s);
256+
}
242257
}

src/main/java/net/minecraftforge/mcmaven/impl/repo/forge/ForgeRepo.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import java.util.ArrayList;
3737
import java.util.Arrays;
3838
import java.util.List;
39-
import java.util.stream.Stream;
4039

4140
// TODO: [MCMavenizer][ForgeRepo] For now, the ForgeRepo needs to be fully complete with everything it has to do.
4241
// later, we can worry about refactoring it so that other repositories such as MCP (clean) and FMLOnly can function.
@@ -140,8 +139,7 @@ private List<PendingArtifact> processV3(String version, Mappings mappings) {
140139
var extraCoords = Artifact.from(Constants.MC_GROUP, Constants.MC_CLIENT + "-extra", patcher.getMCP().getName().getVersion());
141140
var mappingCoords = mappings.getArtifact(joined);
142141

143-
var mapzip = pending("Mappings Zip", mappings.getCsvZip(joined), mappingCoords, false);
144-
var mappom = pending("Mappings POM", simplePom(build, mappingCoords), mappingCoords.withExtension("pom"), false);
142+
var mappingArtifacts = mappingArtifacts(build, mappings, joined);
145143

146144
var sources = pending("Sources", sourcesTask, name.withClassifier("sources"), true, sourceVariant(mappings));
147145
var classes = pending("Classes", classesTask, name, false, () -> classVariants(mappings, patcher, extraCoords, mappingCoords));
@@ -150,10 +148,12 @@ private List<PendingArtifact> processV3(String version, Mappings mappings) {
150148
var pom = pending("Maven POM", pom(build, patcher, version, extraCoords, mappingCoords), name.withExtension("pom"), false);
151149

152150
var extraOutput = this.mcpconfig.processExtra(Constants.MC_GROUP + ':' + Constants.MC_CLIENT, patcher.getMCP().getName().getVersion());
153-
return Stream.concat(
154-
extraOutput.stream(),
155-
Stream.of(mapzip, mappom, sources, classes, pom, metadata)
156-
).toList();
151+
152+
var ret = new ArrayList<PendingArtifact>();
153+
ret.addAll(mappingArtifacts);
154+
ret.addAll(extraOutput);
155+
ret.addAll(List.of(sources, classes, pom, metadata));
156+
return ret;
157157
}
158158

159159
private static Task metadata(File build, Patcher patcher) {

src/main/java/net/minecraftforge/mcmaven/impl/repo/mcpconfig/MCPConfigRepo.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,7 @@ public List<PendingArtifact> process(Artifact artifact, Mappings mappings) {
113113
var metadata = pending("Metadata", metadata(build, mcpSide), name.withClassifier("metadata").withExtension("zip"), false, metadataVariant());
114114

115115
if (isMappings) {
116-
name = mappings.getArtifact(mcpSide);
117-
return List.of(
118-
pending("Mappings", mappings.getCsvZip(mcpSide), name, false),
119-
pending("Mappings POM", simplePom(build, name), name.withExtension("pom"), false)
120-
);
116+
return mappingArtifacts(build, mappings, mcpSide);
121117
} else if (dependenciesOnly) {
122118
return List.of(
123119
pom.withVariants(() -> classVariants(mappings, mcpSide)),

0 commit comments

Comments
 (0)