package net.minecraft;
import java.applet.Applet;
import java.applet.AppletStub;
import java.awt.BorderLayout;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.HashMap;
import java.util.Map;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import org.sinrel.engine.actions.AuthData;
public class Launcher extends Applet implements AppletStub {
private static final long serialVersionUID = 1L;
private Applet applet = null;
public Map<String, String> customParameters = new HashMap<String, String>();
private int context = 0;
private boolean active = false;
private URL[] urls;
private String bin;
private AuthData authData;
public Launcher(String bin, URL[] urls, AuthData authData) {
this.bin = bin;
this.urls = urls;
this.authData = authData;
}
public void init() {
if (applet != null) {
applet.init();
return;
}
URLClassLoader cl = new URLClassLoader(urls);
/*
boolean hasReloader = false;
try {
cl.loadClass("cpw.mods.fml.relauncher.FMLRelauncher");
hasReloader = true;
} catch (ClassNotFoundException ex) {}
if (!hasReloader) // Not a FML
addExtra(cl, Launcher.class.getProtectionDomain());
*/
ClassPool pool = new ClassPool(true);
try {
String token = authData.getToken().replace("\"", "\\\"");
CtClass dummy = pool.makeClass("sle.Dummy");
dummy.addMethod(CtMethod.make("public static String bob() {return \"" + token + "\";}", dummy));
dummy.toClass(cl, Launcher.class.getProtectionDomain());
} catch (Exception ex) {
ex.printStackTrace();
}
System.setProperty("org.lwjgl.librarypath", bin + "natives");
System.setProperty("net.java.games.input.librarypath", bin + "natives");
try {
Class<?> Mine = cl.loadClass("net.minecraft.client.MinecraftApplet");
Applet applet = (Applet) Mine.newInstance();
this.applet = applet;
applet.setStub(this);
applet.setSize(getWidth(), getHeight());
setLayout(new BorderLayout());
add(applet, "Center");
applet.init();
active = true;
validate();
} catch (Exception e) {
e.printStackTrace();
}
}
public void replace(Applet applet) {
this.applet = applet;
applet.setStub(this);
applet.setSize(getWidth(), getHeight());
setLayout(new BorderLayout());
add(applet, "Center");
applet.init();
active = true;
validate();
this.start();
}
public String getParameter(String name) {
String custom = (String) customParameters.get(name);
if (custom != null)
return custom;
try {
return super.getParameter(name);
} catch (Exception e) {
customParameters.put(name, null);
}
return null;
}
public void start() {
if (applet != null) {
applet.start();
return;
}
}
public boolean isActive() {
if (context == 0) {
context = -1;
try {
if (getAppletContext() != null)
context = 1;
} catch (Exception e) {}
}
if (context == -1)
return active;
return super.isActive();
}
public void stop() {
if (applet != null) {
active = false;
applet.stop();
return;
}
}
public void destroy() {
if (applet != null) {
applet.destroy();
return;
}
}
/*
public void addExtra(ClassLoader loader, ProtectionDomain pd) {
try {
ClassPool pool = new ClassPool(true);
String token = authData.getToken();
try {
loader.loadClass("sle.Dummy");
return;
} catch (ClassNotFoundException e) {
System.err.println("Dummy not found");
}
token = token.replace("\"", "\\\"");
CtClass pussy = pool.makeClass("dick.Pussy");
pussy.addMethod(CtMethod.make("public static String getJoinserverToken() {return \"" + token + "\";}", pussy));
pussy.addMethod(CtMethod.make("public static String getCheckserverToken() {return \"" + token + "\";}", pussy));
pussy.toClass(loader, pd);
} catch (Exception ex) {
ex.printStackTrace();
}
}
*/
public void appletResize(int w, int h) {}
public URL getDocumentBase() {
try {
return new URL("http://www.minecraft.net/game/");
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
}