diff --git a/arclight-coremod/src/main/java/io/izzel/arclight/mod/util/remapper/PluginRemapper.java b/arclight-coremod/src/main/java/io/izzel/arclight/mod/util/remapper/PluginRemapper.java index 594c5499..8148746b 100644 --- a/arclight-coremod/src/main/java/io/izzel/arclight/mod/util/remapper/PluginRemapper.java +++ b/arclight-coremod/src/main/java/io/izzel/arclight/mod/util/remapper/PluginRemapper.java @@ -22,6 +22,7 @@ import org.objectweb.asm.commons.ClassRemapper; import org.objectweb.asm.commons.Remapper; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.MethodInsnNode; +import org.spongepowered.asm.service.MixinService; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -259,7 +260,7 @@ public class PluginRemapper extends JarRemapper { private byte[] remapClassFile(ClassReader reader, final ClassRepo repo) { ClassNode node = new ClassNode(); RemappingClassAdapter mapper = new RemappingClassAdapter(node, this, repo); - reader.accept(mapper, 0); + reader.accept(mapper, ClassReader.SKIP_FRAMES); ArclightRedirectAdapter.redirect(node, generatedHandler); ArclightInterfaceInvokerGen.generate(node, this.classRepo, this, this.inheritanceProvider); @@ -274,22 +275,23 @@ public class PluginRemapper extends JarRemapper { private static AtomicInteger atomicInteger = new AtomicInteger(); private String generateReflectionHandler() { - ClassNode node = classRepo.findClass(Type.getInternalName(ArclightReflectionHandler.class)); - Preconditions.checkNotNull(node, "node"); - ClassWriter writer = new ClassWriter(0); - String name = Type.getInternalName(ArclightReflectionHandler.class) + "_" + atomicInteger.getAndIncrement(); - ClassVisitor visitor = new ClassRemapper(writer, new NameRemapper(name)); - node.accept(visitor); - byte[] bytes = writer.toByteArray(); - Class cl = Unsafe.defineClass(name.replace('/', '.'), bytes, 0, bytes.length, getClass().getClassLoader(), getClass().getProtectionDomain()); - Unsafe.ensureClassInitialized(cl); try { + ClassNode node = MixinService.getService().getBytecodeProvider().getClassNode(Type.getInternalName(ArclightReflectionHandler.class)); + Preconditions.checkNotNull(node, "node"); + ClassWriter writer = new ClassWriter(0); + String name = Type.getInternalName(ArclightReflectionHandler.class) + "_" + atomicInteger.getAndIncrement(); + ClassVisitor visitor = new ClassRemapper(writer, new NameRemapper(name)); + node.accept(visitor); + byte[] bytes = writer.toByteArray(); + Class cl = Unsafe.defineClass(name.replace('/', '.'), bytes, 0, bytes.length, getClass().getClassLoader(), getClass().getProtectionDomain()); + Unsafe.ensureClassInitialized(cl); + Field remapper = cl.getField("remapper"); remapper.set(null, this); + return name; } catch (Exception e) { - e.printStackTrace(); + throw new RuntimeException(e); } - return name; } private static class NameRemapper extends Remapper { diff --git a/arclight-coremod/src/main/java/io/izzel/arclight/mod/util/remapper/SharedClassRepo.java b/arclight-coremod/src/main/java/io/izzel/arclight/mod/util/remapper/SharedClassRepo.java index cfe3dd13..9a1d93cb 100644 --- a/arclight-coremod/src/main/java/io/izzel/arclight/mod/util/remapper/SharedClassRepo.java +++ b/arclight-coremod/src/main/java/io/izzel/arclight/mod/util/remapper/SharedClassRepo.java @@ -61,7 +61,7 @@ public class SharedClassRepo implements ClassRepo { try (InputStream inputStream = connection.getInputStream()) { ClassReader reader = new ClassReader(inputStream); ClassNode classNode = new ClassNode(); - reader.accept(classNode, 0); + reader.accept(classNode, ClassReader.SKIP_CODE); return classNode; } } catch (IOException ignored) {