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();
+ }
}