So I am using this answer (the self attacher one) to get instrumentation and adding classfiletransformers
if (classfileBuffer == null || classfileBuffer.length == 0) {
return new byte[0];
}
String cn = "";
byte[] buffer = new byte[0];
Class<?> redefineClass = null;
ClassNode node = null;
ClassReader reader = null;
try {
cn = className.replaceAll("/", ".");
buffer = classfileBuffer;
redefineClass = Class.forName(cn);
ClassReader r = new ClassReader(classfileBuffer);
node = new ClassNode();
r.accept(node, 0);
reader = r;
} catch (Exception e) {
System.out.println("Something terrible happened: ");
e.printStackTrace();
}
return this.transform(cn, redefineClass, buffer, node, reader);
(class file transformer code)
this.transform:
ClassWriter cw = new ClassWriter(reader, 0);
classNode.accept(cw);
return cw.toByteArray();
(basically returning classfilebuffer) and I get this error :
Exception in thread "main" java.lang.LinkageError: loader (instance of sun/misc/Launcher$AppClassLoader): attempted duplicate class definition for name: "net/minecraft/client/main/Main"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at Main.main(Main.java:18)
any way I can fix this?