Remapper ... thing

This commit is contained in:
TheKodeToad 2024-05-12 23:20:39 +01:00
parent 3c0a637e7c
commit 4ae8f8c80f
No known key found for this signature in database
GPG key ID: 5E39D70B4C93C38E
2 changed files with 48 additions and 18 deletions

View file

@ -1,26 +1,56 @@
package io.github.moehreag.mojmap_patcher; package io.github.moehreag.mojmap_patcher;
import io.github.moehreag.mojmap_patcher.api.Mapper;
import io.github.moehreag.mojmap_patcher.api.data.MappingData;
import io.github.moehreag.mojmap_patcher.provider.MojmapProvider; import io.github.moehreag.mojmap_patcher.provider.MojmapProvider;
import io.github.moehreag.mojmap_patcher.parser.ProguardParser; import io.github.moehreag.mojmap_patcher.parser.ProguardParser;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.commons.ClassRemapper;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class MojMapPatcher { public class MojMapPatcher {
public static void main(String[] args) { public static void main(String[] args) throws IOException {
String version; // temporary
if (args.length == 0) { if (args.length != 3) {
version = "latest-release"; System.err.println("Usage: [minecraft-version] [minecraft.jar] [out.jar]");
} else { return;
version = args[0]; }
String minecraftVersion = args[0];
String minecraftJar = args[1];
String outJar = args[2];
MappingData data = ProguardParser.read(MojmapProvider.get(minecraftVersion).orElseThrow());
Mapper mapper = new Mapper(data);
try (ZipFile zipIn = new ZipFile(minecraftJar);
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(outJar))) {
Enumeration<? extends ZipEntry> entries = zipIn.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
try (InputStream in = zipIn.getInputStream(entry)) {
zipOut.putNextEntry(new ZipEntry(entry.getName()));
if (!entry.getName().endsWith(".class")) {
in.transferTo(zipOut);
continue;
}
byte[] bytes = in.readAllBytes();
ClassReader reader = new ClassReader(bytes);
ClassWriter writer = new ClassWriter(0);
reader.accept(new ClassRemapper(writer, mapper), 0);
zipOut.write(writer.toByteArray());
}
}
} }
MojmapProvider.get(version).map(ProguardParser::read).ifPresent(s -> {
//s.getClassFields().keySet().forEach(System.out::println);
String mcObf = s.classes().get("net/minecraft/client/Minecraft");
s = s.reverse();
s.fields()
.entrySet()
.stream()
.filter(entry -> entry.getKey().owner().equals(mcObf))
.forEach(entry -> System.out.println(entry.getKey() + " -> " + entry.getValue()));
});
} }
} }

View file

@ -12,8 +12,8 @@ public class Mapper extends Remapper {
private MappingData data; private MappingData data;
public static Mapper load() { public Mapper(MappingData data) {
throw new UnsupportedOperationException("TODO"); this.data = data;
} }
@Override @Override