import java.io.*;
import java.util.jar.Pack200;
import java.util.jar.Pack200.*;
import java.util.jar.JarOutputStream;
import java.util.zip.GZIPInputStream;
public class RSUnpacker
{
public static final void main(String args[]) {
if(args.length < 2){
System.out.println("Usage: RSUnpacker [input] [output]");
System.out.println("Eg: RSUnpacker runescape.pack200 runescape.jar");
System.exit(2);
}
byte input[] = readfile(args[0]);
byte file[] = new byte[input.length + 2];
file[0] = 31;
file[1] = -117;
System.arraycopy(input, 0, file, 2, input.length);
try{
FileOutputStream fostream = new FileOutputStream(args[1]);
JarOutputStream jostream = new JarOutputStream(fostream);
Unpacker unpacker = Pack200.newUnpacker();
unpacker.unpack(new GZIPInputStream(new ByteArrayInputStream(file)), jostream);
jostream.close();
System.out.println("Extracted " + args[0] + " to: " + args[1]);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public static final byte[] readfile(String s) {
try {
File file = new File(s);
if(!file.exists()) {
return null;
}
else {
int i = (int)file.length();
byte abyte0[] = new byte[i];
DataInputStream datainputstream = new DataInputStream(new BufferedInputStream(new FileInputStream(s)));
datainputstream.readFully(abyte0, 0, i);
datainputstream.close();
return abyte0;
}
}
catch(Throwable _ex) {
_ex.printStackTrace();
}
return null;
}
}