Files
CodeChickenCore/codechicken/lib/tool/StripClassLoader.java
T

50 lines
1.5 KiB
Java
Raw Normal View History

2014-02-03 11:02:42 +10:00
package codechicken.lib.tool;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
public class StripClassLoader extends URLClassLoader
{
public StripClassLoader() {
super(new URL[0], StripClassLoader.class.getClassLoader());
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
if(!name.startsWith("codechicken.lib"))
return super.loadClass(name);
try {
String resName = name.replace('.', '/')+".class";
InputStream res = getResourceAsStream(resName);
if(res == null)
throw new ClassNotFoundException("Could not find resource: "+resName);
byte[] bytes = readFully(res);
bytes = transform(bytes);
return defineClass(name, bytes, 0, bytes.length);
} catch(IOException e) {
throw new ClassNotFoundException(name, e);
}
}
public static byte[] readFully(InputStream is) throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int read;
byte[] data = new byte[16384];
while ((read = is.read(data, 0, data.length)) > 0)
buffer.write(data, 0, read);
return buffer.toByteArray();
}
private byte[] transform(byte[] bytes) {
bytes = MCStripTransformer.transform(bytes);
return bytes;
}
}