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