diff --git a/src/main/java/org/betacraft/ClassicWrapper.java b/src/main/java/org/betacraft/ClassicWrapper.java index bfa86a0..c0c1fa7 100644 --- a/src/main/java/org/betacraft/ClassicWrapper.java +++ b/src/main/java/org/betacraft/ClassicWrapper.java @@ -34,25 +34,18 @@ public ClassicWrapper(String user, String ver_prefix, String version, String ses public void loadMainClass(URL[] url) { try { URL[] old = url.clone(); - URL[] neww = new URL[old.length/* + ogaddons.size()*/]; + URL[] neww = new URL[old.length]; + int i; for (i = 0; i < old.length; i++) { neww[i] = old[i]; } - /*if (i < neww.length) { - for (String c : ogaddons) { - neww[i] = new File(c).toURI().toURL(); - i++; - } - }*/ + classLoader = new BCClassLoader(neww); try { for (Class c : ogaddons) { - /*String[] split = c.split("\\."); - String split2[] = split[split.length - 2].split(File.separator); - Class addon = classLoader.loadClass(split2[split2.length - 1]);*/ this.loadAddon((Addon) c.newInstance()); - System.out.println("- " + c); + System.err.println("- " + c); } } catch (Exception ex) { ex.printStackTrace(); diff --git a/src/main/java/org/betacraft/FkWrapper.java b/src/main/java/org/betacraft/FkWrapper.java index aeb755c..4f13fc3 100644 --- a/src/main/java/org/betacraft/FkWrapper.java +++ b/src/main/java/org/betacraft/FkWrapper.java @@ -28,25 +28,16 @@ public FkWrapper(String user, String ver_prefix, String version, String sessioni public void loadMainClass(URL[] url) { try { URL[] old = url.clone(); - URL[] neww = new URL[old.length/* + ogaddons.size()*/]; + URL[] neww = new URL[old.length]; int i; for (i = 0; i < old.length; i++) { neww[i] = old[i]; } - /*if (i < neww.length) { - for (String c : ogaddons) { - neww[i] = new File(c).toURI().toURL(); - i++; - } - }*/ classLoader = new BCClassLoader(neww); try { for (Class c : ogaddons) { - /*String[] split = c.split("\\."); - String split2[] = split[split.length - 2].split(File.separator); - Class addon = classLoader.loadClass(split2[split2.length - 1]);*/ this.loadAddon((Addon) c.newInstance()); - System.out.println("- " + c); + System.err.println("- " + c); } } catch (Exception ex) { ex.printStackTrace(); diff --git a/src/main/java/org/betacraft/PreClassicWrapper.java b/src/main/java/org/betacraft/PreClassicWrapper.java index 523e0c4..e2dc5d0 100644 --- a/src/main/java/org/betacraft/PreClassicWrapper.java +++ b/src/main/java/org/betacraft/PreClassicWrapper.java @@ -24,17 +24,13 @@ public void loadMainClass(URL[] url) { try { classLoader = null; URL[] old = url.clone(); - URL[] neww = new URL[old.length/* + ogaddons.size()*/]; + URL[] neww = new URL[old.length]; + int i; for (i = 0; i < old.length; i++) { neww[i] = old[i]; } - /*if (i < neww.length) { - for (String c : ogaddons) { - neww[i] = new File(c).toURI().toURL(); - i++; - } - }*/ + classLoader = new BCClassLoader(neww); } catch (Exception ex) { ex.printStackTrace(); @@ -55,24 +51,17 @@ public void loadMainClass(URL[] url) { } try { for (Class c : ogaddons) { - /*String[] split = c.split("\\."); - String split2[] = split[split.length - 2].split(File.separator); - Class addon = classLoader.loadClass(split2[split2.length - 1]);*/ this.loadAddon((Addon) c.newInstance()); - System.out.println("- " + c); + System.err.println("- " + c); } } catch (Exception ex) { ex.printStackTrace(); Logger.printException(ex); } try { - //PreClassicHooker r = new PreClassicHooker(this.width, this.height, this.ver_prefix, this.icon, appletClass); - //Class e = classLoader.loadClass("org.betacraft.PreClassicHooker"); - //Constructor constr = e.getConstructor(int.class, int.class, String.class, Image.class, Class.class); - //PreClassicHooker run = (PreClassicHooker) constr.newInstance(this.width, this.height, this.ver_prefix, this.icon, appletClass); mainClassInstance = mainClass.newInstance(); if (!this.addonsPreAppletInit(this.addons)) return; - System.out.println(mainClassInstance.getClass().getName()); + System.err.println(mainClassInstance.getClass().getName()); Thread t = new Thread() { public void run() { ((Runnable)mainClassInstance).run(); diff --git a/src/main/java/org/betacraft/PreClassicWrapper2.java b/src/main/java/org/betacraft/PreClassicWrapper2.java index a084b30..82c6d55 100644 --- a/src/main/java/org/betacraft/PreClassicWrapper2.java +++ b/src/main/java/org/betacraft/PreClassicWrapper2.java @@ -36,17 +36,13 @@ public PreClassicWrapper2(String user, String ver_prefix, String version, String public void loadMainClass(URL[] url) { try { URL[] old = url.clone(); - URL[] neww = new URL[old.length/* + ogaddons.size()*/ + 1]; + URL[] neww = new URL[old.length + 1]; + int i; for (i = 0; i < old.length; i++) { neww[i] = old[i]; } - /*if (i < neww.length - 1) { - for (String c : ogaddons) { - neww[i] = new File(c).toURI().toURL(); - i++; - } - }*/ + neww[neww.length-1] = new File(BC.get() + "launcher/", "PreClassic.jar").toURI().toURL(); classLoader = new BCClassLoader(neww); try { @@ -64,9 +60,6 @@ public void loadMainClass(URL[] url) { } try { for (Class c : ogaddons) { - /*String[] split = c.split("\\."); - String split2[] = split[split.length - 2].split(File.separator); - Class addon = classLoader.loadClass(split2[split2.length - 1]);*/ this.loadAddon((Addon) c.newInstance()); System.out.println("- " + c); } diff --git a/src/main/java/org/betacraft/Wrapper.java b/src/main/java/org/betacraft/Wrapper.java index 8faf959..9374d5d 100644 --- a/src/main/java/org/betacraft/Wrapper.java +++ b/src/main/java/org/betacraft/Wrapper.java @@ -78,6 +78,9 @@ public class Wrapper extends Applet implements AppletStub { public ArrayList addons = new ArrayList<>(); public ArrayList> ogaddons = new ArrayList<>(); + /** Tells whether lwjgl dependencies have been already loaded or not */ + public boolean libraries_loaded = false; + /** * Initializes the Wrapper class & enables the game * @@ -113,7 +116,7 @@ public Wrapper(String user, String ver_prefix, String version, String sessionid, this.session = sessionid; this.launchType = launchMethod; if (this.launchType.equalsIgnoreCase("")) { - System.out.println("LAUNCH METHOD ISN'T SPECIFIED!!! CANNOT PROCEED! CLOSING!"); + System.err.println("LAUNCH METHOD ISN'T SPECIFIED!!! CANNOT PROCEED! CLOSING!"); System.exit(0); } this.mainFolder = mainFolder; @@ -133,6 +136,10 @@ public Wrapper(String user, String ver_prefix, String version, String sessionid, this.portCompat = Integer.parseInt(port); } + try { + this.libraries_loaded = Boolean.parseBoolean(System.getProperty("betacraft.loaded_libraries")); + } catch (Throwable t) {} + if (this.discord) { String applicationId = "567450523603566617"; DiscordEventHandlers handlers = new DiscordEventHandlers(); @@ -244,7 +251,7 @@ public void askForServer() { } // if (!server.equals("")) { - System.out.println("Accepted server parameters: " + IP + ":" + port + this.mppass != null ? " + mppass" : ""); + System.err.println("Accepted server parameters: " + IP + ":" + port + this.mppass != null ? " + mppass" : ""); params.put("server", IP); params.put("port", port); params.put("mppass", this.mppass); @@ -276,25 +283,16 @@ public void loadMainClass(URL[] url) { try { classLoader = null; URL[] old = url.clone(); - URL[] neww = new URL[old.length/* + ogaddons.size()*/]; + URL[] neww = new URL[old.length]; int i; for (i = 0; i < old.length; i++) { neww[i] = old[i]; } - /*if (i < neww.length) { - for (String c : ogaddons) { - neww[i] = new File(c).toURI().toURL(); - i++; - } - }*/ classLoader = new BCClassLoader(neww); try { for (Class c : ogaddons) { - /*String[] split = c.split("\\."); - String split2[] = split[split.length - 2].split(File.separator); - Class addon = Launcher.class.getClassLoader().loadClass(split2[split2.length - 1]);*/ this.loadAddon((Addon) c.newInstance()); - System.out.println("- " + c); + System.err.println("- " + c); } } catch (Exception ex) { ex.printStackTrace(); @@ -362,10 +360,17 @@ public void setGameFolder() { } } catch (ClassNotFoundException ex) { String err = "Error code 6 (MISSING): Couldn't satisfy the wrapper with a valid .jar file. Check your version JAR or launch configuration file."; - System.out.println(err); + System.err.println(err); JOptionPane.showMessageDialog(gameFrame, err, "Error", JOptionPane.INFORMATION_MESSAGE); ex.printStackTrace(); - } catch (Exception ex) { + System.exit(0); + } catch (NoClassDefFoundError ex) { + String err = "Error code 5 (LIB_MISSING): Some of the required libraries are missing. Select \"Force update\" in instance settings to re-download them."; + System.err.println(err); + JOptionPane.showMessageDialog(gameFrame, err, "Error", JOptionPane.INFORMATION_MESSAGE); + ex.printStackTrace(); + System.exit(0); + } catch (Throwable ex) { ex.printStackTrace(); } } @@ -380,12 +385,14 @@ public boolean accept(File dir, String fileName) { }); // Glue everything Minecraft needs for running - String[] files = new String[libs.length + 1]; + String[] files = new String[1 + (this.libraries_loaded ? 0 : libs.length)]; files[0] = BC.get() + "versions/" + version + ".jar"; - for (int i = 0; i < libs.length; i++) { - files[i + 1] = BC.get() + "bin/" + libs[i]; + if (!this.libraries_loaded) { + for (int i = 0; i < libs.length; i++) { + files[i + 1] = BC.get() + "bin/" + libs[i]; + } } String nativesPath = BC.get() + "bin/natives"; @@ -394,7 +401,7 @@ public boolean accept(File dir, String fileName) { final URL[] url = new URL[files.length]; for (int i = 0; i < files.length; i++) { - System.out.println(files[i]); + System.err.println(files[i]); url[i] = new File(files[i]).toURI().toURL(); } @@ -453,7 +460,7 @@ public void play() { // Start Discord RPC if (discord) discordThread.start(); } catch (Throwable ex) { - System.out.println("A critical error has occurred!"); + System.err.println("A critical error has occurred!"); ex.printStackTrace(); } } @@ -599,7 +606,7 @@ public URL getDocumentBase() { url = new URL("http", "www.minecraft.net", portCompat, "/game/", null); } } - System.out.println(url.toString()); + System.err.println(url.toString()); return url; } catch (Exception e) { @@ -621,7 +628,7 @@ public URL getCodeBase() { @Override public String getParameter(final String paramName) { - System.out.println("Client asked for a parameter: " + paramName); + System.err.println("Client asked for a parameter: " + paramName); if (params.containsKey(paramName)) { return params.get(paramName); } diff --git a/src/main/java/org/betacraft/launcher/BC.java b/src/main/java/org/betacraft/launcher/BC.java index cab1c7b..c2cef5c 100644 --- a/src/main/java/org/betacraft/launcher/BC.java +++ b/src/main/java/org/betacraft/launcher/BC.java @@ -9,7 +9,7 @@ public class BC { public static File SETTINGS; // TODO better check this before release - public static boolean prerelease = false; + public static boolean prerelease = true; public static boolean nightly = false; public static boolean portable = false; diff --git a/src/main/java/org/betacraft/launcher/Instance.java b/src/main/java/org/betacraft/launcher/Instance.java index 3c9dfc2..e3e108c 100644 --- a/src/main/java/org/betacraft/launcher/Instance.java +++ b/src/main/java/org/betacraft/launcher/Instance.java @@ -39,7 +39,7 @@ private Instance(String name, String launchArgs, String version, int width, int public static Instance newInstance(String name) { // Use default settings - return new Instance(name, "-Xmx512M", "b1.6.6", 854, 480, true, false, false, new ArrayList(), BC.get() + name + "/"); + return new Instance(name, "-Xmx512M", "b1.7.3", 854, 480, true, false, false, new ArrayList(), BC.get() + name + "/"); } public static Instance loadInstance(String name) { diff --git a/src/main/java/org/betacraft/launcher/Launcher.java b/src/main/java/org/betacraft/launcher/Launcher.java index 0a571c3..8629cfc 100644 --- a/src/main/java/org/betacraft/launcher/Launcher.java +++ b/src/main/java/org/betacraft/launcher/Launcher.java @@ -49,10 +49,11 @@ import pl.betacraft.auth.CustomResponse; import pl.betacraft.auth.DownloadRequest; import pl.betacraft.auth.DownloadResponse; +import pl.betacraft.json.lib.MouseFixMacOSJson; /** Main class */ public class Launcher { - public static String VERSION = "1.09_12"; // TODO Always update this + public static String VERSION = "1.09_13-pre1"; // TODO Always update this public static Instance currentInstance; public static boolean forceUpdate = false; @@ -61,7 +62,7 @@ public class Launcher { public static Accounts accounts = new Accounts(); public static void main(String[] args) { - System.out.println("Java version: " + System.getProperty("java.version")); + System.out.println("Java version: " + System.getProperty("java.vendor") + ", " + System.getProperty("java.runtime.name") + ", " + System.getProperty("java.runtime.version")); long nano = System.nanoTime(); try { // Fix for Java having a cross-platform look and feel @@ -155,24 +156,23 @@ public static void main(String[] args) { ArrayList> addons = new ArrayList<>(); if (!currentInstance.addons.isEmpty()) { try { - System.out.println("Loading addons..."); + System.err.println("Loading addons..."); for (String s : currentInstance.addons) { try { String path = BC.get() + "launcher" + File.separator + "addons" + File.separator + s + ".jar"; - System.out.println(path); + System.err.println(path); URLClassLoader loader = new URLClassLoader(new URL[] { new File(path).toURI().toURL() }); - System.out.println("- " + s); + System.err.println("- " + s); loadClasses(path, loader); Class c = (Class) loader.loadClass(s); addons.add(c); loader.close(); } catch (Exception ex) { + System.err.println("An error occurred while loading an addon: " + s); ex.printStackTrace(); - Logger.a("An error occurred while loading an addon: " + s); - Logger.printException(ex); } } } catch (Exception ex) { @@ -185,7 +185,7 @@ public static void main(String[] args) { meth = WrapperDetector.getLaunchMethod(BC.get() + "versions/" + currentInstance.version + ".jar"); if (meth.equals("custom")) { String err = "Error code 7 (ERRCONFIG): Couldn't determine the launch method for your JAR. Configure your version configuration file: " + BC.get() + "versions/jsons/" + currentInstance.version + ".info"; - System.out.println(err); + System.err.println(err); JOptionPane.showMessageDialog(Window.mainWindow, err, "Error", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } @@ -193,7 +193,7 @@ public static void main(String[] args) { /*if (meth.equals("1.6")) { String err = "Error code 8 (UNSUPPORTED): Versions 1.6+ are not supported yet."; - System.out.println(err); + System.err.println(err); JOptionPane.showMessageDialog(null, err, "Error", JOptionPane.INFORMATION_MESSAGE); System.exit(0); }*/ @@ -228,7 +228,7 @@ public static void main(String[] args) { }); loadClasses(path, loader); - System.out.println("Launch method: " + meth); + System.err.println("Launch method: " + meth); Class c = loader.loadClass(meth); Constructor con = c.getConstructor(String.class, String.class, String.class, String.class, String.class, Integer.class, Integer.class, Boolean.class, String.class, String.class, String.class, String.class, String.class, Image.class, ArrayList.class); con.newInstance(username, currentInstance.name, currentInstance.version, sessionid, currentInstance.gameDir, currentInstance.height, currentInstance.width, currentInstance.RPC, json.getLaunchMethod(), server, mppass, Lang.WRAP_USER, Lang.WRAP_VERSION, currentInstance.getIcon(), addons); @@ -257,7 +257,7 @@ public static void main(String[] args) { new File(BC.get() + "bin" + File.separator + "natives").mkdirs(); Logger.a("BetaCraft Launcher JE v" + VERSION + " loading..."); - Logger.a("Java version: " + System.getProperty("java.version")); + Logger.a("Java version: " + System.getProperty("java.vendor") + ", " + System.getProperty("java.runtime.name") + ", " + System.getProperty("java.runtime.version")); Logger.a("Portable: " + BC.portable); Logger.a("EXE: " + BC.currentPath.toPath().toString().endsWith(".exe")); Logger.a("Prerelease: " + BC.prerelease); @@ -411,6 +411,16 @@ public static void initStartup() { Launcher.downloadAddons(Launcher.currentInstance.version); } + if (OS.isMac()) { + if ("true".equalsIgnoreCase(info.getEntry("macos-mousefix"))) { + String json = new CustomRequest("http://files.betacraft.pl/launcher/assets/macos-mousefix.json").perform().response; + if (json != null) { + MouseFixMacOSJson mousefix_json = Util.gsonPretty.fromJson(json, MouseFixMacOSJson.class); + Util.installMacOSFix(mousefix_json, Launcher.forceUpdate); + } + } + } + // Download the latest libs and natives if (!Launcher.checkDepends() || Launcher.forceUpdate) { if (!Launcher.downloadDepends()) { @@ -474,6 +484,11 @@ public boolean accept(File dir, String fileName) { // Let the user overwrite this argument - put it before the custom ones params.add("-Djava.util.Arrays.useLegacyMergeSort=true"); + // Required to fix the following on MacOS: Classic, Indev after 0129-2, Infdev and Alpha to 1.0.1 + if (OS.isMac() && "true".equalsIgnoreCase(Release.getReleaseByName(instance.version).getInfo().getEntry("macos-mousefix"))) { + params.add("-javaagent:" + BC.get() + "launcher/macos-javaagent.jar=" + BC.get()); + } + // Add custom parameters from options if (instance.launchArgs != null && !instance.launchArgs.equals("")) { params.addAll(getCustomParameters()); @@ -685,8 +700,8 @@ public static boolean downloadDepends() { destNatives.mkdirs(); // Lastly, schedule zips for extraction - totalThreads.add(Util.Unrar(dest1.toPath().toString(), destNatives.toPath().toString(), true)); - totalThreads.add(Util.Unrar(dest2.toPath().toString(), destLibs.toPath().toString(), true)); + totalThreads.add(Util.unzip(dest1, destNatives, true)); + totalThreads.add(Util.unzip(dest2, destLibs, true)); return true; } diff --git a/src/main/java/org/betacraft/launcher/LoginPanel.java b/src/main/java/org/betacraft/launcher/LoginPanel.java index 7bb1c31..d4b9a97 100644 --- a/src/main/java/org/betacraft/launcher/LoginPanel.java +++ b/src/main/java/org/betacraft/launcher/LoginPanel.java @@ -21,8 +21,6 @@ public class LoginPanel extends JFrame implements LanguageElement { - //static JCheckBox rememberaccount; - static JLabel emailText; static JTextField email; @@ -36,7 +34,7 @@ public LoginPanel() { this.setIconImage(Window.img); setTitle(Lang.LOGIN_TITLE); setResizable(true); - this.setMinimumSize(new Dimension(360, 240)); + this.setMinimumSize(new Dimension(360, 200)); JPanel panel = new InstanceSettings.OptionsPanel(); panel.setLayout(new GridBagLayout()); diff --git a/src/main/java/org/betacraft/launcher/Util.java b/src/main/java/org/betacraft/launcher/Util.java index 4e49a32..27c541e 100644 --- a/src/main/java/org/betacraft/launcher/Util.java +++ b/src/main/java/org/betacraft/launcher/Util.java @@ -20,9 +20,12 @@ import pl.betacraft.auth.Authenticator; import pl.betacraft.auth.Credentials; import pl.betacraft.auth.Credentials.AccountType; +import pl.betacraft.auth.DownloadRequest; +import pl.betacraft.auth.DownloadResponse; import pl.betacraft.auth.MicrosoftAuth; import pl.betacraft.auth.MojangAuth; import pl.betacraft.auth.NoAuth; +import pl.betacraft.json.lib.MouseFixMacOSJson; public class Util { public static final Gson gson = new Gson(); @@ -212,13 +215,17 @@ public static String[] excludeExistant(File file, String[] properties, String ch return properties; } - public static Thread Unrar(String filepath, String SRC, boolean delete) { + public static Thread unzip(File source, File dest_folder, boolean delete) { + return unzip(source.toPath().toString(), dest_folder.toPath().toString(), delete); + } + + public static Thread unzip(String source, String dest_folder, boolean delete) { Thread unrarthread = new Thread() { public void run() { FileInputStream fis; byte[] buffer = new byte[1024]; try { - fis = new FileInputStream(filepath); + fis = new FileInputStream(source); ZipInputStream zis = new ZipInputStream(fis); ZipEntry entry = zis.getNextEntry(); while (entry != null) { @@ -227,7 +234,7 @@ public void run() { continue; } String fileName = entry.getName(); - File newFile = new File(SRC + File.separator + fileName); + File newFile = new File(dest_folder + File.separator + fileName); new File(newFile.getParent()).mkdirs(); FileOutputStream fos = new FileOutputStream(newFile); @@ -247,7 +254,7 @@ public void run() { ex.printStackTrace(); Logger.printException(ex); } - if (delete) new File(filepath).delete(); + if (delete) new File(source).delete(); if (!Util.isStandalone()) Launcher.totalThreads.remove(this); } }; @@ -255,48 +262,6 @@ public void run() { return unrarthread; } - public static void zip(String filepath, String SRC, boolean delete) { - Thread zipthread = new Thread() { - public void run() { - FileInputStream fis; - byte[] buffer = new byte[1024]; - try { - fis = new FileInputStream(filepath); - ZipInputStream zis = new ZipInputStream(fis); - ZipEntry entry = zis.getNextEntry(); - while (entry != null) { - if (entry.isDirectory()) { - entry = zis.getNextEntry(); - continue; - } - String fileName = entry.getName(); - File newFile = new File(SRC + File.separator + fileName); - - new File(newFile.getParent()).mkdirs(); - FileOutputStream fos = new FileOutputStream(newFile); - int length; - while ((length = zis.read(buffer)) > 0) { - fos.write(buffer, 0, length); - } - - fos.close(); - zis.closeEntry(); - entry = zis.getNextEntry(); - } - zis.closeEntry(); - zis.close(); - fis.close(); - } catch (Exception ex) { - ex.printStackTrace(); - Logger.printException(ex); - } - if (delete) new File(filepath).delete(); - if (!isStandalone()) Launcher.totalThreads.remove(this); - } - }; - zipthread.start(); - } - public static String[] read(File file, String charset) { try { if (!file.exists()) return new String[] {}; @@ -370,6 +335,53 @@ public static String getSHA1(File file) { } } + public static boolean installMacOSFix(MouseFixMacOSJson json, boolean force) { + File javaagent = new File(BC.get() + "launcher/macos-javaagent.jar"); + File lwjgl = new File(BC.get() + "launcher/macos-mousefix-lwjgl.jar"); + + File classes_folder = new File(BC.get() + "launcher/macos-java-mod/"); + File classes_temp_zip = new File(BC.get() + "launcher/macos-mousefix.zip"); + + String local_javaagent_sha1 = javaagent.exists() ? getSHA1(javaagent) : null; + String local_lwjgl_sha1 = lwjgl.exists() ? getSHA1(lwjgl): null; + String local_javamod_sha1 = Util.getProperty(BC.SETTINGS, "macosMouseFixClassesVersion"); + + try { + if (local_javaagent_sha1 == null || !local_javaagent_sha1.equals(json.agent_sha1) || force) { + DownloadResponse agent_req = new DownloadRequest("http://files.betacraft.pl/launcher/assets/macos-javaagent.jar", javaagent.toPath().toString(), json.agent_sha1, false).perform(); + if (agent_req.result != DownloadResult.OK) { + Logger.a("Failed to download macos javaagent"); + return false; + } + } + if (local_lwjgl_sha1 == null || !local_lwjgl_sha1.equals(json.lwjgl_sha1) || force) { + DownloadResponse lwjgl_req = new DownloadRequest("http://files.betacraft.pl/launcher/assets/macos-mousefix-lwjgl.jar", lwjgl.toPath().toString(), json.lwjgl_sha1, false).perform(); + if (lwjgl_req.result != DownloadResult.OK) { + Logger.a("Failed to download macos-mousefix.zip"); + return false; + } + } + if (local_javamod_sha1 == null || !local_javamod_sha1.equals(json.classes_sha1) || force) { + DownloadResponse classes_req = new DownloadRequest("http://files.betacraft.pl/launcher/assets/macos-mousefix.zip", classes_temp_zip.toPath().toString(), json.classes_sha1, false).perform(); + if (classes_req.result != DownloadResult.OK) { + Logger.a("Failed to download macos-mousefix.zip"); + return false; + } else { + if (classes_folder.exists() && classes_folder.list().length != 0) { + Launcher.removeRecursively(classes_folder, false, false); + } + classes_folder.mkdirs(); + Util.setProperty(BC.SETTINGS, "macosMouseFixClassesVersion", json.classes_sha1); + Launcher.totalThreads.add(unzip(classes_temp_zip, classes_folder, true)); + } + } + return true; + } catch (Throwable t) { + t.printStackTrace(); + return false; + } + } + public static boolean hasJFX() { try { javafx.scene.Parent.class.getName(); diff --git a/src/main/java/pl/betacraft/auth/RequestUtil.java b/src/main/java/pl/betacraft/auth/RequestUtil.java index 56fbbbf..f9ed81e 100644 --- a/src/main/java/pl/betacraft/auth/RequestUtil.java +++ b/src/main/java/pl/betacraft/auth/RequestUtil.java @@ -34,7 +34,7 @@ public static byte[] performRawPOSTRequest(Request req) { try { URL url = new URL(req.REQUEST_URL); con = (HttpURLConnection) url.openConnection(); - if (req.REQUEST_URL.startsWith("https:")) { + if (req.REQUEST_URL.startsWith("https:") && Cert.sslSocketFactory != null) { ((HttpsURLConnection)con).setSSLSocketFactory(Cert.sslSocketFactory); } @@ -108,7 +108,7 @@ public static byte[] performRawGETRequest(Request req) { if (debug) System.out.println("OUTCOME TO: " + req.REQUEST_URL); URL url = new URL(req.REQUEST_URL); con = (HttpURLConnection) url.openConnection(); - if (req.REQUEST_URL.startsWith("https:")) { + if (req.REQUEST_URL.startsWith("https:") && Cert.sslSocketFactory != null) { ((HttpsURLConnection)con).setSSLSocketFactory(Cert.sslSocketFactory); } diff --git a/src/main/java/pl/betacraft/json/lib/MouseFixMacOSJson.java b/src/main/java/pl/betacraft/json/lib/MouseFixMacOSJson.java new file mode 100644 index 0000000..b61635c --- /dev/null +++ b/src/main/java/pl/betacraft/json/lib/MouseFixMacOSJson.java @@ -0,0 +1,11 @@ +package pl.betacraft.json.lib; + +public class MouseFixMacOSJson { + + public String agent_sha1; + public String agent_url; + public String lwjgl_sha1; + public String lwjgl_url; + public String classes_sha1; + public String classes_url; +}