package pl.asiekierka.AsieLauncher.launcher; import java.awt.Dimension; import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.logging.Level; import javax.swing.ImageIcon; import org.smbarbour.mcu.MinecraftFrame; import pl.asiekierka.AsieLauncher.common.IProgressUpdater; import pl.asiekierka.AsieLauncher.common.JavaLauncher; import pl.asiekierka.AsieLauncher.common.Utils; public class MinecraftHandler152 implements MinecraftHandler { private MinecraftFrame frame; public MinecraftHandler152() { // TODO Auto-generated constructor stub } public String getJarLocation(AsieLauncher l) { File dir = new File(l.baseDir + "versions/" + l.mcVersion + "/"); if(!dir.exists()) dir.mkdirs(); return Utils.getPath(l.baseDir + "versions/" + l.mcVersion + "/minecraft.jar"); } @Override public boolean download(AsieLauncher l) { boolean downloaded = false; if(!(new File(getJarLocation(l)).exists())) { // Does not exist, download. try { URL url = new URL("http://assets.minecraft.net/"+l.mcVersion.replace('.', '_')+"/minecraft.jar"); downloaded = Utils.download(url, getJarLocation(l)); } catch(Exception e) { e.printStackTrace(); } } return downloaded; } @Override public boolean isActive() { return (frame != null && frame.isAppletActive()); } private void setStatus(AsieLauncher l, String status) { if(l.updater != null) l.updater.setStatus(status); } private ArrayList<String> getMCArguments(AsieLauncher l, String path, String classpath, String username, String sessionID, String jvmArgs) { ArrayList<String> args = new ArrayList<String>(); args.addAll(Arrays.asList(jvmArgs.split(" "))); args.add("-cp"); args.add(classpath); args.add("org.smbarbour.mcu.MinecraftFrame"); args.add(username); args.add(sessionID); args.add(l.WINDOW_NAME); args.add(new File(path).getAbsolutePath()); args.add(new File(path, "bin").getAbsolutePath()); args.add("854"); args.add("480"); args.add("null"); args.add("false"); Utils.logger.log(Level.FINE, "Launching with arguments: " + args.toString()); return args; } // Dummy @Override public void setUpdater(IProgressUpdater updater) { } @Override public boolean launch(String path, String username, String sessionID, String UUID, String jvmArgs, AsieLauncher l) { if(sessionID.length() == 0) sessionID = "null"; // Launch Minecraft. String separator = System.getProperty("file.separator"); String classpath = System.getProperty("java.class.path"); if(classpath.indexOf(separator) == -1 || (l.getLoadDir().indexOf("/") == 0 && classpath.indexOf("/") != 0)) { classpath = (new File(Utils.getPath(l.getLoadDir()), classpath)).getAbsolutePath(); } setStatus(l, Strings.LAUNCHING); if(!JavaLauncher.launch(path, getMCArguments(l,path,classpath,username,sessionID,jvmArgs))) { // Failsafe Utils.logger.log(Level.INFO, "Launching via internal Java process!!!"); System.setProperty("user.dir", (new File(path).getAbsolutePath())); frame = new MinecraftFrame(l.WINDOW_NAME, new ImageIcon(this.getClass().getResource("/resources/icon.png"))); frame.launch(new File(path), new File(path, "bin"), username, sessionID, "", new Dimension(854, 480), false); try { Thread.sleep(500); } catch(Exception e){} } return true; } }