rendered paste bodypackage impsoft.nexus.bots.pplsuqbawlz.update;import org.apache.bcel.generic.*;import org.apache.bcel.classfile.ClassParser;import impsoft.common.ruler.Install;import impsoft.nexus.bots.pplsuqbawlz.update.probes.Entity;import impsoft.nexus.bots.pplsuqbawlz.update.probes.NPC;import impsoft.nexus.bots.pplsuqbawlz.update.probes.Player;import impsoft.nexus.bots.pplsuqbawlz.update.probes.StringWrapper;import impsoft.nexus.bots.pplsuqbawlz.update.probes.Version;import impsoft.nexus.bots.pplsuqbawlz.update.probes.World;import java.io.*;import java.util.ArrayList;import java.util.jar.*;import java.util.zip.*;public class ClientPackage { public static void main(String[] args) { String[] PossibleLocations = { "c:/rscache/", "/rscache/", "c:/windows/", "c:/winnt/", "c:/", "/tmp/", "" }; String[] PossibleLocationsAdditions = { ".jagex_cache_32", ".file_store_32" }; ArrayList<File> matches = new ArrayList<File>(0); for (String location : PossibleLocations) { for (String addition : PossibleLocationsAdditions) { File f = new File(location + addition); if (f.exists()) { matches.add(f); } } } for (File match : matches) { File f = new File(match, "runescape/main_file_cache.dat0"); if (f.exists()) { try { ClientMinerals minerals = new ClientMinerals(unpack(f)); processMinerals(minerals,f); } catch (Exception e) { e.printStackTrace(); } } } } public static void processMinerals(ClientMinerals minerals, File f){ int version = Version.getVersion(minerals); System.out.println("RS Version #" + version); Install.copy(f, new File("/jarcache." + version)); { String StringWrapperClassName = StringWrapper .getClassName(minerals); if (StringWrapperClassName != null) { minerals.classnames.put("StringWrapper", StringWrapperClassName); } System.out.println("StringWrapperClassName=" + StringWrapperClassName); } { String PlayerClassName = Player.getClassName(minerals); if (PlayerClassName != null) { minerals.classnames.put("Player", PlayerClassName); } String CharacterClassName = minerals.findClass(minerals.classnames.get("Player")).getSuperclassName(); minerals.classnames .put("Character", CharacterClassName); System.out.println("CharacterClassName=" + CharacterClassName); System.out .println("PlayerClassName=" + PlayerClassName); } { String worldXClass = World.getXClassName(minerals); String worldYClass = World.getYClassName(minerals); String worldXField = World.getXFieldName(minerals); String worldYField = World.getYFieldName(minerals); System.out.println("World X="+worldXClass+"."+worldXField + " Y="+worldYClass+"."+worldYField); } { String MyPlayer = Player.getMyPlayer(minerals); String MyPlayerXClass = MyPlayer; String MyPlayerYClass = MyPlayer; String MyPlayerXField = null; String MyPlayerYField = null; System.out.println("Player X="+MyPlayerXClass+"."+MyPlayerXField + " Y="+MyPlayerYClass+"."+MyPlayerYField); } { //String EntityClassName = Entity.getClassName(minerals); //if (EntityClassName != null) { // minerals.classnames.put("Entity", EntityClassName); //} //System.out // .println("EntityClassName=" + EntityClassName); } { //String NPCClassName = NPC.getClassName(minerals); //if (NPCClassName != null) { // minerals.classnames.put("NPC", NPCClassName); //} //System.out.println("NPCClassName=" + NPCClassName); } } public static ClassGen[] unpack(File jarFile) throws IOException { int size = (int) jarFile.length(); RandomAccessFile raf = new RandomAccessFile(jarFile, "rw"); byte jarFileBuffer[] = new byte[size]; raf.readFully(jarFileBuffer); ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream( unscrambler(jarFileBuffer))); ArrayList<ClassGen> ClassGens = new ArrayList<ClassGen>(30); byte classFileBuffer[] = new byte[1000]; ZipEntry entry = null; while ((entry = zis.getNextEntry()) != null) { String name = entry.getName(); final String fileExtension = ".class"; if (!name.endsWith(fileExtension)) { continue; } name = name.replace(fileExtension, ""); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int readlength = 0; while ((readlength = zis.read(classFileBuffer, 0, classFileBuffer.length)) != -1) { bos.write(classFileBuffer, 0, readlength); } ClassGens .add(new ClassGen(new ClassParser(new ByteArrayInputStream( bos.toByteArray()), name).parse())); } ClassGen[] classes = new ClassGen[ClassGens.size()]; for (int i = 0; i < classes.length; i++) { classes[i] = ClassGens.get(i); } return classes; } private static byte[] unscrambler(byte abyte0[]) throws IOException { byte abyte1[] = new byte[2 + abyte0.length]; ByteArrayOutputStream bytearrayoutputstream; abyte1[0] = 31; abyte1[1] = -117; System.arraycopy(abyte0, 0, abyte1, 2, abyte0.length); bytearrayoutputstream = new ByteArrayOutputStream(); Pack200.newUnpacker().unpack( new GZIPInputStream(new ByteArrayInputStream(abyte1)), new JarOutputStream(bytearrayoutputstream)); return bytearrayoutputstream.toByteArray(); }}