@Override
	public void run() {
		try {
			loadJarURLs();
			dir = new File(SystemUtil.getGameDirectory(frame.getCurrentServerIndex()) + File.separator + "bin" + File.separator);
			if (!dir.exists()) {
				dir.mkdirs();
			}
			downloadJars();
			downloader.addCompleteListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					try {
						extractJars(dir.toString() + File.separator);
						extractNatives(dir.toString() + File.separator);
						if(Settings.useZipClient[frame.getCurrentServerIndex()]) new File(dir, Settings.zipClientFileName).delete();
					} catch (Exception e1) {
						e1.printStackTrace();
					}		
					frame.onComplete();
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}