Remap classes for inheritance (#204)

This commit is contained in:
IzzelAliz 2021-04-03 17:34:28 +08:00
parent 9319dbc00f
commit 8f071289b0
2 changed files with 19 additions and 2 deletions

View File

@ -362,7 +362,10 @@ public class ClassLoaderRemapper extends LenientJarRemapper {
private String getSuper(final String typeName) {
ClassNode node = GlobalClassRepo.INSTANCE.findClass(typeName);
if (node == null) return "java/lang/Object";
if (node == null) {
LOGGER.warn("Failed to find class {}", typeName);
return "java/lang/Object";
}
return node.superName;
}

View File

@ -2,6 +2,9 @@ package io.izzel.arclight.common.mod.util.remapper;
import net.md_5.specialsource.repo.ClassRepo;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.commons.ClassRemapper;
import org.objectweb.asm.commons.Remapper;
import org.objectweb.asm.tree.ClassNode;
import java.io.IOException;
@ -29,7 +32,18 @@ public class ClassLoaderRepo implements ClassRepo {
try (InputStream inputStream = connection.getInputStream()) {
ClassReader reader = new ClassReader(inputStream);
ClassNode classNode = new ClassNode();
reader.accept(classNode, ClassReader.SKIP_CODE);
ClassVisitor cv;
if (classLoader instanceof RemappingClassLoader) {
cv = new ClassRemapper(classNode, new Remapper() {
@Override
public String map(String internalName) {
return ((RemappingClassLoader) classLoader).getRemapper().map(internalName);
}
});
} else {
cv = classNode;
}
reader.accept(cv, ClassReader.SKIP_CODE);
return classNode;
}
} catch (IOException ignored) {