package NET.worlds.scape; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Hashtable; public class WobClassLoader extends ClassLoader { static Hashtable loaders = new Hashtable(); Hashtable classes = new Hashtable(); String zipName; public static synchronized Class get(String zipName, String cname) { WobClassLoader cl = (WobClassLoader)loaders.get(zipName); if (cl == null) { cl = new WobClassLoader(zipName); loaders.put(zipName, cl); } try { return cl.loadClass(cname, true); } catch (ClassNotFoundException var4) { return null; } } public WobClassLoader(String n) { this.zipName = n; } @Override protected synchronized Class loadClass(String cname, boolean resolve) throws ClassNotFoundException { Class cl = (Class)this.classes.get(cname); if (cl == null) { try { return this.findSystemClass(cname); } catch (NoClassDefFoundError var7) { } catch (ClassNotFoundException var8) { } byte[] data = this.loadData(cname); if (data != null) { try { cl = this.defineClass(data, 0, data.length); } catch (ClassFormatError var6) { throw new ClassNotFoundException(cname); } } if (cl == null || !cname.equals(cl.getName())) { throw new ClassNotFoundException(cname); } this.classes.put(cname, cl); } if (resolve) { this.resolveClass(cl); } return cl; } private byte[] loadData(String cname) { byte[] data = (byte[])null; InputStream in = null; byte[] var7; try { if (cname == null) { return null; } File file = new File(this.zipName); int len = (int)file.length(); in = new FileInputStream(file); data = new byte[len]; if (in.read(data) != len) { return null; } var7 = data; } catch (Exception var16) { return null; } finally { if (in != null) { try { in.close(); } catch (Exception var15) { } } } return var7; } }