diff --git a/.travis.yml b/.travis.yml
index eb316e8..f66b18d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,9 +7,9 @@ notifications:
secure: ciAOsdv9lf/IbAwyzeR/z2nlBSevmBHBqca6tf0Yh2DIyAx/uUo1ojon0W7Kv6tCECGhSTdfQAnZ+nFjjqaRs+Jq4svd9WKYrFuZyOWmT31iSJ/nvPymRvevSsgwpSKr0nJS9dxePKto/T3ozW29kx88eaJQH17zOaX2rfuIje4=
webhooks:
urls:
- - http://v3.bdn.parabot.org/api/client/build
+ - https://dockbit.com/webhooks/7PrMKazLtLw5hhpXvakVKWoq
on_success: always
- on_failure: never
+ on_failure: always
on_start: never
env:
@@ -20,5 +20,12 @@ env:
before_install:
- chmod +x ./.travis/artifact-upload.sh
+
+addons:
+ artifacts: true
+ s3_region: "us-west-1"
-after_success: sh ./.travis/artifact-upload.sh
\ No newline at end of file
+cache:
+ directories:
+ - .autoconf
+ - $HOME/.m2
diff --git a/README.md b/README.md
index 51ffee5..ef23a16 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
# Parabot
-Parabot V2.4.
+Parabot V2.5.
#### Website
diff --git a/pom.xml b/pom.xml
index 200c0fd..cc3c8e3 100755
--- a/pom.xml
+++ b/pom.xml
@@ -73,6 +73,11 @@
bugsnag
1.2.8
+
+ junit
+ junit
+ 4.11
+
diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java
index c895f1d..8cfd7b7 100644
--- a/src/main/java/org/parabot/core/Context.java
+++ b/src/main/java/org/parabot/core/Context.java
@@ -163,6 +163,7 @@ public class Context {
* Loads the game
*/
public void load() {
+ BotUI.getInstance().getJMenuBar().remove(2);
Core.verbose("Parsing server jar...");
serverProvider.init();
serverProvider.parseJar();
diff --git a/src/main/java/org/parabot/core/Directories.java b/src/main/java/org/parabot/core/Directories.java
index 8b04584..d18ae07 100644
--- a/src/main/java/org/parabot/core/Directories.java
+++ b/src/main/java/org/parabot/core/Directories.java
@@ -40,6 +40,7 @@ public class Directories {
cached.put("Settings", new File(cached.get("Root"), "/Parabot/settings/"));
cached.put("Servers", new File(cached.get("Root"), "/Parabot/servers/"));
cached.put("Cache", new File(cached.get("Root"), "/Parabot/cache/"));
+ cached.put("Screenshots", new File(cached.get("Root"), "/Parabot/screenshots/"));
Core.verbose("Directories cached.");
clearCache(259200);
@@ -192,6 +193,16 @@ public class Directories {
return cached.get("Home");
}
+
+ /**
+ * Returns the screenshot folder.
+ *
+ * @return
+ */
+ public static File getScreenshotDir() {
+ return cached.get("Screenshots");
+ }
+
/**
* Validates all directories and makes them if necessary
*/
diff --git a/src/main/java/org/parabot/core/ui/BotUI.java b/src/main/java/org/parabot/core/ui/BotUI.java
index 2d4bece..532e52b 100644
--- a/src/main/java/org/parabot/core/ui/BotUI.java
+++ b/src/main/java/org/parabot/core/ui/BotUI.java
@@ -1,17 +1,23 @@
package org.parabot.core.ui;
import org.parabot.core.Context;
+import org.parabot.core.Directories;
import org.parabot.core.ui.components.GamePanel;
import org.parabot.core.ui.components.VerboseLoader;
import org.parabot.core.ui.images.Images;
import org.parabot.core.ui.utils.SwingUtil;
import org.parabot.environment.OperatingSystem;
+import org.parabot.environment.api.utils.StringUtils;
import org.parabot.environment.scripts.Script;
import org.parabot.environment.scripts.randoms.Random;
+import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
/**
@@ -25,7 +31,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
private static BotUI instance;
private static JDialog dialog;
- private JMenuItem run, pause, stop;
+ private JMenuItem run, pause, stop, cacheClear;
private boolean runScript, pauseScript;
public BotUI(String username, String password) {
@@ -64,11 +70,13 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
return instance;
}
+
private void createMenu() {
JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("File");
JMenu scripts = new JMenu("Script");
+ JMenu features = new JMenu("Features");
JMenuItem screenshot = new JMenuItem("Create screenshot");
JMenuItem proxy = new JMenuItem("Network");
@@ -94,6 +102,9 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
stop.setEnabled(false);
stop.setIcon(new ImageIcon(Images.getResource("/storage/images/stop.png")));
+ cacheClear = new JMenuItem("Clear cache");
+ cacheClear.setIcon(new ImageIcon(Images.getResource("/storage/images/trash.png")));
+
screenshot.addActionListener(this);
proxy.addActionListener(this);
randoms.addActionListener(this);
@@ -101,6 +112,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
logger.addActionListener(this);
explorer.addActionListener(this);
exit.addActionListener(this);
+ cacheClear.addActionListener(this);
run.addActionListener(this);
pause.addActionListener(this);
@@ -118,8 +130,12 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
scripts.add(pause);
scripts.add(stop);
+ features.add(cacheClear);
+
menuBar.add(file);
menuBar.add(scripts);
+ menuBar.add(features);
+
setJMenuBar(menuBar);
}
@@ -130,7 +146,33 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
switch (command) {
case "Create screenshot":
- JOptionPane.showMessageDialog(this, "We are still working on this...");
+ try {
+ Robot robot = new Robot();
+ Rectangle parabotScreen = new Rectangle((int) getLocation().getX(), (int) getLocation().getY(), getWidth(), getHeight());
+ BufferedImage image = robot.createScreenCapture(parabotScreen);
+ String randString = StringUtils.randomString(10);
+ boolean search = true;
+ boolean duplicate = false;
+ while (search == true) {
+ for (File f : Directories.getScreenshotDir().listFiles()) {
+ if (f.getAbsoluteFile().getName().contains(randString)) {
+ duplicate = true;
+ break;
+ }
+ }
+ if (!duplicate) {
+ search = false;
+ } else {
+ randString = StringUtils.randomString(10);
+ duplicate = false;
+ }
+ }
+ File file = new File(Directories.getScreenshotDir().getPath() + "/" + randString + ".png");
+ ImageIO.write(image, "png", file);
+
+ } catch (IOException | AWTException k) {
+ k.printStackTrace();
+ }
break;
case "Exit":
System.exit(0);
@@ -173,7 +215,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
BotUI.getInstance().revalidate();
if (!Logger.getInstance().isClearable()) {
Logger.getInstance().setClearable();
- } else if(Logger.getInstance().isClearable() && !Logger.getInstance().isVisible()) {
+ } else if (Logger.getInstance().isClearable() && !Logger.getInstance().isVisible()) {
Logger.clearLogger();
Logger.addMessage("Logger started", false);
}
@@ -181,6 +223,9 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
case "Disable dialog":
BotDialog.getInstance().setVisible(!dialog.isVisible());
break;
+ case "Clear cache":
+ Directories.clearCache();
+ break;
default:
System.out.println("Invalid command: " + command);
}
@@ -274,4 +319,5 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
@Override
public void windowOpened(WindowEvent arg0) {
}
-}
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/parabot/core/ui/components/VerboseLoader.java b/src/main/java/org/parabot/core/ui/components/VerboseLoader.java
index c08e9a5..9d9e102 100755
--- a/src/main/java/org/parabot/core/ui/components/VerboseLoader.java
+++ b/src/main/java/org/parabot/core/ui/components/VerboseLoader.java
@@ -21,7 +21,7 @@ import java.awt.image.RescaleOp;
/**
* An informative JPanel which tells the user what bot is doing
*
- * @author Everel
+ * @author Everel, EmmaStone
*/
public class VerboseLoader extends JPanel implements ProgressListener {
private static final long serialVersionUID = 7412412644921803896L;
@@ -144,7 +144,6 @@ public class VerboseLoader extends JPanel implements ProgressListener {
login.setOpaque(false);
login.addActionListener(new ActionListener() {
-
@Override
public void actionPerformed(ActionEvent e) {
if (manager.login(userInput.getText(), passInput.getText(), false)) {
@@ -157,17 +156,17 @@ public class VerboseLoader extends JPanel implements ProgressListener {
});
- loginPanel.add(Box.createRigidArea(new Dimension(0, 5)));
+ loginPanel.add(Box.createRigidArea(new Dimension(0, 8)));
loginPanel.add(usernameLabel);
- loginPanel.add(Box.createRigidArea(new Dimension(0, 5)));
+ loginPanel.add(Box.createRigidArea(new Dimension(0, 4)));
loginPanel.add(userInput);
- loginPanel.add(Box.createRigidArea(new Dimension(0, 5)));
+ loginPanel.add(Box.createRigidArea(new Dimension(0, 4)));
loginPanel.add(passwordLabel);
- loginPanel.add(Box.createRigidArea(new Dimension(0, 5)));
+ loginPanel.add(Box.createRigidArea(new Dimension(0, 4)));
loginPanel.add(passInput);
- loginPanel.add(Box.createRigidArea(new Dimension(0, 5)));
+ loginPanel.add(Box.createRigidArea(new Dimension(0, 2)));
loginPanel.add(login);
- loginPanel.add(Box.createRigidArea(new Dimension(0, 5)));
+ loginPanel.add(Box.createRigidArea(new Dimension(0, 4)));
add(loginPanel, new GridBagConstraints());
}
@@ -205,10 +204,10 @@ public class VerboseLoader extends JPanel implements ProgressListener {
g.setStroke(new BasicStroke(5));
g.setPaint(Color.WHITE);
- g.draw(new Line2D.Float(0, 0, this.getWidth(), 0));
- g.draw(new Line2D.Float(0, 0, 0, 120));
- g.draw(new Line2D.Float(0, 120, this.getWidth(), 120));
- g.draw(new Line2D.Float(this.getWidth() - 6, 0, this.getWidth() - 6, 120));
+ g.draw(new Line2D.Float(0, 1, this.getWidth(), 1)); //TOP
+ g.draw(new Line2D.Float(0, 0, 0, 120)); //LEFT
+ g.draw(new Line2D.Float(0, 120, this.getWidth(), 120)); //BOTTOM
+ g.draw(new Line2D.Float(this.getWidth() - 6, 0, this.getWidth() - 6, 120)); //RIGHT
g.setColor(Color.white);
@@ -284,4 +283,4 @@ public class VerboseLoader extends JPanel implements ProgressListener {
public void updateDownloadSpeed(double mbPerSecond) {
progressBar.setText(String.format("(%.2fMB/s)", mbPerSecond));
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/parabot/core/ui/images/trash.png b/src/main/java/org/parabot/core/ui/images/trash.png
new file mode 100644
index 0000000..53867b6
Binary files /dev/null and b/src/main/java/org/parabot/core/ui/images/trash.png differ
diff --git a/src/main/resources/storage/images/trash.png b/src/main/resources/storage/images/trash.png
new file mode 100644
index 0000000..53867b6
Binary files /dev/null and b/src/main/resources/storage/images/trash.png differ
diff --git a/src/test/java/org/parabot/MacAddressUnitTest.java b/src/test/java/org/parabot/MacAddressUnitTest.java
new file mode 100644
index 0000000..ba93ff1
--- /dev/null
+++ b/src/test/java/org/parabot/MacAddressUnitTest.java
@@ -0,0 +1,34 @@
+package org.parabot;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.parabot.core.network.NetworkInterface;
+
+import java.util.Arrays;
+
+/**
+ * @author JKetelaar
+ */
+public class MacAddressUnitTest {
+
+ @Test
+ public void test(){
+ String[] macString = new String[]{
+ "19",
+ "5C",
+ "11",
+ "19",
+ "5C",
+ "11"
+ };
+ NetworkInterface networkInterface = new NetworkInterface();
+
+ byte[] mac = new byte[6];
+ for (int j = 0; j < 6; j++) {
+ mac[j] = Byte.parseByte(macString[j], 16); // parses a hex number
+ }
+ NetworkInterface.setMac(mac);
+
+ Assert.assertArrayEquals(networkInterface.getHardwareAddress(), mac);
+ }
+}