diff --git a/.travis.yml b/.travis.yml index 780a3d9..ea383aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ env: - secure: UG+b1tEgc8xv9x4r//2OAIK1RrYv6n209KTTFMMwcnAa7DI8HaP8nljRa5/VhDhuKHdlVrYH/tI90v7UVBs0GDVNwK5V17Io0fMm3FUGZekSthTCqqno5wAGa9r6a6mMLtSaSmIFeIKi0+0d2ZwplRuhj/dtEYjjBBj+kK8g4nE= - secure: St/fecUDInFBCRriYqgp2F8PU9/SooorgxD9Mrs+b0EsC7AbtSsQXvdIv2Lp6xzdQ0VSXPcLIhULPOYrmBKnGQ/NjXTIZXxnroyQxxnI6xyEWIZwiHRY/bKRJDRbQTxD9NL32szKiDSwnw7pu6llF4D64UqQvziq4Gm6VohU75M= - secure: bD15GVZWowiknbfLavh8CxSh0GsnF5kT4kZ6ggCuUDGyj0mzqf7dNRnchQIKkCG0WRYyTrFN4pEiygeywWsipEeAVv9Xhx3cuUZmzeQaR5KCWabSwJ8gK6jZd1YhcWmM9vrdPHobZr65MP0y/8mu/Fovgky9dY7KDf4G3SebNrM= - - PARABOT_VERSION=2.6.4 + - PARABOT_VERSION=2.6.6 cache: directories: diff --git a/pom.xml b/pom.xml index 3a412fd..5c5b69d 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.parabot client - 2.6.4 + 2.6.6 jar diff --git a/src/main/java/org/parabot/Landing.java b/src/main/java/org/parabot/Landing.java index 7c2b31a..51c6a67 100644 --- a/src/main/java/org/parabot/Landing.java +++ b/src/main/java/org/parabot/Landing.java @@ -1,7 +1,6 @@ package org.parabot; import org.parabot.api.translations.TranslationHelper; -import org.parabot.core.Configuration; import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.forum.AccountManager; @@ -10,13 +9,10 @@ import org.parabot.core.network.proxy.ProxySocket; import org.parabot.core.network.proxy.ProxyType; import org.parabot.core.ui.BotUI; import org.parabot.core.ui.ServerSelector; -import org.parabot.core.ui.utils.UILog; import javax.swing.*; -import java.awt.*; import java.io.File; import java.io.IOException; -import java.net.URI; /** * Parabot v2.6 @@ -46,8 +42,10 @@ public final class Landing { } if (!Core.inDebugMode() && Core.hasValidation() && !Core.isValid()) { - Core.downloadNewVersion(); - return; + if (Core.newVersionAlert() == JOptionPane.YES_OPTION) { + Core.downloadNewVersion(); + return; + } } Core.verbose(TranslationHelper.translate("VALIDATION_ACCOUNT_MANAGER")); diff --git a/src/main/java/org/parabot/core/Configuration.java b/src/main/java/org/parabot/core/Configuration.java index 11fb0cf..39e9b03 100644 --- a/src/main/java/org/parabot/core/Configuration.java +++ b/src/main/java/org/parabot/core/Configuration.java @@ -12,7 +12,7 @@ public class Configuration extends org.parabot.api.Configuration { public static final String GET_SCRIPTS = "http://bdn.parabot.org/api/get.php?action=scripts_scripts&server="; public static final String GET_SCRIPT = "http://bdn.parabot.org/api/get.php?action=scripts_script&id="; public static final String GET_SERVER_PROVIDERS = "http://bdn.parabot.org/api/get.php?action=server_providers"; - public static final String GET_SERVER_PROVIDER = "http://v3.bdn.parabot.org/api/bot/download/provider?nightly=%s"; + public static final String GET_SERVER_PROVIDER = "http://v3.bdn.parabot.org/api/bot/download/provider?nightly=%s&server=%s"; public static final String GET_SERVER_PROVIDER_INFO = "http://bdn.parabot.org/api/get.php?action=server_information&name="; public static final String GET_SERVER_SETTINGS = "http://bdn.parabot.org/api/get.php?action=get_settings"; public static final String GET_BOT_VERSION = "http://bdn.parabot.org/api/v2/bot/version"; diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index a880890..3aa335d 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -164,7 +164,6 @@ public class Context { * Loads the game */ public void load() { - BotUI.getInstance().getJMenuBar().remove(2); Core.verbose(TranslationHelper.translate("PARSING_SERVER_JAR")); serverProvider.init(); serverProvider.parseJar(); diff --git a/src/main/java/org/parabot/core/Core.java b/src/main/java/org/parabot/core/Core.java index 240b8be..68f8623 100644 --- a/src/main/java/org/parabot/core/Core.java +++ b/src/main/java/org/parabot/core/Core.java @@ -14,13 +14,11 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URLEncoder; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.Date; /** * The core of parabot @@ -36,7 +34,7 @@ public class Core { private static boolean loadLocal; //Loads both local and public scripts/servers private static boolean validate = true; - private static boolean secure = true; + private static boolean secure = true; private static Version currentVersion = Configuration.BOT_VERSION; @@ -141,11 +139,11 @@ public class Core { File f = new File(Landing.class.getProtectionDomain().getCodeSource().getLocation().getFile()); if (f.isFile()) { try { - MessageDigest md = MessageDigest.getInstance("MD5"); - File location = new File(Landing.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); + MessageDigest md = MessageDigest.getInstance("MD5"); + File location = new File(Landing.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); if (location.exists()) { - FileInputStream fis = new FileInputStream(location); - byte[] dataBytes = new byte[1024]; + FileInputStream fis = new FileInputStream(location); + byte[] dataBytes = new byte[1024]; int nread; @@ -185,7 +183,7 @@ public class Core { try { if (br != null) { JSONObject object = (JSONObject) WebUtil.getJsonParser().parse(br); - boolean latest = (Boolean) object.get("result"); + boolean latest = (Boolean) object.get("result"); if (!latest) { Directories.clearCache(); } @@ -251,4 +249,11 @@ public class Core { return true; } } + + /** + * Alerts the user that there is a new version + */ + public static int newVersionAlert() { + return UILog.alert("Parabot Update", "There's a new version of Parabot! \nDo you wish to download it?\n\nThe current version could have some problems!", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + } } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java index 8de3935..4e0be58 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java @@ -125,6 +125,14 @@ public class ClassRedirect { return c.getResourceAsStream(res); } + public static boolean desiredAssertionStatus(Class c) { + if (validStack()) { + return c.desiredAssertionStatus(); + } + + return !c.getName().contains("parabot") && c.desiredAssertionStatus(); + } + private static boolean validStack() { Exception e = new Exception(); for (StackTraceElement elem : e.getStackTrace()) { diff --git a/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java b/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java index 5ddfe88..e8ce836 100644 --- a/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java @@ -1,5 +1,6 @@ package org.parabot.core.asm.redirect; +import org.parabot.core.Core; import org.parabot.core.Directories; import java.io.InputStream; @@ -33,7 +34,8 @@ public class SystemRedirect { value = System.getProperty(s); break; } - System.out.printf("GetSystemProp %s = %s\n", s, value); + + Core.verbose(String.format("GetSystemProp %s = %s", s, value)); return value; } @@ -55,7 +57,8 @@ public class SystemRedirect { break; } } - System.out.printf("GetSystemProp %s = %s\n", s, value); + + Core.verbose(String.format("GetSystemProp %s = %s", s, value)); return value; } @@ -64,12 +67,12 @@ public class SystemRedirect { } public static String setProperty(String s1, String s2) { - System.out.printf("SetSystemProp %s = %s\n", s1, s2); + Core.verbose(String.format("SetSystemProp %s = %s", s1, s2)); return System.setProperty(s1, s2); } public static String getenv(String string) { - System.out.printf("getEnv %s = %s\n", string, System.getenv(string)); + Core.verbose(String.format("getEnv %s = %s", string, System.getenv(string))); return System.getenv(string); } diff --git a/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java index 74c6441..0c60ec3 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java @@ -1,5 +1,6 @@ package org.parabot.core.asm.redirect; +import org.parabot.core.Core; import org.parabot.core.asm.RedirectClassAdapter; public class ThreadRedirect { @@ -58,4 +59,8 @@ public class ThreadRedirect { Thread.sleep(time); } + + public static void setUncaughtExceptionHandler(Thread t, Thread.UncaughtExceptionHandler handler){ + t.setUncaughtExceptionHandler(handler); + } } diff --git a/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java index 89f97c7..1bafabc 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java @@ -38,8 +38,13 @@ public class ToolkitRedirect { public static Dimension getScreenSize(Toolkit t){ return new Dimension(0,0); } + public static Image createImage(Toolkit t,byte[] b){ - return t.createImage(b); + return null; + } + + public static Image createImage(Toolkit t, String s){ + return null; } public static Image getImage(Toolkit t,URL u){ diff --git a/src/main/java/org/parabot/core/ui/BotUI.java b/src/main/java/org/parabot/core/ui/BotUI.java index 8ec5532..c33b6bd 100644 --- a/src/main/java/org/parabot/core/ui/BotUI.java +++ b/src/main/java/org/parabot/core/ui/BotUI.java @@ -34,9 +34,12 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, private static BotUI instance; private static JDialog dialog; - private JMenuItem run, pause, stop; + private JMenuBar menuBar; + private JMenu features, scripts, file; + private JMenuItem run, pause, stop, cacheClear, notifications; private boolean runScript, pauseScript; + public BotUI(String username, String password) { if (instance != null) { throw new IllegalStateException("BotUI already created"); @@ -74,11 +77,11 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, private void createMenu() { - JMenuBar menuBar = new JMenuBar(); + menuBar = new JMenuBar(); - JMenu file = new JMenu("File"); - JMenu scripts = new JMenu("Script"); - JMenu features = new JMenu("Features"); + file = new JMenu("File"); + scripts = new JMenu("Script"); + features = new JMenu("Features"); JMenuItem screenshot = new JMenuItem("Create screenshot"); JMenuItem proxy = new JMenuItem("Network"); @@ -104,10 +107,10 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, stop.setEnabled(false); stop.setIcon(new ImageIcon(Images.getResource("/storage/images/stop.png"))); - JMenuItem cacheClear = new JMenuItem("Clear cache"); + cacheClear = new JMenuItem("Clear cache"); cacheClear.setIcon(new ImageIcon(Images.getResource("/storage/images/trash.png"))); - JMenuItem notifications = new JMenuItem("Notifications"); + notifications = new JMenuItem("Notifications"); notifications.setIcon(new ImageIcon(Images.getResource("/storage/images/bell.png"))); screenshot.addActionListener(this); @@ -157,7 +160,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, case "Create screenshot": try { Robot robot = new Robot(); - Rectangle parabotScreen = new Rectangle((int) getLocation().getX(), (int) getLocation().getY(), getWidth(), getHeight()); + Rectangle parabotScreen = new Rectangle((int) getLocation().getX(), (int) getLocation().getY() + (menuBar.getHeight() + features.getHeight()), getWidth(), getHeight()); BufferedImage image = robot.createScreenCapture(parabotScreen); String randString = StringUtils.randomString(10); boolean search = true; @@ -341,4 +344,23 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, public void windowOpened(WindowEvent arg0) { } -} \ No newline at end of file + public JMenu getFeatures() { + return features; + } + + public JMenu getScripts() { + return scripts; + } + + public JMenu getFile() { + return file; + } + + public JMenuItem getCacheClear() { + return cacheClear; + } + + public JMenuItem getNotifications() { + return notifications; + } +} diff --git a/src/main/java/org/parabot/core/ui/Logger.java b/src/main/java/org/parabot/core/ui/Logger.java index 8043692..f263886 100644 --- a/src/main/java/org/parabot/core/ui/Logger.java +++ b/src/main/java/org/parabot/core/ui/Logger.java @@ -86,7 +86,6 @@ public class Logger extends JPanel { } /** - * @deprecated * @param message */ public static void addMessage(String message){ diff --git a/src/main/java/org/parabot/core/ui/utils/UILog.java b/src/main/java/org/parabot/core/ui/utils/UILog.java index 1a48176..ff00260 100644 --- a/src/main/java/org/parabot/core/ui/utils/UILog.java +++ b/src/main/java/org/parabot/core/ui/utils/UILog.java @@ -1,24 +1,33 @@ package org.parabot.core.ui.utils; -import javax.swing.JOptionPane; +import javax.swing.*; /** - * * Log messages to the log user interface which is attached to the bot user interface - * - * @author Everel * + * @author Everel */ public class UILog { - public static void log(final String title, final String message) { - log(title, message, JOptionPane.INFORMATION_MESSAGE); - } + public static void log(final String title, final String message) { + log(title, message, JOptionPane.INFORMATION_MESSAGE); + } - public static void log(final String title, final String message, - int messageType) { - JOptionPane.showMessageDialog(null, message, title, - messageType); - } + public static void log(final String title, final String message, + int messageType) { + JOptionPane.showMessageDialog(null, message, title, + messageType); + } + public static int alert(final String title, final String message) { + return alert(title, message, JOptionPane.YES_NO_OPTION); + } + + public static int alert(final String title, final String message, int option) { + return alert(title, message, option, JOptionPane.DEFAULT_OPTION); + } + + public static int alert(final String title, final String message, int optionType, int messageType) { + return JOptionPane.showConfirmDialog(null, message, title, optionType, messageType); + } } diff --git a/src/main/java/org/parabot/environment/randoms/RandomHandler.java b/src/main/java/org/parabot/environment/randoms/RandomHandler.java index a8bda20..1b80903 100644 --- a/src/main/java/org/parabot/environment/randoms/RandomHandler.java +++ b/src/main/java/org/parabot/environment/randoms/RandomHandler.java @@ -24,7 +24,7 @@ public class RandomHandler { public void init() { RandomParser.enable(); - checkAndRun(RandomType.ON_SERVER_START); + runAll(RandomType.ON_SERVER_START); } /** @@ -100,6 +100,40 @@ public class RandomHandler { this.activeRandoms.clear(); } + /** + * Executes a specific random + * + * @param r + * @return True if the random is executed, false if not + */ + public boolean executeRandom(Random r){ + if (r.activate()) { + Logger.addMessage("Running random '" + r.getName() + "'", true); + try { + r.execute(); + return true; + }catch (Exception e){ + Logger.addMessage("Random failed: '" + r.getName() + "'", false); + e.printStackTrace(); + } + } + + return false; + } + + /** + * Runs all randoms of a certain type + * + * @param type + */ + public void runAll(RandomType type){ + for (Random r : this.activeRandoms) { + if (r.getRandomType().getId() == type.getId()) { + executeRandom(r); + } + } + } + /** * Checks if random occurs and runs it * @@ -107,15 +141,8 @@ public class RandomHandler { */ public boolean checkAndRun(RandomType type) { for (Random r : this.activeRandoms) { - if (r.getRandomType().getId() == type.getId() && r.activate()) { - Logger.addMessage("Running random '" + r.getName() + "'", true); - try { - r.execute(); - }catch (Exception e){ - Logger.addMessage("Random failed: '" + r.getName() + "'", false); - e.printStackTrace(); - } - return true; + if (r.getRandomType().getId() == type.getId()) { + return executeRandom(r); } } return false; diff --git a/src/main/java/org/parabot/environment/scripts/Script.java b/src/main/java/org/parabot/environment/scripts/Script.java index 2e646e9..21527b0 100644 --- a/src/main/java/org/parabot/environment/scripts/Script.java +++ b/src/main/java/org/parabot/environment/scripts/Script.java @@ -81,7 +81,7 @@ public class Script implements Runnable { return; } - context.getRandomHandler().checkAndRun(RandomType.ON_SCRIPT_START); + context.getRandomHandler().runAll(RandomType.ON_SCRIPT_START); Core.verbose("Detecting script framework..."); context.setRunningScript(this); @@ -120,7 +120,7 @@ public class Script implements Runnable { Core.verbose("Script stopped/finished, unloading and stopping..."); onFinish(); - context.getRandomHandler().checkAndRun(RandomType.ON_SCRIPT_FINISH); + context.getRandomHandler().runAll(RandomType.ON_SCRIPT_FINISH); Logger.addMessage("Script stopped.", false); context.getServerProvider().unloadScript(this); diff --git a/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java index 73723a4..6a54f10 100644 --- a/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java @@ -54,7 +54,7 @@ public class PublicServerExecuter extends ServerExecuter { final File destination = new File(Directories.getCachePath(), serverProviderInfo.getCRC32() + ".jar"); - final String jarUrl = String.format(Configuration.GET_SERVER_PROVIDER, Configuration.BOT_VERSION.isNightly()); + final String jarUrl = String.format(Configuration.GET_SERVER_PROVIDER, Configuration.BOT_VERSION.isNightly(), serverName); Core.verbose("Downloading: " + jarUrl + " ..."); diff --git a/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java index f18712b..cae7c5f 100644 --- a/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/ServerExecuter.java @@ -1,39 +1,36 @@ package org.parabot.environment.servers.executers; import org.parabot.core.Context; -import org.parabot.core.Core; -import org.parabot.core.parsers.randoms.RandomParser; +import org.parabot.core.ui.BotUI; import org.parabot.core.ui.components.PaintComponent; import org.parabot.environment.servers.ServerProvider; -import java.io.PrintStream; - /** - * * Executes a server provider - * - * @author Everel * + * @author Everel */ public abstract class ServerExecuter { - public abstract void run(); + public abstract void run(); - public void finalize(final ServerProvider provider, final String serverName) { - new Thread(new Runnable() { - @Override - public void run() { - try { - Context context = Context.getInstance(provider); - context.load(); - PaintComponent.getInstance().startPainting(context); + public void finalize(final ServerProvider provider, final String serverName) { + new Thread(new Runnable() { + @Override + public void run() { + try { + BotUI.getInstance().getCacheClear().setEnabled(false); - Context.getInstance().getRandomHandler().init(); - } catch (Throwable t) { - t.printStackTrace(); - } - } - }).start(); - } + Context context = Context.getInstance(provider); + context.load(); + PaintComponent.getInstance().startPainting(context); + + Context.getInstance().getRandomHandler().init(); + } catch (Throwable t) { + t.printStackTrace(); + } + } + }).start(); + } }