Skip to content

Commit 2c6d16b

Browse files
committed
Experimental: add all NMS classes into inheritance map for NMS support; for IzzelAliz#1641
1 parent e4b6e87 commit 2c6d16b

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

buildSrc/src/main/groovy/io/izzel/arclight/gradle/tasks/ProcessMappingTask.groovy

+37-5
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ import org.cadixdev.lorenz.io.srg.tsrg.TSrgReader
2020
import org.cadixdev.lorenz.io.srg.tsrg.TSrgWriter
2121
import org.cadixdev.lorenz.model.ClassMapping
2222
import org.cadixdev.lorenz.model.FieldMapping
23+
import org.cadixdev.lorenz.model.Mapping
2324
import org.gradle.api.Project
2425
import org.gradle.api.tasks.Input
2526
import org.gradle.api.tasks.InputDirectory
2627
import org.gradle.api.tasks.InputFile
2728
import org.gradle.api.tasks.OutputDirectory
2829
import org.objectweb.asm.Type
2930

31+
import java.util.jar.JarFile
3032
import java.util.stream.Collectors
3133

3234
class ProcessMappingTask implements Runnable {
@@ -76,7 +78,7 @@ class ProcessMappingTask implements Runnable {
7678
}
7779
super.writeClassMapping(mapping)
7880
}
79-
}.write(new TinyMappingsReader(tree, "srg", "named").read())
81+
}.write(mcp.reverse())
8082
}
8183

8284
def srg = MappingSet.create()
@@ -97,11 +99,22 @@ class ProcessMappingTask implements Runnable {
9799

98100
def im = new InheritanceMap()
99101
def classes = [] as ArrayList<String>
100-
csrg.topLevelClassMappings.each {
102+
/*csrg.topLevelClassMappings.each {
101103
classes.add(it.fullDeobfuscatedName)
102104
it.innerClassMappings.each {
103105
classes.add(it.fullDeobfuscatedName)
104106
}
107+
}*/
108+
def jarFile = new JarFile(this.inJar)
109+
for (entry in jarFile.entries()) {
110+
var name = entry.name
111+
if (name.startsWith("net") && name.endsWith('.class')) {
112+
var internalName = name.substring(0, name.lastIndexOf('.'))
113+
//if (internalName.split('\\$').any { it.integer }) {
114+
// continue
115+
//}
116+
classes.add(internalName)
117+
}
105118
}
106119
im.generate(new JarProvider(Jar.init(this.inJar)), classes)
107120
new File(outDir, 'inheritanceMap.txt').withWriter { w ->
@@ -138,7 +151,14 @@ class ProcessMappingTask implements Runnable {
138151
if (!mapping.hasMappings()) {
139152
this.writer.println(String.format("%s %s", mapping.getFullObfuscatedName(), mapping.getFullDeobfuscatedName()));
140153
} else if (mapping.fullObfuscatedName.contains('/')) {
141-
super.writeClassMapping(mapping)
154+
// hasDeobfuscatedName() has to be true for every mapping
155+
// since we need to preserve identity() mapping
156+
// Or else SpecialSource recognize classes not in mapping as not mapped
157+
this.writer.println(String.format("%s %s", mapping.getFullObfuscatedName(), mapping.getFullDeobfuscatedName()));
158+
159+
mapping.getFieldsByName().values().stream().filter(Mapping::hasDeobfuscatedName).sorted(this.getConfig().getFieldMappingComparator()).forEach(this::writeFieldMapping);
160+
mapping.getMethodMappings().stream().filter(Mapping::hasDeobfuscatedName).sorted(this.getConfig().getMethodMappingComparator()).forEach(this::writeMethodMapping);
161+
mapping.getInnerClassMappings().stream().filter(ClassMapping::hasMappings).sorted(this.getConfig().getClassMappingComparator()).forEach(this::writeClassMapping);
142162
}
143163
}
144164

@@ -167,7 +187,13 @@ class ProcessMappingTask implements Runnable {
167187
if (!mapping.hasMappings()) {
168188
this.writer.println(String.format("%s %s", mapping.getFullObfuscatedName(), mapping.getFullDeobfuscatedName()));
169189
} else if (mapping.fullObfuscatedName.contains('/')) {
170-
super.writeClassMapping(mapping)
190+
// hasDeobfuscatedName() has to be true for every mapping
191+
// since we need to preserve identity() mapping
192+
// Or else SpecialSource recognize classes not in mapping as not mapped
193+
this.writer.println(String.format("%s %s", mapping.getFullObfuscatedName(), mapping.getFullDeobfuscatedName()));
194+
mapping.getFieldsByName().values().stream().filter(Mapping::hasDeobfuscatedName).sorted(this.getConfig().getFieldMappingComparator()).forEach(this::writeFieldMapping);
195+
mapping.getMethodMappings().stream().filter(Mapping::hasDeobfuscatedName).sorted(this.getConfig().getMethodMappingComparator()).forEach(this::writeMethodMapping);
196+
mapping.getInnerClassMappings().stream().filter(ClassMapping::hasMappings).sorted(this.getConfig().getClassMappingComparator()).forEach(this::writeClassMapping);
171197
}
172198
}
173199

@@ -196,7 +222,13 @@ class ProcessMappingTask implements Runnable {
196222
if (!mapping.hasMappings()) {
197223
this.writer.println(String.format("%s %s", mapping.getFullObfuscatedName(), mapping.getFullDeobfuscatedName()));
198224
} else if (mapping.fullObfuscatedName.contains('/')) {
199-
super.writeClassMapping(mapping)
225+
// hasDeobfuscatedName() has to be true for every mapping
226+
// since we need to preserve identity() mapping
227+
// Or else SpecialSource recognize classes not in mapping as not mapped
228+
this.writer.println(String.format("%s %s", mapping.getFullObfuscatedName(), mapping.getFullDeobfuscatedName()));
229+
mapping.getFieldsByName().values().stream().filter(Mapping::hasDeobfuscatedName).sorted(this.getConfig().getFieldMappingComparator()).forEach(this::writeFieldMapping);
230+
mapping.getMethodMappings().stream().filter(Mapping::hasDeobfuscatedName).sorted(this.getConfig().getMethodMappingComparator()).forEach(this::writeMethodMapping);
231+
mapping.getInnerClassMappings().stream().filter(ClassMapping::hasMappings).sorted(this.getConfig().getClassMappingComparator()).forEach(this::writeClassMapping);
200232
}
201233
}
202234

0 commit comments

Comments
 (0)