diff --git a/Client.iml b/Client.iml new file mode 100644 index 0000000..f34ebd6 --- /dev/null +++ b/Client.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/parabotv2/src/org/parabot/core/Configuration.java b/parabotv2/src/org/parabot/core/Configuration.java index 58a8f6e..a714dc6 100644 --- a/parabotv2/src/org/parabot/core/Configuration.java +++ b/parabotv2/src/org/parabot/core/Configuration.java @@ -16,6 +16,8 @@ public class Configuration { public static final String REGISTRATION_PAGE = "https://www.parabot.org/community/index.php?app=core&module=global§ion=register"; public static final String GET_PASSWORD = "http://bdn.parabot.org/api/get.php?action=password"; public static final String GET_RANDOMS = "http://bdn.parabot.org/api/get.php?action=randoms"; + public static final String DATA_API = "http://bdn.parabot.org/api/v2/data/"; + public static final String ITEM_API = DATA_API + "items/"; public static final double BOT_VERSION = 2.1; } diff --git a/parabotv2/src/org/parabot/core/Core.java b/parabotv2/src/org/parabot/core/Core.java index eb07736..2bc51aa 100644 --- a/parabotv2/src/org/parabot/core/Core.java +++ b/parabotv2/src/org/parabot/core/Core.java @@ -3,15 +3,13 @@ package org.parabot.core; import org.parabot.Landing; import org.parabot.environment.api.utils.WebUtil; -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; /** * The core of parabot @@ -148,6 +146,37 @@ public class Core { return true; } + private static boolean policyValid(){ + return new File(Directories.getSettingsPath() + "/java.policy").exists(); + } + + private static void createPolicy(){ + File policy = new File(Directories.getSettingsPath() + "/java.policy"); + if (!policy.exists()){ + try { + final BufferedReader in = WebUtil.getReader(Configuration.DATA_API + "policy"); + if (in != null) { + String line; + PrintWriter printWriter = new PrintWriter(Directories.getSettingsPath() + "/java.policy"); + while ((line = in.readLine()) != null) { + if (line.contains("%parabot_resources%")){ + line = line.replace("%parabot_resources%", Directories.getResourcesPath().getAbsolutePath()); + } + printWriter.println(line); + } + printWriter.close(); + in.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public static void main(String[] args){ + createPolicy(); + } + /** * Checks for updates. * diff --git a/parabotv2/src/org/parabot/core/Directories.java b/parabotv2/src/org/parabot/core/Directories.java index 0e35380..a01c5ed 100644 --- a/parabotv2/src/org/parabot/core/Directories.java +++ b/parabotv2/src/org/parabot/core/Directories.java @@ -16,14 +16,14 @@ public class Directories { private static Map cached; static { - cached = new HashMap<>(); - switch (OperatingSystem.getOS()) { - case WINDOWS: - cached.put("Root", new JFileChooser().getFileSystemView().getDefaultDirectory()); - break; - default: - cached.put("Root", new File(System.getProperty("user.home"))); - } + cached = new HashMap<>(); + switch (OperatingSystem.getOS()) { + case WINDOWS: + cached.put("Root", new JFileChooser().getFileSystemView().getDefaultDirectory()); + break; + default: + cached.put("Root", new File(System.getProperty("user.home"))); + } Core.verbose("Caching directories..."); cached.put("Root", getDefaultDirectory()); @@ -38,30 +38,31 @@ public class Directories { clearCache(259200); } - + /** * Set script bin folder + * * @param f */ public static void setScriptCompiledDirectory(File f) { - if(!f.isDirectory()) { - throw new IllegalArgumentException(f + "is not a directory."); - } - cached.put("Compiled", f); + if (!f.isDirectory()) { + throw new IllegalArgumentException(f + "is not a directory."); + } + cached.put("Compiled", f); } - + /** * Set server bin folder + * * @param f */ public static void setServerCompiledDirectory(File f) { - if(!f.isDirectory()) { - throw new IllegalArgumentException(f + "is not a directory."); - } - cached.put("Servers", f); + if (!f.isDirectory()) { + throw new IllegalArgumentException(f + "is not a directory."); + } + cached.put("Servers", f); } - - + /** * Returns the root directory outside of the main Parabot folder. @@ -178,13 +179,14 @@ public class Directories { /** * Clears the cache based on the latest modification + * * @param remove A long that represents the amount of seconds that a file may have since the latest modification */ - private static void clearCache(int remove){ + private static void clearCache(int remove) { File[] cache = getCachePath().listFiles(); - if (cache != null){ - for (File f : cache){ - if (f != null && System.currentTimeMillis() / 1000 - f.lastModified() / 1000 > remove){ + if (cache != null) { + for (File f : cache) { + if (f != null && System.currentTimeMillis() / 1000 - f.lastModified() / 1000 > remove) { Core.verbose("Clearing " + f.getName() + " from cache..."); f.delete(); } diff --git a/parabotv2/src/org/parabot/core/asm/ClassRemapper.java b/parabotv2/src/org/parabot/core/asm/ClassRemapper.java index 7b331af..0580650 100644 --- a/parabotv2/src/org/parabot/core/asm/ClassRemapper.java +++ b/parabotv2/src/org/parabot/core/asm/ClassRemapper.java @@ -1,9 +1,9 @@ package org.parabot.core.asm; -import java.util.HashMap; - import org.objectweb.asm.commons.Remapper; +import java.util.HashMap; + public class ClassRemapper extends Remapper { private static HashMap remapNames = new HashMap(); static { diff --git a/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java b/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java index 72b7d6b..922d3c5 100644 --- a/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java +++ b/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java @@ -10,6 +10,7 @@ import javax.swing.*; import java.io.BufferedReader; import java.net.MalformedURLException; import java.net.URL; +import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -21,12 +22,12 @@ import java.util.Properties; */ public class ServerProviderInfo { - private Properties settings; + private HashMap settings; private Properties properties; public ServerProviderInfo(URL providerInfo, String username, String password) { this.properties = new Properties(); - this.settings = new Properties(); + this.settings = new HashMap<>(); try { String line; Core.verbose("Reading info: " + providerInfo); @@ -39,7 +40,13 @@ public class ServerProviderInfo { for (Object o : jsonObject.entrySet()) { Map.Entry pairs = (Map.Entry) o; if (String.valueOf(pairs.getKey()).equalsIgnoreCase("settings")){ - settings.putAll((JSONObject) pairs.getValue()); + JSONObject object = (JSONObject) pairs.getValue(); + for (Object settingObject : object.entrySet()){ + Map.Entry settingValue = (Map.Entry) settingObject; + String key = (String) settingValue.getKey(); + long value = (Long) settingValue.getValue(); + settings.put(key, (int) value); + } }else { properties.put(String.valueOf(pairs.getKey()), String.valueOf(pairs.getValue())); } @@ -108,7 +115,7 @@ public class ServerProviderInfo { return this.properties; } - public Properties getSettings(){ - return this.settings; + public HashMap getSettings() { + return settings; } } diff --git a/parabotv2/src/org/parabot/core/ui/BotUI.java b/parabotv2/src/org/parabot/core/ui/BotUI.java index c180bd1..3b639a1 100644 --- a/parabotv2/src/org/parabot/core/ui/BotUI.java +++ b/parabotv2/src/org/parabot/core/ui/BotUI.java @@ -49,6 +49,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, add(GamePanel.getInstance()); GamePanel.getInstance().add(VerboseLoader.get(username, password), BorderLayout.CENTER); + add(Logger.getInstance(), BorderLayout.SOUTH); SwingUtil.setParabotIcons(this); diff --git a/parabotv2/src/org/parabot/core/ui/Logger.java b/parabotv2/src/org/parabot/core/ui/Logger.java new file mode 100644 index 0000000..adb12cf --- /dev/null +++ b/parabotv2/src/org/parabot/core/ui/Logger.java @@ -0,0 +1,50 @@ +package org.parabot.core.ui; + +import org.parabot.core.ui.components.GamePanel; + +import javax.swing.*; +import java.awt.*; + +/** + * @author JKetelaar + */ +public class Logger extends JPanel { + private static Logger instance; + private final DefaultListModel model; + + private Logger(){ + setLayout(new BorderLayout()); + JList list = new JList<>(); + + JScrollPane pane = new JScrollPane(list); + add(pane, BorderLayout.CENTER); + + list.setCellRenderer(getRenderer()); + + model = new DefaultListModel<>(); + list.setModel(model); + setPreferredSize(new Dimension((int) GamePanel.getInstance().getPreferredSize().getWidth(), 150)); + model.addElement("Logger started"); + } + + private ListCellRenderer getRenderer() { + return new DefaultListCellRenderer(){ + @Override + public Component getListCellRendererComponent(JList list, + Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel listCellRendererComponent = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus); + listCellRendererComponent.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0,Color.BLACK)); + return listCellRendererComponent; + } + }; + } + + public static Logger getInstance() { + return instance == null ? instance = new Logger() : instance; + } + + public static void addMessage(String message){ + instance.model.addElement(message); + } +} diff --git a/parabotv2/src/org/parabot/environment/scripts/Script.java b/parabotv2/src/org/parabot/environment/scripts/Script.java index 22fe4e8..4dee0d4 100644 --- a/parabotv2/src/org/parabot/environment/scripts/Script.java +++ b/parabotv2/src/org/parabot/environment/scripts/Script.java @@ -4,11 +4,8 @@ import org.parabot.core.Context; import org.parabot.core.Core; import org.parabot.core.ui.BotUI; import org.parabot.environment.api.utils.Time; -import org.parabot.environment.scripts.framework.AbstractFramework; +import org.parabot.environment.scripts.framework.*; import org.parabot.environment.scripts.framework.Frameworks; -import org.parabot.environment.scripts.framework.LoopTask; -import org.parabot.environment.scripts.framework.SleepCondition; -import org.parabot.environment.scripts.framework.Strategy; import org.parabot.environment.scripts.randoms.Random; import java.util.Collection; @@ -68,7 +65,15 @@ public class Script implements Runnable { @Override public final void run() { Context context = Context.getInstance(); - + +// Core.verbose("Initializing security manager..."); +// String previousPolicy = System.getProperty("java.security.policy"); +// SecurityManager previousSecurityManager = System.getSecurityManager(); + +// System.setProperty("java.security.policy", Directories.getSettingsPath() + "/java.policy"); +// SecurityManagerDemo sm = new SecurityManagerDemo(); +// System.setSecurityManager(sm); + Core.verbose("Initializing script..."); context.getServerProvider().initScript(this); Core.verbose("Done."); @@ -122,6 +127,8 @@ public class Script implements Runnable { this.state = STATE_STOPPED; context.setRunningScript(null); BotUI.getInstance().toggleRun(); +// System.setProperty("java.security.policy", previousPolicy); +// System.setSecurityManager(previousSecurityManager); Core.verbose("Done."); } diff --git a/parabotv2/src/org/parabot/environment/scripts/executers/ScriptExecuter.java b/parabotv2/src/org/parabot/environment/scripts/executers/ScriptExecuter.java index 0e7b18d..64723ae 100644 --- a/parabotv2/src/org/parabot/environment/scripts/executers/ScriptExecuter.java +++ b/parabotv2/src/org/parabot/environment/scripts/executers/ScriptExecuter.java @@ -19,7 +19,8 @@ public abstract class ScriptExecuter { * @param script */ public final void finalize(final ThreadGroup tg, final Script script) { - new Thread(tg, script).start(); + Thread thread = new Thread(tg, script); + thread.start(); } diff --git a/parabotv2/src/org/parabot/environment/scripts/executers/SecurityManagerDemo.java b/parabotv2/src/org/parabot/environment/scripts/executers/SecurityManagerDemo.java new file mode 100644 index 0000000..93f0dd6 --- /dev/null +++ b/parabotv2/src/org/parabot/environment/scripts/executers/SecurityManagerDemo.java @@ -0,0 +1,5 @@ +package org.parabot.environment.scripts.executers; + +public class SecurityManagerDemo extends SecurityManager { + +} \ No newline at end of file diff --git a/parabotv2/src/org/parabot/environment/scripts/randoms/RandomHandler.java b/parabotv2/src/org/parabot/environment/scripts/randoms/RandomHandler.java index 757bb05..029ccd3 100644 --- a/parabotv2/src/org/parabot/environment/scripts/randoms/RandomHandler.java +++ b/parabotv2/src/org/parabot/environment/scripts/randoms/RandomHandler.java @@ -1,6 +1,7 @@ package org.parabot.environment.scripts.randoms; import org.parabot.core.Core; +import org.parabot.core.ui.Logger; import java.util.ArrayList; @@ -89,7 +90,7 @@ public class RandomHandler { public boolean checkAndRun() { for(Random r : this.activeRandoms) { if(r.activate()) { - Core.verbose("Running random '" + r.getName() + "'."); + Logger.addMessage("Running random '" + r.getName() + "'."); r.execute(); return true; } diff --git a/parabotv2/src/org/parabot/environment/servers/executers/ServerExecuter.java b/parabotv2/src/org/parabot/environment/servers/executers/ServerExecuter.java index 671d77b..30a691a 100644 --- a/parabotv2/src/org/parabot/environment/servers/executers/ServerExecuter.java +++ b/parabotv2/src/org/parabot/environment/servers/executers/ServerExecuter.java @@ -3,6 +3,7 @@ package org.parabot.environment.servers.executers; import org.parabot.core.Context; import org.parabot.core.parsers.randoms.RandomParser; import org.parabot.core.ui.components.PaintComponent; +import org.parabot.environment.scripts.executers.SecurityManagerDemo; import org.parabot.environment.servers.ServerProvider; /** diff --git a/releases/Client.jar b/releases/Client.jar new file mode 100644 index 0000000..ee63da1 Binary files /dev/null and b/releases/Client.jar differ diff --git a/releases/run.bat b/releases/run.bat new file mode 100644 index 0000000..b9828de --- /dev/null +++ b/releases/run.bat @@ -0,0 +1 @@ +java -jar Client.jar -login paradox Cn4VoAythFeaBFunRwuHHTswWuTUDv -loadlocal -verbose