From 15d2f2a4f7f2e8fca007950b23d57c18bdf369b7 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Tue, 29 Aug 2017 00:13:25 +0200 Subject: [PATCH 01/15] [TASK] Set version to 2.6.7 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fe8ef79..92f7153 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.parabot client - 2.6.6.6 + 2.6.7 jar From d3541f795b3a80fbc128b497d106502992850549 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Tue, 29 Aug 2017 00:13:47 +0200 Subject: [PATCH 02/15] [TASK] Set version to 2.6.7 in travis config --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4b0e919..060f743 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.6.6 + - PARABOT_VERSION=2.6.7 cache: directories: From bcb0ddfab7c38691d76c7ba2bc787671453ee0fe Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Tue, 29 Aug 2017 00:19:17 +0200 Subject: [PATCH 03/15] [CLEANUP] Reformatted code --- .../java/org/parabot/core/Configuration.java | 26 +- src/main/java/org/parabot/core/Context.java | 183 ++--- .../org/parabot/core/ProjectProperties.java | 16 +- .../org/parabot/core/asm/ASMClassLoader.java | 147 ++-- .../java/org/parabot/core/asm/ASMUtils.java | 271 ++++---- .../org/parabot/core/asm/ClassRemapper.java | 29 +- .../core/asm/RedirectClassAdapter.java | 210 +++--- .../core/asm/adapters/AddCallbackAdapter.java | 147 ++-- .../core/asm/adapters/AddDebugAdapter.java | 65 +- .../core/asm/adapters/AddGetterAdapter.java | 308 ++++----- .../asm/adapters/AddInterfaceAdapter.java | 80 ++- .../core/asm/adapters/AddInvokerAdapter.java | 188 +++-- .../core/asm/adapters/AddSetterAdapter.java | 128 ++-- .../core/asm/adapters/AddSuperAdapter.java | 92 ++- .../org/parabot/core/asm/hooks/HookFile.java | 80 +-- .../core/asm/interfaces/Injectable.java | 12 +- .../asm/redirect/ClassLoaderRedirect.java | 12 +- .../core/asm/redirect/ClassRedirect.java | 3 +- .../core/asm/redirect/FileRedirect.java | 24 +- .../core/asm/redirect/PacketCallback.java | 8 +- .../core/asm/redirect/SystemRedirect.java | 3 +- .../core/asm/redirect/ThreadRedirect.java | 88 ++- .../core/asm/redirect/ToolkitRedirect.java | 100 +-- .../core/asm/redirect/URLRedirect.java | 4 +- .../parabot/core/asm/wrappers/Callback.java | 70 +- .../org/parabot/core/asm/wrappers/Getter.java | 128 ++-- .../parabot/core/asm/wrappers/Interface.java | 63 +- .../parabot/core/asm/wrappers/Invoker.java | 124 ++-- .../org/parabot/core/asm/wrappers/Setter.java | 80 +-- .../org/parabot/core/asm/wrappers/Super.java | 43 +- .../org/parabot/core/build/BuildPath.java | 4 +- .../org/parabot/core/classpath/ClassPath.java | 524 +++++++------- .../parabot/core/desc/ScriptDescription.java | 243 ++++--- .../parabot/core/desc/ServerDescription.java | 58 +- .../parabot/core/desc/ServerProviderInfo.java | 196 +++--- .../java/org/parabot/core/forum/Account.java | 63 +- .../parabot/core/forum/AccountManager.java | 161 +++-- .../core/forum/AccountManagerAccess.java | 8 +- .../org/parabot/core/io/ProgressListener.java | 6 +- .../org/parabot/core/io/SizeInputStream.java | 94 ++- .../java/org/parabot/core/lib/Library.java | 2 - .../org/parabot/core/lib/javafx/JavaFX.java | 106 ++- .../core/network/NetworkInterface.java | 120 ++-- .../org/parabot/core/network/Runtime.java | 117 ++-- .../core/network/proxy/ProxySocket.java | 517 +++++++------- .../parabot/core/network/proxy/ProxyType.java | 2 +- .../parabot/core/paint/AbstractDebugger.java | 21 +- .../org/parabot/core/paint/PaintDebugger.java | 93 ++- .../core/parsers/hooks/HookParser.java | 10 +- .../core/parsers/hooks/JSONHookParser.java | 363 +++++----- .../core/parsers/hooks/XMLHookParser.java | 571 ++++++++------- .../core/parsers/randoms/PublicRandoms.java | 12 +- .../core/parsers/scripts/BDNScripts.java | 16 +- .../core/parsers/scripts/ScriptParser.java | 16 +- .../core/parsers/servers/LocalServers.java | 47 +- .../core/parsers/servers/PublicServers.java | 6 +- .../core/parsers/servers/ServerParser.java | 6 +- .../org/parabot/core/reflect/RefClass.java | 573 ++++++++------- .../parabot/core/reflect/RefConstructor.java | 164 +++-- .../org/parabot/core/reflect/RefField.java | 652 +++++++++--------- .../org/parabot/core/reflect/RefMethod.java | 251 ++++--- .../parabot/core/reflect/RefModifiers.java | 98 ++- .../org/parabot/core/reflect/RefUtils.java | 16 +- .../java/org/parabot/core/ui/BotDialog.java | 98 ++- src/main/java/org/parabot/core/ui/BotUI.java | 29 +- src/main/java/org/parabot/core/ui/Logger.java | 53 +- .../java/org/parabot/core/ui/LoginUI.java | 247 ++++--- .../java/org/parabot/core/ui/NetworkUI.java | 32 +- .../java/org/parabot/core/ui/RandomUI.java | 2 +- .../java/org/parabot/core/ui/ReflectUI.java | 30 +- .../org/parabot/core/ui/ScriptSelector.java | 338 +++++---- .../org/parabot/core/ui/ServerSelector.java | 153 ++-- .../parabot/core/ui/components/GamePanel.java | 78 +-- .../core/ui/components/PaintComponent.java | 146 ++-- .../core/ui/components/ProgressBar.java | 132 ++-- .../core/ui/components/ServerComponent.java | 199 +++--- .../core/ui/components/VerboseLoader.java | 94 ++- .../core/ui/components/script-selector.fxml | 163 ++--- .../java/org/parabot/core/ui/fonts/Fonts.java | 1 + .../parabot/core/ui/fonts/ParabotFont.java | 2 +- .../core/ui/listeners/PBKeyListener.java | 7 +- .../org/parabot/environment/Environment.java | 1 - .../parabot/environment/OperatingSystem.java | 29 +- .../environment/api/interfaces/Paintable.java | 14 +- .../environment/api/utils/FileUtil.java | 12 +- .../parabot/environment/api/utils/Filter.java | 20 +- .../environment/api/utils/JavaUtil.java | 8 +- .../environment/api/utils/Multipliers.java | 60 +- .../environment/api/utils/PBPreferences.java | 27 +- .../parabot/environment/api/utils/Random.java | 37 +- .../parabot/environment/api/utils/Time.java | 111 ++- .../parabot/environment/api/utils/Timer.java | 198 +++--- .../environment/api/utils/Version.java | 33 +- .../parabot/environment/input/Keyboard.java | 359 +++++----- .../org/parabot/environment/input/Mouse.java | 277 ++++---- .../environment/randoms/RandomHandler.java | 27 +- .../environment/randoms/RandomType.java | 10 +- .../parabot/environment/scripts/Category.java | 77 +-- .../environment/scripts/Frameworks.java | 93 ++- .../parabot/environment/scripts/Script.java | 41 +- .../environment/scripts/ScriptManifest.java | 26 +- .../scripts/executers/BDNScriptsExecuter.java | 124 ++-- .../executers/LocalScriptExecuter.java | 24 +- .../scripts/executers/ScriptExecuter.java | 28 +- .../scripts/framework/AbstractFramework.java | 17 +- .../scripts/framework/Frameworks.java | 89 ++- .../scripts/framework/LoopTask.java | 15 +- .../scripts/framework/SleepCondition.java | 16 +- .../scripts/framework/Strategy.java | 26 +- .../scripts/loader/JavaScriptLoader.java | 50 +- .../environment/scripts/randoms/Random.java | 23 +- .../scripts/randoms/RandomHandler.java | 2 +- .../servers/LocalServerExecuter.java | 60 +- .../environment/servers/ServerManifest.java | 10 +- .../environment/servers/ServerProvider.java | 231 +++---- .../org/parabot/environment/servers/Type.java | 8 +- .../executers/LocalPublicServerExecuter.java | 187 +++-- .../executers/LocalServerExecuter.java | 74 +- .../executers/PublicServerExecuter.java | 154 ++--- .../servers/loader/ServerLoader.java | 58 +- 120 files changed, 6073 insertions(+), 6255 deletions(-) diff --git a/src/main/java/org/parabot/core/Configuration.java b/src/main/java/org/parabot/core/Configuration.java index 39e9b03..6217c67 100644 --- a/src/main/java/org/parabot/core/Configuration.java +++ b/src/main/java/org/parabot/core/Configuration.java @@ -8,20 +8,20 @@ import org.parabot.environment.api.utils.Version; * @author Everel */ public class Configuration extends org.parabot.api.Configuration { - public static final String LOGIN_SERVER = "http://bdn.parabot.org/api/v2/users/login"; - 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&server=%s"; + public static final String LOGIN_SERVER = "http://bdn.parabot.org/api/v2/users/login"; + 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&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"; - public static final String API_DOWNLOAD_BOT = "http://v3.bdn.parabot.org/api/bot/download/client"; - public static final String DOWNLOAD_BOT = "http://bdn.parabot.org/versions/"; - public static final String REGISTRATION_PAGE = "https://www.parabot.org/community/register/"; - public static final String GET_RANDOMS = "http://v3.bdn.parabot.org/api/bot/download/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 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"; + public static final String API_DOWNLOAD_BOT = "http://v3.bdn.parabot.org/api/bot/download/client"; + public static final String DOWNLOAD_BOT = "http://bdn.parabot.org/versions/"; + public static final String REGISTRATION_PAGE = "https://www.parabot.org/community/register/"; + public static final String GET_RANDOMS = "http://v3.bdn.parabot.org/api/bot/download/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 Version BOT_VERSION = ProjectProperties.getProjectVersion(); } diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index 3aa335d..943d051 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -33,32 +33,32 @@ import java.util.TimerTask; */ public class Context { public static final HashMap threadGroups = new HashMap(); - private static ArrayList paintables = new ArrayList(); - - private static Context instance; - private static String username; + private static ArrayList paintables = new ArrayList(); - private ASMClassLoader classLoader; - private ClassPath classPath; - private ServerProvider serverProvider; - private Applet gameApplet; - private HookParser hookParser; - private Script runningScript; - private RandomHandler randomHandler; - private Object clientInstance; - private PaintDebugger paintDebugger; - private Mouse mouse; - private Keyboard keyboard; - private PBKeyListener pbKeyListener; + private static Context instance; + private static String username; + + private ASMClassLoader classLoader; + private ClassPath classPath; + private ServerProvider serverProvider; + private Applet gameApplet; + private HookParser hookParser; + private Script runningScript; + private RandomHandler randomHandler; + private Object clientInstance; + private PaintDebugger paintDebugger; + private Mouse mouse; + private Keyboard keyboard; + private PBKeyListener pbKeyListener; private ServerProviderInfo providerInfo; - private JSONParser jsonParser; + private JSONParser jsonParser; private PrintStream defaultOut; private PrintStream defaultErr = System.err; private Context(final ServerProvider serverProvider) { threadGroups.put(Thread.currentThread().getThreadGroup(), this); - + System.setProperty("sun.java.command", ""); this.serverProvider = serverProvider; this.paintDebugger = new PaintDebugger(); @@ -75,9 +75,17 @@ public class Context { public static Context getInstance(ServerProvider serverProvider) { return instance == null ? instance = new Context(serverProvider) : instance; } - + public static Context getInstance() { - return getInstance(null); + return getInstance(null); + } + + public static String getUsername() { + return username; + } + + public static void setUsername(String username) { + Context.username = username; } /** @@ -88,12 +96,12 @@ public class Context { } /** - * Sets the hook parser + * Gets the mouse * - * @param hookParser + * @return mouse */ - public void setHookParser(final HookParser hookParser) { - this.hookParser = hookParser; + public Mouse getMouse() { + return mouse; } /** @@ -106,15 +114,14 @@ public class Context { } /** - * Gets the mouse + * Gets the keyboard * - * @return mouse + * @return keyboard */ - public Mouse getMouse() { - return mouse; + public Keyboard getKeyboard() { + return keyboard; } - /** * Sets the keyboard * @@ -124,15 +131,6 @@ public class Context { this.keyboard = keyboard; } - /** - * Gets the keyboard - * - * @return keyboard - */ - public Keyboard getKeyboard() { - return keyboard; - } - /** * ClassPath * @@ -160,51 +158,28 @@ public class Context { return gameApplet; } - /** - * Loads the game - */ - public void load() { - Core.verbose(TranslationHelper.translate("PARSING_SERVER_JAR")); - serverProvider.init(); - serverProvider.parseJar(); - Core.verbose(TranslationHelper.translate("DONE")); - Core.verbose(TranslationHelper.translate("INJECTING_HOOKS")); - serverProvider.injectHooks(); - Core.verbose(TranslationHelper.translate("DONE")); - Core.verbose(TranslationHelper.translate("FETCHING_GAME_APPLET")); - if(Core.shouldDump()) { - Core.verbose(TranslationHelper.translate("DUMPING_INJECTED_CLIENT")); - classPath.dump(new File(Directories.getWorkspace(), "dump.jar")); - Core.verbose(TranslationHelper.translate("DONE")); - } - Applet applet = serverProvider.fetchApplet(); - // if applet is null the server provider will call setApplet itself - if(applet != null) { - setApplet(applet); - } - } - /** * Sets the bot target applet + * * @param applet */ public void setApplet(final Applet applet) { - gameApplet = applet; - - if (getClient() == null) { + gameApplet = applet; + + if (getClient() == null) { setClientInstance(gameApplet); } Core.verbose(TranslationHelper.translate("APPLET_FETCHED")); - - final GamePanel panel = GamePanel.getInstance(); + + final GamePanel panel = GamePanel.getInstance(); final Dimension appletSize = serverProvider.getGameDimensions(); - + panel.setPreferredSize(appletSize); serverProvider.addMenuItems(BotUI.getInstance().getJMenuBar()); BotUI.getInstance().pack(); BotUI.getInstance().validate(); - + panel.removeComponents(); gameApplet.setSize(appletSize); panel.add(gameApplet); @@ -220,7 +195,7 @@ public class Context { gameApplet.setBounds(0, 0, appletSize.width, appletSize.height); } }, 1000); - + Core.verbose(TranslationHelper.translate("INIT_MOUSE")); serverProvider.initMouse(); Core.verbose(TranslationHelper.translate("DONE")); @@ -231,12 +206,36 @@ public class Context { Core.verbose(TranslationHelper.translate("INIT_KEY_LISTENER")); this.pbKeyListener = new PBKeyListener(); applet.addKeyListener(this.pbKeyListener); - + BotDialog.getInstance().validate(); System.setOut(this.defaultOut); System.setErr(this.defaultErr); } + /** + * Loads the game + */ + public void load() { + Core.verbose(TranslationHelper.translate("PARSING_SERVER_JAR")); + serverProvider.init(); + serverProvider.parseJar(); + Core.verbose(TranslationHelper.translate("DONE")); + Core.verbose(TranslationHelper.translate("INJECTING_HOOKS")); + serverProvider.injectHooks(); + Core.verbose(TranslationHelper.translate("DONE")); + Core.verbose(TranslationHelper.translate("FETCHING_GAME_APPLET")); + if (Core.shouldDump()) { + Core.verbose(TranslationHelper.translate("DUMPING_INJECTED_CLIENT")); + classPath.dump(new File(Directories.getWorkspace(), "dump.jar")); + Core.verbose(TranslationHelper.translate("DONE")); + } + Applet applet = serverProvider.fetchApplet(); + // if applet is null the server provider will call setApplet itself + if (applet != null) { + setApplet(applet); + } + } + /** * Gets the server prodiver belonging to this context * @@ -245,24 +244,24 @@ public class Context { public ServerProvider getServerProvider() { return serverProvider; } - + /** - * * Sets provider info of this context - * + * * @param providerInfo */ public void setProviderInfo(ServerProviderInfo providerInfo) { - this.providerInfo = providerInfo; + this.providerInfo = providerInfo; } - + /** * Gets ServerProvider info * Can be null if this is not a public server provider + * * @return info about this provider */ public ServerProviderInfo getServerProviderInfo() { - return this.providerInfo; + return this.providerInfo; } /** @@ -329,12 +328,12 @@ public class Context { } /** - * Sets the current running script, if a script stops it will call this method with a null argument + * Sets the hook parser * - * @param script + * @param hookParser */ - public void setRunningScript(final Script script) { - this.runningScript = script; + public void setHookParser(final HookParser hookParser) { + this.hookParser = hookParser; } /** @@ -345,21 +344,23 @@ public class Context { public Script getRunningScript() { return this.runningScript; } - + + /** + * Sets the current running script, if a script stops it will call this method with a null argument + * + * @param script + */ + public void setRunningScript(final Script script) { + this.runningScript = script; + } + /** * Gets the random handler + * * @return random handler */ public RandomHandler getRandomHandler() { - return this.randomHandler; - } - - public static String getUsername() { - return username; - } - - public static void setUsername(String username) { - Context.username = username; + return this.randomHandler; } public JSONParser getJsonParser() { diff --git a/src/main/java/org/parabot/core/ProjectProperties.java b/src/main/java/org/parabot/core/ProjectProperties.java index d905a29..a9f44d9 100644 --- a/src/main/java/org/parabot/core/ProjectProperties.java +++ b/src/main/java/org/parabot/core/ProjectProperties.java @@ -18,6 +18,14 @@ public class ProjectProperties { setProperties(); } + public static Version getProjectVersion() { + return new Version(getInstance().getCached().getProperty("application.version")); + } + + public static ProjectProperties getInstance() { + return instance == null ? instance = new ProjectProperties() : instance; + } + private void setProperties() { InputStream input; try { @@ -35,12 +43,4 @@ public class ProjectProperties { private Properties getCached() { return cached; } - - public static Version getProjectVersion() { - return new Version(getInstance().getCached().getProperty("application.version")); - } - - public static ProjectProperties getInstance() { - return instance == null ? instance = new ProjectProperties() : instance; - } } diff --git a/src/main/java/org/parabot/core/asm/ASMClassLoader.java b/src/main/java/org/parabot/core/asm/ASMClassLoader.java index ee0478d..7039488 100644 --- a/src/main/java/org/parabot/core/asm/ASMClassLoader.java +++ b/src/main/java/org/parabot/core/asm/ASMClassLoader.java @@ -1,6 +1,5 @@ package org.parabot.core.asm; - import org.objectweb.asm.ClassWriter; import org.objectweb.asm.tree.ClassNode; import org.parabot.core.classpath.ClassPath; @@ -16,92 +15,90 @@ import java.util.HashMap; import java.util.Map; /** - * * Makes classnodes into runnable classes - * + * * @author Everel * @author Matt - * */ public class ASMClassLoader extends ClassLoader { - private Map> classCache; - public ClassPath classPath; - - public ASMClassLoader(final ClassPath classPath) { - this.classCache = new HashMap>(); - this.classPath = classPath; - } + public ClassPath classPath; + private Map> classCache; - @Override - protected URL findResource(String name) { - if (getSystemResource(name) == null) { - if (classPath.resources.containsKey(name)) { - try { - return classPath.resources.get(name).toURI().toURL(); - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; - } - } else { - return null; - } - } - return getSystemResource(name); - } + public ASMClassLoader(final ClassPath classPath) { + this.classCache = new HashMap>(); + this.classPath = classPath; + } - @Override - public Class loadClass(String name) throws ClassNotFoundException { - return findClass(name); - } + @Override + protected URL findResource(String name) { + if (getSystemResource(name) == null) { + if (classPath.resources.containsKey(name)) { + try { + return classPath.resources.get(name).toURI().toURL(); + } catch (MalformedURLException e) { + e.printStackTrace(); + return null; + } + } else { + return null; + } + } + return getSystemResource(name); + } - @Override - protected Class findClass(String name) throws ClassNotFoundException { - try { - return getSystemClassLoader().loadClass(name); - } catch (Exception ignored) { - - } - String key = name.replace('.', '/'); - if (classCache.containsKey(key)) { - return classCache.get(key); - } - ClassNode node = classPath.classes.get(key); - if (node != null) { - classPath.classes.remove(key); - Class c = nodeToClass(node); - classCache.put(key, c); - return c; - } - return getSystemClassLoader().loadClass(name); - } + @Override + public Class loadClass(String name) throws ClassNotFoundException { + return findClass(name); + } - private final Class nodeToClass(ClassNode node) { - if (super.findLoadedClass(node.name) != null) { - return findLoadedClass(node.name); - } - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); - node.accept(cw); - byte[] b = cw.toByteArray(); - return defineClass(node.name.replace('/', '.'), b, 0, b.length, - getDomain()); - } + @Override + protected Class findClass(String name) throws ClassNotFoundException { + try { + return getSystemClassLoader().loadClass(name); + } catch (Exception ignored) { - private final ProtectionDomain getDomain() { - CodeSource code = null; - try { - code = new CodeSource(new URL("http://www.url.com/"), (Certificate[]) null); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - return new ProtectionDomain(code, getPermissions()); - } + } + String key = name.replace('.', '/'); + if (classCache.containsKey(key)) { + return classCache.get(key); + } + ClassNode node = classPath.classes.get(key); + if (node != null) { + classPath.classes.remove(key); + Class c = nodeToClass(node); + classCache.put(key, c); + return c; + } + return getSystemClassLoader().loadClass(name); + } - private final Permissions getPermissions() { - Permissions permissions = new Permissions(); - permissions.add(new AllPermission()); - return permissions; - } + private final Class nodeToClass(ClassNode node) { + if (super.findLoadedClass(node.name) != null) { + return findLoadedClass(node.name); + } + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); + node.accept(cw); + byte[] b = cw.toByteArray(); + return defineClass(node.name.replace('/', '.'), b, 0, b.length, + getDomain()); + } + + private final ProtectionDomain getDomain() { + CodeSource code = null; + try { + code = new CodeSource(new URL("http://www.url.com/"), (Certificate[]) null); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + return new ProtectionDomain(code, getPermissions()); + } + + private final Permissions getPermissions() { + Permissions permissions = new Permissions(); + permissions.add(new AllPermission()); + return permissions; + } } diff --git a/src/main/java/org/parabot/core/asm/ASMUtils.java b/src/main/java/org/parabot/core/asm/ASMUtils.java index 300374a..5cc0128 100644 --- a/src/main/java/org/parabot/core/asm/ASMUtils.java +++ b/src/main/java/org/parabot/core/asm/ASMUtils.java @@ -9,151 +9,150 @@ import org.parabot.core.Context; import java.lang.reflect.Modifier; /** - * * A collection of various asm util methods - * + * * @author Everel - * */ public class ASMUtils implements Opcodes { - public static FieldNode getField(ClassNode node, String fieldName) { - for (final Object fieldNode : node.fields) { - FieldNode fieldNodeObject = (FieldNode) fieldNode; - if (fieldNodeObject.name.equals(fieldName)) { - return fieldNodeObject; - } - } - return null; - } - - public static FieldNode getField(ClassNode node, String fieldName, String desc) { - if(desc == null) { - return getField(node, fieldName); - } - for (final Object fieldNode : node.fields) { - FieldNode fieldNodeObject = (FieldNode) fieldNode; - if (fieldNodeObject.name.equals(fieldName) && fieldNodeObject.desc.equals(desc)) { - return fieldNodeObject; - } - } - return null; - } + public static FieldNode getField(ClassNode node, String fieldName) { + for (final Object fieldNode : node.fields) { + FieldNode fieldNodeObject = (FieldNode) fieldNode; + if (fieldNodeObject.name.equals(fieldName)) { + return fieldNodeObject; + } + } + return null; + } - public static ClassNode getClass(String className) { - Context context = Context.getInstance(); - for (ClassNode node : context.getClassPath().classes.values()) { - if (node.name.equals(className)) { - return node; - } - } - return null; - } + public static FieldNode getField(ClassNode node, String fieldName, String desc) { + if (desc == null) { + return getField(node, fieldName); + } + for (final Object fieldNode : node.fields) { + FieldNode fieldNodeObject = (FieldNode) fieldNode; + if (fieldNodeObject.name.equals(fieldName) && fieldNodeObject.desc.equals(desc)) { + return fieldNodeObject; + } + } + return null; + } - public static MethodNode getMethod(final String className, - final String methodName, final String methodDesc) { - return getMethod(getClass(className), methodName, methodDesc); - } + public static ClassNode getClass(String className) { + Context context = Context.getInstance(); + for (ClassNode node : context.getClassPath().classes.values()) { + if (node.name.equals(className)) { + return node; + } + } + return null; + } - public static MethodNode getMethod(final ClassNode location, - final String methodName, final String methodDesc) { - for (Object mn : location.methods) { - MethodNode methodNode = (MethodNode) mn; - if (methodNode.name.equals(methodName) && methodNode.desc.equals(methodDesc)) { - return methodNode; - } - } - return null; - } + public static MethodNode getMethod(final String className, + final String methodName, final String methodDesc) { + return getMethod(getClass(className), methodName, methodDesc); + } - /** - * Return right opcode for desc - * - * @param desc - * @return return opcode - */ - public static int getReturnOpcode(String desc) { - desc = desc.substring(desc.indexOf("L") + 1); - if (desc.length() > 1) { - return ARETURN; - } - final char c = desc.charAt(0); - switch (c) { - case 'I': - case 'Z': - case 'B': - case 'S': - case 'C': - return IRETURN; - case 'J': - return LRETURN; - case 'F': - return FRETURN; - case 'D': - return DRETURN; - case 'V': // void, method desc - return RETURN; - } - throw new RuntimeException("Wrong desc type: " + c); - } + public static MethodNode getMethod(final ClassNode location, + final String methodName, final String methodDesc) { + for (Object mn : location.methods) { + MethodNode methodNode = (MethodNode) mn; + if (methodNode.name.equals(methodName) && methodNode.desc.equals(methodDesc)) { + return methodNode; + } + } + return null; + } - public static int getLoadOpcode(String desc) { - desc = desc.substring(desc.indexOf("L") + 1); - if (desc.length() > 1) { - return ALOAD; - } - final char c = desc.charAt(0); - switch (c) { - case 'I': - case 'Z': - case 'B': - case 'S': - case 'C': - return ILOAD; - case 'J': - return LLOAD; - case 'F': - return FLOAD; - case 'D': - return DLOAD; - } - throw new RuntimeException("eek " + c); - } - - public static void makePublic(ClassNode node) { - if (!Modifier.isPublic(node.access)) { - if (Modifier.isPrivate(node.access)) { - node.access = node.access & (~Opcodes.ACC_PRIVATE); - } - if (Modifier.isProtected(node.access)) { - node.access = node.access & (~Opcodes.ACC_PROTECTED); - } - node.access = node.access | Opcodes.ACC_PUBLIC; - } - } - - public static void makePublic(MethodNode node) { - if (!Modifier.isPublic(node.access)) { - if (Modifier.isPrivate(node.access)) { - node.access = node.access & (~Opcodes.ACC_PRIVATE); - } - if (Modifier.isProtected(node.access)) { - node.access = node.access & (~Opcodes.ACC_PROTECTED); - } - node.access = node.access | Opcodes.ACC_PUBLIC; - } - } - - public static void makePublic(FieldNode node) { - if (!Modifier.isPublic(node.access)) { - if (Modifier.isPrivate(node.access)) { - node.access = node.access & (~Opcodes.ACC_PRIVATE); - } - if (Modifier.isProtected(node.access)) { - node.access = node.access & (~Opcodes.ACC_PROTECTED); - } - node.access = node.access | Opcodes.ACC_PUBLIC; - } - } + /** + * Return right opcode for desc + * + * @param desc + * + * @return return opcode + */ + public static int getReturnOpcode(String desc) { + desc = desc.substring(desc.indexOf("L") + 1); + if (desc.length() > 1) { + return ARETURN; + } + final char c = desc.charAt(0); + switch (c) { + case 'I': + case 'Z': + case 'B': + case 'S': + case 'C': + return IRETURN; + case 'J': + return LRETURN; + case 'F': + return FRETURN; + case 'D': + return DRETURN; + case 'V': // void, method desc + return RETURN; + } + throw new RuntimeException("Wrong desc type: " + c); + } + + public static int getLoadOpcode(String desc) { + desc = desc.substring(desc.indexOf("L") + 1); + if (desc.length() > 1) { + return ALOAD; + } + final char c = desc.charAt(0); + switch (c) { + case 'I': + case 'Z': + case 'B': + case 'S': + case 'C': + return ILOAD; + case 'J': + return LLOAD; + case 'F': + return FLOAD; + case 'D': + return DLOAD; + } + throw new RuntimeException("eek " + c); + } + + public static void makePublic(ClassNode node) { + if (!Modifier.isPublic(node.access)) { + if (Modifier.isPrivate(node.access)) { + node.access = node.access & (~Opcodes.ACC_PRIVATE); + } + if (Modifier.isProtected(node.access)) { + node.access = node.access & (~Opcodes.ACC_PROTECTED); + } + node.access = node.access | Opcodes.ACC_PUBLIC; + } + } + + public static void makePublic(MethodNode node) { + if (!Modifier.isPublic(node.access)) { + if (Modifier.isPrivate(node.access)) { + node.access = node.access & (~Opcodes.ACC_PRIVATE); + } + if (Modifier.isProtected(node.access)) { + node.access = node.access & (~Opcodes.ACC_PROTECTED); + } + node.access = node.access | Opcodes.ACC_PUBLIC; + } + } + + public static void makePublic(FieldNode node) { + if (!Modifier.isPublic(node.access)) { + if (Modifier.isPrivate(node.access)) { + node.access = node.access & (~Opcodes.ACC_PRIVATE); + } + if (Modifier.isProtected(node.access)) { + node.access = node.access & (~Opcodes.ACC_PROTECTED); + } + node.access = node.access | Opcodes.ACC_PUBLIC; + } + } } diff --git a/src/main/java/org/parabot/core/asm/ClassRemapper.java b/src/main/java/org/parabot/core/asm/ClassRemapper.java index f35b604..ff8cb56 100644 --- a/src/main/java/org/parabot/core/asm/ClassRemapper.java +++ b/src/main/java/org/parabot/core/asm/ClassRemapper.java @@ -5,19 +5,20 @@ import org.objectweb.asm.commons.Remapper; import java.util.HashMap; public class ClassRemapper extends Remapper { - private static HashMap remapNames = new HashMap(); - static { - remapNames.put("java/net/Socket", "org/parabot/core/network/proxy/ProxySocket"); - remapNames.put("java/net/NetworkInterface", "org/parabot/core/network/NetworkInterface"); - } + private static HashMap remapNames = new HashMap(); - @Override - public String map(String str) { - String s = remapNames.get(str); - if (s != null) { - return s; - } else { - return str; - } - } + static { + remapNames.put("java/net/Socket", "org/parabot/core/network/proxy/ProxySocket"); + remapNames.put("java/net/NetworkInterface", "org/parabot/core/network/NetworkInterface"); + } + + @Override + public String map(String str) { + String s = remapNames.get(str); + if (s != null) { + return s; + } else { + return str; + } + } } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java index 03cbb66..9ecebad 100644 --- a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java +++ b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java @@ -16,124 +16,126 @@ import java.util.Map; public class RedirectClassAdapter extends ClassVisitor implements Opcodes { - private static final Map> redirects = new HashMap>(); + private static final Map> redirects = new HashMap>(); + private static PrintStream str_out, class_out; - private String className; - - private static PrintStream str_out, class_out; - - static { - redirects.put("java/awt/Toolkit", ToolkitRedirect.class); - redirects.put("java/lang/Class", ClassRedirect.class); + static { + redirects.put("java/awt/Toolkit", ToolkitRedirect.class); + redirects.put("java/lang/Class", ClassRedirect.class); // redirects.put("java/lang/ClassLoader", ClassLoaderRedirect.class); - redirects.put("java/lang/Runtime", RuntimeRedirect.class); - redirects.put("java/lang/Thread", ThreadRedirect.class); - redirects.put("java/lang/StackTraceElement", - StackTraceElementRedirect.class); - redirects.put("java/lang/ProcessBuilder", ProcessBuilderRedirect.class); - redirects.put("java/lang/System", SystemRedirect.class); - } + redirects.put("java/lang/Runtime", RuntimeRedirect.class); + redirects.put("java/lang/Thread", ThreadRedirect.class); + redirects.put("java/lang/StackTraceElement", + StackTraceElementRedirect.class); + redirects.put("java/lang/ProcessBuilder", ProcessBuilderRedirect.class); + redirects.put("java/lang/System", SystemRedirect.class); + } - public RedirectClassAdapter(ClassVisitor cv) { - super(ASM5, cv); - if (str_out == null && Core.shouldDump()) - try { - str_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"strings.txt"))); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - if(class_out == null && Core.shouldDump()) - try { - class_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"classes.txt"))); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } + private String className; - @Override - public void visit(int version, int access, String name, String signature, - String superName, String[] interfaces) { - this.className = name; - super.visit(version, access, name, signature, superName, interfaces); - if(class_out != null) { - class_out.println(className + " References:"); - } - } + public RedirectClassAdapter(ClassVisitor cv) { + super(ASM5, cv); + if (str_out == null && Core.shouldDump()) { + try { + str_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(), "strings.txt"))); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + if (class_out == null && Core.shouldDump()) { + try { + class_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(), "classes.txt"))); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + } - @Override - public void visitEnd(){ - super.visitEnd(); - if(class_out != null){ - class_out.println(); - class_out.println(); - } - } + public static SecurityException createSecurityException() { + Exception e = new Exception(); + StackTraceElement[] elements = e.getStackTrace(); + return new SecurityException("Unsafe operation blocked. Op:" + + elements[1].getMethodName()); + } - @Override - public MethodVisitor visitMethod(int access, String name, String desc, - String signature, String[] exceptions) { - return new ReflectionMethodVisitor(name, desc, super.visitMethod( - access, name, desc, signature, exceptions)); - } + @Override + public void visit(int version, int access, String name, String signature, + String superName, String[] interfaces) { + this.className = name; + super.visit(version, access, name, signature, superName, interfaces); + if (class_out != null) { + class_out.println(className + " References:"); + } + } - private class ReflectionMethodVisitor extends MethodVisitor { + @Override + public void visitEnd() { + super.visitEnd(); + if (class_out != null) { + class_out.println(); + class_out.println(); + } + } - public ReflectionMethodVisitor(String name, String desc, - MethodVisitor mv) { - super(ASM5, mv); - } + @Override + public MethodVisitor visitMethod(int access, String name, String desc, + String signature, String[] exceptions) { + return new ReflectionMethodVisitor(name, desc, super.visitMethod( + access, name, desc, signature, exceptions)); + } - @Override - public void visitLdcInsn(Object o) { - if (o instanceof String && str_out != null) { - str_out.println(className + " " + o); - } - super.visitLdcInsn(o); - } + private class ReflectionMethodVisitor extends MethodVisitor { - @Override - public void visitMethodInsn(int opcode, String owner, String name, - String desc, boolean itf) { - if (Core.isSecure()) { - if (redirects.containsKey(owner) && !name.equals("") - && !name.equals("")) { - if (opcode != INVOKESTATIC) { - desc = "(L" + owner + ";" + desc.substring(1); - } - opcode = INVOKESTATIC; - owner = redirects.get(owner).getName() - .replaceAll("\\.", "/"); - } - } + public ReflectionMethodVisitor(String name, String desc, + MethodVisitor mv) { + super(ASM5, mv); + } - if(class_out != null) { - class_out.println(owner); - } + @Override + public void visitLdcInsn(Object o) { + if (o instanceof String && str_out != null) { + str_out.println(className + " " + o); + } + super.visitLdcInsn(o); + } - super.visitMethodInsn(opcode, owner, name, desc, itf); - } + @Override + public void visitMethodInsn(int opcode, String owner, String name, + String desc, boolean itf) { + if (Core.isSecure()) { + if (redirects.containsKey(owner) && !name.equals("") + && !name.equals("")) { + if (opcode != INVOKESTATIC) { + desc = "(L" + owner + ";" + desc.substring(1); + } + opcode = INVOKESTATIC; + owner = redirects.get(owner).getName() + .replaceAll("\\.", "/"); + } + } - @Override - public void visitFieldInsn(int opcode, String owner, String name, - String desc){ - if (Core.isSecure() && (opcode == GETSTATIC || opcode == PUTSTATIC)) { - if (redirects.containsKey(owner)) { - owner = redirects.get(owner).getName() - .replaceAll("\\.", "/"); - } - } - if(class_out != null) - class_out.println(owner); - super.visitFieldInsn(opcode, owner, name, desc); - } + if (class_out != null) { + class_out.println(owner); + } - } + super.visitMethodInsn(opcode, owner, name, desc, itf); + } - public static SecurityException createSecurityException() { - Exception e = new Exception(); - StackTraceElement[] elements = e.getStackTrace(); - return new SecurityException("Unsafe operation blocked. Op:" - + elements[1].getMethodName()); - } + @Override + public void visitFieldInsn(int opcode, String owner, String name, + String desc) { + if (Core.isSecure() && (opcode == GETSTATIC || opcode == PUTSTATIC)) { + if (redirects.containsKey(owner)) { + owner = redirects.get(owner).getName() + .replaceAll("\\.", "/"); + } + } + if (class_out != null) { + class_out.println(owner); + } + super.visitFieldInsn(opcode, owner, name, desc); + } + + } } diff --git a/src/main/java/org/parabot/core/asm/adapters/AddCallbackAdapter.java b/src/main/java/org/parabot/core/asm/adapters/AddCallbackAdapter.java index 2159b7e..1384452 100644 --- a/src/main/java/org/parabot/core/asm/adapters/AddCallbackAdapter.java +++ b/src/main/java/org/parabot/core/asm/adapters/AddCallbackAdapter.java @@ -1,98 +1,89 @@ package org.parabot.core.asm.adapters; -import java.lang.reflect.Modifier; - import org.objectweb.asm.Label; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.JumpInsnNode; -import org.objectweb.asm.tree.LabelNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.VarInsnNode; +import org.objectweb.asm.tree.*; import org.parabot.core.asm.ASMUtils; import org.parabot.core.asm.interfaces.Injectable; +import java.lang.reflect.Modifier; + /** - * * Injects a callback, invokes a given static method - * + * * @author Everel - * */ public class AddCallbackAdapter implements Injectable, Opcodes { - private MethodNode method; - private String invokeClass; - private String invokeMethod; - private String desc; - private int[] args; - private boolean conditional; + private MethodNode method; + private String invokeClass; + private String invokeMethod; + private String desc; + private int[] args; + private boolean conditional; - public AddCallbackAdapter(final MethodNode method, - final String invokeClass, final String invokeMethod, - final String desc, final int[] args, final boolean conditional) { - this.method = method; - this.invokeClass = invokeClass; - this.invokeMethod = invokeMethod; - this.desc = desc; - this.args = args; - this.conditional = conditional; - } + public AddCallbackAdapter(final MethodNode method, + final String invokeClass, final String invokeMethod, + final String desc, final int[] args, final boolean conditional) { + this.method = method; + this.invokeClass = invokeClass; + this.invokeMethod = invokeMethod; + this.desc = desc; + this.args = args; + this.conditional = conditional; + } - @Override - public void inject() { - final Type[] types = Type.getArgumentTypes(this.method.desc); - InsnList inject = new InsnList(); - Label l0 = new Label(); - inject.add(new LabelNode(l0)); - int offset = 0; - for (int arg : args) { - if(Modifier.isStatic(method.access)) { - int loadOpcode = ASMUtils.getLoadOpcode(types[arg] - .getDescriptor()); - inject.add(new VarInsnNode(loadOpcode, arg + offset)); - if(loadOpcode == Opcodes.LLOAD) { - offset++; - } - } else { - inject.add(new VarInsnNode(ASMUtils.getLoadOpcode(types[arg] - .getDescriptor()), arg + 1)); - } - } - inject.add(new MethodInsnNode(INVOKESTATIC, - this.invokeClass, this.invokeMethod, - this.desc)); - if(this.conditional) { - LabelNode ln = new LabelNode(new Label()); - inject.add(new JumpInsnNode(IFEQ, ln)); - if(Type.getReturnType(method.desc).equals(Type.BOOLEAN_TYPE)) { - inject.add(new InsnNode(ICONST_1)); - inject.add(new InsnNode(IRETURN)); + @Override + public void inject() { + final Type[] types = Type.getArgumentTypes(this.method.desc); + InsnList inject = new InsnList(); + Label l0 = new Label(); + inject.add(new LabelNode(l0)); + int offset = 0; + for (int arg : args) { + if (Modifier.isStatic(method.access)) { + int loadOpcode = ASMUtils.getLoadOpcode(types[arg] + .getDescriptor()); + inject.add(new VarInsnNode(loadOpcode, arg + offset)); + if (loadOpcode == Opcodes.LLOAD) { + offset++; + } } else { - inject.add(new InsnNode(RETURN)); + inject.add(new VarInsnNode(ASMUtils.getLoadOpcode(types[arg] + .getDescriptor()), arg + 1)); + } + } + inject.add(new MethodInsnNode(INVOKESTATIC, + this.invokeClass, this.invokeMethod, + this.desc)); + if (this.conditional) { + LabelNode ln = new LabelNode(new Label()); + inject.add(new JumpInsnNode(IFEQ, ln)); + if (Type.getReturnType(method.desc).equals(Type.BOOLEAN_TYPE)) { + inject.add(new InsnNode(ICONST_1)); + inject.add(new InsnNode(IRETURN)); + } else { + inject.add(new InsnNode(RETURN)); } inject.add(ln); - } - - if(method.name.startsWith("<") && !Modifier.isStatic(method.access)) { - // find target - AbstractInsnNode target = null; - for(AbstractInsnNode node : this.method.instructions.toArray()) { - if(node.getOpcode() == Opcodes.INVOKESPECIAL) { - target = node; - break; - } - } - - if(target != null) { - this.method.instructions.insert(target, inject); - } - } else { - this.method.instructions.insert(inject); - } - } + } + + if (method.name.startsWith("<") && !Modifier.isStatic(method.access)) { + // find target + AbstractInsnNode target = null; + for (AbstractInsnNode node : this.method.instructions.toArray()) { + if (node.getOpcode() == Opcodes.INVOKESPECIAL) { + target = node; + break; + } + } + + if (target != null) { + this.method.instructions.insert(target, inject); + } + } else { + this.method.instructions.insert(inject); + } + } } diff --git a/src/main/java/org/parabot/core/asm/adapters/AddDebugAdapter.java b/src/main/java/org/parabot/core/asm/adapters/AddDebugAdapter.java index ec4d68d..e6c14f7 100644 --- a/src/main/java/org/parabot/core/asm/adapters/AddDebugAdapter.java +++ b/src/main/java/org/parabot/core/asm/adapters/AddDebugAdapter.java @@ -2,42 +2,37 @@ package org.parabot.core.asm.adapters; import org.objectweb.asm.Label; import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.LabelNode; -import org.objectweb.asm.tree.LdcInsnNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.tree.*; public class AddDebugAdapter { - private ClassNode owner; - private MethodNode mn; - - public AddDebugAdapter(ClassNode owner, MethodNode mn) { - this.owner = owner; - this.mn = mn; - } - - public AddDebugAdapter(MethodNode mn) { - this.mn = mn; - } - - public void inject() { - InsnList inject = new InsnList(); - Label l0 = new Label(); - inject.add(new LabelNode(l0)); - - String callString = owner.name + "." + mn.name + " " + mn.desc; - LdcInsnNode ldc = new LdcInsnNode(callString); - - MethodInsnNode methodNode = new MethodInsnNode(Opcodes.INVOKESTATIC, "org/parabot/core/Core", "debug", - "(Ljava/lang/String;)V"); - - inject.add(ldc); - inject.add(methodNode); - - mn.instructions.insert(inject); - - } + private ClassNode owner; + private MethodNode mn; + + public AddDebugAdapter(ClassNode owner, MethodNode mn) { + this.owner = owner; + this.mn = mn; + } + + public AddDebugAdapter(MethodNode mn) { + this.mn = mn; + } + + public void inject() { + InsnList inject = new InsnList(); + Label l0 = new Label(); + inject.add(new LabelNode(l0)); + + String callString = owner.name + "." + mn.name + " " + mn.desc; + LdcInsnNode ldc = new LdcInsnNode(callString); + + MethodInsnNode methodNode = new MethodInsnNode(Opcodes.INVOKESTATIC, "org/parabot/core/Core", "debug", + "(Ljava/lang/String;)V"); + + inject.add(ldc); + inject.add(methodNode); + + mn.instructions.insert(inject); + + } } diff --git a/src/main/java/org/parabot/core/asm/adapters/AddGetterAdapter.java b/src/main/java/org/parabot/core/asm/adapters/AddGetterAdapter.java index 7ee094a..1823cb4 100644 --- a/src/main/java/org/parabot/core/asm/adapters/AddGetterAdapter.java +++ b/src/main/java/org/parabot/core/asm/adapters/AddGetterAdapter.java @@ -1,7 +1,5 @@ package org.parabot.core.asm.adapters; -import java.lang.reflect.Modifier; - import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.tree.ClassNode; @@ -11,174 +9,166 @@ import org.parabot.core.Core; import org.parabot.core.asm.ASMUtils; import org.parabot.core.asm.interfaces.Injectable; +import java.lang.reflect.Modifier; + /** * Adds a method into a Classnode which returns a field - * + * * @author Everel - * */ public class AddGetterAdapter implements Opcodes, Injectable { - private ClassNode into; - private ClassNode fieldLocation; - private FieldNode fieldNode; - private String methodName; - private String returnDesc; - private boolean staticField; - private boolean staticMethod; - private long multiplier; + private ClassNode into; + private ClassNode fieldLocation; + private FieldNode fieldNode; + private String methodName; + private String returnDesc; + private boolean staticField; + private boolean staticMethod; + private long multiplier; - /** - * - * @param into - * - classnode to inject getter method in - * @param fieldLocation - * - classnode where field is located - * @param fieldNode - * - field name to get - * @param methodName - * - method name of getter - * @param returnDesc - * - return type of method, can be null for default return - * @param staticMethod - * - pass true if you want the method to be static - * @param multiplier - * - if this field requires a multipli - */ - public AddGetterAdapter(final ClassNode into, - final ClassNode fieldLocation, final FieldNode fieldNode, - final String methodName, final String returnDesc, - final boolean staticMethod, final long multiplier) { - this.into = into; - this.fieldLocation = fieldLocation; - this.fieldNode = fieldNode; - this.methodName = methodName; - this.returnDesc = returnDesc == null ? fieldNode.desc : returnDesc; - this.staticField = Modifier.isStatic(fieldNode.access); - this.staticMethod = staticMethod; - this.multiplier = multiplier; - } + /** + * @param into - classnode to inject getter method in + * @param fieldLocation - classnode where field is located + * @param fieldNode - field name to get + * @param methodName - method name of getter + * @param returnDesc - return type of method, can be null for default return + * @param staticMethod - pass true if you want the method to be static + * @param multiplier - if this field requires a multipli + */ + public AddGetterAdapter(final ClassNode into, + final ClassNode fieldLocation, final FieldNode fieldNode, + final String methodName, final String returnDesc, + final boolean staticMethod, final long multiplier) { + this.into = into; + this.fieldLocation = fieldLocation; + this.fieldNode = fieldNode; + this.methodName = methodName; + this.returnDesc = returnDesc == null ? fieldNode.desc : returnDesc; + this.staticField = Modifier.isStatic(fieldNode.access); + this.staticMethod = staticMethod; + this.multiplier = multiplier; + } - /** - * - * @param fieldLocation - * @param fieldNode - * @param methodName - */ - public AddGetterAdapter(final ClassNode fieldLocation, - final FieldNode fieldNode, final String methodName) { - this.into = fieldLocation; - this.fieldLocation = fieldLocation; - this.fieldNode = fieldNode; - this.methodName = methodName; - this.returnDesc = fieldNode.desc; - this.staticField = Modifier.isStatic(fieldNode.access); - this.staticMethod = false; - } + /** + * @param fieldLocation + * @param fieldNode + * @param methodName + */ + public AddGetterAdapter(final ClassNode fieldLocation, + final FieldNode fieldNode, final String methodName) { + this.into = fieldLocation; + this.fieldLocation = fieldLocation; + this.fieldNode = fieldNode; + this.methodName = methodName; + this.returnDesc = fieldNode.desc; + this.staticField = Modifier.isStatic(fieldNode.access); + this.staticMethod = false; + } - /** - * Validates if this getter can be injected, if not a runtime exception is - * thrown - */ - public void validate() { - if (methodName == null) { - throw new RuntimeException("Null method name"); - } - if (into == null) { - final StringBuilder sb = new StringBuilder(); - sb.append("Into ClassNode is null, at : ").append(methodName) - .append("()"); - throw new RuntimeException(sb.toString()); - } - if (fieldNode == null) { - final StringBuilder sb = new StringBuilder(); - sb.append("FieldLocation ClassNode is null, at : ") - .append(methodName).append("()"); - throw new RuntimeException(sb.toString()); - } - if (fieldNode == null) { - final StringBuilder sb = new StringBuilder(); - sb.append("FieldNode is null, at : ").append(methodName) - .append("()"); - throw new RuntimeException(sb.toString()); - } - for (final Object methodNode : into.methods) { - MethodNode methodNodeObject = (MethodNode) methodNode; - if (methodNodeObject.name.equals(methodName)) { - final Type[] args = Type.getArgumentTypes(methodNodeObject.desc); - if (args != null && args.length != 0) { - continue; - } - final StringBuilder sb = new StringBuilder(); - sb.append("Duplicated method detected. ").append(methodName) - .append("() in ").append(into.name); - throw new RuntimeException(sb.toString()); - } - } - } + /** + * Validates if this getter can be injected, if not a runtime exception is + * thrown + */ + public void validate() { + if (methodName == null) { + throw new RuntimeException("Null method name"); + } + if (into == null) { + final StringBuilder sb = new StringBuilder(); + sb.append("Into ClassNode is null, at : ").append(methodName) + .append("()"); + throw new RuntimeException(sb.toString()); + } + if (fieldNode == null) { + final StringBuilder sb = new StringBuilder(); + sb.append("FieldLocation ClassNode is null, at : ") + .append(methodName).append("()"); + throw new RuntimeException(sb.toString()); + } + if (fieldNode == null) { + final StringBuilder sb = new StringBuilder(); + sb.append("FieldNode is null, at : ").append(methodName) + .append("()"); + throw new RuntimeException(sb.toString()); + } + for (final Object methodNode : into.methods) { + MethodNode methodNodeObject = (MethodNode) methodNode; + if (methodNodeObject.name.equals(methodName)) { + final Type[] args = Type.getArgumentTypes(methodNodeObject.desc); + if (args != null && args.length != 0) { + continue; + } + final StringBuilder sb = new StringBuilder(); + sb.append("Duplicated method detected. ").append(methodName) + .append("() in ").append(into.name); + throw new RuntimeException(sb.toString()); + } + } + } - /** - * Injects this the method getter - */ - @Override - public void inject() { - Core.verbose("Injecting: " + this.toString()); + /** + * Injects this the method getter + */ + @Override + public void inject() { + Core.verbose("Injecting: " + this.toString()); - MethodNode method = new MethodNode(ACC_PUBLIC - | (staticMethod ? ACC_STATIC : 0), methodName, "()" - + returnDesc, null, null); - if (!staticField) { - method.visitVarInsn(ALOAD, 0); - } - if(staticField) { - ASMUtils.makePublic(fieldNode); - } - method.visitFieldInsn(staticField ? GETSTATIC : GETFIELD, - fieldLocation.name, fieldNode.name, fieldNode.desc); - if (!fieldNode.desc.equals(returnDesc)) { - if (returnDesc.contains("L")) { - if (!returnDesc.contains("[")) { - method.visitTypeInsn(CHECKCAST, - returnDesc.replaceFirst("L", "") - .replaceAll(";", "")); - } else { - method.visitTypeInsn(CHECKCAST, returnDesc); - } - } - } + MethodNode method = new MethodNode(ACC_PUBLIC + | (staticMethod ? ACC_STATIC : 0), methodName, "()" + + returnDesc, null, null); + if (!staticField) { + method.visitVarInsn(ALOAD, 0); + } + if (staticField) { + ASMUtils.makePublic(fieldNode); + } + method.visitFieldInsn(staticField ? GETSTATIC : GETFIELD, + fieldLocation.name, fieldNode.name, fieldNode.desc); + if (!fieldNode.desc.equals(returnDesc)) { + if (returnDesc.contains("L")) { + if (!returnDesc.contains("[")) { + method.visitTypeInsn(CHECKCAST, + returnDesc.replaceFirst("L", "") + .replaceAll(";", "")); + } else { + method.visitTypeInsn(CHECKCAST, returnDesc); + } + } + } - if (multiplier != 0) { - if (fieldNode.desc.equals("I") || fieldNode.desc.equals("S")) { - method.visitInsn(I2L); - } - method.visitLdcInsn(new Long(multiplier)); - method.visitInsn(LMUL); - if (returnDesc.equals("I") || returnDesc.equals("S")) { - method.visitInsn(L2I); - } - if (returnDesc.equals("S")) { - method.visitInsn(I2S); - } - } else if (fieldNode.desc.equals("J") && returnDesc.equals("I")) { - method.visitInsn(L2I); - } else if (fieldNode.desc.equals("I") && returnDesc.equals("J")) { - method.visitInsn(I2L); - } + if (multiplier != 0) { + if (fieldNode.desc.equals("I") || fieldNode.desc.equals("S")) { + method.visitInsn(I2L); + } + method.visitLdcInsn(new Long(multiplier)); + method.visitInsn(LMUL); + if (returnDesc.equals("I") || returnDesc.equals("S")) { + method.visitInsn(L2I); + } + if (returnDesc.equals("S")) { + method.visitInsn(I2S); + } + } else if (fieldNode.desc.equals("J") && returnDesc.equals("I")) { + method.visitInsn(L2I); + } else if (fieldNode.desc.equals("I") && returnDesc.equals("J")) { + method.visitInsn(I2L); + } - method.visitInsn(ASMUtils.getReturnOpcode(returnDesc)); - method.visitMaxs(1, 1); - into.methods.add(method); - } + method.visitInsn(ASMUtils.getReturnOpcode(returnDesc)); + method.visitMaxs(1, 1); + into.methods.add(method); + } - @Override - public String toString() { - return new StringBuilder("[Injectable: getter, into classname: ") - .append(into.name).append(", field classname: ") - .append(fieldLocation.name).append(", field name: ") - .append(fieldNode.name).append(", field desc: ") - .append(fieldNode.desc).append(", method name: ") - .append(methodName).append(", return desc: ") - .append(returnDesc).append(", static method: ") - .append(staticMethod).append(", static field: ") - .append(staticField).append("]").toString(); - } + @Override + public String toString() { + return new StringBuilder("[Injectable: getter, into classname: ") + .append(into.name).append(", field classname: ") + .append(fieldLocation.name).append(", field name: ") + .append(fieldNode.name).append(", field desc: ") + .append(fieldNode.desc).append(", method name: ") + .append(methodName).append(", return desc: ") + .append(returnDesc).append(", static method: ") + .append(staticMethod).append(", static field: ") + .append(staticField).append("]").toString(); + } } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/asm/adapters/AddInterfaceAdapter.java b/src/main/java/org/parabot/core/asm/adapters/AddInterfaceAdapter.java index a444cdb..d87c071 100644 --- a/src/main/java/org/parabot/core/asm/adapters/AddInterfaceAdapter.java +++ b/src/main/java/org/parabot/core/asm/adapters/AddInterfaceAdapter.java @@ -7,55 +7,53 @@ import org.parabot.core.asm.ASMUtils; import org.parabot.core.asm.interfaces.Injectable; /** - * * This class appends an interface to a class - * + * * @author Everel - * */ public class AddInterfaceAdapter implements Injectable { - private static String accessorPackage; - - private ClassNode node; - private String interfaceClass; + private static String accessorPackage; - public AddInterfaceAdapter(ClassNode node, String interfaceClass) { - this.node = node; - this.interfaceClass = interfaceClass; - } + private ClassNode node; + private String interfaceClass; - public AddInterfaceAdapter(String className, String interfaceClass) { - this.node = ASMUtils.getClass(className); - this.interfaceClass = interfaceClass; - } + public AddInterfaceAdapter(ClassNode node, String interfaceClass) { + this.node = node; + this.interfaceClass = interfaceClass; + } - public static void setAccessorPackage(String packageName) { - accessorPackage = packageName; - } + public AddInterfaceAdapter(String className, String interfaceClass) { + this.node = ASMUtils.getClass(className); + this.interfaceClass = interfaceClass; + } - public static String getAccessorPackage() { - return accessorPackage; - } + public static String getAccessorPackage() { + return accessorPackage; + } - @Override - public void inject() { - Core.verbose("Injecting: " + this.toString()); - addInterface(node, accessorPackage + interfaceClass); - } + public static void setAccessorPackage(String packageName) { + accessorPackage = packageName; + } - protected static void addInterface(ClassNode node, String i) { - ASMUtils.makePublic(node); - for(Object mn : node.methods) { - MethodNode methodNode = (MethodNode) mn; - if(methodNode.name.startsWith(" 0; - if (!isStatic) { - method.visitVarInsn(ALOAD, 0); - } - if (desc.equals("I")) { - method.visitVarInsn(ILOAD, 1); - } else if (desc.equals("J")) { - method.visitVarInsn(Opcodes.LLOAD, 1); - } else { - method.visitVarInsn(ALOAD, 1); - } - method.visitFieldInsn(isStatic ? PUTSTATIC : PUTFIELD, - fieldLocation.name, field.name, field.desc); - method.visitInsn(RETURN); - method.visitMaxs(2, 2); - into.methods.add(method); - } + private static void addSetter(ClassNode fieldLocation, ClassNode into, + FieldNode field, String name, String desc, boolean methodStatic) { + if (desc.contains("L") && !desc.endsWith("Ljava/lang/String;")) { + desc = "Ljava/lang/Object;"; + } + MethodNode method = new MethodNode(ACC_PUBLIC + | (methodStatic ? ACC_STATIC : 0), name, "(" + desc + ")V", + null, null); + boolean isStatic = (field.access & ACC_STATIC) > 0; + if (!isStatic) { + method.visitVarInsn(ALOAD, 0); + } + if (desc.equals("I")) { + method.visitVarInsn(ILOAD, 1); + } else if (desc.equals("J")) { + method.visitVarInsn(Opcodes.LLOAD, 1); + } else { + method.visitVarInsn(ALOAD, 1); + } + method.visitFieldInsn(isStatic ? PUTSTATIC : PUTFIELD, + fieldLocation.name, field.name, field.desc); + method.visitInsn(RETURN); + method.visitMaxs(2, 2); + into.methods.add(method); + } - /** - * Injects the setter - */ - @Override - public void inject() { - Core.verbose("Injecting: " + this.toString()); - addSetter(fieldLocation, into, field, name, desc, methodStatic); - } + /** + * Injects the setter + */ + @Override + public void inject() { + Core.verbose("Injecting: " + this.toString()); + addSetter(fieldLocation, into, field, name, desc, methodStatic); + } - @Override - public String toString() { - return new StringBuilder("[Injectable: setter, into classname: ") - .append(into.name).append(", field classname: ") - .append(fieldLocation.name).append(", field name: ") - .append(field.name).append(", field desc: ").append(field.desc) - .append(", method name: ").append(name) - .append(", method desc: ").append(desc) - .append(", static method: ").append(methodStatic).append("]") - .toString(); - } + @Override + public String toString() { + return new StringBuilder("[Injectable: setter, into classname: ") + .append(into.name).append(", field classname: ") + .append(fieldLocation.name).append(", field name: ") + .append(field.name).append(", field desc: ").append(field.desc) + .append(", method name: ").append(name) + .append(", method desc: ").append(desc) + .append(", static method: ").append(methodStatic).append("]") + .toString(); + } } diff --git a/src/main/java/org/parabot/core/asm/adapters/AddSuperAdapter.java b/src/main/java/org/parabot/core/asm/adapters/AddSuperAdapter.java index 68b8aef..7caef8a 100644 --- a/src/main/java/org/parabot/core/asm/adapters/AddSuperAdapter.java +++ b/src/main/java/org/parabot/core/asm/adapters/AddSuperAdapter.java @@ -1,7 +1,5 @@ package org.parabot.core.asm.adapters; -import java.util.ListIterator; - import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.ClassNode; @@ -11,60 +9,60 @@ import org.parabot.core.Core; import org.parabot.core.asm.ASMUtils; import org.parabot.core.asm.interfaces.Injectable; +import java.util.ListIterator; + /** - * * This class is used for changing the super class of a class - * - * @author Everel * + * @author Everel */ public class AddSuperAdapter implements Injectable { - private ClassNode node; - private String superClass; + private ClassNode node; + private String superClass; - public AddSuperAdapter(final ClassNode node, final String superClass) { - this.node = node; - this.superClass = superClass; - } + public AddSuperAdapter(final ClassNode node, final String superClass) { + this.node = node; + this.superClass = superClass; + } - public AddSuperAdapter(final String className, final String superClass) { - this.node = ASMUtils.getClass(className); - this.superClass = superClass; - } + public AddSuperAdapter(final String className, final String superClass) { + this.node = ASMUtils.getClass(className); + this.superClass = superClass; + } - @Override - public void inject() { - Core.verbose("Injecting: " + this.toString()); - setSuper(node, superClass); - } + private static final void setSuper(final ClassNode node, + final String superClass) { + ListIterator mli = node.methods.listIterator(); + while (mli.hasNext()) { + MethodNode mn = (MethodNode) mli.next(); + if (mn.name.equals("")) { + ListIterator ili = mn.instructions.iterator(); + while (ili.hasNext()) { + AbstractInsnNode ain = (AbstractInsnNode) ili.next(); + if (ain.getOpcode() == Opcodes.INVOKESPECIAL) { + MethodInsnNode min = (MethodInsnNode) ain; + if (!min.owner.equals(node.name)) { + min.owner = superClass; + } + break; + } + } + } + } + node.superName = superClass; + } - private static final void setSuper(final ClassNode node, - final String superClass) { - ListIterator mli = node.methods.listIterator(); - while (mli.hasNext()) { - MethodNode mn = (MethodNode) mli.next(); - if (mn.name.equals("")) { - ListIterator ili = mn.instructions.iterator(); - while (ili.hasNext()) { - AbstractInsnNode ain = (AbstractInsnNode) ili.next(); - if (ain.getOpcode() == Opcodes.INVOKESPECIAL) { - MethodInsnNode min = (MethodInsnNode) ain; - if(!min.owner.equals(node.name)) { - min.owner = superClass; - } - break; - } - } - } - } - node.superName = superClass; - } + @Override + public void inject() { + Core.verbose("Injecting: " + this.toString()); + setSuper(node, superClass); + } - @Override - public String toString() { - return new StringBuilder("[Injectable: super, class name: ") - .append(node.name).append(", super: ").append(superClass) - .append("]").toString(); - } + @Override + public String toString() { + return new StringBuilder("[Injectable: super, class name: ") + .append(node.name).append(", super: ").append(superClass) + .append("]").toString(); + } } diff --git a/src/main/java/org/parabot/core/asm/hooks/HookFile.java b/src/main/java/org/parabot/core/asm/hooks/HookFile.java index 52a22ed..05fa6f6 100644 --- a/src/main/java/org/parabot/core/asm/hooks/HookFile.java +++ b/src/main/java/org/parabot/core/asm/hooks/HookFile.java @@ -1,50 +1,50 @@ package org.parabot.core.asm.hooks; -import java.io.File; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; - import org.parabot.core.parsers.hooks.HookParser; import org.parabot.core.parsers.hooks.JSONHookParser; import org.parabot.core.parsers.hooks.XMLHookParser; import org.parabot.environment.api.utils.WebUtil; +import java.io.File; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; + public class HookFile { - public static final int TYPE_XML = 0; - public static final int TYPE_JSON = 1; - - private URL url; - private int type; - - public HookFile(File file, int type) throws MalformedURLException { - this(file.toURI().toURL(), type); - } - - public HookFile(URL url, int type) { - setType(type); - this.url = url; - } - - private void setType(int type) { - if(type < 0 || type > 1) { - throw new IllegalArgumentException("This type does not exist"); - } - this.type = type; - } - - public InputStream getInputStream() { - return WebUtil.getInputStream(url); - } - - public HookParser getParser() { - switch(type) { - case TYPE_XML: - return new XMLHookParser(this); - case TYPE_JSON: - return new JSONHookParser(this); - } - return null; - } + public static final int TYPE_XML = 0; + public static final int TYPE_JSON = 1; + + private URL url; + private int type; + + public HookFile(File file, int type) throws MalformedURLException { + this(file.toURI().toURL(), type); + } + + public HookFile(URL url, int type) { + setType(type); + this.url = url; + } + + private void setType(int type) { + if (type < 0 || type > 1) { + throw new IllegalArgumentException("This type does not exist"); + } + this.type = type; + } + + public InputStream getInputStream() { + return WebUtil.getInputStream(url); + } + + public HookParser getParser() { + switch (type) { + case TYPE_XML: + return new XMLHookParser(this); + case TYPE_JSON: + return new JSONHookParser(this); + } + return null; + } } diff --git a/src/main/java/org/parabot/core/asm/interfaces/Injectable.java b/src/main/java/org/parabot/core/asm/interfaces/Injectable.java index f899369..3f6e3ad 100644 --- a/src/main/java/org/parabot/core/asm/interfaces/Injectable.java +++ b/src/main/java/org/parabot/core/asm/interfaces/Injectable.java @@ -2,14 +2,14 @@ package org.parabot.core.asm.interfaces; /** * Injectable - * @author Everel * + * @author Everel */ public interface Injectable { - - /** - * Injects bytecode into a class - */ - public void inject(); + + /** + * Injects bytecode into a class + */ + public void inject(); } diff --git a/src/main/java/org/parabot/core/asm/redirect/ClassLoaderRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ClassLoaderRedirect.java index 54bc5d5..96b33e0 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassLoaderRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassLoaderRedirect.java @@ -12,13 +12,13 @@ public class ClassLoaderRedirect extends ClassLoader { static int count = 0; - public static ClassloadClass(ClassLoader c,String name){ - throw RedirectClassAdapter.createSecurityException(); - } + public static Class loadClass(ClassLoader c, String name) { + throw RedirectClassAdapter.createSecurityException(); + } - public static ClassLoader getParent(ClassLoader c){ - throw RedirectClassAdapter.createSecurityException(); - } + public static ClassLoader getParent(ClassLoader c) { + throw RedirectClassAdapter.createSecurityException(); + } public static URL getResource(ClassLoader classLoader, String name) { Core.verbose("#getResource requested for ClassLoaderRedirect (" + name + ")"); 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 4e0be58..351e7e8 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java @@ -136,8 +136,9 @@ public class ClassRedirect { private static boolean validStack() { Exception e = new Exception(); for (StackTraceElement elem : e.getStackTrace()) { - if (elem.getClassName().equals(Script.class.getName())) + if (elem.getClassName().equals(Script.class.getName())) { return true; + } } return false; } diff --git a/src/main/java/org/parabot/core/asm/redirect/FileRedirect.java b/src/main/java/org/parabot/core/asm/redirect/FileRedirect.java index 3ce697a..0737c84 100644 --- a/src/main/java/org/parabot/core/asm/redirect/FileRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/FileRedirect.java @@ -9,7 +9,7 @@ import java.util.ArrayList; /** * @author JKetelaar */ -public class FileRedirect extends File{ +public class FileRedirect extends File { private static ArrayList cachedFiles = new ArrayList<>(); @@ -35,57 +35,57 @@ public class FileRedirect extends File{ sout(uri.toString()); } - public static boolean exists(File file){ + public static boolean exists(File file) { sout(file.toString()); return file.exists(); } - public static boolean isFile(File file){ + public static boolean isFile(File file) { sout(file.toString()); return file.isFile(); } - public static long length(File file){ + public static long length(File file) { sout(file.toString()); return file.length(); } - public static boolean mkdirs(File file){ + public static boolean mkdirs(File file) { sout(file.toString()); return file.mkdirs(); } - public static boolean mkdir(File file){ + public static boolean mkdir(File file) { sout(file.toString()); return file.mkdir(); } - public static boolean isDirectory(File file){ + public static boolean isDirectory(File file) { sout(file.toString()); return file.isDirectory(); } - public static String getAbsolutePath(File file){ + public static String getAbsolutePath(File file) { sout(file.toString()); return file.getAbsolutePath(); } - public static File getAbsoluteFile(File file){ + public static File getAbsoluteFile(File file) { sout(file.toString()); return file.getAbsoluteFile(); } - public static File[] listFiles(File file){ + public static File[] listFiles(File file) { sout(file.toString()); return file.listFiles(); } - public static String getName(File file){ + public static String getName(File file) { sout(file.getName()); return file.getName(); } - private static void sout(String s){ + private static void sout(String s) { if (!cachedFiles.contains(s)) { Core.verbose("Server requested file: " + s); cachedFiles.add(s); diff --git a/src/main/java/org/parabot/core/asm/redirect/PacketCallback.java b/src/main/java/org/parabot/core/asm/redirect/PacketCallback.java index 88795d9..40a11c5 100644 --- a/src/main/java/org/parabot/core/asm/redirect/PacketCallback.java +++ b/src/main/java/org/parabot/core/asm/redirect/PacketCallback.java @@ -1,9 +1,9 @@ package org.parabot.core.asm.redirect; public class PacketCallback { - - public static void onPacket(String methodName,int value){ - System.out.println(methodName + "(" + value + ")"); - } + + public static void onPacket(String methodName, int value) { + System.out.println(methodName + "(" + value + ")"); + } } 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 e8ce836..d00fc1f 100644 --- a/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/SystemRedirect.java @@ -1,7 +1,6 @@ package org.parabot.core.asm.redirect; import org.parabot.core.Core; -import org.parabot.core.Directories; import java.io.InputStream; import java.io.PrintStream; @@ -10,7 +9,7 @@ public class SystemRedirect { public static PrintStream out = System.out; public static PrintStream err = System.err; - public static InputStream in = System.in; + public static InputStream in = System.in; public static long currentTimeMillis() { return System.currentTimeMillis(); 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 0c60ec3..10b3fd0 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java @@ -1,66 +1,64 @@ package org.parabot.core.asm.redirect; -import org.parabot.core.Core; import org.parabot.core.asm.RedirectClassAdapter; public class ThreadRedirect { - private static int count = 0; + private static int count = 0; - public static void start(Thread t){ - t.start(); - } + public static void start(Thread t) { + t.start(); + } - public static void setPriority(Thread t,int i){ - t.setPriority(i); - } + public static void setPriority(Thread t, int i) { + t.setPriority(i); + } - public static void setDaemon(Thread t,boolean b){ - t.setDaemon(b); - } + public static void setDaemon(Thread t, boolean b) { + t.setDaemon(b); + } - public static void interrupt(Thread t){ - t.interrupt(); - } + public static void interrupt(Thread t) { + t.interrupt(); + } - public static Thread currentThread(){ - return null; - } + public static Thread currentThread() { + return null; + } - public static void join(Thread t) throws InterruptedException{ - t.join(); - } + public static void join(Thread t) throws InterruptedException { + t.join(); + } - public static void join(Thread t,long l) throws InterruptedException{ - t.join(l); - } + public static void join(Thread t, long l) throws InterruptedException { + t.join(l); + } - public static void join(Thread t, long l,int i) throws InterruptedException{ - t.join(l, i); - } + public static void join(Thread t, long l, int i) throws InterruptedException { + t.join(l, i); + } - public static ClassLoader getContextClassLoader(Thread t){ - return null; - } + public static ClassLoader getContextClassLoader(Thread t) { + return null; + } - public static ThreadGroup getThreadGroup(Thread t){ - throw RedirectClassAdapter.createSecurityException(); - } + public static ThreadGroup getThreadGroup(Thread t) { + throw RedirectClassAdapter.createSecurityException(); + } - public static void setName(Thread t, String name){ - t.setName(name); - } + public static void setName(Thread t, String name) { + t.setName(name); + } - public static String getName(Thread t){ - return t.getName(); - } + public static String getName(Thread t) { + return t.getName(); + } - public static void sleep(long time) throws InterruptedException{ - Thread.sleep(time); - } + public static void sleep(long time) throws InterruptedException { + Thread.sleep(time); + } - - public static void setUncaughtExceptionHandler(Thread t, Thread.UncaughtExceptionHandler handler){ - t.setUncaughtExceptionHandler(handler); - } + 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 1bafabc..fdfa2cc 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java @@ -10,64 +10,64 @@ import java.net.URL; public class ToolkitRedirect { - private static final Clipboard clipboard = new Clipboard("default"); + private static final Clipboard clipboard = new Clipboard("default"); - static{ - clipboard.setContents(new Transferable() { - @Override - public DataFlavor[] getTransferDataFlavors() { - return new DataFlavor[0]; - } + static { + clipboard.setContents(new Transferable() { + @Override + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[0]; + } - @Override - public boolean isDataFlavorSupported(DataFlavor flavor) { - return false; - } + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + return false; + } - @Override - public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { - throw new UnsupportedFlavorException(flavor); - } - }, null); - } + @Override + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { + throw new UnsupportedFlavorException(flavor); + } + }, null); + } - public static Toolkit getDefaultToolkit(){ - return Toolkit.getDefaultToolkit(); - } - - public static Dimension getScreenSize(Toolkit t){ - return new Dimension(0,0); - } + public static Toolkit getDefaultToolkit() { + return Toolkit.getDefaultToolkit(); + } - public static Image createImage(Toolkit t,byte[] b){ - return null; - } + public static Dimension getScreenSize(Toolkit t) { + return new Dimension(0, 0); + } - public static Image createImage(Toolkit t, String s){ - return null; - } - - public static Image getImage(Toolkit t,URL u){ - return t.getImage(u); - } - - public static Image getImage(Toolkit t,String str){ - return t.getImage(str); - } + public static Image createImage(Toolkit t, byte[] b) { + return null; + } - public static Cursor createCustomCursor(Toolkit t, Image i, Point p, String s){ - return Cursor.getDefaultCursor(); - } + public static Image createImage(Toolkit t, String s) { + return null; + } - public static Clipboard getSystemClipboard(Toolkit toolkit){ - return clipboard; - } + public static Image getImage(Toolkit t, URL u) { + return t.getImage(u); + } - public static void sync(Toolkit toolkit){ - toolkit.sync(); - } + public static Image getImage(Toolkit t, String str) { + return t.getImage(str); + } - public static void sync(){ - Toolkit.getDefaultToolkit().sync(); - } + public static Cursor createCustomCursor(Toolkit t, Image i, Point p, String s) { + return Cursor.getDefaultCursor(); + } + + public static Clipboard getSystemClipboard(Toolkit toolkit) { + return clipboard; + } + + public static void sync(Toolkit toolkit) { + toolkit.sync(); + } + + public static void sync() { + Toolkit.getDefaultToolkit().sync(); + } } diff --git a/src/main/java/org/parabot/core/asm/redirect/URLRedirect.java b/src/main/java/org/parabot/core/asm/redirect/URLRedirect.java index c4de84f..217653b 100644 --- a/src/main/java/org/parabot/core/asm/redirect/URLRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/URLRedirect.java @@ -3,6 +3,6 @@ package org.parabot.core.asm.redirect; /** * @author JKetelaar */ -public class URLRedirect{ - +public class URLRedirect { + } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/asm/wrappers/Callback.java b/src/main/java/org/parabot/core/asm/wrappers/Callback.java index 17602ee..039b41c 100644 --- a/src/main/java/org/parabot/core/asm/wrappers/Callback.java +++ b/src/main/java/org/parabot/core/asm/wrappers/Callback.java @@ -6,47 +6,45 @@ import org.parabot.core.asm.adapters.AddCallbackAdapter; import org.parabot.core.asm.interfaces.Injectable; /** - * * This class is used for injecting a callback into a methodnode - * - * @author Everel * + * @author Everel */ public class Callback implements Injectable { - private MethodNode method; - private String invokeClass; - private String invokeMethod; - private String desc; - private int[] args; - private boolean conditional; - - public Callback(final String className, final String methodName, - final String methodDesc, final String callbackClass, - final String callbackMethod, final String callbackDesc, String args, final boolean conditional) { - this.method = ASMUtils.getMethod(className, methodName, methodDesc); - this.invokeClass = callbackClass; - this.invokeMethod = callbackMethod; - this.desc = callbackDesc; - this.conditional = conditional; - if (args.contains(",")) { - final String[] strArgs = args.split(","); - this.args = new int[strArgs.length]; - for (int i = 0; i < this.args.length; i++) { - this.args[i] = Integer.parseInt(strArgs[i]); - } - } else { - this.args = new int[] { Integer.parseInt(args) }; - } - } + private MethodNode method; + private String invokeClass; + private String invokeMethod; + private String desc; + private int[] args; + private boolean conditional; - @Override - public void inject() { - getAdapter().inject(); - } + public Callback(final String className, final String methodName, + final String methodDesc, final String callbackClass, + final String callbackMethod, final String callbackDesc, String args, final boolean conditional) { + this.method = ASMUtils.getMethod(className, methodName, methodDesc); + this.invokeClass = callbackClass; + this.invokeMethod = callbackMethod; + this.desc = callbackDesc; + this.conditional = conditional; + if (args.contains(",")) { + final String[] strArgs = args.split(","); + this.args = new int[strArgs.length]; + for (int i = 0; i < this.args.length; i++) { + this.args[i] = Integer.parseInt(strArgs[i]); + } + } else { + this.args = new int[]{ Integer.parseInt(args) }; + } + } - public AddCallbackAdapter getAdapter() { - return new AddCallbackAdapter(this.method, this.invokeClass, - this.invokeMethod, this.desc, this.args, this.conditional); - } + @Override + public void inject() { + getAdapter().inject(); + } + + public AddCallbackAdapter getAdapter() { + return new AddCallbackAdapter(this.method, this.invokeClass, + this.invokeMethod, this.desc, this.args, this.conditional); + } } diff --git a/src/main/java/org/parabot/core/asm/wrappers/Getter.java b/src/main/java/org/parabot/core/asm/wrappers/Getter.java index a83ec3b..f11d12f 100644 --- a/src/main/java/org/parabot/core/asm/wrappers/Getter.java +++ b/src/main/java/org/parabot/core/asm/wrappers/Getter.java @@ -8,75 +8,73 @@ import org.parabot.core.asm.adapters.AddGetterAdapter; import org.parabot.core.asm.interfaces.Injectable; /** - * * This class injects a getter which gets a specific field - * - * @author Everel * + * @author Everel */ public class Getter implements Injectable { - private ClassNode into; - private ClassNode fieldLocation; - private FieldNode fieldNode; - private String methodName; - private String returnDesc; - private boolean staticMethod; - private long multiplier; - - /** - * - * @param into - classnode to inject getter method in - * @param fieldLocation - classnode where field is located - * @param fieldNode - field name to get - * @param methodName - method name of getter - * @param returnDesc - return type of method, can be null for default return - * @param staticMethod - pass true if you want the method to be static - * @param multiplier - if there is one, otherwise 0L - * @param fieldDesc - desc of the field, null if there are no duplicate field names - */ - public Getter(final String into, final String fieldLocation, final String fieldNode, - final String methodName, final String returnDesc, final boolean staticMethod, final long multiplier, - final String fieldDesc) { - this.into = ASMUtils.getClass(into); - this.fieldLocation = ASMUtils.getClass(fieldLocation); - this.fieldNode = ASMUtils.getField(ASMUtils.getClass(fieldLocation), fieldNode, fieldDesc); - this.methodName = methodName; - this.returnDesc = returnDesc == null ? this.fieldNode.desc : returnDesc; - this.staticMethod = staticMethod; - this.multiplier = multiplier; - Core.verbose(methodName + "[" + fieldLocation + "." + fieldNode + "]"); - } - - /** - * - * @param fieldLocation - * @param fieldNode - * @param methodName - */ - public Getter(final String fieldLocation, final String fieldNode, final String methodName) { - this.into = ASMUtils.getClass(fieldLocation); - this.fieldLocation = this.into; - this.fieldNode = ASMUtils.getField(this.into, fieldNode); - this.methodName = methodName; - this.returnDesc = this.fieldNode.desc; - this.staticMethod = false; - } - - /** - * Short route for getAdaptar().inject(); - * @see AddGetterAdapter#inject - */ - @Override - public void inject() { + private ClassNode into; + private ClassNode fieldLocation; + private FieldNode fieldNode; + private String methodName; + private String returnDesc; + private boolean staticMethod; + private long multiplier; + + /** + * @param into - classnode to inject getter method in + * @param fieldLocation - classnode where field is located + * @param fieldNode - field name to get + * @param methodName - method name of getter + * @param returnDesc - return type of method, can be null for default return + * @param staticMethod - pass true if you want the method to be static + * @param multiplier - if there is one, otherwise 0L + * @param fieldDesc - desc of the field, null if there are no duplicate field names + */ + public Getter(final String into, final String fieldLocation, final String fieldNode, + final String methodName, final String returnDesc, final boolean staticMethod, final long multiplier, + final String fieldDesc) { + this.into = ASMUtils.getClass(into); + this.fieldLocation = ASMUtils.getClass(fieldLocation); + this.fieldNode = ASMUtils.getField(ASMUtils.getClass(fieldLocation), fieldNode, fieldDesc); + this.methodName = methodName; + this.returnDesc = returnDesc == null ? this.fieldNode.desc : returnDesc; + this.staticMethod = staticMethod; + this.multiplier = multiplier; + Core.verbose(methodName + "[" + fieldLocation + "." + fieldNode + "]"); + } + + /** + * @param fieldLocation + * @param fieldNode + * @param methodName + */ + public Getter(final String fieldLocation, final String fieldNode, final String methodName) { + this.into = ASMUtils.getClass(fieldLocation); + this.fieldLocation = this.into; + this.fieldNode = ASMUtils.getField(this.into, fieldNode); + this.methodName = methodName; + this.returnDesc = this.fieldNode.desc; + this.staticMethod = false; + } + + /** + * Short route for getAdaptar().inject(); + * + * @see AddGetterAdapter#inject + */ + @Override + public void inject() { getAdapter().inject(); - } - - /** - * Gets the AddGetterAdapter - * @return AddGetterAdapter - */ - public AddGetterAdapter getAdapter() { - return new AddGetterAdapter(into, fieldLocation, fieldNode, methodName, returnDesc, staticMethod, multiplier); - } + } + + /** + * Gets the AddGetterAdapter + * + * @return AddGetterAdapter + */ + public AddGetterAdapter getAdapter() { + return new AddGetterAdapter(into, fieldLocation, fieldNode, methodName, returnDesc, staticMethod, multiplier); + } } diff --git a/src/main/java/org/parabot/core/asm/wrappers/Interface.java b/src/main/java/org/parabot/core/asm/wrappers/Interface.java index 073f25e..78766a5 100644 --- a/src/main/java/org/parabot/core/asm/wrappers/Interface.java +++ b/src/main/java/org/parabot/core/asm/wrappers/Interface.java @@ -4,41 +4,40 @@ import org.parabot.core.asm.adapters.AddInterfaceAdapter; import org.parabot.core.asm.interfaces.Injectable; /** - * * This class appends an interface to a class - * - * @author Everel * + * @author Everel */ public class Interface implements Injectable { - private String className; - private String interfaceClass; - - public Interface(String className, String interfaceClass) { - this.className = className; - this.interfaceClass = interfaceClass; - } - - /** - * Adds the interface to the class - * Short route for getAdapter#inject(); - */ - @Override - public void inject() { - getAdapter().inject(); - } - - /** - * Gets the add interface adapter - * @return AddInterface adapter - */ - public AddInterfaceAdapter getAdapter() { - return new AddInterfaceAdapter(className, interfaceClass); - } - - @Override - public String toString() { - return String.format("%s implements %s%s", className, AddInterfaceAdapter.getAccessorPackage().replaceAll("/", "."), interfaceClass); - } + private String className; + private String interfaceClass; + + public Interface(String className, String interfaceClass) { + this.className = className; + this.interfaceClass = interfaceClass; + } + + /** + * Adds the interface to the class + * Short route for getAdapter#inject(); + */ + @Override + public void inject() { + getAdapter().inject(); + } + + /** + * Gets the add interface adapter + * + * @return AddInterface adapter + */ + public AddInterfaceAdapter getAdapter() { + return new AddInterfaceAdapter(className, interfaceClass); + } + + @Override + public String toString() { + return String.format("%s implements %s%s", className, AddInterfaceAdapter.getAccessorPackage().replaceAll("/", "."), interfaceClass); + } } diff --git a/src/main/java/org/parabot/core/asm/wrappers/Invoker.java b/src/main/java/org/parabot/core/asm/wrappers/Invoker.java index 2f99736..276ae52 100644 --- a/src/main/java/org/parabot/core/asm/wrappers/Invoker.java +++ b/src/main/java/org/parabot/core/asm/wrappers/Invoker.java @@ -7,77 +7,75 @@ import org.parabot.core.asm.adapters.AddInvokerAdapter; import org.parabot.core.asm.interfaces.Injectable; /** - * * This class is used for injecting an invoker into a methodnode - * - * @author Everel * + * @author Everel */ public class Invoker implements Injectable { - private ClassNode into; - private ClassNode methodLocation; - private MethodNode mn; - private String argsDesc; - private String returnDesc; - private String methodName; - private boolean isInterface; - private String instanceCast; - private String argsCheckCastDesc; - - private String mName; - private String mDesc; + private ClassNode into; + private ClassNode methodLocation; + private MethodNode mn; + private String argsDesc; + private String returnDesc; + private String methodName; + private boolean isInterface; + private String instanceCast; + private String argsCheckCastDesc; - public Invoker(String methodLoc, String invMethName, String argsDesc, - String returnDesc, String methodName) { - this(methodLoc, methodLoc, invMethName, argsDesc, returnDesc, - methodName, false, null, null); - } + private String mName; + private String mDesc; - public Invoker(String into, String methodLoc, String invMethName, - String argsDesc, String returnDesc, String methodName, boolean isInterface, String instanceCast, String argsCheckCastDesc) { - this.into = ASMUtils.getClass(into); - this.methodLocation = ASMUtils.getClass(methodLoc); - this.mn = getMethod(this.methodLocation, invMethName, argsDesc); - this.returnDesc = returnDesc; - this.methodName = methodName; - this.argsDesc = argsDesc; - this.isInterface = isInterface; - this.instanceCast = instanceCast; - - this.mName = invMethName; - this.mDesc = argsDesc + returnDesc; - this.argsCheckCastDesc = argsCheckCastDesc; - } + public Invoker(String methodLoc, String invMethName, String argsDesc, + String returnDesc, String methodName) { + this(methodLoc, methodLoc, invMethName, argsDesc, returnDesc, + methodName, false, null, null); + } - private static MethodNode getMethod(ClassNode into, String name, String desc) { - for (Object m : into.methods) { - MethodNode methodNode = (MethodNode) m; - String s = methodNode.desc.substring(0, methodNode.desc.indexOf(')') + 1); - if (methodNode.name.equals(name) && s.equals(desc)) { - return methodNode; - } - } - return null; - } + public Invoker(String into, String methodLoc, String invMethName, + String argsDesc, String returnDesc, String methodName, boolean isInterface, String instanceCast, String argsCheckCastDesc) { + this.into = ASMUtils.getClass(into); + this.methodLocation = ASMUtils.getClass(methodLoc); + this.mn = getMethod(this.methodLocation, invMethName, argsDesc); + this.returnDesc = returnDesc; + this.methodName = methodName; + this.argsDesc = argsDesc; + this.isInterface = isInterface; + this.instanceCast = instanceCast; - /** - * Short route for getAdaptar().inject(); - * - * @see AddInvokerAdapter#inject - */ - @Override - public void inject() { - getAdapter().inject(); - } + this.mName = invMethName; + this.mDesc = argsDesc + returnDesc; + this.argsCheckCastDesc = argsCheckCastDesc; + } - /** - * Gets the AddInvokerAdapter - * - * @return AddInvokerAdapter - */ - public AddInvokerAdapter getAdapter() { - return new AddInvokerAdapter(this.methodLocation, this.into, this.mn, this.mName, this.mDesc, - this.argsDesc, this.returnDesc, this.methodName, this.isInterface, this.instanceCast, this.argsCheckCastDesc); - } + private static MethodNode getMethod(ClassNode into, String name, String desc) { + for (Object m : into.methods) { + MethodNode methodNode = (MethodNode) m; + String s = methodNode.desc.substring(0, methodNode.desc.indexOf(')') + 1); + if (methodNode.name.equals(name) && s.equals(desc)) { + return methodNode; + } + } + return null; + } + + /** + * Short route for getAdaptar().inject(); + * + * @see AddInvokerAdapter#inject + */ + @Override + public void inject() { + getAdapter().inject(); + } + + /** + * Gets the AddInvokerAdapter + * + * @return AddInvokerAdapter + */ + public AddInvokerAdapter getAdapter() { + return new AddInvokerAdapter(this.methodLocation, this.into, this.mn, this.mName, this.mDesc, + this.argsDesc, this.returnDesc, this.methodName, this.isInterface, this.instanceCast, this.argsCheckCastDesc); + } } diff --git a/src/main/java/org/parabot/core/asm/wrappers/Setter.java b/src/main/java/org/parabot/core/asm/wrappers/Setter.java index fb8901f..99b4074 100644 --- a/src/main/java/org/parabot/core/asm/wrappers/Setter.java +++ b/src/main/java/org/parabot/core/asm/wrappers/Setter.java @@ -7,49 +7,49 @@ import org.parabot.core.asm.adapters.AddSetterAdapter; import org.parabot.core.asm.interfaces.Injectable; /** - * * This class is used for injecting a setter for a specific field - * - * @author Everel * + * @author Everel */ public class Setter implements Injectable { - private ClassNode fieldLocation; - private ClassNode into; - private FieldNode field; - private String name; - private String desc; - private boolean methodStatic; - - public Setter(final String fieldLocation, String into, final String fieldName, final String methodName, final String desc, final boolean methodStatic, final String fieldDesc) { - this.fieldLocation = ASMUtils.getClass(fieldLocation); - into = (into == null) ? fieldLocation : into; - this.into = ASMUtils.getClass(into); - this.field = ASMUtils.getField(this.fieldLocation, fieldName, fieldDesc); - this.name = methodName; - this.desc = (desc == null) ? this.field.desc : desc; - this.methodStatic = methodStatic; - } - - public Setter(final String fieldLocation, final String fieldName, final String methodName) { - this(fieldLocation, null, fieldName, methodName, null, false, null); - } - - /** - * Short route for getAdaptar().inject(); - * @see AddSetterAdapter#inject - */ - @Override - public void inject() { - getAdapter().inject(); - } - - /** - * Gets the AddGetterAdapter - * @return AddGetterAdapter - */ - public AddSetterAdapter getAdapter() { - return new AddSetterAdapter(fieldLocation, into, field, name, desc, methodStatic); - } + private ClassNode fieldLocation; + private ClassNode into; + private FieldNode field; + private String name; + private String desc; + private boolean methodStatic; + + public Setter(final String fieldLocation, String into, final String fieldName, final String methodName, final String desc, final boolean methodStatic, final String fieldDesc) { + this.fieldLocation = ASMUtils.getClass(fieldLocation); + into = (into == null) ? fieldLocation : into; + this.into = ASMUtils.getClass(into); + this.field = ASMUtils.getField(this.fieldLocation, fieldName, fieldDesc); + this.name = methodName; + this.desc = (desc == null) ? this.field.desc : desc; + this.methodStatic = methodStatic; + } + + public Setter(final String fieldLocation, final String fieldName, final String methodName) { + this(fieldLocation, null, fieldName, methodName, null, false, null); + } + + /** + * Short route for getAdaptar().inject(); + * + * @see AddSetterAdapter#inject + */ + @Override + public void inject() { + getAdapter().inject(); + } + + /** + * Gets the AddGetterAdapter + * + * @return AddGetterAdapter + */ + public AddSetterAdapter getAdapter() { + return new AddSetterAdapter(fieldLocation, into, field, name, desc, methodStatic); + } } diff --git a/src/main/java/org/parabot/core/asm/wrappers/Super.java b/src/main/java/org/parabot/core/asm/wrappers/Super.java index 73a17e7..4b7cc56 100644 --- a/src/main/java/org/parabot/core/asm/wrappers/Super.java +++ b/src/main/java/org/parabot/core/asm/wrappers/Super.java @@ -2,33 +2,32 @@ package org.parabot.core.asm.wrappers; import org.parabot.core.asm.adapters.AddSuperAdapter; import org.parabot.core.asm.interfaces.Injectable; + /** - * * This class is used for changing the super class of a class - * - * @author Everel * + * @author Everel */ public class Super implements Injectable { - private String className; - private String superClassName; - - public Super(String className, String superClassName) { - this.className = className; - this.superClassName = superClassName; - } + private String className; + private String superClassName; - /** - * Adds a superclass to a class - * Short route for getAdapter().inject - */ - @Override - public void inject() { - getAdapter().inject(); - } - - public AddSuperAdapter getAdapter() { - return new AddSuperAdapter(className, superClassName); - } + public Super(String className, String superClassName) { + this.className = className; + this.superClassName = superClassName; + } + + /** + * Adds a superclass to a class + * Short route for getAdapter().inject + */ + @Override + public void inject() { + getAdapter().inject(); + } + + public AddSuperAdapter getAdapter() { + return new AddSuperAdapter(className, superClassName); + } } diff --git a/src/main/java/org/parabot/core/build/BuildPath.java b/src/main/java/org/parabot/core/build/BuildPath.java index 5ca4971..8908d14 100644 --- a/src/main/java/org/parabot/core/build/BuildPath.java +++ b/src/main/java/org/parabot/core/build/BuildPath.java @@ -1,11 +1,9 @@ package org.parabot.core.build; /** - * * Class used for adding urls to the buildpath - * - * @author Everel * + * @author Everel */ public class BuildPath extends org.parabot.api.io.build.BuildPath { diff --git a/src/main/java/org/parabot/core/classpath/ClassPath.java b/src/main/java/org/parabot/core/classpath/ClassPath.java index 5a9459f..8f81263 100644 --- a/src/main/java/org/parabot/core/classpath/ClassPath.java +++ b/src/main/java/org/parabot/core/classpath/ClassPath.java @@ -1,12 +1,17 @@ package org.parabot.core.classpath; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.commons.RemappingClassAdapter; +import org.objectweb.asm.tree.ClassNode; +import org.parabot.core.Directories; +import org.parabot.core.asm.ClassRemapper; +import org.parabot.core.asm.RedirectClassAdapter; +import org.parabot.core.build.BuildPath; +import org.parabot.core.io.SizeInputStream; +import org.parabot.core.ui.components.VerboseLoader; + +import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; @@ -20,292 +25,281 @@ import java.util.jar.JarOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.commons.RemappingClassAdapter; -import org.objectweb.asm.tree.ClassNode; -import org.parabot.core.Directories; -import org.parabot.core.asm.ClassRemapper; -import org.parabot.core.asm.RedirectClassAdapter; -import org.parabot.core.build.BuildPath; -import org.parabot.core.io.SizeInputStream; -import org.parabot.core.ui.components.VerboseLoader; - /** * Manages, parses and dumps class files & jars - * + * * @author Everel * @author Matt */ public class ClassPath { - public final ArrayList classNames; - public final HashMap classes; - public final Map resources; - public URL lastParsed; - private ClassRemapper classRemapper; - private boolean isJar; - private boolean parseJar; - private ArrayList jarFiles; + public final ArrayList classNames; + public final HashMap classes; + public final Map resources; + public URL lastParsed; + private ClassRemapper classRemapper; + private boolean isJar; + private boolean parseJar; + private ArrayList jarFiles; + public ClassPath() { + this(false); + } - public ClassPath() { - this(false); - } + public ClassPath(final boolean isJar) { + this.classNames = new ArrayList(); + this.classes = new HashMap(); + this.resources = new HashMap(); + this.classRemapper = new ClassRemapper(); + this.parseJar = true; + this.jarFiles = new ArrayList(); + this.isJar = isJar; + } - public ClassPath(final boolean isJar) { - this.classNames = new ArrayList(); - this.classes = new HashMap(); - this.resources = new HashMap(); - this.classRemapper = new ClassRemapper(); - this.parseJar = true; - this.jarFiles = new ArrayList(); - this.isJar = isJar; - } + public void addJar(final File file) { + try { + addJar(file.toURI().toURL()); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } - public void addJar(final File file) { - try { - addJar(file.toURI().toURL()); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - } + public void addJar(final URL url) { + this.lastParsed = url; + try { + addJar(url.openConnection()); + } catch (IOException e) { + e.printStackTrace(); + } + } - public void addJar(final URL url) { - this.lastParsed = url; - try { - addJar(url.openConnection()); - } catch (IOException e) { - e.printStackTrace(); - } - } + /** + * Adds a jar to this classpath + * + * @param connection + */ + public void addJar(final URLConnection connection) { + try { + final int size = connection.getContentLength(); + final SizeInputStream sizeInputStream = new SizeInputStream( + connection.getInputStream(), size, VerboseLoader.get()); + final ZipInputStream zin = new ZipInputStream(sizeInputStream); + ZipEntry e; + while ((e = zin.getNextEntry()) != null) { + if (e.isDirectory()) { + continue; + } + if (e.getName().endsWith(".class")) { + loadClass(zin); + } else { + loadResource(e.getName(), zin); + } + VerboseLoader.setState("Downloading: " + e.getName()); + } + zin.close(); + } catch (IOException e) { + e.printStackTrace(); + } + VerboseLoader.get().onProgressUpdate(100); + } - /** - * Adds a jar to this classpath - * - * @param connection - */ - public void addJar(final URLConnection connection) { - try { - final int size = connection.getContentLength(); - final SizeInputStream sizeInputStream = new SizeInputStream( - connection.getInputStream(), size, VerboseLoader.get()); - final ZipInputStream zin = new ZipInputStream(sizeInputStream); - ZipEntry e; - while ((e = zin.getNextEntry()) != null) { - if (e.isDirectory()) - continue; - if (e.getName().endsWith(".class")) { - loadClass(zin); - } else { - loadResource(e.getName(), zin); - } - VerboseLoader.setState("Downloading: " + e.getName()); - } - zin.close(); - } catch (IOException e) { - e.printStackTrace(); - } - VerboseLoader.get().onProgressUpdate(100); - } + /** + * Adds a jar to this classpath + * + * @param url - in string format + */ + public void addJar(final String url) { + try { + addJar(new URL(url)); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + /** + * Whether jar files should be parsed or ignored + * + * @param enabled + */ + public void parseJarFiles(final boolean enabled) { + this.parseJar = enabled; + } + /** + * Finds and loads all classes/jar files in folder + * + * @param directory + */ + public void addClasses(final File directory) { + if (directory == null || !directory.isDirectory()) { + throw new IllegalArgumentException("Not a valid directory."); + } + addClasses(directory, null); + } - /** - * Adds a jar to this classpath - * - * @param url - * - in string format - */ - public void addJar(final String url) { - try { - addJar(new URL(url)); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - } + /** + * Finds and loads all classes/jar files in folder + * + * @param f to find class / jar files + * @param root + */ + public void addClasses(final File f, File root) { + if (f == null) { + return; + } + if (!f.exists()) { + f.mkdirs(); + } + if (root == null) { + root = f; + } + for (File f1 : f.listFiles()) { + if (f1 == null) { + continue; + } else if (f1.isDirectory()) { + addClasses(f1, root); + } else { + try (FileInputStream fin = new FileInputStream(f1)) { + if (f1.getName().endsWith(".class")) { + loadClass(fin); + } else if (f.equals(root) && f1.getName().endsWith(".jar")) { + jarFiles.add(f1.toURI().toURL()); + if (this.parseJar) { + // if enabled, there may be problem with duplicate + // class names....... + addJar(f1.toURI().toURL()); + } + } else { + String path = f1.toURI().relativize(root.toURI()) + .getPath(); + loadResource(path, fin); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } - /** - * Whether jar files should be parsed or ignored - * - * @param enabled - */ - public void parseJarFiles(final boolean enabled) { - this.parseJar = enabled; - } - - /** - * Finds and loads all classes/jar files in folder - * @param directory - */ - public void addClasses(final File directory) { - if(directory == null || !directory.isDirectory()) { - throw new IllegalArgumentException("Not a valid directory."); - } - addClasses(directory, null); - } - - /** - * Finds and loads all classes/jar files in folder - * - * @param f - * to find class / jar files - * @param root - */ - public void addClasses(final File f, File root) { - if (f == null) - return; - if (!f.exists()) { - f.mkdirs(); - } - if (root == null) { - root = f; - } - for (File f1 : f.listFiles()) { - if (f1 == null) { - continue; - } else if (f1.isDirectory()) { - addClasses(f1, root); - } else { - try (FileInputStream fin = new FileInputStream(f1)) { - if (f1.getName().endsWith(".class")) - loadClass(fin); - else if (f.equals(root) && f1.getName().endsWith(".jar")) { - jarFiles.add(f1.toURI().toURL()); - if (this.parseJar) { - // if enabled, there may be problem with duplicate - // class names....... - addJar(f1.toURI().toURL()); - } - } else { - String path = f1.toURI().relativize(root.toURI()) - .getPath(); - loadResource(path, fin); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - - /** - * Loads class from input stream - * - * @param in - * @throws IOException + /** + * Loads class from input stream + * + * @param in + * + * @throws IOException */ protected void loadClass(InputStream in) throws IOException { - ClassReader cr = new ClassReader(in); - ClassNode cn = new ClassNode(); - RemappingClassAdapter rca = new RemappingClassAdapter(cn,classRemapper); - RedirectClassAdapter redir = new RedirectClassAdapter(rca); + ClassReader cr = new ClassReader(in); + ClassNode cn = new ClassNode(); + RemappingClassAdapter rca = new RemappingClassAdapter(cn, classRemapper); + RedirectClassAdapter redir = new RedirectClassAdapter(rca); cr.accept(redir, ClassReader.EXPAND_FRAMES); classNames.add(cn.name.replace('/', '.')); classes.put(cn.name, cn); } + /** + * Determines if this classpath represents a jar file + * + * @return if this classpath represents a jar file + */ + public boolean isJar() { + return isJar; + } + /** + * Gets all jar files in this classpath + * + * @return array of classpath + */ + public ClassPath[] getJarFiles() { + final ClassPath[] jars = new ClassPath[jarFiles.size()]; + for (int i = 0; i < jarFiles.size(); i++) { + final ClassPath classPath = new ClassPath(true); + classPath.addJar(jarFiles.get(i)); + jars[i] = classPath; + } + return jars; + } - /** - * Determines if this classpath represents a jar file - * - * @return if this classpath represents a jar file - */ - public boolean isJar() { - return isJar; - } + /** + * Dumps a resource from a input stream + * + * @param classPath + * @param name + * @param inputstream + * + * @throws IOException + */ + private void loadResource(final String name, final InputStream in) + throws IOException { + final File f = File.createTempFile("bot", ".tmp", + Directories.getTempDirectory()); + f.deleteOnExit(); + try (OutputStream out = new FileOutputStream(f)) { + byte[] buffer = new byte[1024]; + int len; + while ((len = in.read(buffer)) != -1) { + out.write(buffer, 0, len); + } + } catch (IOException e) { + } + this.resources.put(name, f); + } - /** - * Gets all jar files in this classpath - * - * @return array of classpath - */ - public ClassPath[] getJarFiles() { - final ClassPath[] jars = new ClassPath[jarFiles.size()]; - for (int i = 0; i < jarFiles.size(); i++) { - final ClassPath classPath = new ClassPath(true); - classPath.addJar(jarFiles.get(i)); - jars[i] = classPath; - } - return jars; - } + /** + * Adds this jar to buildpath + */ + public void addToBuildPath() { + BuildPath.add(lastParsed); + } - /** - * Dumps a resource from a input stream - * - * @param classPath - * @param name - * @param inputstream - * @throws IOException - */ - private void loadResource(final String name, final InputStream in) - throws IOException { - final File f = File.createTempFile("bot", ".tmp", - Directories.getTempDirectory()); - f.deleteOnExit(); - try (OutputStream out = new FileOutputStream(f)) { - byte[] buffer = new byte[1024]; - int len; - while ((len = in.read(buffer)) != -1) - out.write(buffer, 0, len); - } catch (IOException e) { - } - this.resources.put(name, f); - } + /** + * Dump this classPath classes to a jar file + * + * @param fileName + */ + public void dump(final String fileName) { + dump(new File(fileName)); + } - /** - * Adds this jar to buildpath - */ - public void addToBuildPath() { - BuildPath.add(lastParsed); - } + /** + * Dump this classPath classes to a jar file + * + * @param file + */ + public void dump(final File file) { + try { + dump(new FileOutputStream(file)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } - /** - * Dump this classPath classes to a jar file - * - * @param fileName - */ - public void dump(final String fileName) { - dump(new File(fileName)); - } - - /** - * Dump this classPath classes to a jar file - * - * @param file - */ - public void dump(final File file) { - try { - dump(new FileOutputStream(file)); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - - /** - * Dumps this classPath classes to a jar file - * @param stream - */ - public void dump(final FileOutputStream stream) { - try { - JarOutputStream out = new JarOutputStream(stream); - for (ClassNode cn : this.classes.values()) { - JarEntry je = new JarEntry(cn.name + ".class"); - out.putNextEntry(je); - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); - cn.accept(cw); - out.write(cw.toByteArray()); - } - for(Entry entry : this.resources.entrySet()) { - JarEntry je = new JarEntry(entry.getKey()); - out.putNextEntry(je); - out.write(Files.readAllBytes(entry.getValue().toPath())); - } - out.close(); - stream.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } + /** + * Dumps this classPath classes to a jar file + * + * @param stream + */ + public void dump(final FileOutputStream stream) { + try { + JarOutputStream out = new JarOutputStream(stream); + for (ClassNode cn : this.classes.values()) { + JarEntry je = new JarEntry(cn.name + ".class"); + out.putNextEntry(je); + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); + cn.accept(cw); + out.write(cw.toByteArray()); + } + for (Entry entry : this.resources.entrySet()) { + JarEntry je = new JarEntry(entry.getKey()); + out.putNextEntry(je); + out.write(Files.readAllBytes(entry.getValue().toPath())); + } + out.close(); + stream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/org/parabot/core/desc/ScriptDescription.java b/src/main/java/org/parabot/core/desc/ScriptDescription.java index 1c05bed..4719edb 100644 --- a/src/main/java/org/parabot/core/desc/ScriptDescription.java +++ b/src/main/java/org/parabot/core/desc/ScriptDescription.java @@ -2,135 +2,134 @@ package org.parabot.core.desc; /** * Holds information about a script - * + * * @author Everel - * */ public class ScriptDescription implements Comparable { - public String scriptName; - public String author; - public String category; - public double version; - public String description; - public String[] servers; - public String isVip; - public String isPremium; - public int bdnId; + public String scriptName; + public String author; + public String category; + public double version; + public String description; + public String[] servers; + public String isVip; + public String isPremium; + public int bdnId; /** - * The ScriptManifest - * - * @param scriptName - * @param author - * @param category - * @param version - * @param description - * @param servers - */ - public ScriptDescription(final String scriptName, final String author, - final String category, final double version, - final String description, final String[] servers) { - this(scriptName, author, category, version, description, servers, null, - null, -1); - } - - /** - * Used for BDN script (see BDNScripts parser) - * - * @param scriptName - * @param author - * @param category - * @param version - * @param description - * @param servers - * @param bdnId - */ - public ScriptDescription(final String scriptName, - final String author, final String category, final double version, - final String description, final String[] servers, final int bdnId) { - this(scriptName, author, category, version, description, servers, null, - null, bdnId); - } - - /** - * Used by bot (java scripts and python scripts) and BDN Manager (bdn - * manager is a private program) - * - * @param scriptName - * @param author - * @param category - * @param version - * @param description - * @param servers - * @param vip - * @param premium - */ - public ScriptDescription(final String scriptName, final String author, - final String category, final double version, - final String description, final String[] servers, final String vip, - final String premium) { - this(scriptName, author, category, version, description, servers, vip, - premium, -1); - } - - /** - * Main constructor - * - * @param scriptName - * @param author - * @param category - * @param version - * @param description - * @param servers - * @param vip - * @param premium - * @param bdnId - */ - public ScriptDescription(final String scriptName, final String author, - final String category, final double version, - final String description, final String[] servers, final String vip, - final String premium, final int bdnId) { - this.scriptName = scriptName; - this.author = author; - this.category = category; - this.version = version; - this.description = description; - this.servers = servers; - this.isVip = vip; - this.isPremium = premium; - this.bdnId = bdnId; + * The ScriptManifest + * + * @param scriptName + * @param author + * @param category + * @param version + * @param description + * @param servers + */ + public ScriptDescription(final String scriptName, final String author, + final String category, final double version, + final String description, final String[] servers) { + this(scriptName, author, category, version, description, servers, null, + null, -1); } - @Override - public String toString() { - final StringBuilder b = new StringBuilder(); - b.append("[name: ").append(this.scriptName).append(", author: ") - .append(this.author).append(", category: ") - .append(this.category).append(", version: ") - .append(this.version).append(", description: ") - .append(this.description).append(", servers: "); - if(this.servers != null) { - for (int i = 0; i < this.servers.length; i++) { - b.append(this.servers[i]); - if (i < (this.servers.length - 1)) { - b.append(" "); - } - } - } - b.append(", vip: ") - .append(this.isVip == null ? "unknown" : this.isVip) - .append(", premium: ") - .append(this.isPremium == null ? "unknown" : this.isPremium) - .append(", bdn id: ") - .append(this.bdnId == -1 ? "unknown" : Integer - .toString(this.bdnId)) - .append("]"); + /** + * Used for BDN script (see BDNScripts parser) + * + * @param scriptName + * @param author + * @param category + * @param version + * @param description + * @param servers + * @param bdnId + */ + public ScriptDescription(final String scriptName, + final String author, final String category, final double version, + final String description, final String[] servers, final int bdnId) { + this(scriptName, author, category, version, description, servers, null, + null, bdnId); + } - return b.toString(); - } + /** + * Used by bot (java scripts and python scripts) and BDN Manager (bdn + * manager is a private program) + * + * @param scriptName + * @param author + * @param category + * @param version + * @param description + * @param servers + * @param vip + * @param premium + */ + public ScriptDescription(final String scriptName, final String author, + final String category, final double version, + final String description, final String[] servers, final String vip, + final String premium) { + this(scriptName, author, category, version, description, servers, vip, + premium, -1); + } - @Override - public int compareTo(ScriptDescription o) { - return scriptName.compareTo(o.scriptName); - } + /** + * Main constructor + * + * @param scriptName + * @param author + * @param category + * @param version + * @param description + * @param servers + * @param vip + * @param premium + * @param bdnId + */ + public ScriptDescription(final String scriptName, final String author, + final String category, final double version, + final String description, final String[] servers, final String vip, + final String premium, final int bdnId) { + this.scriptName = scriptName; + this.author = author; + this.category = category; + this.version = version; + this.description = description; + this.servers = servers; + this.isVip = vip; + this.isPremium = premium; + this.bdnId = bdnId; + } + + @Override + public String toString() { + final StringBuilder b = new StringBuilder(); + b.append("[name: ").append(this.scriptName).append(", author: ") + .append(this.author).append(", category: ") + .append(this.category).append(", version: ") + .append(this.version).append(", description: ") + .append(this.description).append(", servers: "); + if (this.servers != null) { + for (int i = 0; i < this.servers.length; i++) { + b.append(this.servers[i]); + if (i < (this.servers.length - 1)) { + b.append(" "); + } + } + } + b.append(", vip: ") + .append(this.isVip == null ? "unknown" : this.isVip) + .append(", premium: ") + .append(this.isPremium == null ? "unknown" : this.isPremium) + .append(", bdn id: ") + .append(this.bdnId == -1 ? "unknown" : Integer + .toString(this.bdnId)) + .append("]"); + + return b.toString(); + } + + @Override + public int compareTo(ScriptDescription o) { + return scriptName.compareTo(o.scriptName); + } } diff --git a/src/main/java/org/parabot/core/desc/ServerDescription.java b/src/main/java/org/parabot/core/desc/ServerDescription.java index cfcc369..687410c 100644 --- a/src/main/java/org/parabot/core/desc/ServerDescription.java +++ b/src/main/java/org/parabot/core/desc/ServerDescription.java @@ -1,45 +1,43 @@ package org.parabot.core.desc; /** - * * Holds information about a server - * + * * @author Everel - * */ public class ServerDescription implements Comparable { - private String serverName; - private String author; - private double revision; + private String serverName; + private String author; + private double revision; - public ServerDescription(final String serverName, final String author, - final double revision) { - this.serverName = serverName; - this.author = author; - this.revision = revision; - } + public ServerDescription(final String serverName, final String author, + final double revision) { + this.serverName = serverName; + this.author = author; + this.revision = revision; + } - public String getServerName() { - return this.serverName; - } + public String getServerName() { + return this.serverName; + } - public String getAuthor() { - return this.author; - } + public String getAuthor() { + return this.author; + } - public double getRevision() { - return this.revision; - } + public double getRevision() { + return this.revision; + } - @Override - public String toString() { - return String.format("[Server: %s, Author: %s, Revision: %.2f]", - this.serverName, this.author, this.revision); - } + @Override + public String toString() { + return String.format("[Server: %s, Author: %s, Revision: %.2f]", + this.serverName, this.author, this.revision); + } - @Override - public int compareTo(ServerDescription o) { - return this.getServerName().compareTo(o.getServerName()); - } + @Override + public int compareTo(ServerDescription o) { + return this.getServerName().compareTo(o.getServerName()); + } } diff --git a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java index ba20206..4172151 100644 --- a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java +++ b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java @@ -1,14 +1,11 @@ package org.parabot.core.desc; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.parabot.core.Configuration; import org.parabot.core.Core; -import org.parabot.core.ui.utils.UILog; import org.parabot.environment.api.utils.WebUtil; -import javax.swing.*; import java.io.BufferedReader; import java.io.IOException; import java.net.MalformedURLException; @@ -22,92 +19,91 @@ import java.util.zip.CRC32; * Gets the information for the selected server provider * * @author Paradox, Everel - * */ public class ServerProviderInfo { - private HashMap settings; - private Properties properties; - - public ServerProviderInfo(URL providerInfo, String username, String password) { - this.properties = new Properties(); - this.settings = new HashMap<>(); + private HashMap settings; + private Properties properties; + + public ServerProviderInfo(URL providerInfo, String username, String password) { + this.properties = new Properties(); + this.settings = new HashMap<>(); try { Core.verbose("Reading info: " + providerInfo); BufferedReader br = WebUtil.getReader(new URL(providerInfo.toString()), username, password); - JSONObject jsonObject = (JSONObject) WebUtil.getJsonParser().parse(br); - for (Object o : jsonObject.entrySet()) { - Map.Entry pairs = (Map.Entry) o; - if (String.valueOf(pairs.getKey()).equalsIgnoreCase("settings")){ - JSONObject object = (JSONObject) pairs.getValue(); - parseSettings(object); - }else { - properties.put(String.valueOf(pairs.getKey()), String.valueOf(pairs.getValue())); - } - } - if (br != null) { - br.close(); - } - } catch (Exception e) { + JSONObject jsonObject = (JSONObject) WebUtil.getJsonParser().parse(br); + for (Object o : jsonObject.entrySet()) { + Map.Entry pairs = (Map.Entry) o; + if (String.valueOf(pairs.getKey()).equalsIgnoreCase("settings")) { + JSONObject object = (JSONObject) pairs.getValue(); + parseSettings(object); + } else { + properties.put(String.valueOf(pairs.getKey()), String.valueOf(pairs.getValue())); + } + } + if (br != null) { + br.close(); + } + } catch (Exception e) { e.printStackTrace(); } } - public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs){ - this.properties = new Properties(); - this.settings = new HashMap<>(); + public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs) { + this.properties = new Properties(); + this.settings = new HashMap<>(); - try { - BufferedReader br = WebUtil.getReader(new URL(Configuration.GET_SERVER_SETTINGS)); - JSONObject settings = (JSONObject) WebUtil.getJsonParser().parse(br); - parseSettings(settings); - } catch (ParseException | IOException e) { - e.printStackTrace(); - } + try { + BufferedReader br = WebUtil.getReader(new URL(Configuration.GET_SERVER_SETTINGS)); + JSONObject settings = (JSONObject) WebUtil.getJsonParser().parse(br); + parseSettings(settings); + } catch (ParseException | IOException e) { + e.printStackTrace(); + } - this.properties.setProperty("client_jar", clientJar); - this.properties.setProperty("hooks", hooks); - this.properties.setProperty("name", name); - this.properties.setProperty("client_class", clientClass); - this.properties.setProperty("provider_crc32", String.valueOf(getCRC32(name, "provider"))); - this.properties.setProperty("client_crc32", String.valueOf(getCRC32(name, "client"))); - this.properties.setProperty("bank_tabs", String.valueOf(bankTabs)); - } + this.properties.setProperty("client_jar", clientJar); + this.properties.setProperty("hooks", hooks); + this.properties.setProperty("name", name); + this.properties.setProperty("client_class", clientClass); + this.properties.setProperty("provider_crc32", String.valueOf(getCRC32(name, "provider"))); + this.properties.setProperty("client_crc32", String.valueOf(getCRC32(name, "client"))); + this.properties.setProperty("bank_tabs", String.valueOf(bankTabs)); + } - private long getCRC32(String name, String type){ - CRC32 crc = new CRC32(); - name += "-" + type; - crc.update(name.getBytes()); - return crc.getValue(); - } + private long getCRC32(String name, String type) { + CRC32 crc = new CRC32(); + name += "-" + type; + crc.update(name.getBytes()); + return crc.getValue(); + } - private void parseSettings(JSONObject object){ - 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); - } - } - - public URL getClient() { - try { - return new URL(properties.getProperty("client_jar")); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - return null; - } - - public URL getExtendedHookFile() { - try { - return new URL(properties.getProperty("hooks") /*+ "&extended=true"*/); - } catch (MalformedURLException e) { - e.printStackTrace(); + private void parseSettings(JSONObject object) { + 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); + } + } + + public URL getClient() { + try { + return new URL(properties.getProperty("client_jar")); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + return null; + } + + public URL getExtendedHookFile() { + try { + return new URL(properties.getProperty("hooks") /*+ "&extended=true"*/); + } catch (MalformedURLException e) { + e.printStackTrace(); return getHookFile(); - } - } + } + } public URL getHookFile() { try { @@ -117,32 +113,32 @@ public class ServerProviderInfo { } return null; } - - public String getClientClass() { - return properties.getProperty("client_class"); - } - - public String getServerName() { - return properties.getProperty("name"); - } - - public long getCRC32() { - return Long.parseLong(properties.getProperty("provider_crc32")); - } - - public long getClientCRC32() { - return Long.parseLong(properties.getProperty("client_crc32")); - } - - public int getBankTabs() { - return Integer.parseInt(properties.getProperty("bank_tabs")); - } - - public Properties getProperties() { - return this.properties; - } - public HashMap getSettings() { - return settings; - } + public String getClientClass() { + return properties.getProperty("client_class"); + } + + public String getServerName() { + return properties.getProperty("name"); + } + + public long getCRC32() { + return Long.parseLong(properties.getProperty("provider_crc32")); + } + + public long getClientCRC32() { + return Long.parseLong(properties.getProperty("client_crc32")); + } + + public int getBankTabs() { + return Integer.parseInt(properties.getProperty("bank_tabs")); + } + + public Properties getProperties() { + return this.properties; + } + + public HashMap getSettings() { + return settings; + } } diff --git a/src/main/java/org/parabot/core/forum/Account.java b/src/main/java/org/parabot/core/forum/Account.java index f2b2a1a..0185e1a 100644 --- a/src/main/java/org/parabot/core/forum/Account.java +++ b/src/main/java/org/parabot/core/forum/Account.java @@ -1,33 +1,28 @@ package org.parabot.core.forum; -import org.parabot.core.Core; - import java.io.UnsupportedEncodingException; import java.net.URLEncoder; /** - * * Class which holds parabot forum account user and pass, only specific classes * have access to it unless it's a modified version of parabot intended to * steal user information. - * + * * @author Everel - * */ public class Account { - private String username; - private String password; + private String username; + private String password; private String api; - /** - * - * @param username - Forum account username - * @param password - Forum account password - */ - public Account(final String username, final String password) { - this.username = username; - this.password = password; - } + /** + * @param username - Forum account username + * @param password - Forum account password + */ + public Account(final String username, final String password) { + this.username = username; + this.password = password; + } public Account(String username, String password, String api) { this.username = username; @@ -36,26 +31,29 @@ public class Account { } /** - * Gets user's parabot account name - * @return username. - */ - public String getUsername() { - return this.username; - } - - /** - * Gets user's parabot password - * @return password. - */ - public String getPassword() { - return this.password; - } + * Gets user's parabot account name + * + * @return username. + */ + public String getUsername() { + return this.username; + } + + /** + * Gets user's parabot password + * + * @return password. + */ + public String getPassword() { + return this.password; + } /** * Gets user's parabot account name + * * @return username, already URL UTF-8 encoded. */ - public String getURLUsername(){ + public String getURLUsername() { try { return URLEncoder.encode(this.username, "UTF-8"); } catch (UnsupportedEncodingException e) { @@ -66,9 +64,10 @@ public class Account { /** * Gets user's password + * * @return password, already URL UTF-8 encoded. */ - public String getURLPassword(){ + public String getURLPassword() { try { return URLEncoder.encode(this.password, "UTF-8"); } catch (UnsupportedEncodingException e) { diff --git a/src/main/java/org/parabot/core/forum/AccountManager.java b/src/main/java/org/parabot/core/forum/AccountManager.java index a848863..6b729a5 100644 --- a/src/main/java/org/parabot/core/forum/AccountManager.java +++ b/src/main/java/org/parabot/core/forum/AccountManager.java @@ -20,99 +20,98 @@ import java.util.ArrayList; /** * Handles logging in to parabot forum, only certain classes may use this class. - * + * * @author Everel - * */ public final class AccountManager { - private static boolean validated; - private static AccountManager instance; + private static boolean validated; + private static AccountManager instance; - private Account account; + private Account account; - private AccountManager() { + private AccountManager() { - } + } - public static final void validate() { - if (validated) { - return; - } - validated = true; - instance = new AccountManager(); + public static final void validate() { + if (validated) { + return; + } + validated = true; + instance = new AccountManager(); - Core.verbose("Initializing account manager accessors..."); - final ArrayList accessors = new ArrayList(); - accessors.add(BDNScripts.MANAGER_FETCHER); - accessors.add(VerboseLoader.MANAGER_FETCHER); - accessors.add(BDNScriptsExecuter.MANAGER_FETCHER); - accessors.add(PublicServers.MANAGER_FETCHER); - accessors.add(PublicServerExecuter.MANAGER_FETCHER); - accessors.add(PBPreferences.MANAGER_FETCHER); + Core.verbose("Initializing account manager accessors..."); + final ArrayList accessors = new ArrayList(); + accessors.add(BDNScripts.MANAGER_FETCHER); + accessors.add(VerboseLoader.MANAGER_FETCHER); + accessors.add(BDNScriptsExecuter.MANAGER_FETCHER); + accessors.add(PublicServers.MANAGER_FETCHER); + accessors.add(PublicServerExecuter.MANAGER_FETCHER); + accessors.add(PBPreferences.MANAGER_FETCHER); - for (final AccountManagerAccess accessor : accessors) { - accessor.setManager(instance); - } - Core.verbose("Account managers initialized."); - } - - public final boolean isLoggedIn() { - return account != null; - } - - public final Account getAccount() { - return account; - } + for (final AccountManagerAccess accessor : accessors) { + accessor.setManager(instance); + } + Core.verbose("Account managers initialized."); + } - public final boolean login(final String user, final String pass, boolean requestTwoStep) { - if (account != null) { - throw new IllegalStateException("Already logged in."); - } - JSONObject result = null; - if (!requestTwoStep){ - try { - BufferedReader contents = WebUtil.getReader(WebUtil.getConnection( - new URL(Configuration.LOGIN_SERVER), - URLEncoder.encode(user, "UTF-8"), - URLEncoder.encode(pass, "UTF-8"))); + public final boolean isLoggedIn() { + return account != null; + } - result = (JSONObject) WebUtil.getJsonParser().parse(contents); + public final Account getAccount() { + return account; + } - } catch (Throwable t) { - t.printStackTrace(); - return false; - } - }else{ - try { - String two = JOptionPane.showInputDialog("Please provide your two factor authentication code\nYou can find this in either your email or the app you've setup"); - if (two != null && two.length() > 0) { - String contents = WebUtil.getContents(Configuration.LOGIN_SERVER, - "username=" + URLEncoder.encode(user, "UTF-8") + "&password=" + URLEncoder.encode(pass, "UTF-8") + "&2fa=" + URLEncoder.encode(two, "UTF-8") - ); - result = (JSONObject) WebUtil.getJsonParser().parse(contents); - } - } catch (Throwable t) { - t.printStackTrace(); - return false; - } - } + public final boolean login(final String user, final String pass, boolean requestTwoStep) { + if (account != null) { + throw new IllegalStateException("Already logged in."); + } + JSONObject result = null; + if (!requestTwoStep) { + try { + BufferedReader contents = WebUtil.getReader(WebUtil.getConnection( + new URL(Configuration.LOGIN_SERVER), + URLEncoder.encode(user, "UTF-8"), + URLEncoder.encode(pass, "UTF-8"))); - if (result != null) { - if (result.get("complete") != null) { - String api = (String) ((JSONObject) result.get("data")).get("api"); - account = new Account(user, pass, api); - Context.setUsername(user); - return true; - } else if (result.get("error") != null) { - String errorResult = (String) result.get("error"); - if (errorResult.equals("2fa") || errorResult.equals("2fae")) { - return login(user, pass, true); - } - Core.verbose(errorResult); - return false; - } - } - return false; - } + result = (JSONObject) WebUtil.getJsonParser().parse(contents); + + } catch (Throwable t) { + t.printStackTrace(); + return false; + } + } else { + try { + String two = JOptionPane.showInputDialog("Please provide your two factor authentication code\nYou can find this in either your email or the app you've setup"); + if (two != null && two.length() > 0) { + String contents = WebUtil.getContents(Configuration.LOGIN_SERVER, + "username=" + URLEncoder.encode(user, "UTF-8") + "&password=" + URLEncoder.encode(pass, "UTF-8") + "&2fa=" + URLEncoder.encode(two, "UTF-8") + ); + result = (JSONObject) WebUtil.getJsonParser().parse(contents); + } + } catch (Throwable t) { + t.printStackTrace(); + return false; + } + } + + if (result != null) { + if (result.get("complete") != null) { + String api = (String) ((JSONObject) result.get("data")).get("api"); + account = new Account(user, pass, api); + Context.setUsername(user); + return true; + } else if (result.get("error") != null) { + String errorResult = (String) result.get("error"); + if (errorResult.equals("2fa") || errorResult.equals("2fae")) { + return login(user, pass, true); + } + Core.verbose(errorResult); + return false; + } + } + return false; + } } diff --git a/src/main/java/org/parabot/core/forum/AccountManagerAccess.java b/src/main/java/org/parabot/core/forum/AccountManagerAccess.java index 262b068..5ca37f8 100644 --- a/src/main/java/org/parabot/core/forum/AccountManagerAccess.java +++ b/src/main/java/org/parabot/core/forum/AccountManagerAccess.java @@ -1,14 +1,12 @@ package org.parabot.core.forum; /** - * * Gives access to account details - * - * @author Everel * + * @author Everel */ public interface AccountManagerAccess { - - public void setManager(AccountManager manager); + + public void setManager(AccountManager manager); } diff --git a/src/main/java/org/parabot/core/io/ProgressListener.java b/src/main/java/org/parabot/core/io/ProgressListener.java index 4d0992a..8be607d 100644 --- a/src/main/java/org/parabot/core/io/ProgressListener.java +++ b/src/main/java/org/parabot/core/io/ProgressListener.java @@ -1,12 +1,10 @@ package org.parabot.core.io; /** - * * Keeps track of a progress - * - * @author Everel * + * @author Everel */ -public interface ProgressListener extends org.parabot.api.io.ProgressListener{ +public interface ProgressListener extends org.parabot.api.io.ProgressListener { } diff --git a/src/main/java/org/parabot/core/io/SizeInputStream.java b/src/main/java/org/parabot/core/io/SizeInputStream.java index d0fad56..4897b40 100644 --- a/src/main/java/org/parabot/core/io/SizeInputStream.java +++ b/src/main/java/org/parabot/core/io/SizeInputStream.java @@ -4,61 +4,59 @@ import java.io.IOException; import java.io.InputStream; /** - * * @author Everel - * */ public class SizeInputStream extends InputStream { - public int bytesRead; - private ProgressListener l; - private InputStream in; - private long startTime; - private double size; + public int bytesRead; + private ProgressListener l; + private InputStream in; + private long startTime; + private double size; - public SizeInputStream(InputStream in, int size, ProgressListener l) { - this.in = in; - this.size = size; - this.l = l; - this.startTime = System.currentTimeMillis(); - } + public SizeInputStream(InputStream in, int size, ProgressListener l) { + this.in = in; + this.size = size; + this.l = l; + this.startTime = System.currentTimeMillis(); + } - public int available() { - return ((int) size - bytesRead); - } + public int available() { + return ((int) size - bytesRead); + } - public int read() throws IOException { - int b = in.read(); - if (b != -1) { - bytesRead++; - } - updateListener(); - return b; - } + public int read() throws IOException { + int b = in.read(); + if (b != -1) { + bytesRead++; + } + updateListener(); + return b; + } - public int read(byte[] b) throws IOException { - int read = in.read(b); - bytesRead += read; - updateListener(); - return read; - } + public int read(byte[] b) throws IOException { + int read = in.read(b); + bytesRead += read; + updateListener(); + return read; + } - public int read(byte[] b, int off, int len) throws IOException { - int read = in.read(b, off, len); - bytesRead += read; - updateListener(); - return read; - } - - private void updateListener() { - if(l != null) { - double percent = ( bytesRead / size) * 100.0D; - l.onProgressUpdate(percent); - - long curTime = System.currentTimeMillis(); - double timeSeconds = (curTime - startTime) / 1000.0D; - double speed = bytesRead / (1024.0D * 1024.0D) / timeSeconds; - l.updateDownloadSpeed(speed); - } - } + public int read(byte[] b, int off, int len) throws IOException { + int read = in.read(b, off, len); + bytesRead += read; + updateListener(); + return read; + } + + private void updateListener() { + if (l != null) { + double percent = (bytesRead / size) * 100.0D; + l.onProgressUpdate(percent); + + long curTime = System.currentTimeMillis(); + double timeSeconds = (curTime - startTime) / 1000.0D; + double speed = bytesRead / (1024.0D * 1024.0D) / timeSeconds; + l.updateDownloadSpeed(speed); + } + } } diff --git a/src/main/java/org/parabot/core/lib/Library.java b/src/main/java/org/parabot/core/lib/Library.java index c8a7645..869b144 100644 --- a/src/main/java/org/parabot/core/lib/Library.java +++ b/src/main/java/org/parabot/core/lib/Library.java @@ -1,9 +1,7 @@ package org.parabot.core.lib; /** - * * @author Everel - * */ public abstract class Library extends org.parabot.api.io.libraries.Library { diff --git a/src/main/java/org/parabot/core/lib/javafx/JavaFX.java b/src/main/java/org/parabot/core/lib/javafx/JavaFX.java index 5684e45..43efd00 100644 --- a/src/main/java/org/parabot/core/lib/javafx/JavaFX.java +++ b/src/main/java/org/parabot/core/lib/javafx/JavaFX.java @@ -1,76 +1,74 @@ package org.parabot.core.lib.javafx; -import java.io.File; -import java.net.URL; - import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.build.BuildPath; import org.parabot.core.lib.Library; import org.parabot.environment.api.utils.JavaUtil; +import java.io.File; +import java.net.URL; + /** - * * Jython util class - * + * * @author Everel - * */ public class JavaFX extends Library { - private static boolean valid; + private static boolean valid; - @Override - public void init() { - if (!hasJar()) { - System.err.println("Failed to load javafx... [jar missing]"); - return; - } - Core.verbose("Adding javafx jar file to build path: " - + getJarFileURL().getPath()); - BuildPath.add(getJarFileURL()); + public static boolean isValid() { + return valid; + } - try { - Class.forName("javafx.application.Application"); - valid = true; - } catch (ClassNotFoundException e) { - System.err - .println("Failed to add javafx to build path, or incorrupt download"); - } + @Override + public void init() { + if (!hasJar()) { + System.err.println("Failed to load javafx... [jar missing]"); + return; + } + Core.verbose("Adding javafx jar file to build path: " + + getJarFileURL().getPath()); + BuildPath.add(getJarFileURL()); - Core.verbose("JavaFX initialized."); - } + try { + Class.forName("javafx.application.Application"); + valid = true; + } catch (ClassNotFoundException e) { + System.err + .println("Failed to add javafx to build path, or incorrupt download"); + } - @Override - public boolean isAdded() { - return valid; - } + Core.verbose("JavaFX initialized."); + } - @Override - public File getJarFile() { - return new File(Directories.getCachePath(), "javafx.jar"); - } + @Override + public boolean isAdded() { + return valid; + } - @Override - public URL getDownloadLink() { - try { - return new URL("http://bot.parabot.org/libs/jfxrt.jar"); - } catch (Throwable t) { - t.printStackTrace(); - } - return null; - } + @Override + public File getJarFile() { + return new File(Directories.getCachePath(), "javafx.jar"); + } - @Override - public boolean requiresJar() { - return JavaUtil.JAVA_VERSION <= 1.7; - } + @Override + public URL getDownloadLink() { + try { + return new URL("http://bot.parabot.org/libs/jfxrt.jar"); + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } - @Override - public String getLibraryName() { - return "JavaFX"; - } - - public static boolean isValid() { - return valid; - } + @Override + public boolean requiresJar() { + return JavaUtil.JAVA_VERSION <= 1.7; + } + + @Override + public String getLibraryName() { + return "JavaFX"; + } } diff --git a/src/main/java/org/parabot/core/network/NetworkInterface.java b/src/main/java/org/parabot/core/network/NetworkInterface.java index b1d3a78..4a8daf5 100644 --- a/src/main/java/org/parabot/core/network/NetworkInterface.java +++ b/src/main/java/org/parabot/core/network/NetworkInterface.java @@ -7,71 +7,75 @@ import java.util.Enumeration; import java.util.NoSuchElementException; public class NetworkInterface { - public static byte[] mac = new byte[] { 11, 11, 11, 11, 11, 11 }; - private static byte[] realMac; - private static NetworkInterface cached; + public static byte[] mac = new byte[]{ 11, 11, 11, 11, 11, 11 }; + private static byte[] realMac; + private static NetworkInterface cached; - static { - try { - mac = getRealHardwareAddress(); - } catch (SocketException ignored) { - } - } + static { + try { + mac = getRealHardwareAddress(); + } catch (SocketException ignored) { + } + } - public byte[] getHardwareAddress() { - return mac; - } + public static Enumeration getNetworkInterfaces() + throws SocketException { + final ArrayList netifs = new ArrayList<>(); - public static Enumeration getNetworkInterfaces() - throws SocketException { - final ArrayList netifs = new ArrayList<>(); + return new Enumeration() { + private int i = 0; - return new Enumeration() { - private int i = 0; - public NetworkInterface nextElement() { - if (i < netifs.size()) { - NetworkInterface netif = netifs.get(i++); - return netif; - } else { - throw new NoSuchElementException(); - } - } + public NetworkInterface nextElement() { + if (i < netifs.size()) { + NetworkInterface netif = netifs.get(i++); + return netif; + } else { + throw new NoSuchElementException(); + } + } - public boolean hasMoreElements() { - return (i < netifs.size()); - } - }; - } + public boolean hasMoreElements() { + return (i < netifs.size()); + } + }; + } - public static byte[] getRealHardwareAddress() throws SocketException{ - if (realMac != null) - return realMac; - try { - return realMac = java.net.NetworkInterface.getByInetAddress( - InetAddress.getLocalHost()).getHardwareAddress(); - } catch (Exception ignored) { - } - return mac; - } + public static byte[] getRealHardwareAddress() throws SocketException { + if (realMac != null) { + return realMac; + } + try { + return realMac = java.net.NetworkInterface.getByInetAddress( + InetAddress.getLocalHost()).getHardwareAddress(); + } catch (Exception ignored) { + } + return mac; + } - public static NetworkInterface getByInetAddress(InetAddress addr) { - if (cached == null) - cached = new NetworkInterface(); - return cached; - } + public static NetworkInterface getByInetAddress(InetAddress addr) { + if (cached == null) { + cached = new NetworkInterface(); + } + return cached; + } - public static void setMac(byte[] mac2) { - System.out.println("Setting mac address to: " + formatMac(mac2)); - mac = mac2; - } + public static void setMac(byte[] mac2) { + System.out.println("Setting mac address to: " + formatMac(mac2)); + mac = mac2; + } - public static String formatMac(byte[] mac){ - StringBuilder b = new StringBuilder(); - for(int i = 0; i < 6;i++){ - b.append(String.format("%02X", mac[i])); - if(i < 5) - b.append(':'); - } - return b.toString(); - } + public static String formatMac(byte[] mac) { + StringBuilder b = new StringBuilder(); + for (int i = 0; i < 6; i++) { + b.append(String.format("%02X", mac[i])); + if (i < 5) { + b.append(':'); + } + } + return b.toString(); + } + + public byte[] getHardwareAddress() { + return mac; + } } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/network/Runtime.java b/src/main/java/org/parabot/core/network/Runtime.java index 8c5930f..501575e 100644 --- a/src/main/java/org/parabot/core/network/Runtime.java +++ b/src/main/java/org/parabot/core/network/Runtime.java @@ -3,64 +3,63 @@ package org.parabot.core.network; import java.io.IOException; public class Runtime { - - private java.lang.Runtime rt; - - private static Runtime cached; - - private Runtime(java.lang.Runtime rt){ - this.rt = rt; - } - - - public void addShutdownHook(Thread t){ - rt.addShutdownHook(t); - } - - public int availableProcessors(){ - return rt.availableProcessors(); - } - - public void exit(int i){ - rt.exit(i); - } - - public Process exec(String str) throws IOException{ - System.out.println("RT:" + str); - System.out.println("RT:" + str); - return rt.exec(str); - } - - public Process exec(String[] cmdarray) throws IOException{ - StringBuffer sb = new StringBuffer(); - for(int i = 0; i < cmdarray.length;i++){ - sb.append(cmdarray[i] + (i < cmdarray.length - 1 ? "," : "")); - } - System.out.println("RT: {" + sb + "}"); - System.out.println("RT: {" + sb + "}"); - return rt.exec(cmdarray); - } - - public long freeMemory() { - return rt.freeMemory(); - } - - public long totalMemory() { - return rt.totalMemory(); - } - - public void gc(){ - rt.gc(); - } - - public long maxMemory(){ - return rt.maxMemory(); - } - - public static Runtime getRuntime(){ - if(cached == null) - cached = new Runtime(java.lang.Runtime.getRuntime()); - return cached; - } + + private static Runtime cached; + private java.lang.Runtime rt; + + private Runtime(java.lang.Runtime rt) { + this.rt = rt; + } + + public static Runtime getRuntime() { + if (cached == null) { + cached = new Runtime(java.lang.Runtime.getRuntime()); + } + return cached; + } + + public void addShutdownHook(Thread t) { + rt.addShutdownHook(t); + } + + public int availableProcessors() { + return rt.availableProcessors(); + } + + public void exit(int i) { + rt.exit(i); + } + + public Process exec(String str) throws IOException { + System.out.println("RT:" + str); + System.out.println("RT:" + str); + return rt.exec(str); + } + + public Process exec(String[] cmdarray) throws IOException { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < cmdarray.length; i++) { + sb.append(cmdarray[i] + (i < cmdarray.length - 1 ? "," : "")); + } + System.out.println("RT: {" + sb + "}"); + System.out.println("RT: {" + sb + "}"); + return rt.exec(cmdarray); + } + + public long freeMemory() { + return rt.freeMemory(); + } + + public long totalMemory() { + return rt.totalMemory(); + } + + public void gc() { + rt.gc(); + } + + public long maxMemory() { + return rt.maxMemory(); + } } diff --git a/src/main/java/org/parabot/core/network/proxy/ProxySocket.java b/src/main/java/org/parabot/core/network/proxy/ProxySocket.java index 6082890..46b7454 100644 --- a/src/main/java/org/parabot/core/network/proxy/ProxySocket.java +++ b/src/main/java/org/parabot/core/network/proxy/ProxySocket.java @@ -11,284 +11,299 @@ import java.util.List; public class ProxySocket extends Socket { - private static List connections = new ArrayList(); + public static boolean auth = false; + private static List connections = new ArrayList(); + private static ProxyType proxyType = ProxyType.NONE; + private static int proxyPort = 0; + private static String username = null, password = null; + private static InetAddress proxyInetAddress = null; + private InetAddress addr; + private int port; + private InetSocketAddress cachedAddr; - private static ProxyType proxyType = ProxyType.NONE; + public ProxySocket(InetAddress addr, int port) throws IOException { + super(addr, port); + } - private static int proxyPort = 0; + public ProxySocket() { + super(); + } - private InetAddress addr; - private int port; + public ProxySocket(String host, int port) throws IOException { + super(host, port); + } - private static String username = null, password = null; + public static int closeConnections() { + int value = 0; + for (ProxySocket socket : connections) { + try { + connections.remove(socket); + if (socket.isClosed()) { + continue; + } + socket.close(); + value++; + } catch (Exception e) { - public static boolean auth = false; + } + } + return value; + } - private static InetAddress proxyInetAddress = null; + public static void setProxy(ProxyType type, String host, int port) { + try { + proxyInetAddress = InetAddress.getByName(host); + proxyPort = port; + proxyType = type; + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + } - private InetSocketAddress cachedAddr; + public static InetAddress getProxyAddress() { + return proxyInetAddress; + } - public static int closeConnections() { - int value = 0; - for (ProxySocket socket : connections) - try { - connections.remove(socket); - if (socket.isClosed()) - continue; - socket.close(); - value++; - } catch (Exception e) { + public static int getProxyPort() { + return proxyPort; + } - } - return value; - } + public static ProxyType getProxyType() { + return proxyType; + } - public ProxySocket(InetAddress addr, int port) throws IOException { - super(addr, port); - } + public static void setType(ProxyType pt) { + proxyType = pt; + } - public ProxySocket() { - super(); - } + public static int getConnectionCount() { + return connections.size(); + } - public ProxySocket(String host, int port) throws IOException { - super(host, port); - } + public static void setLogin(String user, char[] pass) { + setLogin(user, new String(pass)); + } - public static void setProxy(ProxyType type, String host, int port) { - try { - proxyInetAddress = InetAddress.getByName(host); - proxyPort = port; - proxyType = type; - } catch (UnknownHostException e) { - throw new RuntimeException(e); - } - } + public static void setLogin(String user, String pass) { + username = user; + password = pass; + } - public static InetAddress getProxyAddress() { - return proxyInetAddress; - } + @Override + public void connect(SocketAddress addr) throws IOException { + connections.add(this); + if (addr instanceof InetSocketAddress) { + InetSocketAddress isa = (InetSocketAddress) addr; + this.addr = InetAddress.getByName(isa.getHostString()); + this.port = isa.getPort(); + } + if (proxyType != ProxyType.NONE) { + try { + super.connect(cachedAddr = new InetSocketAddress( + proxyInetAddress, proxyPort)); + initProxy(); + } catch (Exception e) { + UILog.log("Proxy Error", e.getMessage(), + JOptionPane.ERROR_MESSAGE); + } + } else { + super.connect(addr); + } + } - public static int getProxyPort() { - return proxyPort; - } + private void initProxy() throws IOException { + System.out.println("Proxying:" + addr + ":" + port + " Over:" + + proxyInetAddress + ":" + proxyPort + " Type:" + proxyType); + switch (proxyType) { + case HTTP: + http_connect(); + break; + case SOCKS4: + socks4_connect(); + break; + case SOCKS5: + socks5_connect(); + break; + default: + throw new IOException("Unsupported proxy type:" + proxyType); + } + } - public static ProxyType getProxyType() { - return proxyType; - } + private void http_connect() throws IOException { + InputStream in = getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + OutputStream out = getOutputStream(); + out.write(("CONNECT " + addr.getHostAddress() + ":" + port + "\r\n") + .getBytes()); + // out.write("Connection:keep-alive\r\n".getBytes()); + out.write("\r\n".getBytes()); + String str; + while ((str = br.readLine()) != null) { + if (str.length() == 0) { + break; + } + if (!str.startsWith("HTTP")) { + continue; + } + int code = Integer.parseInt(str.substring(9, 12)); + switch (code) { + case 404: + throw new IOException( + "Proxy seems to think we're connecting to a webpage..."); + case 403: + throw new IOException( + "Proxy doesn't support connecting to port: " + port + + "! Try a different proxy."); + } + if (code / 100 != 2) { + throw new IOException( + "Unable to connect to proxy server! HTTP Error code:" + + code); + } + } + } - @Override - public void connect(SocketAddress addr) throws IOException { - connections.add(this); - if (addr instanceof InetSocketAddress) { - InetSocketAddress isa = (InetSocketAddress) addr; - this.addr = InetAddress.getByName(isa.getHostString()); - this.port = isa.getPort(); - } - if (proxyType != ProxyType.NONE) { - try { - super.connect(cachedAddr = new InetSocketAddress( - proxyInetAddress, proxyPort)); - initProxy(); - } catch (Exception e) { - UILog.log("Proxy Error", e.getMessage(), - JOptionPane.ERROR_MESSAGE); - } - } else - super.connect(addr); - } + private void socks4_connect() throws IOException { + DataOutputStream out = new DataOutputStream(getOutputStream()); + DataInputStream in = new DataInputStream(getInputStream()); - private void initProxy() throws IOException { - System.out.println("Proxying:" + addr + ":" + port + " Over:" - + proxyInetAddress + ":" + proxyPort + " Type:" + proxyType); - switch (proxyType) { - case HTTP: - http_connect(); - break; - case SOCKS4: - socks4_connect(); - break; - case SOCKS5: - socks5_connect(); - break; - default: - throw new IOException("Unsupported proxy type:" + proxyType); - } - } + out.write(0x04); + out.write(0x01); // connection type (TCP stream) + out.writeShort(port); + byte[] b = addr.getAddress(); + if (b.length != 4) { + throw new IOException("Unsupported IP type for socksv4!"); + } + out.write(b); + out.write(0); // the userID stuff, 0 means end of string (null + // terminated) + out.flush(); - private void http_connect() throws IOException { - InputStream in = getInputStream(); - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - OutputStream out = getOutputStream(); - out.write(("CONNECT " + addr.getHostAddress() + ":" + port + "\r\n") - .getBytes()); - // out.write("Connection:keep-alive\r\n".getBytes()); - out.write("\r\n".getBytes()); - String str; - while ((str = br.readLine()) != null) { - if (str.length() == 0) - break; - if (!str.startsWith("HTTP")) - continue; - int code = Integer.parseInt(str.substring(9, 12)); - switch (code) { - case 404: - throw new IOException( - "Proxy seems to think we're connecting to a webpage..."); - case 403: - throw new IOException( - "Proxy doesn't support connecting to port: " + port - + "! Try a different proxy."); - } - if (code / 100 != 2) - throw new IOException( - "Unable to connect to proxy server! HTTP Error code:" - + code); - } - } + if (in.read() != 0x00) // null byte + { + throw new IOException("Proxy server dun goofed"); + } + if (in.read() != 0x5a) { + throw new IOException( + "Proxy server was unable to connect to server!"); + } - private void socks4_connect() throws IOException { - DataOutputStream out = new DataOutputStream(getOutputStream()); - DataInputStream in = new DataInputStream(getInputStream()); + in.readShort(); // ignored + in.readFully(b); // ignored + } - out.write(0x04); - out.write(0x01); // connection type (TCP stream) - out.writeShort(port); - byte[] b = addr.getAddress(); - if (b.length != 4) - throw new IOException("Unsupported IP type for socksv4!"); - out.write(b); - out.write(0); // the userID stuff, 0 means end of string (null - // terminated) - out.flush(); + private void socks5_connect() throws IOException { + DataOutputStream out = new DataOutputStream(getOutputStream()); + DataInputStream in = new DataInputStream(getInputStream()); + out.write(0x05); // the version + out.write(auth ? 2 : 1); // number of authentication methods (no auth + // for now) + out.write(0); // the authentication (none) + if (auth) { + out.write(2); + } + out.flush(); + if (in.read() != 0x05) // remote proxy version + { + throw new IOException("Proxy server is not supported!"); + } + switch (in.read()) { // auth method + case 0: + break; // no auth + case 2: + // username and pass stuff + out.write(0x01); // user/pass version # + out.write(username.length()); + out.write(username.getBytes()); + out.write(password.length()); + out.write(password.getBytes()); + out.flush(); + in.read(); // skip the version + if (in.read() == 0) // Successful login, continue + { + break; + } + default: + throw new IOException("Proxy server declined request!"); + } - if (in.read() != 0x00) // null byte - throw new IOException("Proxy server dun goofed"); - if (in.read() != 0x5a) - throw new IOException( - "Proxy server was unable to connect to server!"); + // now to write the actual request + out.write(0x05); // again the socks version + out.write(0x01); // the connection type (0x01 = TCP Connection) + out.write(0x00); // the reserve byte, un-used + byte[] b = addr.getAddress(); + out.write(b.length == 4 ? 0x01 : 0x04); // if ipv4 or ipv6 (0x03 = + // domain name, but that's + // unsupported as of yet) + out.write(b); + out.writeShort(port); + out.flush(); - in.readShort(); // ignored - in.readFully(b); // ignored - } + // now to read the server's reply + if (in.read() != 0x05) // socks version (again) + { + throw new IOException("Proxy server dun goofed"); + } + int reply = in.read(); + if (reply == 0x08) { + throw new IOException("Bad address sent to proxy server"); + } + if (reply != 0x00) { + throw new IOException("Unable to connect to server!"); + } + in.read(); // reserve byte + int addrType = in.read(); + b = new byte[4]; + switch (addrType) { + case 0x01: + b = new byte[4]; + break; + case 0x04: + b = new byte[16]; + break; + default: + throw new IOException("Bad address type from proxy server!"); + } + in.readFully(b); + in.readShort(); // the returned port #, ignored + } - private void socks5_connect() throws IOException { - DataOutputStream out = new DataOutputStream(getOutputStream()); - DataInputStream in = new DataInputStream(getInputStream()); - out.write(0x05); // the version - out.write(auth ? 2 : 1); // number of authentication methods (no auth - // for now) - out.write(0); // the authentication (none) - if (auth) { - out.write(2); - } - out.flush(); - if (in.read() != 0x05) // remote proxy version - throw new IOException("Proxy server is not supported!"); - switch (in.read()) { // auth method - case 0: - break; // no auth - case 2: - // username and pass stuff - out.write(0x01); // user/pass version # - out.write(username.length()); - out.write(username.getBytes()); - out.write(password.length()); - out.write(password.getBytes()); - out.flush(); - in.read(); // skip the version - if (in.read() == 0) // Successful login, continue - break; - default: - throw new IOException("Proxy server declined request!"); - } + @Override + public int getPort() { + if (super.getInetAddress().equals(proxyInetAddress)) { + return port; + } + return super.getPort(); + } - // now to write the actual request - out.write(0x05); // again the socks version - out.write(0x01); // the connection type (0x01 = TCP Connection) - out.write(0x00); // the reserve byte, un-used - byte[] b = addr.getAddress(); - out.write(b.length == 4 ? 0x01 : 0x04); // if ipv4 or ipv6 (0x03 = - // domain name, but that's - // unsupported as of yet) - out.write(b); - out.writeShort(port); - out.flush(); + @Override + public InetAddress getInetAddress() { + if (super.getInetAddress().equals(proxyInetAddress)) { + return addr; + } + return super.getInetAddress(); + } - // now to read the server's reply - if (in.read() != 0x05) // socks version (again) - throw new IOException("Proxy server dun goofed"); - int reply = in.read(); - if (reply == 0x08) - throw new IOException("Bad address sent to proxy server"); - if (reply != 0x00) - throw new IOException("Unable to connect to server!"); - in.read(); // reserve byte - int addrType = in.read(); - b = new byte[4]; - switch (addrType) { - case 0x01: - b = new byte[4]; - break; - case 0x04: - b = new byte[16]; - break; - default: - throw new IOException("Bad address type from proxy server!"); - } - in.readFully(b); - in.readShort(); // the returned port #, ignored - } + @Override + public SocketAddress getRemoteSocketAddress() { + if (super.getInetAddress().equals(proxyInetAddress)) { + return cachedAddr; + } + return super.getRemoteSocketAddress(); + } - @Override - public int getPort() { - if (super.getInetAddress().equals(proxyInetAddress)) - return port; - return super.getPort(); - } + @Override + public SocketChannel getChannel() { + if (super.getInetAddress().equals(proxyInetAddress)) { + return null; + } + return super.getChannel(); + } - @Override - public InetAddress getInetAddress() { - if (super.getInetAddress().equals(proxyInetAddress)) - return addr; - return super.getInetAddress(); - } - - @Override - public SocketAddress getRemoteSocketAddress() { - if (super.getInetAddress().equals(proxyInetAddress)) - return cachedAddr; - return super.getRemoteSocketAddress(); - } - - @Override - public SocketChannel getChannel() { - if (super.getInetAddress().equals(proxyInetAddress)) - return null; - return super.getChannel(); - } - - @Override - public void close() throws IOException { - connections.remove(this); - super.close(); - } - - public static void setType(ProxyType pt) { - proxyType = pt; - } - - public static int getConnectionCount() { - return connections.size(); - } - - public static void setLogin(String user, char[] pass) { - setLogin(user, new String(pass)); - } - - public static void setLogin(String user, String pass) { - username = user; - password = pass; - } + @Override + public void close() throws IOException { + connections.remove(this); + super.close(); + } } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/network/proxy/ProxyType.java b/src/main/java/org/parabot/core/network/proxy/ProxyType.java index cf365ee..ab7b866 100644 --- a/src/main/java/org/parabot/core/network/proxy/ProxyType.java +++ b/src/main/java/org/parabot/core/network/proxy/ProxyType.java @@ -1,5 +1,5 @@ package org.parabot.core.network.proxy; public enum ProxyType { - NONE,SOCKS5, SOCKS4, HTTP + NONE, SOCKS5, SOCKS4, HTTP } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/paint/AbstractDebugger.java b/src/main/java/org/parabot/core/paint/AbstractDebugger.java index 98e26a2..e2276f2 100644 --- a/src/main/java/org/parabot/core/paint/AbstractDebugger.java +++ b/src/main/java/org/parabot/core/paint/AbstractDebugger.java @@ -3,23 +3,20 @@ package org.parabot.core.paint; import org.parabot.environment.api.interfaces.Paintable; /** - * * Abstract class for debugging in game values & more - * - * @author Everel * + * @author Everel */ public abstract class AbstractDebugger implements Paintable { - - /** - * Toggles this debugger - */ - public abstract void toggle(); - /** - * - * @return True if this debugger is enabled, otherwise false + /** + * Toggles this debugger */ - public abstract boolean isEnabled(); + public abstract void toggle(); + + /** + * @return True if this debugger is enabled, otherwise false + */ + public abstract boolean isEnabled(); } diff --git a/src/main/java/org/parabot/core/paint/PaintDebugger.java b/src/main/java/org/parabot/core/paint/PaintDebugger.java index 4b8c7fd..1026933 100644 --- a/src/main/java/org/parabot/core/paint/PaintDebugger.java +++ b/src/main/java/org/parabot/core/paint/PaintDebugger.java @@ -1,61 +1,58 @@ package org.parabot.core.paint; -import java.awt.Color; -import java.awt.Graphics; +import org.parabot.core.Context; + +import java.awt.*; import java.util.HashMap; import java.util.LinkedList; import java.util.Queue; -import org.parabot.core.Context; - /** - * * Manages and paints on a collection of AbstractDebuggers - * - * @author Everel * + * @author Everel */ public class PaintDebugger { - private final HashMap debuggers; - private final Queue stringDebug; - - public PaintDebugger() { - this.debuggers = new HashMap(); - this.stringDebug = new LinkedList(); - } - - public final void addDebugger(final String name, final AbstractDebugger debugger) { - debuggers.put(name, debugger); - } - - public void debug(Graphics g) { - for(final AbstractDebugger d : debuggers.values()) { - if(d.isEnabled()) { - d.paint(g); - } - } - g.setColor(Color.green); - int y = 40; - while(stringDebug.size() > 0) { - g.drawString(stringDebug.poll(), 10, y); - y += 15; - } - } - - public static final PaintDebugger getInstance() { - return Context.getInstance().getPaintDebugger(); - } - - public final void addLine(final String debugLine) { - stringDebug.add(debugLine); - } - - public final void toggle(final String name) { - debuggers.get(name).toggle(); - } - - public final boolean isEnabled(final String name) { - return debuggers.get(name).isEnabled(); - } + private final HashMap debuggers; + private final Queue stringDebug; + + public PaintDebugger() { + this.debuggers = new HashMap(); + this.stringDebug = new LinkedList(); + } + + public static final PaintDebugger getInstance() { + return Context.getInstance().getPaintDebugger(); + } + + public final void addDebugger(final String name, final AbstractDebugger debugger) { + debuggers.put(name, debugger); + } + + public void debug(Graphics g) { + for (final AbstractDebugger d : debuggers.values()) { + if (d.isEnabled()) { + d.paint(g); + } + } + g.setColor(Color.green); + int y = 40; + while (stringDebug.size() > 0) { + g.drawString(stringDebug.poll(), 10, y); + y += 15; + } + } + + public final void addLine(final String debugLine) { + stringDebug.add(debugLine); + } + + public final void toggle(final String name) { + debuggers.get(name).toggle(); + } + + public final boolean isEnabled(final String name) { + return debuggers.get(name).isEnabled(); + } } diff --git a/src/main/java/org/parabot/core/parsers/hooks/HookParser.java b/src/main/java/org/parabot/core/parsers/hooks/HookParser.java index 3de98b0..03d8292 100644 --- a/src/main/java/org/parabot/core/parsers/hooks/HookParser.java +++ b/src/main/java/org/parabot/core/parsers/hooks/HookParser.java @@ -3,6 +3,7 @@ package org.parabot.core.parsers.hooks; import org.parabot.core.asm.hooks.HookFile; import org.parabot.core.asm.interfaces.Injectable; import org.parabot.core.asm.wrappers.*; + import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -15,9 +16,8 @@ import java.util.HashMap; */ public abstract class HookParser { - public HookParser(HookFile hookFile) { - + } public abstract Interface[] getInterfaces(); @@ -25,18 +25,18 @@ public abstract class HookParser { public abstract Super[] getSupers(); public abstract Getter[] getGetters(); - + public abstract Setter[] getSetters(); public abstract Invoker[] getInvokers(); public abstract Callback[] getCallbacks(); - + public abstract HashMap getConstants(); public Injectable[] getInjectables() { ArrayList injectables = new ArrayList(); - Interface[] interfaces = getInterfaces(); + Interface[] interfaces = getInterfaces(); if (interfaces != null) { Collections.addAll(injectables, interfaces); } diff --git a/src/main/java/org/parabot/core/parsers/hooks/JSONHookParser.java b/src/main/java/org/parabot/core/parsers/hooks/JSONHookParser.java index 0ff8598..2a230a0 100644 --- a/src/main/java/org/parabot/core/parsers/hooks/JSONHookParser.java +++ b/src/main/java/org/parabot/core/parsers/hooks/JSONHookParser.java @@ -1,248 +1,241 @@ package org.parabot.core.parsers.hooks; -import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.Map; - import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.parabot.core.asm.adapters.AddInterfaceAdapter; import org.parabot.core.asm.hooks.HookFile; -import org.parabot.core.asm.wrappers.Callback; -import org.parabot.core.asm.wrappers.Getter; -import org.parabot.core.asm.wrappers.Interface; -import org.parabot.core.asm.wrappers.Invoker; -import org.parabot.core.asm.wrappers.Setter; -import org.parabot.core.asm.wrappers.Super; +import org.parabot.core.asm.wrappers.*; + +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; /** - * * @author Dane - * */ public class JSONHookParser extends HookParser { - private JSONObject root; - private Map interfaces; - private HashMap constants; + private JSONObject root; + private Map interfaces; + private HashMap constants; - public JSONHookParser(HookFile file) { - super(file); + public JSONHookParser(HookFile file) { + super(file); - JSONParser parser = new JSONParser(); + JSONParser parser = new JSONParser(); - try { - parser.parse(new InputStreamReader(file.getInputStream())); - } catch (Throwable t) { - throw new RuntimeException("Unable to parse hooks: " + t); - } - } + try { + parser.parse(new InputStreamReader(file.getInputStream())); + } catch (Throwable t) { + throw new RuntimeException("Unable to parse hooks: " + t); + } + } - public String get(JSONObject o, String s) { - return this.get(o, s); - } + public String get(JSONObject o, String s) { + return this.get(o, s); + } - public String formatDescription(String s) { - StringBuilder b = new StringBuilder(); + public String formatDescription(String s) { + StringBuilder b = new StringBuilder(); - if (s.charAt(0) == '[') { - for (int j = 0; j < s.length(); j++) { - if (s.charAt(j) == '[') { - b.append('['); - } - } - s = s.replaceAll("\\[", ""); - } + if (s.charAt(0) == '[') { + for (int j = 0; j < s.length(); j++) { + if (s.charAt(j) == '[') { + b.append('['); + } + } + s = s.replaceAll("\\[", ""); + } - return b.append('L').append(String.format(s, AddInterfaceAdapter.getAccessorPackage())).append(';').toString(); - } + return b.append('L').append(String.format(s, AddInterfaceAdapter.getAccessorPackage())).append(';').toString(); + } - @Override - public Interface[] getInterfaces() { - JSONArray a = (JSONArray) root.get("interfaces"); - interfaces = new HashMap<>(); + @Override + public Interface[] getInterfaces() { + JSONArray a = (JSONArray) root.get("interfaces"); + interfaces = new HashMap<>(); - if (a != null && a.size() > 0) { - Interface[] i = new Interface[a.size()]; - for (int j = 0; j < a.size(); j++) { - JSONObject o = (JSONObject) a.get(j); + if (a != null && a.size() > 0) { + Interface[] i = new Interface[a.size()]; + for (int j = 0; j < a.size(); j++) { + JSONObject o = (JSONObject) a.get(j); - String clazz = this.get(o, "class"); - String interfaze = this.get(o, "interface"); + String clazz = this.get(o, "class"); + String interfaze = this.get(o, "interface"); - interfaces.put(clazz, interfaze); - i[j] = new Interface(clazz, interfaze); - } - return i; - } - return null; - } + interfaces.put(clazz, interfaze); + i[j] = new Interface(clazz, interfaze); + } + return i; + } + return null; + } - @Override - public Super[] getSupers() { - JSONArray a = (JSONArray) root.get("supers"); + @Override + public Super[] getSupers() { + JSONArray a = (JSONArray) root.get("supers"); - if (a != null && a.size() > 0) { - Super[] s = new Super[a.size()]; - for (int i = 0; i < a.size(); i++) { - JSONObject o = (JSONObject) a.get(i); - s[i] = new Super(this.get(o, "class"), this.get(o, "super")); - } - return s; - } - return null; - } + if (a != null && a.size() > 0) { + Super[] s = new Super[a.size()]; + for (int i = 0; i < a.size(); i++) { + JSONObject o = (JSONObject) a.get(i); + s[i] = new Super(this.get(o, "class"), this.get(o, "super")); + } + return s; + } + return null; + } - @Override - public Getter[] getGetters() { - JSONArray a = (JSONArray) root.get("getters"); + @Override + public Getter[] getGetters() { + JSONArray a = (JSONArray) root.get("getters"); - if (a != null && a.size() > 0) { - Getter[] g = new Getter[a.size()]; - for (int i = 0; i < a.size(); i++) { - JSONObject o = (JSONObject) a.get(i); + if (a != null && a.size() > 0) { + Getter[] g = new Getter[a.size()]; + for (int i = 0; i < a.size(); i++) { + JSONObject o = (JSONObject) a.get(i); - if (o.containsKey("class") && o.containsKey("accessor")) { - throw new RuntimeException("Cannot have class AND accessor tags together!"); - } + if (o.containsKey("class") && o.containsKey("accessor")) { + throw new RuntimeException("Cannot have class AND accessor tags together!"); + } - if (o.containsKey("accessor") && this.interfaces == null) { - throw new RuntimeException("Cannot use accessor tag before parsing interfaces!"); - } + if (o.containsKey("accessor") && this.interfaces == null) { + throw new RuntimeException("Cannot use accessor tag before parsing interfaces!"); + } - String desc = this.get(o, "desc"); + String desc = this.get(o, "desc"); - if (desc != null && desc.contains("%s")) { - desc = formatDescription(desc); - } + if (desc != null && desc.contains("%s")) { + desc = formatDescription(desc); + } - String clazz = o.containsKey("class") ? this.get(o, "class") : interfaces.get(this.get(o, "accessor")); - String into = o.containsKey("into") ? this.get(o, "into") : clazz; + String clazz = o.containsKey("class") ? this.get(o, "class") : interfaces.get(this.get(o, "accessor")); + String into = o.containsKey("into") ? this.get(o, "into") : clazz; - g[i] = new Getter(into, clazz, this.get(o, "field"), this.get(o, "method"), desc, o.containsKey("static") ? (boolean) o.get("static") : false, 0, null); - } - return g; - } - return null; - } + g[i] = new Getter(into, clazz, this.get(o, "field"), this.get(o, "method"), desc, o.containsKey("static") ? (boolean) o.get("static") : false, 0, null); + } + return g; + } + return null; + } - @Override - public Setter[] getSetters() { - JSONArray a = (JSONArray) root.get("setters"); + @Override + public Setter[] getSetters() { + JSONArray a = (JSONArray) root.get("setters"); - if (a != null && a.size() > 0) { - Setter[] s = new Setter[a.size()]; - for (int i = 0; i < a.size(); i++) { - JSONObject o = (JSONObject) a.get(i); + if (a != null && a.size() > 0) { + Setter[] s = new Setter[a.size()]; + for (int i = 0; i < a.size(); i++) { + JSONObject o = (JSONObject) a.get(i); - if (o.containsKey("class") && o.containsKey("accessor")) { - throw new RuntimeException("Cannot have class AND accessor tags together!"); - } + if (o.containsKey("class") && o.containsKey("accessor")) { + throw new RuntimeException("Cannot have class AND accessor tags together!"); + } - if (o.containsKey("accessor") && this.interfaces == null) { - throw new RuntimeException("Cannot use accessor tag before parsing interfaces!"); - } + if (o.containsKey("accessor") && this.interfaces == null) { + throw new RuntimeException("Cannot use accessor tag before parsing interfaces!"); + } - String desc = this.get(o, "desc"); + String desc = this.get(o, "desc"); - if (desc != null && desc.contains("%s")) { - desc = formatDescription(desc); - } + if (desc != null && desc.contains("%s")) { + desc = formatDescription(desc); + } - String clazz = o.containsKey("class") ? this.get(o, "class") : interfaces.get(this.get(o, "accessor")); - String into = o.containsKey("into") ? this.get(o, "into") : clazz; + String clazz = o.containsKey("class") ? this.get(o, "class") : interfaces.get(this.get(o, "accessor")); + String into = o.containsKey("into") ? this.get(o, "into") : clazz; - s[i] = new Setter(into, clazz, this.get(o, "field"), this.get(o, "method"), desc, o.containsKey("static") ? (boolean) o.get("static") : false, null); - } - return s; - } - return null; - } + s[i] = new Setter(into, clazz, this.get(o, "field"), this.get(o, "method"), desc, o.containsKey("static") ? (boolean) o.get("static") : false, null); + } + return s; + } + return null; + } - @Override - public Invoker[] getInvokers() { - JSONArray a = (JSONArray) root.get("invokers"); + @Override + public Invoker[] getInvokers() { + JSONArray a = (JSONArray) root.get("invokers"); - if (a != null && a.size() > 0) { - Invoker[] i = new Invoker[a.size()]; - for (int j = 0; j < a.size(); j++) { - JSONObject o = (JSONObject) a.get(j); + if (a != null && a.size() > 0) { + Invoker[] i = new Invoker[a.size()]; + for (int j = 0; j < a.size(); j++) { + JSONObject o = (JSONObject) a.get(j); - if (o.containsKey("class") && o.containsKey("accessor")) { - throw new RuntimeException("Cannot have class AND accessor tags together!"); - } + if (o.containsKey("class") && o.containsKey("accessor")) { + throw new RuntimeException("Cannot have class AND accessor tags together!"); + } - if (o.containsKey("accessor") && this.interfaces == null) { - throw new RuntimeException("Cannot use accessor tag before parsing interfaces!"); - } + if (o.containsKey("accessor") && this.interfaces == null) { + throw new RuntimeException("Cannot use accessor tag before parsing interfaces!"); + } - String desc = this.get(o, "desc"); + String desc = this.get(o, "desc"); - if (desc != null && desc.contains("%s")) { - desc = formatDescription(desc); - } + if (desc != null && desc.contains("%s")) { + desc = formatDescription(desc); + } - String clazz = o.containsKey("class") ? this.get(o, "class") : interfaces.get(this.get(o, "accessor")); - String into = o.containsKey("into") ? this.get(o, "into") : clazz; + String clazz = o.containsKey("class") ? this.get(o, "class") : interfaces.get(this.get(o, "accessor")); + String into = o.containsKey("into") ? this.get(o, "into") : clazz; - i[j] = new Invoker(into, clazz, this.get(o, "invokemethod"), this.get(o, "argdesc"), this.get(o, "desc"), this.get(o, "method"), false, null, null); - } - return i; - } - return null; - } + i[j] = new Invoker(into, clazz, this.get(o, "invokemethod"), this.get(o, "argdesc"), this.get(o, "desc"), this.get(o, "method"), false, null, null); + } + return i; + } + return null; + } - @Override - public Callback[] getCallbacks() { - JSONArray a = (JSONArray) root.get("callbacks"); + @Override + public Callback[] getCallbacks() { + JSONArray a = (JSONArray) root.get("callbacks"); - if (a != null && a.size() > 0) { - Callback[] c = new Callback[a.size()]; - for (int j = 0; j < a.size(); j++) { - JSONObject o = (JSONObject) a.get(j); + if (a != null && a.size() > 0) { + Callback[] c = new Callback[a.size()]; + for (int j = 0; j < a.size(); j++) { + JSONObject o = (JSONObject) a.get(j); - if (o.containsKey("class") && o.containsKey("accessor")) { - throw new RuntimeException("Cannot have class AND accessor tags together!"); - } + if (o.containsKey("class") && o.containsKey("accessor")) { + throw new RuntimeException("Cannot have class AND accessor tags together!"); + } - if (o.containsKey("accessor") && this.interfaces == null) { - throw new RuntimeException("Cannot use accessor tag before parsing interfaces!"); - } + if (o.containsKey("accessor") && this.interfaces == null) { + throw new RuntimeException("Cannot use accessor tag before parsing interfaces!"); + } - String desc = this.get(o, "desc"); + String desc = this.get(o, "desc"); - if (desc != null && desc.contains("%s")) { - desc = formatDescription(desc); - } + if (desc != null && desc.contains("%s")) { + desc = formatDescription(desc); + } - String clazz = o.containsKey("class") ? this.get(o, "class") : interfaces.get(this.get(o, "accessor")); + String clazz = o.containsKey("class") ? this.get(o, "class") : interfaces.get(this.get(o, "accessor")); - c[j] = new Callback(clazz, this.get(o, "method"), this.get(o, "callclass"), this.get(o, "callmethod"), this.get(o, "calldesc"), this.get(o, "callargs"), this.get(o, "desc"), false); - } - return c; - } - return null; - } + c[j] = new Callback(clazz, this.get(o, "method"), this.get(o, "callclass"), this.get(o, "callmethod"), this.get(o, "calldesc"), this.get(o, "callargs"), this.get(o, "desc"), false); + } + return c; + } + return null; + } - @Override - public HashMap getConstants() { - if (this.constants == null) { - this.constants = new HashMap<>(); - } + @Override + public HashMap getConstants() { + if (this.constants == null) { + this.constants = new HashMap<>(); + } - if (!this.constants.isEmpty()) { - return this.constants; - } + if (!this.constants.isEmpty()) { + return this.constants; + } - JSONArray a = (JSONArray) root.get("constants"); + JSONArray a = (JSONArray) root.get("constants"); - if (a != null && a.size() > 0) { - for (int j = 0; j < a.size(); j++) { - JSONObject o = (JSONObject) a.get(j); - this.constants.put(this.get(o, "name"), (String) o.get("value")); - } - } + if (a != null && a.size() > 0) { + for (int j = 0; j < a.size(); j++) { + JSONObject o = (JSONObject) a.get(j); + this.constants.put(this.get(o, "name"), (String) o.get("value")); + } + } - return this.constants; - } + return this.constants; + } } diff --git a/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java b/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java index c334cb2..af01411 100644 --- a/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java +++ b/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java @@ -1,274 +1,44 @@ package org.parabot.core.parsers.hooks; -import java.util.ArrayList; -import java.util.HashMap; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - import org.parabot.core.Core; import org.parabot.core.asm.adapters.AddInterfaceAdapter; import org.parabot.core.asm.hooks.HookFile; -import org.parabot.core.asm.wrappers.Callback; -import org.parabot.core.asm.wrappers.Getter; -import org.parabot.core.asm.wrappers.Interface; -import org.parabot.core.asm.wrappers.Invoker; -import org.parabot.core.asm.wrappers.Setter; -import org.parabot.core.asm.wrappers.Super; +import org.parabot.core.asm.wrappers.*; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.util.ArrayList; +import java.util.HashMap; + public class XMLHookParser extends HookParser { - private Document doc; - private HashMap interfaceMap; - private HashMap constants; - private boolean parsedInterfaces; + private Document doc; + private HashMap interfaceMap; + private HashMap constants; + private boolean parsedInterfaces; - public XMLHookParser(HookFile hookFile) { - super(hookFile); - interfaceMap = new HashMap(); - constants = new HashMap(); - try { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory - .newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - doc = dBuilder.parse(hookFile.getInputStream()); - doc.getDocumentElement().normalize(); - if (!doc.getDocumentElement().getNodeName().equals("injector")) { - throw new RuntimeException("Incorrect hook file."); - } - } catch (Throwable t) { - throw new RuntimeException("Unable to parse hooks " + t); - } - } + public XMLHookParser(HookFile hookFile) { + super(hookFile); + interfaceMap = new HashMap(); + constants = new HashMap(); + try { + DocumentBuilderFactory dbFactory = DocumentBuilderFactory + .newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + doc = dBuilder.parse(hookFile.getInputStream()); + doc.getDocumentElement().normalize(); + if (!doc.getDocumentElement().getNodeName().equals("injector")) { + throw new RuntimeException("Incorrect hook file."); + } + } catch (Throwable t) { + throw new RuntimeException("Unable to parse hooks " + t); + } + } - @Override - public Interface[] getInterfaces() { - parsedInterfaces = true; - final NodeList interfaceRootList = doc - .getElementsByTagName("interfaces"); - switch (interfaceRootList.getLength()) { - case 0: - return null; - case 1: - break; - default: - throw new RuntimeException( - "Hook file may not contains multiple tags "); - } - final Node node = interfaceRootList.item(0); - if (node.getNodeType() != Node.ELEMENT_NODE) { - return null; - } - final Element interfaceRoot = (Element) node; - final NodeList interfaces = interfaceRoot.getElementsByTagName("add"); - if (interfaces.getLength() == 0) { - return null; - } - final ArrayList interfaceList = new ArrayList(); - for (int x = 0; x < interfaces.getLength(); x++) { - final Node n = interfaces.item(x); - if (n.getNodeType() != Node.ELEMENT_NODE) { - continue; - } - final Element addInterface = (Element) n; - final String className = getValue("classname", addInterface); - final String interfaceClass = getValue("interface", addInterface); - interfaceMap.put(interfaceClass, className); - final Interface inf = new Interface(className, interfaceClass); - interfaceList.add(inf); - } - return interfaceList.toArray(new Interface[interfaceList.size()]); - } - - @Override - public Super[] getSupers() { - final NodeList interfaceRootList = doc.getElementsByTagName("supers"); - switch (interfaceRootList.getLength()) { - case 0: - return null; - case 1: - break; - default: - throw new RuntimeException( - "Hook file may not contains multiple tags "); - } - final Node node = interfaceRootList.item(0); - if (node.getNodeType() != Node.ELEMENT_NODE) { - return null; - } - final Element superRoot = (Element) node; - final NodeList supers = superRoot.getElementsByTagName("add"); - if (supers.getLength() == 0) { - return null; - } - final ArrayList superList = new ArrayList(); - for (int x = 0; x < supers.getLength(); x++) { - final Node n = supers.item(x); - if (n.getNodeType() != Node.ELEMENT_NODE) { - continue; - } - final Element addSuper = (Element) n; - final String className = getValue("classname", addSuper); - final String superClass = getValue("super", addSuper); - final Super sup = new Super(className, superClass); - superList.add(sup); - } - return superList.toArray(new Super[superList.size()]); - } - - @Override - public Getter[] getGetters() { - final NodeList getterRootList = doc.getElementsByTagName("getters"); - switch (getterRootList.getLength()) { - case 0: - return null; - case 1: - break; - default: - throw new RuntimeException( - "Hook file may not contains multiple tags "); - } - final Node node = getterRootList.item(0); - if (node.getNodeType() != Node.ELEMENT_NODE) { - return null; - } - final Element getterRoot = (Element) node; - final NodeList getters = getterRoot.getElementsByTagName("add"); - if (getters.getLength() == 0) { - return null; - } - final ArrayList getterList = new ArrayList(); - for (int x = 0; x < getters.getLength(); x++) { - final Node n = getters.item(x); - if (n.getNodeType() != Node.ELEMENT_NODE) { - continue; - } - final Element addGetter = (Element) n; - if (isSet("classname", addGetter) && isSet("accessor", addGetter)) { - throw new RuntimeException( - "Can't set classname and accessor tag together."); - } - if (isSet("accessor", addGetter) && !parsedInterfaces) { - throw new RuntimeException( - "You'll need to parse interfaces first."); - } - final String className = isSet("classname", addGetter) ? getValue( - "classname", addGetter) : interfaceMap.get(getValue( - "accessor", addGetter)); - final String into = isSet("into", addGetter) ? getValue("into", - addGetter) : className; - final long multiplier = isSet("multiplier", addGetter) ? Long.parseLong(getValue("multiplier", addGetter)) : 0L; - final String fieldName = getValue("field", addGetter); - final String fieldDesc = isSet("descfield", addGetter) ? getValue("descfield", addGetter) : null; - final String methodName = getValue("methodname", addGetter); - boolean staticMethod = isSet("methstatic", addGetter) ? (getValue( - "methstatic", addGetter).equals("true")) : false; - String returnDesc = isSet("desc", addGetter) ? getValue("desc", - addGetter) : null; - String array = ""; - if (returnDesc != null && returnDesc.contains("%s")) { - StringBuilder str = new StringBuilder(); - if (returnDesc.startsWith("[")) { - for (int i = 0; i < returnDesc.length(); i++) { - if (returnDesc.charAt(i) == '[') { - array += '['; - } - } - returnDesc = returnDesc.replaceAll("\\[", ""); - } - str.append(array) - .append('L') - .append(String.format(returnDesc, - AddInterfaceAdapter.getAccessorPackage())) - .append(";"); - returnDesc = str.toString(); - } - final Getter get = new Getter(into, className, fieldName, - methodName, returnDesc, staticMethod, multiplier, fieldDesc); - getterList.add(get); - } - Core.verbose("Fields hooked: " + getterList.size()); - return getterList.toArray(new Getter[getterList.size()]); - } - - @Override - public Setter[] getSetters() { - final NodeList setterRootList = doc.getElementsByTagName("setters"); - switch (setterRootList.getLength()) { - case 0: - return null; - case 1: - break; - default: - throw new RuntimeException( - "Hook file may not contains multiple tags "); - } - final Node node = setterRootList.item(0); - if (node.getNodeType() != Node.ELEMENT_NODE) { - return null; - } - final Element setterRoot = (Element) node; - final NodeList setters = setterRoot.getElementsByTagName("add"); - if (setters.getLength() == 0) { - return null; - } - final ArrayList setterList = new ArrayList(); - for (int x = 0; x < setters.getLength(); x++) { - final Node n = setters.item(x); - if (n.getNodeType() != Node.ELEMENT_NODE) { - continue; - } - final Element addSetter = (Element) n; - if (isSet("classname", addSetter) && isSet("accessor", addSetter)) { - throw new RuntimeException( - "Can't set classname and accessor tag together."); - } - if (isSet("accessor", addSetter) && !parsedInterfaces) { - throw new RuntimeException( - "You'll need to parse interfaces first."); - } - final String className = isSet("classname", addSetter) ? getValue( - "classname", addSetter) : interfaceMap.get(getValue( - "accessor", addSetter)); - final String into = isSet("into", addSetter) ? getValue("into", - addSetter) : className; - final String fieldName = getValue("field", addSetter); - final String fieldDesc = isSet("descfield", addSetter) ? getValue("descfield", addSetter) : null; - final String methodName = getValue("methodname", addSetter); - boolean staticMethod = isSet("methstatic", addSetter) ? (getValue( - "methstatic", addSetter).equals("true")) : false; - String returnDesc = isSet("desc", addSetter) ? getValue("desc", - addSetter) : null; - String array = ""; - if (returnDesc != null && returnDesc.contains("%s")) { - StringBuilder str = new StringBuilder(); - if (returnDesc.startsWith("[")) { - for (int i = 0; i < returnDesc.length(); i++) { - if (returnDesc.charAt(i) == '[') { - array += '['; - } - } - returnDesc = returnDesc.replaceAll("\\[", ""); - } - str.append(array) - .append('L') - .append(String.format(returnDesc, - AddInterfaceAdapter.getAccessorPackage())) - .append(";"); - returnDesc = str.toString(); - } - final Setter get = new Setter(className, into, fieldName, - methodName, returnDesc, staticMethod, fieldDesc); - setterList.add(get); - } - return setterList.toArray(new Setter[setterList.size()]); - } - - - private static String resolveDesc(String returnDesc) { + private static String resolveDesc(String returnDesc) { String array = ""; if (returnDesc != null && returnDesc.contains("%s")) { StringBuilder str = new StringBuilder(); @@ -301,9 +71,232 @@ public class XMLHookParser extends HookParser { return node.getNodeValue(); } - @Override - public Invoker[] getInvokers() { - final NodeList invokerRootList = doc.getElementsByTagName("invokers"); + @Override + public Interface[] getInterfaces() { + parsedInterfaces = true; + final NodeList interfaceRootList = doc + .getElementsByTagName("interfaces"); + switch (interfaceRootList.getLength()) { + case 0: + return null; + case 1: + break; + default: + throw new RuntimeException( + "Hook file may not contains multiple tags "); + } + final Node node = interfaceRootList.item(0); + if (node.getNodeType() != Node.ELEMENT_NODE) { + return null; + } + final Element interfaceRoot = (Element) node; + final NodeList interfaces = interfaceRoot.getElementsByTagName("add"); + if (interfaces.getLength() == 0) { + return null; + } + final ArrayList interfaceList = new ArrayList(); + for (int x = 0; x < interfaces.getLength(); x++) { + final Node n = interfaces.item(x); + if (n.getNodeType() != Node.ELEMENT_NODE) { + continue; + } + final Element addInterface = (Element) n; + final String className = getValue("classname", addInterface); + final String interfaceClass = getValue("interface", addInterface); + interfaceMap.put(interfaceClass, className); + final Interface inf = new Interface(className, interfaceClass); + interfaceList.add(inf); + } + return interfaceList.toArray(new Interface[interfaceList.size()]); + } + + @Override + public Super[] getSupers() { + final NodeList interfaceRootList = doc.getElementsByTagName("supers"); + switch (interfaceRootList.getLength()) { + case 0: + return null; + case 1: + break; + default: + throw new RuntimeException( + "Hook file may not contains multiple tags "); + } + final Node node = interfaceRootList.item(0); + if (node.getNodeType() != Node.ELEMENT_NODE) { + return null; + } + final Element superRoot = (Element) node; + final NodeList supers = superRoot.getElementsByTagName("add"); + if (supers.getLength() == 0) { + return null; + } + final ArrayList superList = new ArrayList(); + for (int x = 0; x < supers.getLength(); x++) { + final Node n = supers.item(x); + if (n.getNodeType() != Node.ELEMENT_NODE) { + continue; + } + final Element addSuper = (Element) n; + final String className = getValue("classname", addSuper); + final String superClass = getValue("super", addSuper); + final Super sup = new Super(className, superClass); + superList.add(sup); + } + return superList.toArray(new Super[superList.size()]); + } + + @Override + public Getter[] getGetters() { + final NodeList getterRootList = doc.getElementsByTagName("getters"); + switch (getterRootList.getLength()) { + case 0: + return null; + case 1: + break; + default: + throw new RuntimeException( + "Hook file may not contains multiple tags "); + } + final Node node = getterRootList.item(0); + if (node.getNodeType() != Node.ELEMENT_NODE) { + return null; + } + final Element getterRoot = (Element) node; + final NodeList getters = getterRoot.getElementsByTagName("add"); + if (getters.getLength() == 0) { + return null; + } + final ArrayList getterList = new ArrayList(); + for (int x = 0; x < getters.getLength(); x++) { + final Node n = getters.item(x); + if (n.getNodeType() != Node.ELEMENT_NODE) { + continue; + } + final Element addGetter = (Element) n; + if (isSet("classname", addGetter) && isSet("accessor", addGetter)) { + throw new RuntimeException( + "Can't set classname and accessor tag together."); + } + if (isSet("accessor", addGetter) && !parsedInterfaces) { + throw new RuntimeException( + "You'll need to parse interfaces first."); + } + final String className = isSet("classname", addGetter) ? getValue( + "classname", addGetter) : interfaceMap.get(getValue( + "accessor", addGetter)); + final String into = isSet("into", addGetter) ? getValue("into", + addGetter) : className; + final long multiplier = isSet("multiplier", addGetter) ? Long.parseLong(getValue("multiplier", addGetter)) : 0L; + final String fieldName = getValue("field", addGetter); + final String fieldDesc = isSet("descfield", addGetter) ? getValue("descfield", addGetter) : null; + final String methodName = getValue("methodname", addGetter); + boolean staticMethod = isSet("methstatic", addGetter) ? (getValue( + "methstatic", addGetter).equals("true")) : false; + String returnDesc = isSet("desc", addGetter) ? getValue("desc", + addGetter) : null; + String array = ""; + if (returnDesc != null && returnDesc.contains("%s")) { + StringBuilder str = new StringBuilder(); + if (returnDesc.startsWith("[")) { + for (int i = 0; i < returnDesc.length(); i++) { + if (returnDesc.charAt(i) == '[') { + array += '['; + } + } + returnDesc = returnDesc.replaceAll("\\[", ""); + } + str.append(array) + .append('L') + .append(String.format(returnDesc, + AddInterfaceAdapter.getAccessorPackage())) + .append(";"); + returnDesc = str.toString(); + } + final Getter get = new Getter(into, className, fieldName, + methodName, returnDesc, staticMethod, multiplier, fieldDesc); + getterList.add(get); + } + Core.verbose("Fields hooked: " + getterList.size()); + return getterList.toArray(new Getter[getterList.size()]); + } + + @Override + public Setter[] getSetters() { + final NodeList setterRootList = doc.getElementsByTagName("setters"); + switch (setterRootList.getLength()) { + case 0: + return null; + case 1: + break; + default: + throw new RuntimeException( + "Hook file may not contains multiple tags "); + } + final Node node = setterRootList.item(0); + if (node.getNodeType() != Node.ELEMENT_NODE) { + return null; + } + final Element setterRoot = (Element) node; + final NodeList setters = setterRoot.getElementsByTagName("add"); + if (setters.getLength() == 0) { + return null; + } + final ArrayList setterList = new ArrayList(); + for (int x = 0; x < setters.getLength(); x++) { + final Node n = setters.item(x); + if (n.getNodeType() != Node.ELEMENT_NODE) { + continue; + } + final Element addSetter = (Element) n; + if (isSet("classname", addSetter) && isSet("accessor", addSetter)) { + throw new RuntimeException( + "Can't set classname and accessor tag together."); + } + if (isSet("accessor", addSetter) && !parsedInterfaces) { + throw new RuntimeException( + "You'll need to parse interfaces first."); + } + final String className = isSet("classname", addSetter) ? getValue( + "classname", addSetter) : interfaceMap.get(getValue( + "accessor", addSetter)); + final String into = isSet("into", addSetter) ? getValue("into", + addSetter) : className; + final String fieldName = getValue("field", addSetter); + final String fieldDesc = isSet("descfield", addSetter) ? getValue("descfield", addSetter) : null; + final String methodName = getValue("methodname", addSetter); + boolean staticMethod = isSet("methstatic", addSetter) ? (getValue( + "methstatic", addSetter).equals("true")) : false; + String returnDesc = isSet("desc", addSetter) ? getValue("desc", + addSetter) : null; + String array = ""; + if (returnDesc != null && returnDesc.contains("%s")) { + StringBuilder str = new StringBuilder(); + if (returnDesc.startsWith("[")) { + for (int i = 0; i < returnDesc.length(); i++) { + if (returnDesc.charAt(i) == '[') { + array += '['; + } + } + returnDesc = returnDesc.replaceAll("\\[", ""); + } + str.append(array) + .append('L') + .append(String.format(returnDesc, + AddInterfaceAdapter.getAccessorPackage())) + .append(";"); + returnDesc = str.toString(); + } + final Setter get = new Setter(className, into, fieldName, + methodName, returnDesc, staticMethod, fieldDesc); + setterList.add(get); + } + return setterList.toArray(new Setter[setterList.size()]); + } + + @Override + public Invoker[] getInvokers() { + final NodeList invokerRootList = doc.getElementsByTagName("invokers"); switch (invokerRootList.getLength()) { case 0: return null; @@ -317,8 +310,8 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element invokerRoot = (Element) node; - final NodeList invokers = invokerRoot.getElementsByTagName("add"); + final Element invokerRoot = (Element) node; + final NodeList invokers = invokerRoot.getElementsByTagName("add"); if (invokers.getLength() == 0) { return null; } @@ -342,26 +335,26 @@ public class XMLHookParser extends HookParser { "accessor", addInvoker)); final String into = isSet("into", addInvoker) ? getValue("into", addInvoker) : className; - final String methodName = getValue("methodname", addInvoker); + final String methodName = getValue("methodname", addInvoker); final String invMethodName = getValue("invokemethod", addInvoker); - final String argsDesc = getValue("argsdesc", addInvoker); + final String argsDesc = getValue("argsdesc", addInvoker); String returnDesc = isSet("desc", addInvoker) ? resolveDesc(getValue( "desc", addInvoker)) : null; - - final boolean isInterface = isSet("interface", addInvoker) ? Boolean.parseBoolean(getValue("interface", addInvoker)) : false; - final String instanceCast = isSet("instancecast", addInvoker) ? getValue("instancecast", addInvoker) : null; - final String checkCastArgsDesc = isSet("castargs", addInvoker) ? getValue("castargs", addInvoker) : null; + + final boolean isInterface = isSet("interface", addInvoker) ? Boolean.parseBoolean(getValue("interface", addInvoker)) : false; + final String instanceCast = isSet("instancecast", addInvoker) ? getValue("instancecast", addInvoker) : null; + final String checkCastArgsDesc = isSet("castargs", addInvoker) ? getValue("castargs", addInvoker) : null; final Invoker invoker = new Invoker(into, className, invMethodName, argsDesc, returnDesc, methodName, isInterface, instanceCast, checkCastArgsDesc); invokerList.add(invoker); } return invokerList.toArray(new Invoker[invokerList.size()]); - } + } - @Override - public HashMap getConstants() { - if (!constants.isEmpty()) { + @Override + public HashMap getConstants() { + if (!constants.isEmpty()) { return constants; } final NodeList constantsRootList = doc @@ -379,7 +372,7 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element constantRoot = (Element) node; + final Element constantRoot = (Element) node; final NodeList constantsList = constantRoot.getElementsByTagName("add"); if (constantsList.getLength() == 0) { // return empty hashmap @@ -391,16 +384,16 @@ public class XMLHookParser extends HookParser { continue; } final Element addConstant = (Element) n; - final String key = getValue("key", addConstant); - final String value = getValue("value", addConstant); + final String key = getValue("key", addConstant); + final String value = getValue("value", addConstant); constants.put(key, value); } return constants; - } + } - @Override - public Callback[] getCallbacks() { - final NodeList callbackRootList = doc.getElementsByTagName("callbacks"); + @Override + public Callback[] getCallbacks() { + final NodeList callbackRootList = doc.getElementsByTagName("callbacks"); switch (callbackRootList.getLength()) { case 0: return null; @@ -414,8 +407,8 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element callbackRoot = (Element) node; - final NodeList callbacks = callbackRoot.getElementsByTagName("add"); + final Element callbackRoot = (Element) node; + final NodeList callbacks = callbackRoot.getElementsByTagName("add"); if (callbacks.getLength() == 0) { return null; } @@ -439,12 +432,12 @@ public class XMLHookParser extends HookParser { "classname", addCallback) : interfaceMap.get(getValue( "accessor", addCallback)); - final String methodName = getValue("methodname", addCallback); - final String callClass = getValue("callclass", addCallback); - final String callMethod = getValue("callmethod", addCallback); - final String callDesc = getValue("calldesc", addCallback); - final String callArgs = getValue("callargs", addCallback); - final String desc = getValue("desc", addCallback); + final String methodName = getValue("methodname", addCallback); + final String callClass = getValue("callclass", addCallback); + final String callMethod = getValue("callmethod", addCallback); + final String callDesc = getValue("calldesc", addCallback); + final String callArgs = getValue("callargs", addCallback); + final String desc = getValue("desc", addCallback); final boolean conditional = isSet("conditional", addCallback); final Callback callback = new Callback(className, methodName, desc, @@ -452,6 +445,6 @@ public class XMLHookParser extends HookParser { callbackList.add(callback); } return callbackList.toArray(new Callback[callbackList.size()]); - } + } } diff --git a/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java b/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java index 4a1d80f..ed285ff 100644 --- a/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java +++ b/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java @@ -28,14 +28,14 @@ public class PublicRandoms extends RandomParser { download(); } try { - URL url = myJar.toURI().toURL(); - URL[] urls = new URL[]{url}; + URL url = myJar.toURI().toURL(); + URL[] urls = new URL[]{ url }; String server = Context.getInstance().getServerProviderInfo().getServerName(); - URLClassLoader child = new URLClassLoader(urls, this.getClass().getClassLoader()); - Class classToLoad = Class.forName("org.parabot.randoms.Core", true, child); - Method method = classToLoad.getDeclaredMethod("init", String.class); - Object instance = classToLoad.newInstance(); + URLClassLoader child = new URLClassLoader(urls, this.getClass().getClassLoader()); + Class classToLoad = Class.forName("org.parabot.randoms.Core", true, child); + Method method = classToLoad.getDeclaredMethod("init", String.class); + Object instance = classToLoad.newInstance(); System.out.println(server); method.invoke(instance, server); Core.verbose("Successfully parsed public random!"); diff --git a/src/main/java/org/parabot/core/parsers/scripts/BDNScripts.java b/src/main/java/org/parabot/core/parsers/scripts/BDNScripts.java index f8b23a1..1c72934 100644 --- a/src/main/java/org/parabot/core/parsers/scripts/BDNScripts.java +++ b/src/main/java/org/parabot/core/parsers/scripts/BDNScripts.java @@ -40,19 +40,19 @@ public class BDNScripts extends ScriptParser { JSONParser parser = new JSONParser(); try { BufferedReader br = WebUtil.getReader(new URL( - Configuration.GET_SCRIPTS + Context.getInstance().getServerProviderInfo().getServerName()), + Configuration.GET_SCRIPTS + Context.getInstance().getServerProviderInfo().getServerName()), manager.getAccount().getURLUsername(), manager.getAccount().getURLPassword()); String line; while ((line = br.readLine()) != null) { - JSONObject jsonObject = (JSONObject) parser.parse(line); - int bdnId = Integer.parseInt(String.valueOf(jsonObject.get("id"))); - String scriptName = String.valueOf(jsonObject.get("name")); - String author = String.valueOf(jsonObject.get("author")); - double version = Double.parseDouble(String.valueOf(jsonObject.get("version"))); - String category = String.valueOf(jsonObject.get("category")); - String description = String.valueOf(jsonObject.get("description")); + JSONObject jsonObject = (JSONObject) parser.parse(line); + int bdnId = Integer.parseInt(String.valueOf(jsonObject.get("id"))); + String scriptName = String.valueOf(jsonObject.get("name")); + String author = String.valueOf(jsonObject.get("author")); + double version = Double.parseDouble(String.valueOf(jsonObject.get("version"))); + String category = String.valueOf(jsonObject.get("category")); + String description = String.valueOf(jsonObject.get("description")); final ScriptDescription desc = new ScriptDescription(scriptName, author, category, version, description, diff --git a/src/main/java/org/parabot/core/parsers/scripts/ScriptParser.java b/src/main/java/org/parabot/core/parsers/scripts/ScriptParser.java index 068d6e1..9bb26d3 100644 --- a/src/main/java/org/parabot/core/parsers/scripts/ScriptParser.java +++ b/src/main/java/org/parabot/core/parsers/scripts/ScriptParser.java @@ -1,14 +1,14 @@ package org.parabot.core.parsers.scripts; +import org.parabot.core.Core; +import org.parabot.core.desc.ScriptDescription; +import org.parabot.environment.scripts.executers.ScriptExecuter; + import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; -import org.parabot.core.Core; -import org.parabot.core.desc.ScriptDescription; -import org.parabot.environment.scripts.executers.ScriptExecuter; - /** * Abstract class for parsing scripts * @@ -18,8 +18,6 @@ public abstract class ScriptParser { public static final Map SCRIPT_CACHE = new HashMap(); - public abstract void execute(); - public static ScriptDescription[] getDescriptions() { SCRIPT_CACHE.clear(); final ArrayList parsers = new ArrayList(); @@ -43,10 +41,12 @@ public abstract class ScriptParser { } Core.verbose("Scripts parsed."); } - - Map SORTED_SCRIPT_CACHE = new TreeMap( SCRIPT_CACHE ); + + Map SORTED_SCRIPT_CACHE = new TreeMap(SCRIPT_CACHE); return SORTED_SCRIPT_CACHE.keySet().toArray(new ScriptDescription[SORTED_SCRIPT_CACHE.size()]); } + public abstract void execute(); + } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java index 96c0e14..eb0f698 100644 --- a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java +++ b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java @@ -1,36 +1,23 @@ package org.parabot.core.parsers.servers; -import java.io.File; -import java.io.FileReader; -import java.io.FilenameFilter; -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Objects; - import org.json.simple.JSONObject; import org.json.simple.parser.ParseException; -import org.parabot.core.Configuration; -import org.parabot.core.Context; import org.parabot.core.Core; import org.parabot.core.Directories; -import org.parabot.core.build.BuildPath; import org.parabot.core.classpath.ClassPath; import org.parabot.core.desc.ServerDescription; import org.parabot.core.desc.ServerProviderInfo; -import org.parabot.core.ui.components.VerboseLoader; -import org.parabot.core.ui.utils.UILog; import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.servers.ServerManifest; -import org.parabot.environment.servers.ServerProvider; import org.parabot.environment.servers.executers.LocalPublicServerExecuter; import org.parabot.environment.servers.executers.LocalServerExecuter; -import org.parabot.environment.servers.executers.PublicServerExecuter; import org.parabot.environment.servers.loader.ServerLoader; -import javax.swing.*; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.util.ArrayList; /** * Parses local server providers located in the servers directory @@ -86,24 +73,24 @@ public class LocalServers extends ServerParser { } } - for (File file : Directories.listJSONFiles(Directories.getServerPath())){ + for (File file : Directories.listJSONFiles(Directories.getServerPath())) { Core.verbose("[Local server in]: " + file.getName()); try { - JSONObject object = (JSONObject) WebUtil.getJsonParser().parse(new FileReader(file)); - String name = (String) object.get("name"); - String author = (String) object.get("author"); - double version = (Double) object.get("version"); - String clientClass = (String) object.get("client-class"); - Object bank; - int bankTabs = 0; - if ((bank = object.get("bank")) != null){ + JSONObject object = (JSONObject) WebUtil.getJsonParser().parse(new FileReader(file)); + String name = (String) object.get("name"); + String author = (String) object.get("author"); + double version = (Double) object.get("version"); + String clientClass = (String) object.get("client-class"); + Object bank; + int bankTabs = 0; + if ((bank = object.get("bank")) != null) { bankTabs = (int) bank; } JSONObject locations = (JSONObject) object.get("locations"); - String server = (String) locations.get("server"); - String provider = (String) locations.get("provider"); - String hooks = (String) locations.get("hooks"); + String server = (String) locations.get("server"); + String provider = (String) locations.get("provider"); + String hooks = (String) locations.get("hooks"); Core.verbose("[Local server]: " + name); ServerProviderInfo serverProviderInfo = new ServerProviderInfo(server, hooks, name, clientClass, bankTabs); diff --git a/src/main/java/org/parabot/core/parsers/servers/PublicServers.java b/src/main/java/org/parabot/core/parsers/servers/PublicServers.java index ead4bdc..3aced4c 100644 --- a/src/main/java/org/parabot/core/parsers/servers/PublicServers.java +++ b/src/main/java/org/parabot/core/parsers/servers/PublicServers.java @@ -43,9 +43,9 @@ public class PublicServers extends ServerParser { while ((line = br.readLine()) != null) { JSONObject jsonObject = (JSONObject) parser.parse(line); - String name = String.valueOf(jsonObject.get("name")); - String author = String.valueOf(jsonObject.get("author")); - double version = Double.parseDouble(String.valueOf(jsonObject.get("version"))); + String name = String.valueOf(jsonObject.get("name")); + String author = String.valueOf(jsonObject.get("author")); + double version = Double.parseDouble(String.valueOf(jsonObject.get("version"))); ServerDescription desc = new ServerDescription(name, author, version); diff --git a/src/main/java/org/parabot/core/parsers/servers/ServerParser.java b/src/main/java/org/parabot/core/parsers/servers/ServerParser.java index 91d5b24..4ee3739 100644 --- a/src/main/java/org/parabot/core/parsers/servers/ServerParser.java +++ b/src/main/java/org/parabot/core/parsers/servers/ServerParser.java @@ -17,8 +17,6 @@ import java.util.TreeMap; public abstract class ServerParser { public static final Map SERVER_CACHE = new HashMap(); - public abstract void execute(); - public static final ServerDescription[] getDescriptions() { SERVER_CACHE.clear(); final ArrayList parsers = new ArrayList<>(); @@ -43,9 +41,11 @@ public abstract class ServerParser { Core.verbose("Server providers parsed."); } - Map SORTED_SERVER_CACHE = new TreeMap( SERVER_CACHE ); + Map SORTED_SERVER_CACHE = new TreeMap(SERVER_CACHE); return SORTED_SERVER_CACHE.keySet().toArray(new ServerDescription[SORTED_SERVER_CACHE.size()]); } + public abstract void execute(); + } \ No newline at end of file diff --git a/src/main/java/org/parabot/core/reflect/RefClass.java b/src/main/java/org/parabot/core/reflect/RefClass.java index 9dd39bb..5a8206e 100644 --- a/src/main/java/org/parabot/core/reflect/RefClass.java +++ b/src/main/java/org/parabot/core/reflect/RefClass.java @@ -9,324 +9,321 @@ import java.util.ArrayList; import java.util.Arrays; /** - * * A RefClass represents a class or an instance of that class, if * no instance is provided this class can only get values from static fields and * only invoke static methods - * + * * @author Everel - * */ public class RefClass extends RefModifiers { - private Object instance; - private Class clazz; + private Object instance; + private Class clazz; - public RefClass(Class clazz) { - this(clazz, null); - } + public RefClass(Class clazz) { + this(clazz, null); + } - public RefClass(Object instance) { - this(instance.getClass(), instance); - } + public RefClass(Object instance) { + this(instance.getClass(), instance); + } - public RefClass(Class clazz, Object instance) { - super(clazz.getModifiers()); - this.clazz = clazz; - setInstance(instance); - } + public RefClass(Class clazz, Object instance) { + super(clazz.getModifiers()); + this.clazz = clazz; + setInstance(instance); + } - /** - * Sets the instance of this class so now non static fields values can be - * retrieved and non static methods can be invoked - * - * @param instance - * instance of this class. - */ - public void setInstance(Object instance) { - if (instance == null) { - this.instance = null; - return; - } - if (this.clazz != null) { - if (!clazz.isInstance(instance)) { - throw new IllegalArgumentException(instance - + " is not an instance of the class " + clazz); - } - } - this.instance = instance; - } + /** + * Gets the instance of this class + * + * @return if an instance of this class is known it will return that + * instance, otherwise it will return null. + */ + public Object getInstance() { + return this.instance; + } - /** - * Gets the instance of this class - * - * @return if an instance of this class is known it will return that - * instance, otherwise it will return null. - */ - public Object getInstance() { - return this.instance; - } + /** + * Sets the instance of this class so now non static fields values can be + * retrieved and non static methods can be invoked + * + * @param instance instance of this class. + */ + public void setInstance(Object instance) { + if (instance == null) { + this.instance = null; + return; + } + if (this.clazz != null) { + if (!clazz.isInstance(instance)) { + throw new IllegalArgumentException(instance + + " is not an instance of the class " + clazz); + } + } + this.instance = instance; + } - /** - * Gets the class which this RefClass is representing - * - * @return class which this RefClass is representing - */ - public Class getRepresentingClass() { - return this.clazz; - } + /** + * Gets the class which this RefClass is representing + * + * @return class which this RefClass is representing + */ + public Class getRepresentingClass() { + return this.clazz; + } - public String getClassName() { - return this.clazz.getName(); - } + public String getClassName() { + return this.clazz.getName(); + } - public String getSimpleName() { - return this.clazz.getSimpleName(); - } + public String getSimpleName() { + return this.clazz.getSimpleName(); + } - public String getCanonicalName() { - return this.clazz.getCanonicalName(); - } + public String getCanonicalName() { + return this.clazz.getCanonicalName(); + } - public Annotation[] getAnnotations(){ - return this.clazz.getAnnotations(); - } + public Annotation[] getAnnotations() { + return this.clazz.getAnnotations(); + } - /** - * Gets the type of this class - * - * @return type of this class - */ - public org.objectweb.asm.Type getASMType() { - return org.objectweb.asm.Type.getType(this.clazz); - } + /** + * Gets the type of this class + * + * @return type of this class + */ + public org.objectweb.asm.Type getASMType() { + return org.objectweb.asm.Type.getType(this.clazz); + } - /** - * Gets the class' fields - * - * @return all fields if an instance is provided, otherwise only static - * fields - */ - public RefField[] getFields() { - ArrayList fields = new ArrayList(); - // add all static fields - for (Field f : clazz.getDeclaredFields()) { - if (Modifier.isStatic(f.getModifiers())) { - fields.add(new RefField(f, instance)); - } - } - if (this.instance != null) { - // add all non static fields - for (Field f : clazz.getDeclaredFields()) { - if (!Modifier.isStatic(f.getModifiers())) { - fields.add(new RefField(f, instance)); - } - } - } - return fields.toArray(new RefField[fields.size()]); - } - - /** - * Determines if a object is an instance of this class - * @param object the object you want to check - * @return true if the object is an instance of this class; false otherwise - */ - public boolean instanceOf(Object object) { - return this.clazz.isInstance(object); - } + /** + * Gets the class' fields + * + * @return all fields if an instance is provided, otherwise only static + * fields + */ + public RefField[] getFields() { + ArrayList fields = new ArrayList(); + // add all static fields + for (Field f : clazz.getDeclaredFields()) { + if (Modifier.isStatic(f.getModifiers())) { + fields.add(new RefField(f, instance)); + } + } + if (this.instance != null) { + // add all non static fields + for (Field f : clazz.getDeclaredFields()) { + if (!Modifier.isStatic(f.getModifiers())) { + fields.add(new RefField(f, instance)); + } + } + } + return fields.toArray(new RefField[fields.size()]); + } - /** - * Gets field by field name - * - * @param name - * name of the field - * @return the field if found - */ - public RefField getField(String name) { - return getField(name, null); - } + /** + * Determines if a object is an instance of this class + * + * @param object the object you want to check + * + * @return true if the object is an instance of this class; false otherwise + */ + public boolean instanceOf(Object object) { + return this.clazz.isInstance(object); + } - /** - * Gets field by field name and desc - * - * @param name - * name of the field - * @param desc - * desc type of the field - * @return the field if found - */ - public RefField getField(String name, String desc) { - RefField[] fields = getFields(); - for (RefField f : fields) { - if (f.getName().equals(name)) { - if (desc == null) { - return f; - } - if (desc.equals(f.getTypeDesc())) { - return f; - } - } - } - return null; - } + /** + * Gets field by field name + * + * @param name name of the field + * + * @return the field if found + */ + public RefField getField(String name) { + return getField(name, null); + } - /** - * Determines if this class has a super class - * - * @return true if this class has a super class and which is - * not the java/lang/Object class, otherwise false. - */ - public boolean hasSuperclass() { - return hasSuperclass(true); - } + /** + * Gets field by field name and desc + * + * @param name name of the field + * @param desc desc type of the field + * + * @return the field if found + */ + public RefField getField(String name, String desc) { + RefField[] fields = getFields(); + for (RefField f : fields) { + if (f.getName().equals(name)) { + if (desc == null) { + return f; + } + if (desc.equals(f.getTypeDesc())) { + return f; + } + } + } + return null; + } - /** - * Determines if this class has a super class - * - * @param ignoreObjectClass - * if you want this method to return false when the superclass is - * the java/lang/Object class - * @return true if this class has a superclass, otherwise - * false - */ - public boolean hasSuperclass(boolean ignoreObjectClass) { - if (!ignoreObjectClass) { - return !clazz.equals(Object.class); - } - Class superClass = clazz.getSuperclass(); - if(superClass == null) { - return false; - } - return !superClass.equals(Object.class); - } + /** + * Determines if this class has a super class + * + * @return true if this class has a super class and which is + * not the java/lang/Object class, otherwise false. + */ + public boolean hasSuperclass() { + return hasSuperclass(true); + } - /** - * Returns a new RefClass representing the superclass of this RefClass - * - * @return superclass of this RefClass - */ - public RefClass getSuperclass() { - return new RefClass(clazz.getSuperclass(), instance); - } + /** + * Determines if this class has a super class + * + * @param ignoreObjectClass if you want this method to return false when the superclass is + * the java/lang/Object class + * + * @return true if this class has a superclass, otherwise + * false + */ + public boolean hasSuperclass(boolean ignoreObjectClass) { + if (!ignoreObjectClass) { + return !clazz.equals(Object.class); + } + Class superClass = clazz.getSuperclass(); + if (superClass == null) { + return false; + } + return !superClass.equals(Object.class); + } - /** - * Creates a new instance of this class - * - * @return a RefClass representing a fresh created instance of that class - */ - public RefClass newInstance() { - try { - return new RefClass(clazz.newInstance()); - } catch (Throwable t) { - t.printStackTrace(); - } - return null; - } + /** + * Returns a new RefClass representing the superclass of this RefClass + * + * @return superclass of this RefClass + */ + public RefClass getSuperclass() { + return new RefClass(clazz.getSuperclass(), instance); + } - /** - * Gets the empty (without parameters) constructor of this class if any - * - * @return empty constructor if there, otherwise null - */ - public RefConstructor getConstructor() { - return getConstructor(new Class[] {}); - } + /** + * Creates a new instance of this class + * + * @return a RefClass representing a fresh created instance of that class + */ + public RefClass newInstance() { + try { + return new RefClass(clazz.newInstance()); + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } - /** - * Gets a RefConstructor from this class - * - * @param parameters - * the constructor it's parameters - * @return the retrieved constructor - */ - public RefConstructor getConstructor(Class[] parameters) { - try { - return new RefConstructor(clazz.getDeclaredConstructor(parameters)); - } catch (Throwable t) { - t.printStackTrace(); - } - return null; - } + /** + * Gets the empty (without parameters) constructor of this class if any + * + * @return empty constructor if there, otherwise null + */ + public RefConstructor getConstructor() { + return getConstructor(new Class[]{}); + } - /** - * Gets all constructors of this class - * - * @return an array with all the constructors in this class - */ - public RefConstructor[] getConstructors() { - Constructor[] constructors = clazz.getDeclaredConstructors(); - RefConstructor[] refConstructors = new RefConstructor[constructors.length]; - for (int i = 0; i < constructors.length; i++) { - refConstructors[i] = new RefConstructor(constructors[i]); - } - return refConstructors; - } + /** + * Gets a RefConstructor from this class + * + * @param parameters the constructor it's parameters + * + * @return the retrieved constructor + */ + public RefConstructor getConstructor(Class[] parameters) { + try { + return new RefConstructor(clazz.getDeclaredConstructor(parameters)); + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } - /** - * Gets the class' methods - * - * @return all methods if an instance is provided, otherwise only static - * methods - */ - public RefMethod[] getMethods() { - ArrayList methods = new ArrayList(); - // add all static methods - for (Method m : clazz.getDeclaredMethods()) { - if (Modifier.isStatic(m.getModifiers())) { - methods.add(new RefMethod(m, instance)); - } - } - if (this.instance != null) { - // add all non static methods - for (Method m : clazz.getDeclaredMethods()) { - if (!Modifier.isStatic(m.getModifiers())) { - methods.add(new RefMethod(m, instance)); - } - } - } - return methods.toArray(new RefMethod[methods.size()]); - } + /** + * Gets all constructors of this class + * + * @return an array with all the constructors in this class + */ + public RefConstructor[] getConstructors() { + Constructor[] constructors = clazz.getDeclaredConstructors(); + RefConstructor[] refConstructors = new RefConstructor[constructors.length]; + for (int i = 0; i < constructors.length; i++) { + refConstructors[i] = new RefConstructor(constructors[i]); + } + return refConstructors; + } - /** - * Finds and returns the first RefMethod match with given method name - * - * @param name - * method its name - * @return the first match, or if not found null - */ - public RefMethod getMethod(String name) { - return getMethod(name, null); - } + /** + * Gets the class' methods + * + * @return all methods if an instance is provided, otherwise only static + * methods + */ + public RefMethod[] getMethods() { + ArrayList methods = new ArrayList(); + // add all static methods + for (Method m : clazz.getDeclaredMethods()) { + if (Modifier.isStatic(m.getModifiers())) { + methods.add(new RefMethod(m, instance)); + } + } + if (this.instance != null) { + // add all non static methods + for (Method m : clazz.getDeclaredMethods()) { + if (!Modifier.isStatic(m.getModifiers())) { + methods.add(new RefMethod(m, instance)); + } + } + } + return methods.toArray(new RefMethod[methods.size()]); + } - /** - * Finds a RefMethod in this RefClass - * - * @param name - * the method its name - * @param parameters - * the method its parameters - * @return the matched method or if not found null null - */ - public RefMethod getMethod(String name, Class[] parameters) { - try { - for (RefMethod method : getMethods()) { - if (method.getName().equals(name)) { - if (parameters == null || Arrays.equals(method.getParameterTypes(), parameters)) { - return method; - } - } - } - } catch (Throwable t) { - t.printStackTrace(); - } - return null; - } + /** + * Finds and returns the first RefMethod match with given method name + * + * @param name method its name + * + * @return the first match, or if not found null + */ + public RefMethod getMethod(String name) { + return getMethod(name, null); + } - public String toString() { - if (this.instance != null) { - return new StringBuilder().append(this.instance.toString()) - .append(" : ").append(this.clazz.toString()).toString(); - } - return this.clazz.toString(); - } + /** + * Finds a RefMethod in this RefClass + * + * @param name the method its name + * @param parameters the method its parameters + * + * @return the matched method or if not found null null + */ + public RefMethod getMethod(String name, Class[] parameters) { + try { + for (RefMethod method : getMethods()) { + if (method.getName().equals(name)) { + if (parameters == null || Arrays.equals(method.getParameterTypes(), parameters)) { + return method; + } + } + } + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } + + public String toString() { + if (this.instance != null) { + return new StringBuilder().append(this.instance.toString()) + .append(" : ").append(this.clazz.toString()).toString(); + } + return this.clazz.toString(); + } } diff --git a/src/main/java/org/parabot/core/reflect/RefConstructor.java b/src/main/java/org/parabot/core/reflect/RefConstructor.java index 18632ec..6534472 100644 --- a/src/main/java/org/parabot/core/reflect/RefConstructor.java +++ b/src/main/java/org/parabot/core/reflect/RefConstructor.java @@ -3,103 +3,101 @@ package org.parabot.core.reflect; import java.lang.reflect.Constructor; /** - * * A RefConstructor class represent a constructor method of a * RefClass. - * + * * @author Everel - * */ public class RefConstructor extends RefModifiers { - private Constructor constructor; + private Constructor constructor; - public RefConstructor(Constructor constructor) { - super(constructor.getModifiers()); - this.constructor = constructor; - } + public RefConstructor(Constructor constructor) { + super(constructor.getModifiers()); + this.constructor = constructor; + } - /** - * Creates a new instance of this class by invoking this constructor - * - * @return the instance of the class - */ - public RefClass newInstance() { - return newInstance(new Object[] {}); - } + /** + * Creates a new instance of this class by invoking this constructor + * + * @return the instance of the class + */ + public RefClass newInstance() { + return newInstance(new Object[]{}); + } - /** - * Creates a new instance of this class by invoking this constructor - * - * @param args - * the arguments for the constructor - * @return the instance of the class - */ - public RefClass newInstance(Object... args) { - if (!constructor.isAccessible()) { - constructor.setAccessible(true); - } - try { - Object instance = constructor.newInstance(args); - return new RefClass(instance); - } catch (Throwable t) { - t.printStackTrace(); - } - return null; - } + /** + * Creates a new instance of this class by invoking this constructor + * + * @param args the arguments for the constructor + * + * @return the instance of the class + */ + public RefClass newInstance(Object... args) { + if (!constructor.isAccessible()) { + constructor.setAccessible(true); + } + try { + Object instance = constructor.newInstance(args); + return new RefClass(instance); + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } - /** - * Get the value of the accessible flag for this object. - * - * @return the value of the object's accessible flag - */ - public boolean isAccessible() { - return constructor.isAccessible(); - } + /** + * Get the value of the accessible flag for this object. + * + * @return the value of the object's accessible flag + */ + public boolean isAccessible() { + return constructor.isAccessible(); + } - /** - * Returns true if this constructor is a synthetic constructor; - * returns false otherwise. - * - * @return true if this constructor is a synthetic constructor; - * returns false otherwise - */ - public boolean isSynthetic() { - return constructor.isSynthetic(); - } + /** + * Returns true if this constructor is a synthetic constructor; + * returns false otherwise. + * + * @return true if this constructor is a synthetic constructor; + * returns false otherwise + */ + public boolean isSynthetic() { + return constructor.isSynthetic(); + } - /** - * Returns the name of the constructor. - * - * @return name of the constructor - */ - public String getName() { - return constructor.getName(); - } + /** + * Returns the name of the constructor. + * + * @return name of the constructor + */ + public String getName() { + return constructor.getName(); + } - /** - * Returns an array of the parameter types of this constructor - * - * @return an array of the parameter types of this constructor - */ - public Class[] getParameterTypes() { - return constructor.getParameterTypes(); - } + /** + * Returns an array of the parameter types of this constructor + * + * @return an array of the parameter types of this constructor + */ + public Class[] getParameterTypes() { + return constructor.getParameterTypes(); + } - /** - * Gets the java reflection API constructor representation - * - * @return constructor - */ - public Constructor getConstructor() { - return this.constructor; - } + /** + * Gets the java reflection API constructor representation + * + * @return constructor + */ + public Constructor getConstructor() { + return this.constructor; + } - public String toGenericString() { - return constructor.toGenericString(); - } + public String toGenericString() { + return constructor.toGenericString(); + } - public String toString() { - return constructor.toString(); - } + public String toString() { + return constructor.toString(); + } } diff --git a/src/main/java/org/parabot/core/reflect/RefField.java b/src/main/java/org/parabot/core/reflect/RefField.java index 68c884e..36a7b0b 100644 --- a/src/main/java/org/parabot/core/reflect/RefField.java +++ b/src/main/java/org/parabot/core/reflect/RefField.java @@ -4,378 +4,366 @@ import java.lang.reflect.Field; import java.lang.reflect.Type; /** - * * A RefField represents a field in a RefClass - * - * @author Everel * + * @author Everel */ public class RefField extends RefModifiers { - private Field field; - private Object instance; + private Field field; + private Object instance; - public RefField(Field field) { - this(field, null); - } + public RefField(Field field) { + this(field, null); + } - public RefField(Field field, Object instance) { - super(field.getModifiers()); - this.field = field; - this.instance = instance; - } + public RefField(Field field, Object instance) { + super(field.getModifiers()); + this.field = field; + this.instance = instance; + } - /** - * Retrieves the field it's value as object - * - * @return the value of the field - */ - public Object asObject() { - if (instance == null && !isStatic()) { - throw new IllegalStateException( - "Non static field cannot be fetched without an instance"); - } - try { - if (!isAccessible()) { - field.setAccessible(true); - } - return field.get(instance); - } catch (Throwable t) { - t.printStackTrace(); - } - return null; - } + /** + * Retrieves the field it's value as object + * + * @return the value of the field + */ + public Object asObject() { + if (instance == null && !isStatic()) { + throw new IllegalStateException( + "Non static field cannot be fetched without an instance"); + } + try { + if (!isAccessible()) { + field.setAccessible(true); + } + return field.get(instance); + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } - /** - * Retrieves the field value as an integer - * - * @return integer value of field - */ - public int asInt() { - return (int) asObject(); - } + /** + * Retrieves the field value as an integer + * + * @return integer value of field + */ + public int asInt() { + return (int) asObject(); + } - /** - * Retrieves the field value as a long - * - * @return long value of field - */ - public long asLong() { - return (long) asObject(); - } + /** + * Retrieves the field value as a long + * + * @return long value of field + */ + public long asLong() { + return (long) asObject(); + } - /** - * Retrieves the field value as an double - * - * @return double value of field - */ - public double asDouble() { - return (double) asObject(); - } + /** + * Retrieves the field value as an double + * + * @return double value of field + */ + public double asDouble() { + return (double) asObject(); + } - /** - * Retrieves the field value as a float - * - * @return float value of field - */ - public float asFloat() { - return (float) asObject(); - } + /** + * Retrieves the field value as a float + * + * @return float value of field + */ + public float asFloat() { + return (float) asObject(); + } - /** - * Retrieves the field value as a boolean - * - * @return boolean value of field - */ - public boolean asBoolean() { - return (boolean) asObject(); - } + /** + * Retrieves the field value as a boolean + * + * @return boolean value of field + */ + public boolean asBoolean() { + return (boolean) asObject(); + } - /** - * Retrieves the field value as a short - * - * @return short value of field - */ - public short asShort() { - return (short) asObject(); - } + /** + * Retrieves the field value as a short + * + * @return short value of field + */ + public short asShort() { + return (short) asObject(); + } - /** - * Retrieves the field value as a byte - * - * @return byte value of field - */ - public byte asByte() { - return (byte) asObject(); - } + /** + * Retrieves the field value as a byte + * + * @return byte value of field + */ + public byte asByte() { + return (byte) asObject(); + } - /** - * Retrieves the field value as a java/lang/String - * - * @return String value of field - */ - public String asString() { - return (String) asObject(); - } + /** + * Retrieves the field value as a java/lang/String + * + * @return String value of field + */ + public String asString() { + return (String) asObject(); + } - /** - * Retrieves the field value as a character - * - * @return char value of field - */ - public char asChar() { - return (char) asObject(); - } + /** + * Retrieves the field value as a character + * + * @return char value of field + */ + public char asChar() { + return (char) asObject(); + } - /** - * Sets the field value - * - * @param object - * object to set - */ - public void set(Object object) { - if (instance == null && !isStatic()) { - throw new IllegalStateException( - "Non static field cannot be set without an instance"); - } - if (!field.isAccessible()) { - field.setAccessible(true); - } - try { - field.set(instance, object); - } catch (Throwable t) { - t.printStackTrace(); - } - } + /** + * Sets the field value + * + * @param object object to set + */ + public void set(Object object) { + if (instance == null && !isStatic()) { + throw new IllegalStateException( + "Non static field cannot be set without an instance"); + } + if (!field.isAccessible()) { + field.setAccessible(true); + } + try { + field.set(instance, object); + } catch (Throwable t) { + t.printStackTrace(); + } + } - /** - * Sets the field integer value - * - * @param i - * value to set - */ - public void setInt(int i) { - set(i); - } + /** + * Sets the field integer value + * + * @param i value to set + */ + public void setInt(int i) { + set(i); + } - /** - * Sets the field long value - * - * @param l - * value to set - */ - public void setLong(long l) { - set(l); - } + /** + * Sets the field long value + * + * @param l value to set + */ + public void setLong(long l) { + set(l); + } - /** - * Sets the field double value - * - * @param d - * value to set - */ - public void setDouble(double d) { - set(d); - } + /** + * Sets the field double value + * + * @param d value to set + */ + public void setDouble(double d) { + set(d); + } - /** - * Sets the field float value - * - * @param f - * value to set - */ - public void setFloat(float f) { - set(f); - } + /** + * Sets the field float value + * + * @param f value to set + */ + public void setFloat(float f) { + set(f); + } - /** - * Sets the field boolean value - * - * @param b - * value to set - */ - public void setBoolean(boolean b) { - set(b); - } + /** + * Sets the field boolean value + * + * @param b value to set + */ + public void setBoolean(boolean b) { + set(b); + } - /** - * Sets the field short value - * - * @param s - * value to set - */ - public void setShort(short s) { - set(s); - } + /** + * Sets the field short value + * + * @param s value to set + */ + public void setShort(short s) { + set(s); + } - /** - * Sets the byte integer value - * - * @param b - * value to set - */ - public void setByte(byte b) { - set(b); - } + /** + * Sets the byte integer value + * + * @param b value to set + */ + public void setByte(byte b) { + set(b); + } - /** - * Sets the field string value - * - * @param s - * value to set - */ - public void setString(String s) { - set(s); - } + /** + * Sets the field char value + * + * @param c value to set + */ + public void setChar(char c) { + set(c); + } - /** - * Sets the field char value - * - * @param c - * value to set - */ - public void setChar(char c) { - set(c); - } + /** + * Gets the field type + * + * @return type of field + */ + public Class getType() { + return field.getType(); + } - /** - * Gets the field type - * - * @return type of field - */ - public Class getType() { - return field.getType(); - } + /** + * Gets the field type + * + * @return type of field + */ + public org.objectweb.asm.Type getASMType() { + return org.objectweb.asm.Type.getType(getType()); + } - /** - * Gets the field type - * - * @return type of field - */ - public org.objectweb.asm.Type getASMType() { - return org.objectweb.asm.Type.getType(getType()); - } + /** + * Gets the field description + * + * @return desc of field + */ + public String getTypeDesc() { + return getASMType().getDescriptor(); + } - /** - * Gets the field description - * - * @return desc of field - */ - public String getTypeDesc() { - return getASMType().getDescriptor(); - } + /** + * Gets the generic type of this field if any + * + * @return generic type + */ + public Type getGenericType() { + return field.getGenericType(); + } - /** - * Gets the generic type of this field if any - * - * @return generic type - */ - public Type getGenericType() { - return field.getGenericType(); - } + /** + * Determines if this field is an array + * + * @return true if this field is an array (type) + */ + public boolean isArray() { + return getASMType().getSort() == org.objectweb.asm.Type.ARRAY; + } - /** - * Determines if this field is an array - * - * @return true if this field is an array (type) - */ - public boolean isArray() { - return getASMType().getSort() == org.objectweb.asm.Type.ARRAY; - } + /** + * Returns the number of dimensions of this array type. This method should + * only be used for an array type. + * + * @return the number of dimensions of this array type + */ + public int getArrayDimensions() { + return getASMType().getDimensions(); + } - /** - * Returns the number of dimensions of this array type. This method should - * only be used for an array type. - * - * @return the number of dimensions of this array type - */ - public int getArrayDimensions() { - return getASMType().getDimensions(); - } + /** + * Determines if field type is a primitive type + * + * @return true if the field is a primitive type, otherwise + * false + */ + public boolean isPrimitiveType() { + return RefUtils.isPrimitive(getType()); + } - /** - * Determines if field type is a primitive type - * - * @return true if the field is a primitive type, otherwise - * false - */ - public boolean isPrimitiveType() { - return RefUtils.isPrimitive(getType()); - } + /** + * Determines if field type is a string type + * + * @return true if the field type is a string type, otherwise + * false + */ + public boolean isString() { + return getType() == String.class; + } - /** - * Determines if field type is a string type - * - * @return true if the field type is a string type, otherwise - * false - */ - public boolean isString() { - return getType() == String.class; - } + /** + * Sets the field string value + * + * @param s value to set + */ + public void setString(String s) { + set(s); + } - /** - * Returns true if this field represents an element of an - * enumerated type; returns false otherwise. - * - * @return true if and only if this field represents an element - * of an enumerated type. - */ - public boolean isEnumConstants() { - return field.isEnumConstant(); - } + /** + * Returns true if this field represents an element of an + * enumerated type; returns false otherwise. + * + * @return true if and only if this field represents an element + * of an enumerated type. + */ + public boolean isEnumConstants() { + return field.isEnumConstant(); + } - /** - * Get the value of the accessible flag for this object. - * - * @return the value of the object's accessible flag - */ - public boolean isAccessible() { - return field.isAccessible(); - } + /** + * Get the value of the accessible flag for this object. + * + * @return the value of the object's accessible flag + */ + public boolean isAccessible() { + return field.isAccessible(); + } - /** - * Returns true if this field is a synthetic field; returns - * false otherwise. - * - * @return true if this field is a synthetic field; returns - * false otherwise - */ - public boolean isSynthetic() { - return field.isSynthetic(); - } + /** + * Returns true if this field is a synthetic field; returns + * false otherwise. + * + * @return true if this field is a synthetic field; returns + * false otherwise + */ + public boolean isSynthetic() { + return field.isSynthetic(); + } - /** - * Returns the name of the field. - * - * @return name of the field - */ - public String getName() { - return field.getName(); - } + /** + * Returns the name of the field. + * + * @return name of the field + */ + public String getName() { + return field.getName(); + } - /** - * Gets the java reflection API field representation - * - * @return field - */ - public Field getField() { - return field; - } - - /** - * Gets the declaring RefClass of this field - * @return RefClass holding this field - */ - public RefClass getOwner() { - return new RefClass(field.getDeclaringClass(), instance); - } + /** + * Gets the java reflection API field representation + * + * @return field + */ + public Field getField() { + return field; + } - public String toGenericString() { - return field.toGenericString(); - } + /** + * Gets the declaring RefClass of this field + * + * @return RefClass holding this field + */ + public RefClass getOwner() { + return new RefClass(field.getDeclaringClass(), instance); + } - public String toString() { - return field.toString(); - } - + public String toGenericString() { + return field.toGenericString(); + } + + public String toString() { + return field.toString(); + } } diff --git a/src/main/java/org/parabot/core/reflect/RefMethod.java b/src/main/java/org/parabot/core/reflect/RefMethod.java index 2c3aac8..8eafb62 100644 --- a/src/main/java/org/parabot/core/reflect/RefMethod.java +++ b/src/main/java/org/parabot/core/reflect/RefMethod.java @@ -3,150 +3,147 @@ package org.parabot.core.reflect; import java.lang.reflect.Method; /** - * * A RefMethod class represent a method of a RefClass. - * + * * @author Everel - * */ public class RefMethod extends RefModifiers { - private Method method; - private Object instance; + private Method method; + private Object instance; - public RefMethod(Method method) { - this(method, null); - } + public RefMethod(Method method) { + this(method, null); + } - public RefMethod(Method method, Object instance) { - super(method.getModifiers()); - this.method = method; - this.instance = instance; - } + public RefMethod(Method method, Object instance) { + super(method.getModifiers()); + this.method = method; + this.instance = instance; + } - /** - * Get the value of the accessible flag for this object. - * - * @return the value of the object's accessible flag - */ - public boolean isAccessible() { - return method.isAccessible(); - } + /** + * Get the value of the accessible flag for this object. + * + * @return the value of the object's accessible flag + */ + public boolean isAccessible() { + return method.isAccessible(); + } - /** - * Determines if this method is a bridge method. - * - * @return true if this method is a bridge method, otherwise - * false - */ - public boolean isBridge() { - return method.isBridge(); - } + /** + * Determines if this method is a bridge method. + * + * @return true if this method is a bridge method, otherwise + * false + */ + public boolean isBridge() { + return method.isBridge(); + } - /** - * Determines if this method can take a variable amount of arguments - * - * @return true if this method can take a variable amount of - * arguments - */ - public boolean isVarArgs() { - return method.isVarArgs(); - } + /** + * Determines if this method can take a variable amount of arguments + * + * @return true if this method can take a variable amount of + * arguments + */ + public boolean isVarArgs() { + return method.isVarArgs(); + } - /** - * Returns true if this method is a synthetic method; returns - * false otherwise. - * - * @return true if this method is a synthetic method; returns - * false otherwise - */ - public boolean isSynthetic() { - return method.isSynthetic(); - } + /** + * Returns true if this method is a synthetic method; returns + * false otherwise. + * + * @return true if this method is a synthetic method; returns + * false otherwise + */ + public boolean isSynthetic() { + return method.isSynthetic(); + } - /** - * Returns the name of the method. - * - * @return name of the method - */ - public String getName() { - return method.getName(); - } + /** + * Returns the name of the method. + * + * @return name of the method + */ + public String getName() { + return method.getName(); + } - /** - * Returns an array of the parameter types of this method - * - * @return an array of the parameter types of this method - */ - public Class[] getParameterTypes() { - return method.getParameterTypes(); - } + /** + * Returns an array of the parameter types of this method + * + * @return an array of the parameter types of this method + */ + public Class[] getParameterTypes() { + return method.getParameterTypes(); + } - /** - * Gets the return type of this class - * - * @return return type of this class - */ - public Class getReturnType() { - return method.getReturnType(); - } + /** + * Gets the return type of this class + * + * @return return type of this class + */ + public Class getReturnType() { + return method.getReturnType(); + } - /** - * Gets the return type of this class - * - * @return return type of this class - */ - public org.objectweb.asm.Type getASMReturnType() { - return org.objectweb.asm.Type.getType(getReturnType()); - } + /** + * Gets the return type of this class + * + * @return return type of this class + */ + public org.objectweb.asm.Type getASMReturnType() { + return org.objectweb.asm.Type.getType(getReturnType()); + } - /** - * Gets the java reflection API method representation - * - * @return constructor - */ - public Method getMethod() { - return this.method; - } + /** + * Gets the java reflection API method representation + * + * @return constructor + */ + public Method getMethod() { + return this.method; + } - /** - * Invokes the method and returns it returned object - * - * @return object returned by the method - */ - public Object invoke() { - return invoke(new Object[] {}); - } + /** + * Invokes the method and returns it returned object + * + * @return object returned by the method + */ + public Object invoke() { + return invoke(new Object[]{}); + } - /** - * - * Invokes the method and returns it returned object - * - * @param args - * arguments for the invokable method - * @return object returned by the method - */ - public Object invoke(Object... args) { - if (!isStatic() && instance == null) { - throw new IllegalStateException( - "Can not invoke non static method without an instance."); - } - if(!isAccessible()) { - method.setAccessible(true); - } - try { - Object retObject = method.invoke(instance, args); - return retObject; - } catch (Throwable t) { - t.printStackTrace(); - } - return null; - } + /** + * Invokes the method and returns it returned object + * + * @param args arguments for the invokable method + * + * @return object returned by the method + */ + public Object invoke(Object... args) { + if (!isStatic() && instance == null) { + throw new IllegalStateException( + "Can not invoke non static method without an instance."); + } + if (!isAccessible()) { + method.setAccessible(true); + } + try { + Object retObject = method.invoke(instance, args); + return retObject; + } catch (Throwable t) { + t.printStackTrace(); + } + return null; + } - public String toGenericString() { - return method.toGenericString(); - } + public String toGenericString() { + return method.toGenericString(); + } - public String toString() { - return method.toString(); - } + public String toString() { + return method.toString(); + } } diff --git a/src/main/java/org/parabot/core/reflect/RefModifiers.java b/src/main/java/org/parabot/core/reflect/RefModifiers.java index 82daffa..fd0e9b0 100644 --- a/src/main/java/org/parabot/core/reflect/RefModifiers.java +++ b/src/main/java/org/parabot/core/reflect/RefModifiers.java @@ -3,75 +3,73 @@ package org.parabot.core.reflect; import java.lang.reflect.Modifier; /** - * * @author Everel - * */ public class RefModifiers { - private int modifiers; + private int modifiers; - public RefModifiers() { + public RefModifiers() { - } + } - public RefModifiers(int modifiers) { - setModifiers(modifiers); - } + public RefModifiers(int modifiers) { + setModifiers(modifiers); + } - public void setModifiers(int modifiers) { - this.modifiers = modifiers; - } + public int getModifiers() { + return this.modifiers; + } - public int getModifiers() { - return this.modifiers; - } + public void setModifiers(int modifiers) { + this.modifiers = modifiers; + } - public boolean isStatic() { - return Modifier.isStatic(modifiers); - } + public boolean isStatic() { + return Modifier.isStatic(modifiers); + } - public boolean isAbstract() { - return Modifier.isAbstract(modifiers); - } + public boolean isAbstract() { + return Modifier.isAbstract(modifiers); + } - public boolean isFinal() { - return Modifier.isFinal(modifiers); - } + public boolean isFinal() { + return Modifier.isFinal(modifiers); + } - public boolean isInterface() { - return Modifier.isInterface(modifiers); - } + public boolean isInterface() { + return Modifier.isInterface(modifiers); + } - public boolean isNative() { - return Modifier.isNative(modifiers); - } + public boolean isNative() { + return Modifier.isNative(modifiers); + } - public boolean isPrivate() { - return Modifier.isPrivate(modifiers); - } + public boolean isPrivate() { + return Modifier.isPrivate(modifiers); + } - public boolean isProtected() { - return Modifier.isProtected(modifiers); - } + public boolean isProtected() { + return Modifier.isProtected(modifiers); + } - public boolean isPublic() { - return Modifier.isPublic(modifiers); - } + public boolean isPublic() { + return Modifier.isPublic(modifiers); + } - public boolean isStrict() { - return Modifier.isStrict(modifiers); - } + public boolean isStrict() { + return Modifier.isStrict(modifiers); + } - public boolean isSynchronized() { - return Modifier.isSynchronized(modifiers); - } + public boolean isSynchronized() { + return Modifier.isSynchronized(modifiers); + } - public boolean isTransient() { - return Modifier.isTransient(modifiers); - } + public boolean isTransient() { + return Modifier.isTransient(modifiers); + } - public boolean isVolatile() { - return Modifier.isVolatile(modifiers); - } + public boolean isVolatile() { + return Modifier.isVolatile(modifiers); + } } diff --git a/src/main/java/org/parabot/core/reflect/RefUtils.java b/src/main/java/org/parabot/core/reflect/RefUtils.java index 8f251d9..53bb5ba 100644 --- a/src/main/java/org/parabot/core/reflect/RefUtils.java +++ b/src/main/java/org/parabot/core/reflect/RefUtils.java @@ -5,19 +5,17 @@ import java.util.HashSet; import java.util.Set; /** - * * @author Everel - * */ public class RefUtils { - public static final Set> PRIMITIVE_TYPES = new HashSet>( - Arrays.asList(Boolean.class, Character.class, Byte.class, - Short.class, Integer.class, Long.class, Float.class, - Double.class, Void.class)); + public static final Set> PRIMITIVE_TYPES = new HashSet>( + Arrays.asList(Boolean.class, Character.class, Byte.class, + Short.class, Integer.class, Long.class, Float.class, + Double.class, Void.class)); - public static boolean isPrimitive(Class clazz) { - return PRIMITIVE_TYPES.contains(clazz); - } + public static boolean isPrimitive(Class clazz) { + return PRIMITIVE_TYPES.contains(clazz); + } } diff --git a/src/main/java/org/parabot/core/ui/BotDialog.java b/src/main/java/org/parabot/core/ui/BotDialog.java index 15634bf..d3c903b 100644 --- a/src/main/java/org/parabot/core/ui/BotDialog.java +++ b/src/main/java/org/parabot/core/ui/BotDialog.java @@ -1,68 +1,64 @@ package org.parabot.core.ui; -import java.awt.Color; -import java.awt.Dimension; - -import javax.swing.JDialog; - import org.parabot.core.ui.components.PaintComponent; import org.parabot.environment.OperatingSystem; +import javax.swing.*; +import java.awt.*; + /** - * * @author Everel - * */ public class BotDialog extends JDialog { - private static final long serialVersionUID = 521800552287194673L; - private static BotDialog instance; + private static final long serialVersionUID = 521800552287194673L; + private static BotDialog instance; - private BotDialog(BotUI botUI) { - super(botUI); + private BotDialog(BotUI botUI) { + super(botUI); - botUI.setDialog(this); - setUndecorated(true); - getRootPane().setOpaque(false); - if (!OperatingSystem.getOS().equals(OperatingSystem.OTHER)) { - try { - setBackground(new Color(0, 0, 0, 0)); - } catch (UnsupportedOperationException e) { - //My "fix" for the perpixel errors some user have when using VPSes - if (e.getMessage().contains("PERPIXEL_TRANS")) { - System.err - .println("WARNING: We were unable to set a translucent background!" - + "\n\tThis generally occurs with old/outdated graphics drivers. Please consider updating them if possible." - + "\n\tParabot will still attempt to run, however some GUI elements may or may not function."); - } - } - } - setFocusableWindowState(true); - setPreferredSize(botUI.getSize()); - setSize(botUI.getSize()); - setVisible(true); - setContentPane(PaintComponent.getInstance(botUI.getSize())); - botUI.setVisible(true); + botUI.setDialog(this); + setUndecorated(true); + getRootPane().setOpaque(false); + if (!OperatingSystem.getOS().equals(OperatingSystem.OTHER)) { + try { + setBackground(new Color(0, 0, 0, 0)); + } catch (UnsupportedOperationException e) { + //My "fix" for the perpixel errors some user have when using VPSes + if (e.getMessage().contains("PERPIXEL_TRANS")) { + System.err + .println("WARNING: We were unable to set a translucent background!" + + "\n\tThis generally occurs with old/outdated graphics drivers. Please consider updating them if possible." + + "\n\tParabot will still attempt to run, however some GUI elements may or may not function."); + } + } + } + setFocusableWindowState(true); + setPreferredSize(botUI.getSize()); + setSize(botUI.getSize()); + setVisible(true); + setContentPane(PaintComponent.getInstance(botUI.getSize())); + botUI.setVisible(true); - } + } - public void setDimensions(Dimension dimension) { - setUndecorated(true); - getRootPane().setOpaque(false); - setBackground(new Color(0, 0, 0, 0)); - setFocusableWindowState(true); - setPreferredSize(dimension); - setSize(dimension); - setVisible(true); - setContentPane(PaintComponent.getInstance()); - PaintComponent.getInstance().setDimensions(dimension); - } + public static BotDialog getInstance(BotUI botUI) { + return instance == null ? instance = new BotDialog(botUI) : instance; + } - public static BotDialog getInstance(BotUI botUI) { - return instance == null ? instance = new BotDialog(botUI) : instance; - } + public static BotDialog getInstance() { + return getInstance(null); + } - public static BotDialog getInstance() { - return getInstance(null); - } + public void setDimensions(Dimension dimension) { + setUndecorated(true); + getRootPane().setOpaque(false); + setBackground(new Color(0, 0, 0, 0)); + setFocusableWindowState(true); + setPreferredSize(dimension); + setSize(dimension); + setVisible(true); + setContentPane(PaintComponent.getInstance()); + PaintComponent.getInstance().setDimensions(dimension); + } } diff --git a/src/main/java/org/parabot/core/ui/BotUI.java b/src/main/java/org/parabot/core/ui/BotUI.java index c33b6bd..f3971e0 100644 --- a/src/main/java/org/parabot/core/ui/BotUI.java +++ b/src/main/java/org/parabot/core/ui/BotUI.java @@ -31,15 +31,14 @@ import java.util.ArrayList; public class BotUI extends JFrame implements ActionListener, ComponentListener, WindowListener { private static final long serialVersionUID = -2126184292879805519L; - private static BotUI instance; + private static BotUI instance; private static JDialog dialog; private JMenuBar menuBar; - private JMenu features, scripts, file; + 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"); @@ -75,7 +74,6 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, return instance; } - private void createMenu() { menuBar = new JMenuBar(); @@ -84,17 +82,17 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, features = new JMenu("Features"); JMenuItem screenshot = new JMenuItem("Create screenshot"); - JMenuItem proxy = new JMenuItem("Network"); - JMenuItem randoms = new JMenuItem("Randoms"); - JMenuItem dialog = new JCheckBoxMenuItem("Disable dialog"); - JMenuItem logger = new JCheckBoxMenuItem("Logger"); + JMenuItem proxy = new JMenuItem("Network"); + JMenuItem randoms = new JMenuItem("Randoms"); + JMenuItem dialog = new JCheckBoxMenuItem("Disable dialog"); + JMenuItem logger = new JCheckBoxMenuItem("Logger"); if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) { dialog.setSelected(true); } JMenuItem explorer = new JMenuItem("Reflection explorer"); - JMenuItem exit = new JMenuItem("Exit"); + JMenuItem exit = new JMenuItem("Exit"); run = new JMenuItem("Run"); run.setIcon(new ImageIcon(Images.getResource("/storage/images/run.png"))); @@ -146,7 +144,6 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, menuBar.add(scripts); menuBar.add(features); - setJMenuBar(menuBar); } @@ -159,12 +156,12 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener, switch (command) { case "Create screenshot": try { - Robot robot = new Robot(); - 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; - boolean duplicate = false; + Robot robot = new Robot(); + 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; + boolean duplicate = false; while (search) { File[] files; if ((files = Directories.getScreenshotDir().listFiles()) != null) { diff --git a/src/main/java/org/parabot/core/ui/Logger.java b/src/main/java/org/parabot/core/ui/Logger.java index f263886..ec19797 100644 --- a/src/main/java/org/parabot/core/ui/Logger.java +++ b/src/main/java/org/parabot/core/ui/Logger.java @@ -11,14 +11,14 @@ import java.awt.event.ActionListener; * @author JKetelaar */ public class Logger extends JPanel { - private static final long serialVersionUID = 1L; - private static Logger instance; - private final DefaultListModel model; - private final JList list; + private static final long serialVersionUID = 1L; + private static Logger instance; + private final DefaultListModel model; + private final JList list; private boolean clearable; - private Logger(){ + private Logger() { setLayout(new BorderLayout()); list = new JList<>(); @@ -41,38 +41,24 @@ public class Logger extends JPanel { list.setModel(model); setPreferredSize(new Dimension((int) GamePanel.getInstance().getPreferredSize().getWidth(), 150)); model.addElement("Logger initialised"); - + setVisible(false); } - private ListCellRenderer getRenderer() { - return new DefaultListCellRenderer(){ - private static final long serialVersionUID = -3589192791360628745L; - - @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; } /** * Logs a message in the logger ui + * * @param message * @param uliratha Determines if this should be sent to the uliratha server */ - public static void addMessage(String message, boolean uliratha){ + public static void addMessage(String message, boolean uliratha) { instance.model.addElement(message); - if (uliratha){ + if (uliratha) { // TODO: Implement latest Uliratha } @@ -80,7 +66,7 @@ public class Logger extends JPanel { if (last >= 0) { instance.list.ensureIndexIsVisible(last); } - if (instance.list.getModel().getSize() > 100 && instance.list.getModel().getElementAt(0) != null){ + if (instance.list.getModel().getSize() > 100 && instance.list.getModel().getElementAt(0) != null) { instance.model.remove(0); } } @@ -88,14 +74,29 @@ public class Logger extends JPanel { /** * @param message */ - public static void addMessage(String message){ + public static void addMessage(String message) { addMessage(message, true); } - protected static void clearLogger(){ + protected static void clearLogger() { instance.model.clear(); } + private ListCellRenderer getRenderer() { + return new DefaultListCellRenderer() { + private static final long serialVersionUID = -3589192791360628745L; + + @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 boolean isClearable() { return clearable; } diff --git a/src/main/java/org/parabot/core/ui/LoginUI.java b/src/main/java/org/parabot/core/ui/LoginUI.java index 3bf6b35..f93b723 100644 --- a/src/main/java/org/parabot/core/ui/LoginUI.java +++ b/src/main/java/org/parabot/core/ui/LoginUI.java @@ -17,156 +17,153 @@ import java.io.IOException; import java.net.URI; /** - * * Users must login with their parabot account through this LoginUI class - * - * @author Everel * + * @author Everel */ public class LoginUI extends JFrame { - private static final long serialVersionUID = 2032832552863466297L; - private static LoginUI instance; - private static AccountManager manager; - - private JTextField txtUsername; - private JPasswordField txtPassword; - private JButton cmdLogin; - private JButton cmdRegister; + private static final long serialVersionUID = 2032832552863466297L; + private static LoginUI instance; + private static AccountManager manager; + private JTextField txtUsername; + private JPasswordField txtPassword; + private JButton cmdLogin; + private JButton cmdRegister; - public void attemptLogin() { - String username = txtUsername.getText(); - String password = new String(txtPassword.getPassword()); + public LoginUI(String username, String password) { + instance = this; + attempt(username, password); + } - if (username.length() > 0 && password.length() > 0) { - if (manager.login(username, password, false)) { - Core.verbose("Logged in."); - instance.dispose(); - Core.verbose("Running server selector."); - ServerSelector.getInstance(); - } else { - Core.verbose("Failed to log in."); - UILog.log("Error", "Incorrect username or password. Have you tried logging into http://bdn.parabot.org/account/", JOptionPane.ERROR_MESSAGE); - } - } - } + public LoginUI() { + instance = this; - private void attempt(String user, String pass) { - Core.verbose("Logging in..."); - if (manager.login(user, pass, false)) { - Core.verbose("Logged in."); - instance.dispose(); - Core.verbose("Running server selector."); - ServerSelector.getInstance(); - } else { - Core.verbose("Failed to log in."); - UILog.log("Error", "Incorrect username or password. Have you tried logging into http://bdn.parabot.org/account/", JOptionPane.ERROR_MESSAGE); - } + this.setTitle("Login"); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setLocationByPlatform(true); + this.setLayout(new BorderLayout()); + this.setResizable(false); - } + SwingUtil.setParabotIcons(this); - public LoginUI(String username, String password) { - instance = this; - attempt(username, password); - } + int w = 250; + int x = 8; + int y = 64; - public LoginUI() { - instance = this; + JPanel panel = new JPanel() { + private static final long serialVersionUID = 2258761648532714183L; - this.setTitle("Login"); - this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - this.setLocationByPlatform(true); - this.setLayout(new BorderLayout()); - this.setResizable(false); - - SwingUtil.setParabotIcons(this); + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + ((Graphics2D) g).setRenderingHint( + RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BICUBIC); + g.drawImage(Images + .getResource("/storage/images/para.png"), + 0, 8, 250, 45, null); + } + }; + panel.setLayout(null); - int w = 250; - int x = 8; - int y = 64; + txtUsername = new JTextField(""); + txtUsername.setBounds(x, y, w - (x << 1), 26); + txtUsername.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == 10 || e.getKeyCode() == 13) { + txtPassword.requestFocus(); + } + } + }); - JPanel panel = new JPanel() { - private static final long serialVersionUID = 2258761648532714183L; + y += 30; - @Override - public void paintComponent(Graphics g) { - super.paintComponent(g); - ((Graphics2D) g).setRenderingHint( - RenderingHints.KEY_INTERPOLATION, - RenderingHints.VALUE_INTERPOLATION_BICUBIC); - g.drawImage(Images - .getResource("/storage/images/para.png"), - 0, 8, 250, 45, null); - } - }; - panel.setLayout(null); + txtPassword = new JPasswordField(""); + txtPassword.setBounds(x, y, w - (x << 1), 26); + txtPassword.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == 10 || e.getKeyCode() == 13) { + attemptLogin(); + } + } + }); - txtUsername = new JTextField(""); - txtUsername.setBounds(x, y, w - (x << 1), 26); - txtUsername.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == 10 || e.getKeyCode() == 13) { - txtPassword.requestFocus(); - } - } - }); + y += 30; - y += 30; + cmdLogin = new JButton("Login"); + cmdLogin.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + attemptLogin(); + } + }); + cmdLogin.setBounds(x, y, (w - (x << 1)) / 2 - 8, 24); - txtPassword = new JPasswordField(""); - txtPassword.setBounds(x, y, w - (x << 1), 26); - txtPassword.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == 10 || e.getKeyCode() == 13) { - attemptLogin(); - } - } - }); + cmdRegister = new JButton("Register"); + cmdRegister.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent arg0) { + URI uri = URI + .create(Configuration.REGISTRATION_PAGE); + try { + Desktop.getDesktop().browse(uri); + } catch (IOException e1) { + JOptionPane.showMessageDialog(null, "Connection Error", + "Error", JOptionPane.ERROR_MESSAGE); + e1.printStackTrace(); + } + } + }); + cmdRegister.setBounds(x + (w - (x << 1)) / 2 + 8, y, + (w - (x << 1)) / 2 - 8, 24); - y += 30; + panel.add(txtUsername); + panel.add(txtPassword); + panel.add(cmdLogin); + panel.add(cmdRegister); - cmdLogin = new JButton("Login"); - cmdLogin.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - attemptLogin(); - } - }); - cmdLogin.setBounds(x, y, (w - (x << 1)) / 2 - 8, 24); + this.add(panel, BorderLayout.CENTER); - cmdRegister = new JButton("Register"); - cmdRegister.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent arg0) { - URI uri = URI - .create(Configuration.REGISTRATION_PAGE); - try { - Desktop.getDesktop().browse(uri); - } catch (IOException e1) { - JOptionPane.showMessageDialog(null, "Connection Error", - "Error", JOptionPane.ERROR_MESSAGE); - e1.printStackTrace(); - } - } - }); - cmdRegister.setBounds(x + (w - (x << 1)) / 2 + 8, y, - (w - (x << 1)) / 2 - 8, 24); + this.setVisible(true); + this.requestFocus(); - panel.add(txtUsername); - panel.add(txtPassword); - panel.add(cmdLogin); - panel.add(cmdRegister); + this.setSize(255, 182); + this.setLocationRelativeTo(null); - this.add(panel, BorderLayout.CENTER); + } - this.setVisible(true); - this.requestFocus(); + public void attemptLogin() { + String username = txtUsername.getText(); + String password = new String(txtPassword.getPassword()); - this.setSize(255, 182); - this.setLocationRelativeTo(null); + if (username.length() > 0 && password.length() > 0) { + if (manager.login(username, password, false)) { + Core.verbose("Logged in."); + instance.dispose(); + Core.verbose("Running server selector."); + ServerSelector.getInstance(); + } else { + Core.verbose("Failed to log in."); + UILog.log("Error", "Incorrect username or password. Have you tried logging into http://bdn.parabot.org/account/", JOptionPane.ERROR_MESSAGE); + } + } + } - } + private void attempt(String user, String pass) { + Core.verbose("Logging in..."); + if (manager.login(user, pass, false)) { + Core.verbose("Logged in."); + instance.dispose(); + Core.verbose("Running server selector."); + ServerSelector.getInstance(); + } else { + Core.verbose("Failed to log in."); + UILog.log("Error", "Incorrect username or password. Have you tried logging into http://bdn.parabot.org/account/", JOptionPane.ERROR_MESSAGE); + } + + } } diff --git a/src/main/java/org/parabot/core/ui/NetworkUI.java b/src/main/java/org/parabot/core/ui/NetworkUI.java index 4905575..df001ce 100644 --- a/src/main/java/org/parabot/core/ui/NetworkUI.java +++ b/src/main/java/org/parabot/core/ui/NetworkUI.java @@ -27,17 +27,17 @@ public class NetworkUI extends JFrame implements KeyListener, ActionListener, private static NetworkUI instance; private JComboBox proxyType; - private JTextField proxyHost; - private IntTextField proxyPort; - private JButton submitButton; + private JTextField proxyHost; + private IntTextField proxyPort; + private JButton submitButton; private JList[] macList; - private JScrollPane[] macScrollList; + private JScrollPane[] macScrollList; - private JCheckBox authCheckBox; - private JTextField authUsername; + private JCheckBox authCheckBox; + private JTextField authUsername; private JPasswordField authPassword; - private JButton randomize; + private JButton randomize; private NetworkUI() { initGUI(); @@ -50,8 +50,9 @@ public class NetworkUI extends JFrame implements KeyListener, ActionListener, @Override public void setVisible(boolean b) { BotUI.getInstance().setEnabled(!b); - if (ProxySocket.getProxyAddress() != null) + if (ProxySocket.getProxyAddress() != null) { proxyHost.setText(ProxySocket.getProxyAddress().getHostName()); + } proxyPort.setText("" + ProxySocket.getProxyPort()); proxyType.setSelectedItem(ProxySocket.getProxyType()); authCheckBox.setSelected(ProxySocket.auth); @@ -92,10 +93,10 @@ public class NetworkUI extends JFrame implements KeyListener, ActionListener, randomize.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - Random rand = new Random(); + Random rand = new Random(); byte[] macAddr = new byte[6]; rand.nextBytes(macAddr); - macAddr[0] = (byte)(macAddr[0] & (byte)254); + macAddr[0] = (byte) (macAddr[0] & (byte) 254); for (int i = 0; i < macAddr.length; i++) { int value = macAddr[i] & 0xFF; macList[i].setSelectedIndex(value); @@ -104,7 +105,6 @@ public class NetworkUI extends JFrame implements KeyListener, ActionListener, } }); - authCheckBox = new JCheckBox("Auth"); authCheckBox.setSelected(ProxySocket.auth); authCheckBox.addActionListener(this); @@ -262,9 +262,10 @@ public class NetworkUI extends JFrame implements KeyListener, ActionListener, .setLogin(username, password); byte[] mac = new byte[macList.length]; - for (int i = 0; i < mac.length; i++) + for (int i = 0; i < mac.length; i++) { mac[i] = (byte) Short.parseShort( (String) macList[i].getSelectedValue(), 16); + } NetworkInterface.setMac(mac); try { @@ -277,8 +278,8 @@ public class NetworkUI extends JFrame implements KeyListener, ActionListener, } } ProxyType type = (ProxyType) proxyType.getSelectedItem(); - String host = proxyHost.getText(); - int port = proxyPort.getValue(); + String host = proxyHost.getText(); + int port = proxyPort.getValue(); ProxySocket.setProxy(type, host, port); UILog.log("Info", "Network settings have been set!"); @@ -340,8 +341,9 @@ public class NetworkUI extends JFrame implements KeyListener, ActionListener, public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { - if (str == null) + if (str == null) { return; + } String oldString = getText(0, getLength()); String newString = oldString.substring(0, offs) + str + oldString.substring(offs); diff --git a/src/main/java/org/parabot/core/ui/RandomUI.java b/src/main/java/org/parabot/core/ui/RandomUI.java index 2581266..7aae7a7 100644 --- a/src/main/java/org/parabot/core/ui/RandomUI.java +++ b/src/main/java/org/parabot/core/ui/RandomUI.java @@ -16,7 +16,7 @@ public class RandomUI implements ActionListener { private static RandomUI instance; - private JFrame frame; + private JFrame frame; private ArrayList checkBoxes; public static RandomUI getInstance() { diff --git a/src/main/java/org/parabot/core/ui/ReflectUI.java b/src/main/java/org/parabot/core/ui/ReflectUI.java index 32d7f59..a35ba39 100644 --- a/src/main/java/org/parabot/core/ui/ReflectUI.java +++ b/src/main/java/org/parabot/core/ui/ReflectUI.java @@ -27,11 +27,11 @@ import java.util.HashMap; */ public class ReflectUI extends JFrame { private static final long serialVersionUID = 98565034137367257L; - private JTree tree; + private JTree tree; private DefaultMutableTreeNode root; - private DefaultTreeModel model; - private JEditorPane basicInfoPane; - private JEditorPane selectionInfoPane; + private DefaultTreeModel model; + private JEditorPane basicInfoPane; + private JEditorPane selectionInfoPane; private Object instance; @@ -82,7 +82,7 @@ public class ReflectUI extends JFrame { @Override public void actionPerformed(ActionEvent e) { RefField result = null; - String search = searchFunction.getText(); + String search = searchFunction.getText(); for (RefField f : fields.values()) { if (f != null && (f.asObject()) != null) { String value; @@ -103,7 +103,6 @@ public class ReflectUI extends JFrame { } }); - final JButton adjustClasses = new JButton("Expand"); adjustClasses.addActionListener(new ActionListener() { @Override @@ -130,7 +129,6 @@ public class ReflectUI extends JFrame { searchContent.setMaximumSize(new Dimension(500, (int) searchContent.getPreferredSize().getHeight())); searchContent.add(searchButton); - tree = new JTree(); tree.setRootVisible(true); tree.setShowsRootHandles(true); @@ -139,9 +137,9 @@ public class ReflectUI extends JFrame { @Override public void valueChanged(TreeSelectionEvent event) { - TreePath path = event.getPath(); + TreePath path = event.getPath(); Object[] pathElements = path.getPath(); - Object element = pathElements[pathElements.length - 1]; + Object element = pathElements[pathElements.length - 1]; if (pathElements.length == 2) { setClassInfo(classes.get(element)); } else if (pathElements.length == 3) { @@ -181,7 +179,7 @@ public class ReflectUI extends JFrame { content.add(searchContent); JScrollPane contentPane = new JScrollPane(content); - Dimension prefSize = content.getPreferredSize(); + Dimension prefSize = content.getPreferredSize(); contentPane.setPreferredSize(new Dimension(prefSize.width + contentPane.getVerticalScrollBar().getPreferredSize().width, prefSize.height + contentPane.getHorizontalScrollBar().getPreferredSize().height)); setContentPane(contentPane); pack(); @@ -190,8 +188,8 @@ public class ReflectUI extends JFrame { } private void fillModel() { - Context context = Context.getInstance(); - ClassPath classPath = context.getClassPath(); + Context context = Context.getInstance(); + ClassPath classPath = context.getClassPath(); ASMClassLoader classLoader = context.getASMClassLoader(); for (String className : classPath.classNames) { try { @@ -221,7 +219,7 @@ public class ReflectUI extends JFrame { } private void fillBasicInfoPane() { - Context context = Context.getInstance(); + Context context = Context.getInstance(); ClassPath classPath = context.getClassPath(); StringBuilder builder = new StringBuilder(); @@ -233,8 +231,8 @@ public class ReflectUI extends JFrame { } private void setFieldInfo(RefField refField) { - StringBuilder builder = new StringBuilder(); - RefClass refClass = refField.getOwner(); + StringBuilder builder = new StringBuilder(); + RefClass refClass = refField.getOwner(); builder.append("

").append(refClass.getClassName()).append(".").append(refField.getName()).append("


"); builder.append("Class: ").append(refClass.getClassName()).append("
"); builder.append("Value: ").append(refField.asObject()).append("
"); @@ -244,7 +242,7 @@ public class ReflectUI extends JFrame { if (refField.isArray() && refField.getASMType().getClassName().contains("String") && refField.getArrayDimensions() == 1) { String[] strings = (String[]) refField.asObject(); - String values = StringUtils.implode(", ", strings); + String values = StringUtils.implode(", ", strings); builder.append("Values: ").append(values).append("
"); } diff --git a/src/main/java/org/parabot/core/ui/ScriptSelector.java b/src/main/java/org/parabot/core/ui/ScriptSelector.java index 38cc6fa..e69994f 100644 --- a/src/main/java/org/parabot/core/ui/ScriptSelector.java +++ b/src/main/java/org/parabot/core/ui/ScriptSelector.java @@ -23,202 +23,198 @@ import java.net.URLEncoder; import java.util.HashMap; /** - * * Script Selector GUI, shows all scripts - * + * * @author Everel */ public final class ScriptSelector extends JFrame { - public static ScriptParser parser; - private static final long serialVersionUID = 1L; - - private HashMap categories; - private HashMap format; - private DefaultMutableTreeNode root; - private DefaultTreeModel model; - private final int WIDTH; - private final int HEIGHT; + private static final long serialVersionUID = 1L; + public static ScriptParser parser; + private final int WIDTH; + private final int HEIGHT; + private HashMap categories; + private HashMap format; + private DefaultMutableTreeNode root; + private DefaultTreeModel model; + private Font fontCategory = new Font("Arial", Font.BOLD, 12); + private Font fontScript = new Font("Arial", Font.PLAIN, 12); + private JTree tree; + private JEditorPane scriptInfo; - public ScriptSelector() { - this.categories = new HashMap(); - this.format = new HashMap(); - this.root = new DefaultMutableTreeNode("Scripts"); - this.WIDTH = 640; - this.HEIGHT = 256 + 128; - this.model = new DefaultTreeModel(root); - putScripts(); - createUI(); - } + public ScriptSelector() { + this.categories = new HashMap(); + this.format = new HashMap(); + this.root = new DefaultMutableTreeNode("Scripts"); + this.WIDTH = 640; + this.HEIGHT = 256 + 128; + this.model = new DefaultTreeModel(root); + putScripts(); + createUI(); + } - private void runScript(ScriptDescription desc) { - dispose(); - final ThreadGroup tg = Context.threadGroups.keySet().iterator() - .next(); - ScriptParser.SCRIPT_CACHE.get(desc).run(tg); - } + private void runScript(ScriptDescription desc) { + dispose(); + final ThreadGroup tg = Context.threadGroups.keySet().iterator() + .next(); + ScriptParser.SCRIPT_CACHE.get(desc).run(tg); + } - private void putScripts() { - final ScriptDescription[] descs = ScriptParser.getDescriptions(); - if (descs == null) { - return; - } - for (final ScriptDescription scriptDesc : descs) { - if (categories.get(scriptDesc.category) == null) { - DefaultMutableTreeNode cat = new DefaultMutableTreeNode(Category.valueOf(scriptDesc.category.toUpperCase())); - cat.add(new DefaultMutableTreeNode(scriptDesc.scriptName)); - root.add(cat); - categories.put(scriptDesc.category, cat); - } else { - categories.get(scriptDesc.category).add( - new DefaultMutableTreeNode(scriptDesc.scriptName)); - } + private void putScripts() { + final ScriptDescription[] descs = ScriptParser.getDescriptions(); + if (descs == null) { + return; + } + for (final ScriptDescription scriptDesc : descs) { + if (categories.get(scriptDesc.category) == null) { + DefaultMutableTreeNode cat = new DefaultMutableTreeNode(Category.valueOf(scriptDesc.category.toUpperCase())); + cat.add(new DefaultMutableTreeNode(scriptDesc.scriptName)); + root.add(cat); + categories.put(scriptDesc.category, cat); + } else { + categories.get(scriptDesc.category).add( + new DefaultMutableTreeNode(scriptDesc.scriptName)); + } - format.put(scriptDesc.scriptName, scriptDesc); - } - } + format.put(scriptDesc.scriptName, scriptDesc); + } + } + private String getScriptName(String path) { + return path.split(", ")[2].replaceAll("\\]", ""); + } - private String getScriptName(String path) { - return path.split(", ")[2].replaceAll("\\]", ""); - } + private String getServerDesc(final String[] servers) { + if (servers == null) { + return "Unknown"; + } + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < servers.length; i++) { + builder.append(servers[i]); + if ((i + 1) < servers.length) { + builder.append(", "); + } + } + return builder.toString(); + } - private String getServerDesc(final String[] servers) { - if (servers == null) { - return "Unknown"; - } - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < servers.length; i++) { - builder.append(servers[i]); - if ((i + 1) < servers.length) { - builder.append(", "); - } - } - return builder.toString(); - } + private void createUI() { - private void createUI() { + this.setTitle("Script Selector"); + this.setLayout(new BorderLayout()); + this.setResizable(false); + this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - this.setTitle("Script Selector"); - this.setLayout(new BorderLayout()); - this.setResizable(false); - this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + JPanel panel = new JPanel(null); + panel.setPreferredSize(new Dimension(WIDTH, HEIGHT)); - JPanel panel = new JPanel(null); - panel.setPreferredSize(new Dimension(WIDTH, HEIGHT)); + tree = new JTree(); + tree.setCellRenderer(new ScriptTreeCellRenderer()); + tree.setRootVisible(false); + tree.setShowsRootHandles(true); + tree.setModel(model); + tree.addTreeSelectionListener(new TreeSelectionListener() { + public void valueChanged(TreeSelectionEvent e) { + String path = e.getPath().toString(); + if (path.split(",").length == 3) { - tree = new JTree(); - tree.setCellRenderer(new ScriptTreeCellRenderer()); - tree.setRootVisible(false); - tree.setShowsRootHandles(true); - tree.setModel(model); - tree.addTreeSelectionListener(new TreeSelectionListener() { - public void valueChanged(TreeSelectionEvent e) { - String path = e.getPath().toString(); - if (path.split(",").length == 3) { + // local scripts + ScriptDescription def = format.get(getScriptName(e + .getPath().toString())); + if (def != null) { + StringBuilder html = new StringBuilder(""); + html.append("

") + .append(def.scriptName) + .append("


"); + html.append("Author: ") + .append(def.author).append("
"); + html.append("Servers: ") + .append(getServerDesc(def.servers)) + .append("
"); + html.append("Version: ") + .append(def.version).append("
"); + html.append( + "Description: ") + .append(def.description).append("
"); + html.append(""); + scriptInfo.setText(new String(html)); + } - // local scripts - ScriptDescription def = format.get(getScriptName(e - .getPath().toString())); - if (def != null) { - StringBuilder html = new StringBuilder(""); - html.append("

") - .append(def.scriptName) - .append("


"); - html.append("Author: ") - .append(def.author).append("
"); - html.append("Servers: ") - .append(getServerDesc(def.servers)) - .append("
"); - html.append("Version: ") - .append(def.version).append("
"); - html.append( - "Description: ") - .append(def.description).append("
"); - html.append(""); - scriptInfo.setText(new String(html)); - } + } + } + }); - } - } - }); + scriptInfo = new JEditorPane(); + scriptInfo.setContentType("text/html"); + scriptInfo.setEditable(false); - scriptInfo = new JEditorPane(); - scriptInfo.setContentType("text/html"); - scriptInfo.setEditable(false); + JScrollPane scrlScriptTree = new JScrollPane(tree); + scrlScriptTree.setBounds(4, 4, WIDTH / 2 - 4 - 64, HEIGHT - 4 - 28); - JScrollPane scrlScriptTree = new JScrollPane(tree); - scrlScriptTree.setBounds(4, 4, WIDTH / 2 - 4 - 64, HEIGHT - 4 - 28); + JScrollPane scrlScriptInfo = new JScrollPane(scriptInfo); + scrlScriptInfo.setBounds(WIDTH / 2 + 4 - 64, 4, WIDTH / 2 - 8 + 64, + HEIGHT - 4 - 28); - JScrollPane scrlScriptInfo = new JScrollPane(scriptInfo); - scrlScriptInfo.setBounds(WIDTH / 2 + 4 - 64, 4, WIDTH / 2 - 8 + 64, - HEIGHT - 4 - 28); + JButton cmdStart = new JButton("Start"); + cmdStart.setBounds(WIDTH - 96 - 4, HEIGHT - 24 - 4, 96, 24); + cmdStart.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String s = getScriptName(tree.getSelectionPath().toString()); + if (s != null) { + try { + WebUtil.getContents("http://bdn.parabot.org/api/v2/scripts/local", "script=" + URLEncoder.encode(s, "UTF-8") + "&username=" + URLEncoder.encode(Context.getUsername(), "UTF-8")); + } catch (MalformedURLException | UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + runScript(format.get(s)); + } + } + }); - JButton cmdStart = new JButton("Start"); - cmdStart.setBounds(WIDTH - 96 - 4, HEIGHT - 24 - 4, 96, 24); - cmdStart.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - String s = getScriptName(tree.getSelectionPath().toString()); - if (s != null) { - try { - WebUtil.getContents("http://bdn.parabot.org/api/v2/scripts/local", "script=" + URLEncoder.encode(s, "UTF-8") + "&username=" + URLEncoder.encode(Context.getUsername(), "UTF-8")); - } catch (MalformedURLException | UnsupportedEncodingException e1) { - e1.printStackTrace(); - } - runScript(format.get(s)); - } - } - }); + JButton cmdHome = new JButton("Open home"); + cmdHome.setBounds(WIDTH - (96 * 2) - 4 - 32, HEIGHT - 24 - 4, 96 + 32, + 24); + cmdHome.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + Desktop.getDesktop().open(Directories.getWorkspace()); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }); - JButton cmdHome = new JButton("Open home"); - cmdHome.setBounds(WIDTH - (96 * 2) - 4 - 32, HEIGHT - 24 - 4, 96 + 32, - 24); - cmdHome.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - try { - Desktop.getDesktop().open(Directories.getWorkspace()); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - }); + panel.add(scrlScriptTree); + panel.add(scrlScriptInfo); + panel.add(cmdStart); + panel.add(cmdHome); - panel.add(scrlScriptTree); - panel.add(scrlScriptInfo); - panel.add(cmdStart); - panel.add(cmdHome); + this.add(panel); + this.pack(); + this.setLocationRelativeTo(getOwner()); - this.add(panel); - this.pack(); - this.setLocationRelativeTo(getOwner()); + } - } + private class ScriptTreeCellRenderer implements TreeCellRenderer { + private JLabel label; - private class ScriptTreeCellRenderer implements TreeCellRenderer { - private JLabel label; + ScriptTreeCellRenderer() { + label = new JLabel(); + } - ScriptTreeCellRenderer() { - label = new JLabel(); - } - - @Override - public Component getTreeCellRendererComponent(JTree list, Object value, - boolean selected, boolean expanded, boolean leaf, int row, - boolean focused) { - Object o = ((DefaultMutableTreeNode) value).getUserObject(); - BufferedImage icon = (o instanceof Category ? ((Category) o) - .getIcon() : Category.getIcon("script")); - label.setIcon(icon != null ? new ImageIcon(icon) : null); - label.setFont(o instanceof Category ? fontCategory : fontScript); - label.setForeground(selected ? Color.DARK_GRAY : Color.BLACK); - label.setText(String.valueOf(value)); - return label; - } - } - - private Font fontCategory = new Font("Arial", Font.BOLD, 12); - private Font fontScript = new Font("Arial", Font.PLAIN, 12); - private JTree tree; - private JEditorPane scriptInfo; + @Override + public Component getTreeCellRendererComponent(JTree list, Object value, + boolean selected, boolean expanded, boolean leaf, int row, + boolean focused) { + Object o = ((DefaultMutableTreeNode) value).getUserObject(); + BufferedImage icon = (o instanceof Category ? ((Category) o) + .getIcon() : Category.getIcon("script")); + label.setIcon(icon != null ? new ImageIcon(icon) : null); + label.setFont(o instanceof Category ? fontCategory : fontScript); + label.setForeground(selected ? Color.DARK_GRAY : Color.BLACK); + label.setText(String.valueOf(value)); + return label; + } + } } diff --git a/src/main/java/org/parabot/core/ui/ServerSelector.java b/src/main/java/org/parabot/core/ui/ServerSelector.java index 3bbaacd..31da8dd 100755 --- a/src/main/java/org/parabot/core/ui/ServerSelector.java +++ b/src/main/java/org/parabot/core/ui/ServerSelector.java @@ -11,97 +11,94 @@ import java.util.LinkedList; import java.util.Queue; /** - * * Shows a list of every supported server which can be started - * + * * @author Dane, Everel - * */ public class ServerSelector extends JPanel { - public static String initServer; - private static final long serialVersionUID = 5238720307271493899L; - private static ServerSelector instance; + private static final long serialVersionUID = 5238720307271493899L; + public static String initServer; + private static ServerSelector instance; - public static ServerSelector getInstance() { - if (instance == null) { - instance = new ServerSelector(); - } - return instance; - } + public ServerSelector() { + Queue widgets = getServers(); + if (initServer != null) { + if (runServer(widgets)) { + initServer = null; + return; + } + } - public ServerSelector() { - Queue widgets = getServers(); - if (initServer != null) { - if (runServer(widgets)) { - initServer = null; - return; - } - } + setLayout(new BorderLayout()); + setPreferredSize(new Dimension(600, 350)); + JPanel interior = new JPanel(null); - setLayout(new BorderLayout()); - setPreferredSize(new Dimension(600, 350)); + int i = 0; + int y = 0; + while (widgets != null && !widgets.isEmpty()) { + final ServerComponent w = widgets.poll(); + w.setSize(300, 100); + if (i % 2 == 0 && i != 0) { + y += 100; + } + w.setLocation(i % 2 == 0 ? 0 : 300, y); + interior.add(w); + i++; + } + y += 100; + interior.setPreferredSize(new Dimension(300, y)); - JPanel interior = new JPanel(null); + JScrollPane scrlInterior = new JScrollPane(interior); + scrlInterior + .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + scrlInterior + .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); + add(scrlInterior); - int i = 0; - int y = 0; - while (widgets != null && !widgets.isEmpty()) { - final ServerComponent w = widgets.poll(); - w.setSize(300, 100); - if(i % 2 == 0 && i != 0) { - y += 100; - } - w.setLocation(i % 2 == 0 ? 0 : 300, y); - interior.add(w); - i++; - } - y += 100; - interior.setPreferredSize(new Dimension(300, y)); + } - JScrollPane scrlInterior = new JScrollPane(interior); - scrlInterior - .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - scrlInterior - .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - add(scrlInterior); + public static ServerSelector getInstance() { + if (instance == null) { + instance = new ServerSelector(); + } + return instance; + } - } + /** + * This method is called when -server argument is given + * + * @param widgets + */ + private boolean runServer(Queue widgets) { + if (widgets == null || widgets.isEmpty()) { + return false; + } + final String serverName = initServer.toLowerCase(); + for (ServerComponent widget : widgets) { + if (widget.desc.getServerName().toLowerCase().equals(serverName)) { + Environment.load(widget.desc); + return true; + } + } + return false; + } - /** - * This method is called when -server argument is given - * - * @param widgets - */ - private boolean runServer(Queue widgets) { - if (widgets == null || widgets.isEmpty()) { - return false; - } - final String serverName = initServer.toLowerCase(); - for (ServerComponent widget : widgets) { - if (widget.desc.getServerName().toLowerCase().equals(serverName)) { - Environment.load(widget.desc); - return true; - } - } - return false; - } - - /** - * Fetches array of server widgets - * - * @return widgets array - */ - public Queue getServers() { - final Queue widgets = new LinkedList<>(); - ServerDescription[] servers = ServerParser.getDescriptions(); - if (servers != null) { - for (ServerDescription desc : servers) { - widgets.add(new ServerComponent(desc)); - } - } - return widgets; - } + /** + * Fetches array of server widgets + * + * @return widgets array + */ + public Queue getServers() { + final Queue widgets = new LinkedList<>(); + ServerDescription[] servers = ServerParser.getDescriptions(); + if (servers != null) { + for (ServerDescription desc : servers) { + widgets.add(new ServerComponent(desc)); + } + } + return widgets; + } } diff --git a/src/main/java/org/parabot/core/ui/components/GamePanel.java b/src/main/java/org/parabot/core/ui/components/GamePanel.java index d319298..166194c 100644 --- a/src/main/java/org/parabot/core/ui/components/GamePanel.java +++ b/src/main/java/org/parabot/core/ui/components/GamePanel.java @@ -6,52 +6,50 @@ import javax.swing.*; import java.awt.*; /** - * * Main panel where applets are added. - * + * * @author Everel - * */ public class GamePanel extends JPanel { - private static final long serialVersionUID = 1L; - private static GamePanel instance; + private static final long serialVersionUID = 1L; + private static GamePanel instance; - private GamePanel() { - setFocusable(true); - setFocusTraversalKeysEnabled(false); - setOpaque(true); - setBackground(Color.black); - setPreferredSize(new Dimension(770, 503)); - GroupLayout panelLayout = new GroupLayout(this); - setLayout(panelLayout); - panelLayout.setHorizontalGroup(panelLayout.createParallelGroup( - GroupLayout.Alignment.LEADING).addGap(0, 770, Short.MAX_VALUE)); - panelLayout.setVerticalGroup(panelLayout.createParallelGroup( - GroupLayout.Alignment.LEADING).addGap(0, 418, Short.MAX_VALUE)); - } + private GamePanel() { + setFocusable(true); + setFocusTraversalKeysEnabled(false); + setOpaque(true); + setBackground(Color.black); + setPreferredSize(new Dimension(770, 503)); + GroupLayout panelLayout = new GroupLayout(this); + setLayout(panelLayout); + panelLayout.setHorizontalGroup(panelLayout.createParallelGroup( + GroupLayout.Alignment.LEADING).addGap(0, 770, Short.MAX_VALUE)); + panelLayout.setVerticalGroup(panelLayout.createParallelGroup( + GroupLayout.Alignment.LEADING).addGap(0, 418, Short.MAX_VALUE)); + } - /** - * Updates context of this panel and adds a different Applet to the panel - * - * @param c - */ - public void setContext(final Context c) { - add(c.getApplet(), BorderLayout.CENTER); - } + /** + * Gets instance of this panel + * + * @return instance of this panel + */ + public static GamePanel getInstance() { + return instance == null ? instance = new GamePanel() : instance; + } - /** - * Gets instance of this panel - * - * @return instance of this panel - */ - public static GamePanel getInstance() { - return instance == null ? instance = new GamePanel() : instance; - } + /** + * Updates context of this panel and adds a different Applet to the panel + * + * @param c + */ + public void setContext(final Context c) { + add(c.getApplet(), BorderLayout.CENTER); + } - /** - * Removes all components - */ - public void removeComponents() { - removeAll(); - } + /** + * Removes all components + */ + public void removeComponents() { + removeAll(); + } } diff --git a/src/main/java/org/parabot/core/ui/components/PaintComponent.java b/src/main/java/org/parabot/core/ui/components/PaintComponent.java index 146ee93..c15cbec 100644 --- a/src/main/java/org/parabot/core/ui/components/PaintComponent.java +++ b/src/main/java/org/parabot/core/ui/components/PaintComponent.java @@ -1,90 +1,84 @@ package org.parabot.core.ui.components; -import java.awt.AlphaComposite; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; - -import javax.swing.JComponent; - import org.parabot.core.Context; import org.parabot.environment.api.interfaces.Paintable; import org.parabot.environment.api.utils.Time; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; + /** - * * The panel that is painted on - * - * @author Everel * + * @author Everel */ public class PaintComponent extends JComponent implements Runnable { - private static final long serialVersionUID = 4653612412080038193L; - private static PaintComponent instance; - - private BufferedImage buffer; - private Graphics2D g2; - private Dimension dimensions; - private Context context; - - private PaintComponent(Dimension dimensions) { - this.dimensions = dimensions; - this.buffer = new BufferedImage(dimensions.width, dimensions.height, BufferedImage.TYPE_INT_ARGB); - this.g2 = buffer.createGraphics(); - - setPreferredSize(dimensions); - setSize(dimensions); - setOpaque(false); - setIgnoreRepaint(true); - } - - public void setDimensions(Dimension dimensions) { - this.dimensions = dimensions; - this.dimensions = dimensions; - this.buffer = new BufferedImage(dimensions.width, dimensions.height, BufferedImage.TYPE_INT_ARGB); - this.g2 = buffer.createGraphics(); - - setPreferredSize(dimensions); - setSize(dimensions); - setOpaque(false); - setIgnoreRepaint(true); - } - - public static PaintComponent getInstance(Dimension dimensions) { - return instance == null ? instance = new PaintComponent(dimensions) : instance; - } - - public static PaintComponent getInstance() { - return getInstance(null); - } - - public void startPainting(Context context) { - this.context = context; - new Thread(this).start(); - } - - @Override - public void paintComponent(Graphics g) { - g2.setComposite(AlphaComposite.Clear); - g2.fillRect(0, 0, dimensions.width, dimensions.height); - g2.setComposite(AlphaComposite.SrcOver); - - if(context != null) { - for(Paintable p : context.getPaintables()) { - p.paint(g); - } - context.getPaintDebugger().debug(g2); - } - g.drawImage(buffer, 0, 0, null); - } + private static final long serialVersionUID = 4653612412080038193L; + private static PaintComponent instance; - @Override - public void run() { - while(true) { - Time.sleep(100); - repaint(); - } - } + private BufferedImage buffer; + private Graphics2D g2; + private Dimension dimensions; + private Context context; + + private PaintComponent(Dimension dimensions) { + this.dimensions = dimensions; + this.buffer = new BufferedImage(dimensions.width, dimensions.height, BufferedImage.TYPE_INT_ARGB); + this.g2 = buffer.createGraphics(); + + setPreferredSize(dimensions); + setSize(dimensions); + setOpaque(false); + setIgnoreRepaint(true); + } + + public static PaintComponent getInstance(Dimension dimensions) { + return instance == null ? instance = new PaintComponent(dimensions) : instance; + } + + public static PaintComponent getInstance() { + return getInstance(null); + } + + public void setDimensions(Dimension dimensions) { + this.dimensions = dimensions; + this.dimensions = dimensions; + this.buffer = new BufferedImage(dimensions.width, dimensions.height, BufferedImage.TYPE_INT_ARGB); + this.g2 = buffer.createGraphics(); + + setPreferredSize(dimensions); + setSize(dimensions); + setOpaque(false); + setIgnoreRepaint(true); + } + + public void startPainting(Context context) { + this.context = context; + new Thread(this).start(); + } + + @Override + public void paintComponent(Graphics g) { + g2.setComposite(AlphaComposite.Clear); + g2.fillRect(0, 0, dimensions.width, dimensions.height); + g2.setComposite(AlphaComposite.SrcOver); + + if (context != null) { + for (Paintable p : context.getPaintables()) { + p.paint(g); + } + context.getPaintDebugger().debug(g2); + } + g.drawImage(buffer, 0, 0, null); + } + + @Override + public void run() { + while (true) { + Time.sleep(100); + repaint(); + } + } } diff --git a/src/main/java/org/parabot/core/ui/components/ProgressBar.java b/src/main/java/org/parabot/core/ui/components/ProgressBar.java index cfea288..816ab8c 100644 --- a/src/main/java/org/parabot/core/ui/components/ProgressBar.java +++ b/src/main/java/org/parabot/core/ui/components/ProgressBar.java @@ -1,92 +1,86 @@ package org.parabot.core.ui.components; -import java.awt.Color; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.RenderingHints; +import java.awt.*; import java.awt.geom.Rectangle2D; /** - * * ProgressBar - * - * @author Everel * + * @author Everel */ public class ProgressBar { - private double value; - private int width; - private int height; - private double locX; - private Color progColor; - private Color backColor; - private FontMetrics fontMetrics; - private String text; + private double value; + private int width; + private int height; + private double locX; + private Color progColor; + private Color backColor; + private FontMetrics fontMetrics; + private String text; - public ProgressBar(int width, int height) { - this.progColor = new Color(255, 0, 0); - this.backColor = new Color(74, 74, 72, 100); - this.width = width; - this.height = height; - this.text = ""; - } - - public void setText(final String text) { - this.text = text; - } + public ProgressBar(int width, int height) { + this.progColor = new Color(255, 0, 0); + this.backColor = new Color(74, 74, 72, 100); + this.width = width; + this.height = height; + this.text = ""; + } - public void setValue(double value) { - if(value < 0 || value > 100) { - return; - } - if(value > 99) { - value = 100; - } - this.value = value; - this.locX = (width / 100.0D) * value; + public void setText(final String text) { + this.text = text; + } - int val = (int) value; - /*if (value <= 50) { + public double getValue() { + return value; + } + + public void setValue(double value) { + if (value < 0 || value > 100) { + return; + } + if (value > 99) { + value = 100; + } + this.value = value; + this.locX = (width / 100.0D) * value; + + int val = (int) value; + /*if (value <= 50) { this.progColor = new Color(255, (2 * val), 0); } else { val -= 50; this.progColor = new Color((int) (255 - (5.1D * val)), 100 + (2 * val), 0); }*/ - - int r = (int) (((double) (225 - 218) * (double) val) / ((double) 100.D)); - int g = (int) (((double) (253 - 165) * (double) val) / ((double) 100.D)); - int b = (int) (((double) (145 - 32) * (double) val) / ((double) 100.D)); - this.progColor = new Color(255 - r, 253 - g, 145 - b); - } - public double getValue() { - return value; - } + int r = (int) (((double) (225 - 218) * (double) val) / ((double) 100.D)); + int g = (int) (((double) (253 - 165) * (double) val) / ((double) 100.D)); + int b = (int) (((double) (145 - 32) * (double) val) / ((double) 100.D)); + this.progColor = new Color(255 - r, 253 - g, 145 - b); + } - public void draw(Graphics g, int x, int y) { - Graphics2D g2 = (Graphics2D) g; - g2.setRenderingHint( - RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - if (fontMetrics == null) { - fontMetrics = g2.getFontMetrics(); - } - g2.setColor(backColor); - g2.fillRect(x, y, width, height); - g2.setColor(Color.DARK_GRAY); - g2.drawRect(x - 1, y - 1, width + 1, height + 1); - g2.setColor(this.progColor); - g2.fill(new Rectangle2D.Double(x, y, locX, height)); - - int value = (int) getValue(); - String percent = Integer.toString(value) + "% " + text; - - int strX = (x + (width / 2)) - (fontMetrics.stringWidth(percent) / 2); - g2.setColor(Color.white); - g2.drawString(percent, strX, y + 13); - } + public void draw(Graphics g, int x, int y) { + Graphics2D g2 = (Graphics2D) g; + g2.setRenderingHint( + RenderingHints.KEY_TEXT_ANTIALIASING, + RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + if (fontMetrics == null) { + fontMetrics = g2.getFontMetrics(); + } + g2.setColor(backColor); + g2.fillRect(x, y, width, height); + g2.setColor(Color.DARK_GRAY); + g2.drawRect(x - 1, y - 1, width + 1, height + 1); + g2.setColor(this.progColor); + g2.fill(new Rectangle2D.Double(x, y, locX, height)); + + int value = (int) getValue(); + String percent = Integer.toString(value) + "% " + text; + + int strX = (x + (width / 2)) - (fontMetrics.stringWidth(percent) / 2); + g2.setColor(Color.white); + g2.drawString(percent, strX, y + 13); + } } diff --git a/src/main/java/org/parabot/core/ui/components/ServerComponent.java b/src/main/java/org/parabot/core/ui/components/ServerComponent.java index 7fa9c83..c3f47fd 100644 --- a/src/main/java/org/parabot/core/ui/components/ServerComponent.java +++ b/src/main/java/org/parabot/core/ui/components/ServerComponent.java @@ -1,131 +1,124 @@ package org.parabot.core.ui.components; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; - -import javax.swing.JPanel; - import org.parabot.core.desc.ServerDescription; import org.parabot.core.ui.fonts.Fonts; import org.parabot.environment.Environment; +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; + /** * A neat looking server component - * + * * @author Everel - * */ public class ServerComponent extends JPanel implements MouseListener, - MouseMotionListener { - private static final long serialVersionUID = 1L; - - public ServerDescription desc; - private String name; - private boolean hovered; + MouseMotionListener { + private static final long serialVersionUID = 1L; - public ServerComponent(final ServerDescription desc) { - this.desc = desc; - setLayout(null); - this.name = desc.getServerName().replaceAll(" ", ""); + public ServerDescription desc; + private String name; + private boolean hovered; - addMouseListener(this); - addMouseMotionListener(this); - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } + public ServerComponent(final ServerDescription desc) { + this.desc = desc; + setLayout(null); + this.name = desc.getServerName().replaceAll(" ", ""); - @Override - public String getName() { - return name; - } + addMouseListener(this); + addMouseMotionListener(this); + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } - @Override - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - setOpaque(false); - super.paintComponent(g); - setOpaque(true); - int w = getWidth(); - int h = getHeight(); + @Override + public String getName() { + return name; + } - Color bgColor = Color.LIGHT_GRAY; - if (hovered) { - bgColor = Color.GRAY; - } + @Override + public void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + setOpaque(false); + super.paintComponent(g); + setOpaque(true); + int w = getWidth(); + int h = getHeight(); - g2d.setColor(bgColor); - g2d.fillRect(0, 0, w, h); - g.setColor(Color.black); - Font title = Fonts.getResource("leelawadee.ttf", 16); - g.setFont(title); - String serverName = desc.getServerName(); - int sw = g.getFontMetrics().stringWidth(serverName); - g.drawString(serverName, (w / 2) - (sw / 2), 30); + Color bgColor = Color.LIGHT_GRAY; + if (hovered) { + bgColor = Color.GRAY; + } - Font normal = Fonts.getResource("leelawadee.ttf"); - g.setFont(normal); - FontMetrics fm = g.getFontMetrics(); - String author = "Author: " + desc.getAuthor(); - String revision = "Revision: " + desc.getRevision(); + g2d.setColor(bgColor); + g2d.fillRect(0, 0, w, h); + g.setColor(Color.black); + Font title = Fonts.getResource("leelawadee.ttf", 16); + g.setFont(title); + String serverName = desc.getServerName(); + int sw = g.getFontMetrics().stringWidth(serverName); + g.drawString(serverName, (w / 2) - (sw / 2), 30); - g.drawString(author, (w / 2) - (fm.stringWidth(author) / 2), 55); - g.drawString(revision, (w / 2) - (fm.stringWidth(revision) / 2), 70); - } + Font normal = Fonts.getResource("leelawadee.ttf"); + g.setFont(normal); + FontMetrics fm = g.getFontMetrics(); + String author = "Author: " + desc.getAuthor(); + String revision = "Revision: " + desc.getRevision(); - public void load(final ServerDescription desc) { - VerboseLoader.get().switchState(VerboseLoader.STATE_LOADING); - new Thread(new Runnable() { - @Override - public void run() { - Environment.load(desc); + g.drawString(author, (w / 2) - (fm.stringWidth(author) / 2), 55); + g.drawString(revision, (w / 2) - (fm.stringWidth(revision) / 2), 70); + } - } - }).start(); - } + public void load(final ServerDescription desc) { + VerboseLoader.get().switchState(VerboseLoader.STATE_LOADING); + new Thread(new Runnable() { + @Override + public void run() { + Environment.load(desc); - @Override - public void mouseMoved(MouseEvent e) { - if (!hovered) { - hovered = true; - this.repaint(); - } - } + } + }).start(); + } - @Override - public void mouseExited(MouseEvent e) { - if (hovered) { - hovered = false; - this.repaint(); - } + @Override + public void mouseMoved(MouseEvent e) { + if (!hovered) { + hovered = true; + this.repaint(); + } + } - } + @Override + public void mouseExited(MouseEvent e) { + if (hovered) { + hovered = false; + this.repaint(); + } - @Override - public void mousePressed(MouseEvent e) { - if (hovered) { - load(desc); - } - } - - @Override - public void mouseDragged(MouseEvent e) { - } - - @Override - public void mouseClicked(MouseEvent e) { - } + } - @Override - public void mouseEntered(MouseEvent e) { - } + @Override + public void mousePressed(MouseEvent e) { + if (hovered) { + load(desc); + } + } - @Override - public void mouseReleased(MouseEvent e) { - } + @Override + public void mouseDragged(MouseEvent e) { + } + + @Override + public void mouseClicked(MouseEvent e) { + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseReleased(MouseEvent e) { + } } 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 9d9e102..929bdb8 100755 --- a/src/main/java/org/parabot/core/ui/components/VerboseLoader.java +++ b/src/main/java/org/parabot/core/ui/components/VerboseLoader.java @@ -6,8 +6,8 @@ import org.parabot.core.forum.AccountManager; import org.parabot.core.forum.AccountManagerAccess; import org.parabot.core.io.ProgressListener; import org.parabot.core.ui.ServerSelector; -import org.parabot.core.ui.images.Images; import org.parabot.core.ui.fonts.Fonts; +import org.parabot.core.ui.images.Images; import org.parabot.core.ui.utils.UILog; import javax.swing.*; @@ -24,22 +24,13 @@ import java.awt.image.RescaleOp; * @author Everel, EmmaStone */ public class VerboseLoader extends JPanel implements ProgressListener { + public static final int STATE_LOADING = 1; private static final long serialVersionUID = 7412412644921803896L; + private static final int STATE_AUTHENTICATION = 0; + private static final int STATE_SERVER_SELECT = 2; private static VerboseLoader current; private static String state = "Initializing loader..."; - - private static final int STATE_AUTHENTICATION = 0; - public static final int STATE_LOADING = 1; - private static final int STATE_SERVER_SELECT = 2; - private int currentState; - private static AccountManager manager; - - private FontMetrics fontMetrics; - private BufferedImage background, banner, loginBox; - private ProgressBar progressBar; - private JPanel loginPanel; - public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() { @Override @@ -48,6 +39,11 @@ public class VerboseLoader extends JPanel implements ProgressListener { } }; + private int currentState; + private FontMetrics fontMetrics; + private BufferedImage background, banner, loginBox; + private ProgressBar progressBar; + private JPanel loginPanel; private VerboseLoader(String username, String password) { if (current != null) { @@ -77,10 +73,38 @@ public class VerboseLoader extends JPanel implements ProgressListener { } } + /** + * Gets instance of this panel + * + * @return instance of this panel + */ + public static VerboseLoader get(String username, String password) { + return current == null ? new VerboseLoader(username, password) : current; + } + + /** + * Gets instance of this panel + * + * @return instance of this panel + */ + public static VerboseLoader get() { + return current == null ? new VerboseLoader(null, null) : current; + } + + /** + * Updates the status message and repaints the panel + * + * @param message + */ + public static void setState(final String message) { + state = message; + current.repaint(); + } + public void addServerPanel() { - JPanel servers = ServerSelector.getInstance(); - GridBagLayout bagLayout = (GridBagLayout) getLayout(); - GridBagConstraints c = new GridBagConstraints(); + JPanel servers = ServerSelector.getInstance(); + GridBagLayout bagLayout = (GridBagLayout) getLayout(); + GridBagConstraints c = new GridBagConstraints(); c.weightx = 1; c.weighty = 1; @@ -139,7 +163,6 @@ public class VerboseLoader extends JPanel implements ProgressListener { passwordLabel.setAlignmentX(Box.CENTER_ALIGNMENT); passwordLabel.setForeground(Color.white); - login.setAlignmentX(Box.CENTER_ALIGNMENT); login.setOpaque(false); @@ -189,16 +212,15 @@ public class VerboseLoader extends JPanel implements ProgressListener { public void paintComponent(Graphics graphics) { super.paintComponent(graphics); - Graphics2D g = (Graphics2D) graphics; g.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.drawImage(background, 0, 0, null); - float[] scales = {1f, 1f, 1f, 0.9f}; - float[] offsets = new float[4]; - RescaleOp rop = new RescaleOp(scales, offsets, null); + float[] scales = { 1f, 1f, 1f, 0.9f }; + float[] offsets = new float[4]; + RescaleOp rop = new RescaleOp(scales, offsets, null); g.drawImage(banner, rop, 0, 0); g.setStroke(new BasicStroke(5)); @@ -236,7 +258,6 @@ public class VerboseLoader extends JPanel implements ProgressListener { g.drawString(state, x, 200); } - g.setFont(Fonts.getResource("leelawadee.ttf")); final String version = Configuration.BOT_VERSION.get(); g.drawString(version, @@ -244,35 +265,6 @@ public class VerboseLoader extends JPanel implements ProgressListener { getHeight() - 12); } - /** - * Gets instance of this panel - * - * @return instance of this panel - */ - public static VerboseLoader get(String username, String password) { - return current == null ? new VerboseLoader(username, password) : current; - } - - /** - * Gets instance of this panel - * - * @return instance of this panel - */ - public static VerboseLoader get() { - return current == null ? new VerboseLoader(null, null) : current; - } - - - /** - * Updates the status message and repaints the panel - * - * @param message - */ - public static void setState(final String message) { - state = message; - current.repaint(); - } - @Override public void onProgressUpdate(double value) { progressBar.setValue(value); diff --git a/src/main/java/org/parabot/core/ui/components/script-selector.fxml b/src/main/java/org/parabot/core/ui/components/script-selector.fxml index 6b52e6f..6f4e6ed 100644 --- a/src/main/java/org/parabot/core/ui/components/script-selector.fxml +++ b/src/main/java/org/parabot/core/ui/components/script-selector.fxml @@ -1,86 +1,87 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
diff --git a/src/main/java/org/parabot/core/ui/fonts/Fonts.java b/src/main/java/org/parabot/core/ui/fonts/Fonts.java index 378c654..5bb01a2 100644 --- a/src/main/java/org/parabot/core/ui/fonts/Fonts.java +++ b/src/main/java/org/parabot/core/ui/fonts/Fonts.java @@ -13,6 +13,7 @@ public class Fonts { * Calls the getResource with the default size of 12 * * @param resource + * * @return */ public static Font getResource(final String resource) { diff --git a/src/main/java/org/parabot/core/ui/fonts/ParabotFont.java b/src/main/java/org/parabot/core/ui/fonts/ParabotFont.java index ebd3d5d..fc8c932 100644 --- a/src/main/java/org/parabot/core/ui/fonts/ParabotFont.java +++ b/src/main/java/org/parabot/core/ui/fonts/ParabotFont.java @@ -9,7 +9,7 @@ import java.io.IOException; public class ParabotFont { private String location; - private Font font; + private Font font; public ParabotFont(String location, float size) { if (!location.toLowerCase().startsWith("/storage/fonts/")) { diff --git a/src/main/java/org/parabot/core/ui/listeners/PBKeyListener.java b/src/main/java/org/parabot/core/ui/listeners/PBKeyListener.java index 2883460..d4b077b 100644 --- a/src/main/java/org/parabot/core/ui/listeners/PBKeyListener.java +++ b/src/main/java/org/parabot/core/ui/listeners/PBKeyListener.java @@ -2,7 +2,6 @@ package org.parabot.core.ui.listeners; import org.parabot.core.ui.listeners.key.ActionEventBinding; import org.parabot.core.ui.listeners.key.Binding; -import org.parabot.environment.OperatingSystem; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; @@ -31,15 +30,15 @@ public class PBKeyListener implements KeyListener { } public void addBinding(Binding binding) { - for (Binding bind : this.bindings){ - if (bind.getKey() == binding.getKey()){ + for (Binding bind : this.bindings) { + if (bind.getKey() == binding.getKey()) { return; } } this.bindings.add(binding); } - public void resetBindings(){ + public void resetBindings() { this.bindings = new ArrayList<>(); this.fillBindings(); } diff --git a/src/main/java/org/parabot/environment/Environment.java b/src/main/java/org/parabot/environment/Environment.java index 75b7bf8..88cf093 100644 --- a/src/main/java/org/parabot/environment/Environment.java +++ b/src/main/java/org/parabot/environment/Environment.java @@ -10,7 +10,6 @@ import org.parabot.environment.api.utils.WebUtil; import java.util.LinkedList; - /** * Initializes the bot environment * diff --git a/src/main/java/org/parabot/environment/OperatingSystem.java b/src/main/java/org/parabot/environment/OperatingSystem.java index 2238061..1c5fb5e 100644 --- a/src/main/java/org/parabot/environment/OperatingSystem.java +++ b/src/main/java/org/parabot/environment/OperatingSystem.java @@ -1,25 +1,26 @@ package org.parabot.environment; /** - * * This class is used for detecting the user's operating system - * + * * @author Everel - * */ public enum OperatingSystem { - WINDOWS, LINUX, MAC, OTHER; + WINDOWS, LINUX, MAC, OTHER; - public static final OperatingSystem getOS() { - String str = System.getProperty("os.name").toLowerCase(); - if (str.indexOf("win") > -1) - return OperatingSystem.WINDOWS; - if (str.indexOf("mac") > -1) - return OperatingSystem.MAC; - if (str.indexOf("nix") > -1 || str.indexOf("nux") > -1) - return OperatingSystem.LINUX; - return OperatingSystem.OTHER; - } + public static final OperatingSystem getOS() { + String str = System.getProperty("os.name").toLowerCase(); + if (str.indexOf("win") > -1) { + return OperatingSystem.WINDOWS; + } + if (str.indexOf("mac") > -1) { + return OperatingSystem.MAC; + } + if (str.indexOf("nix") > -1 || str.indexOf("nux") > -1) { + return OperatingSystem.LINUX; + } + return OperatingSystem.OTHER; + } } diff --git a/src/main/java/org/parabot/environment/api/interfaces/Paintable.java b/src/main/java/org/parabot/environment/api/interfaces/Paintable.java index 29a979c..467c4dd 100644 --- a/src/main/java/org/parabot/environment/api/interfaces/Paintable.java +++ b/src/main/java/org/parabot/environment/api/interfaces/Paintable.java @@ -1,17 +1,15 @@ package org.parabot.environment.api.interfaces; -import java.awt.Graphics; +import java.awt.*; /** - * * @author Everel - * */ public interface Paintable { - - /** - * @param g - */ - public void paint(Graphics g); + + /** + * @param g + */ + public void paint(Graphics g); } diff --git a/src/main/java/org/parabot/environment/api/utils/FileUtil.java b/src/main/java/org/parabot/environment/api/utils/FileUtil.java index ba7ea9c..ce954d3 100644 --- a/src/main/java/org/parabot/environment/api/utils/FileUtil.java +++ b/src/main/java/org/parabot/environment/api/utils/FileUtil.java @@ -13,13 +13,13 @@ import java.security.NoSuchAlgorithmException; */ public class FileUtil { - public static String getChecksum(File file){ + public static String getChecksum(File file) { if (file.isFile()) { try { MessageDigest md = MessageDigest.getInstance("MD5"); if (file.exists()) { - FileInputStream fis = new FileInputStream(file); - byte[] dataBytes = new byte[1024]; + FileInputStream fis = new FileInputStream(file); + byte[] dataBytes = new byte[1024]; int nread; @@ -49,8 +49,8 @@ public class FileUtil { try { MessageDigest md = MessageDigest.getInstance("MD5"); if (file.exists()) { - FileInputStream fis = new FileInputStream(file); - byte[] dataBytes = new byte[1024]; + FileInputStream fis = new FileInputStream(file); + byte[] dataBytes = new byte[1024]; int nread; @@ -76,7 +76,7 @@ public class FileUtil { if (!destFile.exists()) { destFile.createNewFile(); } - FileChannel source = null; + FileChannel source = null; FileChannel destination = null; source = new FileInputStream(sourceFile).getChannel(); destination = new FileOutputStream(destFile).getChannel(); diff --git a/src/main/java/org/parabot/environment/api/utils/Filter.java b/src/main/java/org/parabot/environment/api/utils/Filter.java index 2c2c3cf..b06d9fc 100644 --- a/src/main/java/org/parabot/environment/api/utils/Filter.java +++ b/src/main/java/org/parabot/environment/api/utils/Filter.java @@ -2,16 +2,18 @@ package org.parabot.environment.api.utils; /** * A simple class to filter things out of an collection - * - * @author Everel - * + * * @param + * + * @author Everel */ public interface Filter { - /** - * Determines if this object should be accepted - * @param f - * @return true to include this object, otherwise false to exclude. - */ - public boolean accept(F f); + /** + * Determines if this object should be accepted + * + * @param f + * + * @return true to include this object, otherwise false to exclude. + */ + public boolean accept(F f); } diff --git a/src/main/java/org/parabot/environment/api/utils/JavaUtil.java b/src/main/java/org/parabot/environment/api/utils/JavaUtil.java index ad6952b..8bba906 100644 --- a/src/main/java/org/parabot/environment/api/utils/JavaUtil.java +++ b/src/main/java/org/parabot/environment/api/utils/JavaUtil.java @@ -6,10 +6,10 @@ package org.parabot.environment.api.utils; public class JavaUtil { public static double JAVA_VERSION = getVersion(); - static double getVersion () { + static double getVersion() { String version = System.getProperty("java.version"); - int pos = version.indexOf('.'); - pos = version.indexOf('.', pos+1); - return Double.parseDouble (version.substring (0, pos)); + int pos = version.indexOf('.'); + pos = version.indexOf('.', pos + 1); + return Double.parseDouble(version.substring(0, pos)); } } diff --git a/src/main/java/org/parabot/environment/api/utils/Multipliers.java b/src/main/java/org/parabot/environment/api/utils/Multipliers.java index 701449f..7ac8f90 100644 --- a/src/main/java/org/parabot/environment/api/utils/Multipliers.java +++ b/src/main/java/org/parabot/environment/api/utils/Multipliers.java @@ -3,44 +3,38 @@ package org.parabot.environment.api.utils; import java.math.BigInteger; /** - * * Helper class for calculating setters for clients that uses multipliers - * - * @author Everel * + * @author Everel */ public class Multipliers { - /** - * - * @param multiplier - * the multiplier - * @param set - * the value you want to set - * @return the correct setter value - */ - public static int getIntSetter(int multiplier, int set) { - int bits = 32; - BigInteger quotient = new BigInteger(Integer.toString(multiplier)); - BigInteger shift = BigInteger.ONE.shiftLeft(bits); - int value = quotient.modInverse(shift).intValue(); - return value * set; - } + /** + * @param multiplier the multiplier + * @param set the value you want to set + * + * @return the correct setter value + */ + public static int getIntSetter(int multiplier, int set) { + int bits = 32; + BigInteger quotient = new BigInteger(Integer.toString(multiplier)); + BigInteger shift = BigInteger.ONE.shiftLeft(bits); + int value = quotient.modInverse(shift).intValue(); + return value * set; + } - /** - * - * @param multiplier - * the multiplier - * @param set - * the value you want to set - * @return the correct setter value - */ - public static long getLongSetter(long multiplier, long set) { - int bits = 64; - BigInteger quotient = new BigInteger(Long.toString(multiplier)); - BigInteger shift = BigInteger.ONE.shiftLeft(bits); - long value = quotient.modInverse(shift).longValue(); - return value * set; - } + /** + * @param multiplier the multiplier + * @param set the value you want to set + * + * @return the correct setter value + */ + public static long getLongSetter(long multiplier, long set) { + int bits = 64; + BigInteger quotient = new BigInteger(Long.toString(multiplier)); + BigInteger shift = BigInteger.ONE.shiftLeft(bits); + long value = quotient.modInverse(shift).longValue(); + return value * set; + } } diff --git a/src/main/java/org/parabot/environment/api/utils/PBPreferences.java b/src/main/java/org/parabot/environment/api/utils/PBPreferences.java index 8d810e2..e7e3ffc 100644 --- a/src/main/java/org/parabot/environment/api/utils/PBPreferences.java +++ b/src/main/java/org/parabot/environment/api/utils/PBPreferences.java @@ -19,16 +19,14 @@ import java.util.Properties; public class PBPreferences { private static AccountManager manager; - - private Properties properties; - private int scriptID; - public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() { @Override public final void setManager(AccountManager manager) { PBPreferences.manager = manager; } }; + private Properties properties; + private int scriptID; public PBPreferences(int scriptID) { this.scriptID = scriptID; @@ -45,7 +43,7 @@ public class PBPreferences { JSONArray resultArray; if ((resultArray = ((JSONArray) result.get("result"))) != null) { - for(Object rObject : resultArray) { + for (Object rObject : resultArray) { JSONObject resultObject = (JSONObject) rObject; for (Object map : resultObject.entrySet()) { Map.Entry pairs = (Map.Entry) map; @@ -60,6 +58,7 @@ public class PBPreferences { /** * Change a setting + * * @param key * @param value */ @@ -69,27 +68,32 @@ public class PBPreferences { /** * Get a setting value + * * @param key + * * @return */ - public Object getSetting(Object key){ + public Object getSetting(Object key) { return this.properties.get(key); } /** * Get a setting value as string + * * @param key + * * @return */ - public String getSetting(String key){ + public String getSetting(String key) { return this.properties.getProperty(key); } /** * Remove a setting + * * @param key */ - public void removeSetting(Object key){ + public void removeSetting(Object key) { try { JSONObject result = (JSONObject) WebUtil.getJsonParser().parse( WebUtil.getContents("http://bdn.parabot.org/api/v2/user/preferences/set/", @@ -98,7 +102,7 @@ public class PBPreferences { "&script=" + String.valueOf(scriptID) ) ); - if ((boolean)result.get("result")){ + if ((boolean) result.get("result")) { this.properties.remove(key); } } catch (ParseException | MalformedURLException | UnsupportedEncodingException e) { @@ -108,10 +112,11 @@ public class PBPreferences { /** * Add a setting + * * @param key * @param value */ - public void addSetting(Object key, Object value){ + public void addSetting(Object key, Object value) { try { JSONObject result = (JSONObject) WebUtil.getJsonParser().parse( WebUtil.getContents("http://bdn.parabot.org/api/v2/user/preferences/set/", @@ -121,7 +126,7 @@ public class PBPreferences { "&script=" + String.valueOf(scriptID) ) ); - if ((boolean)result.get("result")){ + if ((boolean) result.get("result")) { this.properties.put(key, value); } } catch (ParseException | MalformedURLException | UnsupportedEncodingException e) { diff --git a/src/main/java/org/parabot/environment/api/utils/Random.java b/src/main/java/org/parabot/environment/api/utils/Random.java index 804983c..f9b63ea 100644 --- a/src/main/java/org/parabot/environment/api/utils/Random.java +++ b/src/main/java/org/parabot/environment/api/utils/Random.java @@ -1,28 +1,27 @@ package org.parabot.environment.api.utils; /** - * * A random class is used for generating random numbers - * - * @author Everel * + * @author Everel */ public class Random { - private final static java.util.Random RANDOM = new java.util.Random(); - - /** - * Randomizes a number between minimum and maximum - * - * @param min - * @param max - * @return randomized number - */ - public static int between(final int min, final int max) { - try { - return min + (max == min ? 0 : RANDOM.nextInt(max - min)); - } catch (Exception e) { - return min + (max - min); - } - } + private final static java.util.Random RANDOM = new java.util.Random(); + + /** + * Randomizes a number between minimum and maximum + * + * @param min + * @param max + * + * @return randomized number + */ + public static int between(final int min, final int max) { + try { + return min + (max == min ? 0 : RANDOM.nextInt(max - min)); + } catch (Exception e) { + return min + (max - min); + } + } } diff --git a/src/main/java/org/parabot/environment/api/utils/Time.java b/src/main/java/org/parabot/environment/api/utils/Time.java index 40194cd..5418f42 100644 --- a/src/main/java/org/parabot/environment/api/utils/Time.java +++ b/src/main/java/org/parabot/environment/api/utils/Time.java @@ -3,66 +3,63 @@ package org.parabot.environment.api.utils; import org.parabot.environment.scripts.framework.SleepCondition; /** - * * Holds various Time utilities - * - * @author Everel * + * @author Everel */ public final class Time { - - /** - * Sleeps for a given amount of time - * @param ms - */ - public static void sleep(final int ms) { - try { - Thread.sleep(ms); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - - /** - * - * @param minumum - * @param maximum - */ - public static void sleep(final int minumum, final int maximum) { - try { - Thread.sleep(Random.between(minumum, maximum)); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - /** - * Sleeps until the SleepCondition is valid. - * - * @param conn - * the condition. - * @param timeout - * the time in miliseconds before it stops sleeping. - * @return whether it ran successfully without timing out. - */ - public static boolean sleep(SleepCondition conn, int timeout) { - long start = System.currentTimeMillis(); - while (!conn.isValid()) { - if (start + timeout < System.currentTimeMillis()) { - return false; - } - Time.sleep(50); - } - return true; - } - - /** - * Gets current time in milliseconds - * @return time in ms - */ - public static long get() { - return System.currentTimeMillis(); - } + + /** + * Sleeps for a given amount of time + * + * @param ms + */ + public static void sleep(final int ms) { + try { + Thread.sleep(ms); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + /** + * @param minumum + * @param maximum + */ + public static void sleep(final int minumum, final int maximum) { + try { + Thread.sleep(Random.between(minumum, maximum)); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + /** + * Sleeps until the SleepCondition is valid. + * + * @param conn the condition. + * @param timeout the time in miliseconds before it stops sleeping. + * + * @return whether it ran successfully without timing out. + */ + public static boolean sleep(SleepCondition conn, int timeout) { + long start = System.currentTimeMillis(); + while (!conn.isValid()) { + if (start + timeout < System.currentTimeMillis()) { + return false; + } + Time.sleep(50); + } + return true; + } + + /** + * Gets current time in milliseconds + * + * @return time in ms + */ + public static long get() { + return System.currentTimeMillis(); + } } diff --git a/src/main/java/org/parabot/environment/api/utils/Timer.java b/src/main/java/org/parabot/environment/api/utils/Timer.java index d062895..7d6be58 100644 --- a/src/main/java/org/parabot/environment/api/utils/Timer.java +++ b/src/main/java/org/parabot/environment/api/utils/Timer.java @@ -1,120 +1,118 @@ package org.parabot.environment.api.utils; /** - * * A simple timer class - * + * * @author Everel, Parameter - * */ public class Timer { - private long start; - private long end; + private long start; + private long end; - /** - * Timer Constructor - * - * @param end - */ - public Timer(long end) { + /** + * Timer Constructor + * + * @param end + */ + public Timer(long end) { - start = System.currentTimeMillis(); - this.end = System.currentTimeMillis() + end; - } + start = System.currentTimeMillis(); + this.end = System.currentTimeMillis() + end; + } - /** - * Timer Constructor - */ - public Timer() { - this(0); - } + /** + * Timer Constructor + */ + public Timer() { + this(0); + } - /** - * Determines the remaining time left. - * - * @return the remaining time. - */ - public long getRemaining() { - return end - System.currentTimeMillis(); - } + /** + * Determines the remaining time left. + * + * @return the remaining time. + */ + public long getRemaining() { + return end - System.currentTimeMillis(); + } - /** - * Determines if the end time has been reached, does not mean it stopped - * running. - */ - public boolean isFinished() { - return System.currentTimeMillis() > end; - } + /** + * Determines if the end time has been reached, does not mean it stopped + * running. + */ + public boolean isFinished() { + return System.currentTimeMillis() > end; + } - /** - * Stops and resets the timer - */ - public void restart() { - stop(); - reset(); - } + /** + * Stops and resets the timer + */ + public void restart() { + stop(); + reset(); + } - /** - * Resets the timer if stopped - */ - public void reset() { - if (start == 0) { - start = System.currentTimeMillis(); - } - } + /** + * Resets the timer if stopped + */ + public void reset() { + if (start == 0) { + start = System.currentTimeMillis(); + } + } - /** - * Resets the timer - */ - public void stop() { - end = (end - start) + System.currentTimeMillis(); - start = 0; - } + /** + * Resets the timer + */ + public void stop() { + end = (end - start) + System.currentTimeMillis(); + start = 0; + } - /** - * Determines if timer is running - * - * @return true if timer is running - */ - public boolean isRunning() { - return start != 0; - } + /** + * Determines if timer is running + * + * @return true if timer is running + */ + public boolean isRunning() { + return start != 0; + } - /** - * Gets the run time in long millis. - * - * @return the elapsed time. - */ - public long getElapsedTime() { - return System.currentTimeMillis() - start; - } + /** + * Gets the run time in long millis. + * + * @return the elapsed time. + */ + public long getElapsedTime() { + return System.currentTimeMillis() - start; + } - /** - * Calculates hourly gains based on given variable - * - * @param gained - * variable - * @return hourly gains - */ - public int getPerHour(final int gained) { - return (int) ((gained) * 3600000D / (System.currentTimeMillis() - start)); - } + /** + * Calculates hourly gains based on given variable + * + * @param gained variable + * + * @return hourly gains + */ + public int getPerHour(final int gained) { + return (int) ((gained) * 3600000D / (System.currentTimeMillis() - start)); + } - /** - * Generates string based on HH:MM:SS - * - * @return String - */ - @Override - public String toString() { - StringBuilder b = new StringBuilder(); - long elapsed = getElapsedTime(); - int second = (int) (elapsed / 1000 % 60); - int minute = (int) (elapsed / 60000 % 60); - int hour = (int) (elapsed / 3600000 % 60); - b.append(hour < 10 ? "0" : "").append(hour).append(":"); - b.append(minute < 10 ? "0" : "").append(minute).append(":"); - b.append(second < 10 ? "0" : "").append(second); - return new String(b); - } + /** + * Generates string based on HH:MM:SS + * + * @return String + */ + @Override + public String toString() { + StringBuilder b = new StringBuilder(); + long elapsed = getElapsedTime(); + int second = (int) (elapsed / 1000 % 60); + int minute = (int) (elapsed / 60000 % 60); + int hour = (int) (elapsed / 3600000 % 60); + b.append(hour < 10 ? "0" : "").append(hour).append(":"); + b.append(minute < 10 ? "0" : "").append(minute).append(":"); + b.append(second < 10 ? "0" : "").append(second); + return new String(b); + } } diff --git a/src/main/java/org/parabot/environment/api/utils/Version.java b/src/main/java/org/parabot/environment/api/utils/Version.java index d585171..6cbba9b 100644 --- a/src/main/java/org/parabot/environment/api/utils/Version.java +++ b/src/main/java/org/parabot/environment/api/utils/Version.java @@ -4,9 +4,8 @@ import org.parabot.core.ui.utils.UILog; public class Version implements Comparable { - private String version; - private static boolean notified; + private String version; public Version(String version) { if (version == null) { @@ -18,11 +17,24 @@ public class Version implements Comparable { this.version = version; } + private static void notifyRC() { + if (!notified) { + UILog.log( + "Version warning", + "This is an RC version of Parabot\n" + + "This could be an unstable version of Parabot, and might crash at anytime\n\n" + + "If you find an error within the client, please report any at:\n" + + "https://github.com/Parabot/Parabot/issues" + ); + notified = true; + } + } + public final String get() { return this.version; } - public boolean isNightly(){ + public boolean isNightly() { return this.version.contains("RC"); } @@ -39,7 +51,7 @@ public class Version implements Comparable { String[] thisParts = this.get().split("\\."); String[] thatParts = that.get().split("\\."); - int length = Math.max(thisParts.length, thatParts.length); + int length = Math.max(thisParts.length, thatParts.length); for (int i = 0; i < length; i++) { int thisPart = i < thisParts.length ? @@ -60,17 +72,4 @@ public class Version implements Comparable { public boolean equals(Object that) { return this == that || that != null && this.getClass() == that.getClass() && this.compareTo((Version) that) == 0; } - - private static void notifyRC() { - if (!notified) { - UILog.log( - "Version warning", - "This is an RC version of Parabot\n" + - "This could be an unstable version of Parabot, and might crash at anytime\n\n" + - "If you find an error within the client, please report any at:\n" + - "https://github.com/Parabot/Parabot/issues" - ); - notified = true; - } - } } \ No newline at end of file diff --git a/src/main/java/org/parabot/environment/input/Keyboard.java b/src/main/java/org/parabot/environment/input/Keyboard.java index 0dd389c..5dd3a96 100644 --- a/src/main/java/org/parabot/environment/input/Keyboard.java +++ b/src/main/java/org/parabot/environment/input/Keyboard.java @@ -1,225 +1,228 @@ package org.parabot.environment.input; -import java.awt.Component; +import org.parabot.core.Context; + +import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.HashMap; import java.util.Random; -import org.parabot.core.Context; - /** - * * Virtual keyboard, dispatches key events to a component. - * - * @author Everel, Matt, Dane * + * @author Everel, Matt, Dane */ public class Keyboard implements KeyListener { - private static HashMap specialChars; - private Component component; - private long pressTime; + private static HashMap specialChars; - public Keyboard(Component component) { - this.component = component; - } - - public static Keyboard getInstance() { - return Context.getInstance().getKeyboard(); - } + static { + char[] spChars = { '~', '!', '@', '#', '%', '^', '&', '*', '(', ')', + '_', '+', '{', '}', ':', '<', '>', '?', '"', '|' }; + char[] replace = { '`', '1', '2', '3', '5', '6', '7', '8', '9', '0', + '-', '=', '[', ']', ';', ',', '.', '/', '\'', '\\' }; + specialChars = new HashMap(spChars.length); + for (int x = 0; x < spChars.length; ++x) { + specialChars.put(spChars[x], replace[x]); + } + } - static { - char[] spChars = { '~', '!', '@', '#', '%', '^', '&', '*', '(', ')', - '_', '+', '{', '}', ':', '<', '>', '?', '"', '|' }; - char[] replace = { '`', '1', '2', '3', '5', '6', '7', '8', '9', '0', - '-', '=', '[', ']', ';', ',', '.', '/', '\'', '\\' }; - specialChars = new HashMap(spChars.length); - for (int x = 0; x < spChars.length; ++x) - specialChars.put(spChars[x], replace[x]); - } + private Component component; + private long pressTime; - private static long getRandom() { - Random rand = new Random(); - return rand.nextInt(100) + 40; - } + public Keyboard(Component component) { + this.component = component; + } - public void sendKeys(String s) { + public static Keyboard getInstance() { + return Context.getInstance().getKeyboard(); + } - pressTime = System.currentTimeMillis(); - for (char c : s.toCharArray()) - for (KeyEvent ke : createKeyClick(component, c)) { - try { - Thread.sleep(5); - } catch (InterruptedException e) { - e.printStackTrace(); - } - sendKeyEvent(ke); - } - clickKey(10); - } + private static long getRandom() { + Random rand = new Random(); + return rand.nextInt(100) + 40; + } - public void clickKey(char c) { + public void sendKeys(String s) { - pressTime = System.currentTimeMillis(); - for (KeyEvent ke : createKeyClick(component, c)) - sendKeyEvent(ke); - } + pressTime = System.currentTimeMillis(); + for (char c : s.toCharArray()) { + for (KeyEvent ke : createKeyClick(component, c)) { + try { + Thread.sleep(5); + } catch (InterruptedException e) { + e.printStackTrace(); + } + sendKeyEvent(ke); + } + } + clickKey(10); + } - public void clickKey(int keyCode) { + public void clickKey(char c) { - pressTime = System.currentTimeMillis(); - for (KeyEvent ke : createKeyClick(component, keyCode)) - sendKeyEvent(ke); - } + pressTime = System.currentTimeMillis(); + for (KeyEvent ke : createKeyClick(component, c)) { + sendKeyEvent(ke); + } + } - public void pressKey(int keyCode) { + public void clickKey(int keyCode) { - pressTime = System.currentTimeMillis(); - KeyEvent ke = createKeyPress(component, keyCode); - sendKeyEvent(ke); - } + pressTime = System.currentTimeMillis(); + for (KeyEvent ke : createKeyClick(component, keyCode)) { + sendKeyEvent(ke); + } + } - public void releaseKey(int keyCode) { + public void pressKey(int keyCode) { - pressTime = System.currentTimeMillis(); - KeyEvent ke = createKeyRelease(component, keyCode); - sendKeyEvent(ke); - } + pressTime = System.currentTimeMillis(); + KeyEvent ke = createKeyPress(component, keyCode); + sendKeyEvent(ke); + } - private KeyEvent[] createKeyClick(Component target, char c) { + public void releaseKey(int keyCode) { - pressTime += 2 * getRandom(); + pressTime = System.currentTimeMillis(); + KeyEvent ke = createKeyRelease(component, keyCode); + sendKeyEvent(ke); + } - Character newChar = specialChars.get(c); - int keyCode = Character.toUpperCase((newChar == null) ? c : newChar); + private KeyEvent[] createKeyClick(Component target, char c) { - if (Character.isLowerCase(c) - || (!Character.isLetter(c) && (newChar == null))) { - KeyEvent pressed = new KeyEvent(target, KeyEvent.KEY_PRESSED, - pressTime, 0, keyCode, c); - KeyEvent typed = new KeyEvent(target, KeyEvent.KEY_TYPED, - pressTime, 0, 0, c); - pressTime += getRandom(); - KeyEvent released = new KeyEvent(target, KeyEvent.KEY_RELEASED, - pressTime, 0, keyCode, c); + pressTime += 2 * getRandom(); - return new KeyEvent[] { pressed, typed, released }; - } else { - KeyEvent shiftDown = new KeyEvent(target, KeyEvent.KEY_PRESSED, - pressTime, KeyEvent.SHIFT_MASK, KeyEvent.VK_SHIFT, - KeyEvent.CHAR_UNDEFINED); + Character newChar = specialChars.get(c); + int keyCode = Character.toUpperCase((newChar == null) ? c : newChar); - pressTime += getRandom(); - KeyEvent pressed = new KeyEvent(target, KeyEvent.KEY_PRESSED, - pressTime, KeyEvent.SHIFT_MASK, keyCode, c); - KeyEvent typed = new KeyEvent(target, KeyEvent.KEY_TYPED, - pressTime, KeyEvent.SHIFT_MASK, 0, c); - pressTime += getRandom(); - KeyEvent released = new KeyEvent(target, KeyEvent.KEY_RELEASED, - pressTime, KeyEvent.SHIFT_MASK, keyCode, c); - pressTime += getRandom(); - KeyEvent shiftUp = new KeyEvent(target, KeyEvent.KEY_RELEASED, - pressTime, 0, KeyEvent.VK_SHIFT, KeyEvent.CHAR_UNDEFINED); + if (Character.isLowerCase(c) + || (!Character.isLetter(c) && (newChar == null))) { + KeyEvent pressed = new KeyEvent(target, KeyEvent.KEY_PRESSED, + pressTime, 0, keyCode, c); + KeyEvent typed = new KeyEvent(target, KeyEvent.KEY_TYPED, + pressTime, 0, 0, c); + pressTime += getRandom(); + KeyEvent released = new KeyEvent(target, KeyEvent.KEY_RELEASED, + pressTime, 0, keyCode, c); - return new KeyEvent[] { shiftDown, pressed, typed, released, - shiftUp }; - } - } + return new KeyEvent[]{ pressed, typed, released }; + } else { + KeyEvent shiftDown = new KeyEvent(target, KeyEvent.KEY_PRESSED, + pressTime, KeyEvent.SHIFT_MASK, KeyEvent.VK_SHIFT, + KeyEvent.CHAR_UNDEFINED); - private KeyEvent[] createKeyClick(Component target, int keyCode) { - int modifier = 0; - switch (keyCode) { - case KeyEvent.VK_SHIFT: - modifier = KeyEvent.SHIFT_MASK; - break; - case KeyEvent.VK_ALT: - modifier = KeyEvent.ALT_MASK; - break; - case KeyEvent.VK_CONTROL: - modifier = KeyEvent.CTRL_MASK; - break; - } - KeyEvent pressed = new KeyEvent(target, KeyEvent.KEY_PRESSED, - pressTime, modifier, keyCode, KeyEvent.CHAR_UNDEFINED); - KeyEvent released = new KeyEvent(target, KeyEvent.KEY_RELEASED, - pressTime + getRandom(), 0, keyCode, KeyEvent.CHAR_UNDEFINED); + pressTime += getRandom(); + KeyEvent pressed = new KeyEvent(target, KeyEvent.KEY_PRESSED, + pressTime, KeyEvent.SHIFT_MASK, keyCode, c); + KeyEvent typed = new KeyEvent(target, KeyEvent.KEY_TYPED, + pressTime, KeyEvent.SHIFT_MASK, 0, c); + pressTime += getRandom(); + KeyEvent released = new KeyEvent(target, KeyEvent.KEY_RELEASED, + pressTime, KeyEvent.SHIFT_MASK, keyCode, c); + pressTime += getRandom(); + KeyEvent shiftUp = new KeyEvent(target, KeyEvent.KEY_RELEASED, + pressTime, 0, KeyEvent.VK_SHIFT, KeyEvent.CHAR_UNDEFINED); - return new KeyEvent[] { pressed, released }; - } + return new KeyEvent[]{ shiftDown, pressed, typed, released, + shiftUp }; + } + } - private KeyEvent createKeyPress(Component target, int keyCode) { - int modifier = 0; - switch (keyCode) { - case KeyEvent.VK_SHIFT: - modifier = KeyEvent.SHIFT_MASK; - break; - case KeyEvent.VK_ALT: - modifier = KeyEvent.ALT_MASK; - break; - case KeyEvent.VK_CONTROL: - modifier = KeyEvent.CTRL_MASK; - break; - } - KeyEvent pressed = new KeyEvent(target, KeyEvent.KEY_PRESSED, - pressTime, modifier, keyCode, KeyEvent.CHAR_UNDEFINED); + private KeyEvent[] createKeyClick(Component target, int keyCode) { + int modifier = 0; + switch (keyCode) { + case KeyEvent.VK_SHIFT: + modifier = KeyEvent.SHIFT_MASK; + break; + case KeyEvent.VK_ALT: + modifier = KeyEvent.ALT_MASK; + break; + case KeyEvent.VK_CONTROL: + modifier = KeyEvent.CTRL_MASK; + break; + } + KeyEvent pressed = new KeyEvent(target, KeyEvent.KEY_PRESSED, + pressTime, modifier, keyCode, KeyEvent.CHAR_UNDEFINED); + KeyEvent released = new KeyEvent(target, KeyEvent.KEY_RELEASED, + pressTime + getRandom(), 0, keyCode, KeyEvent.CHAR_UNDEFINED); - return pressed; - } + return new KeyEvent[]{ pressed, released }; + } - private KeyEvent createKeyRelease(Component target, int keyCode) { - @SuppressWarnings("unused") - int modifier = 0; - switch (keyCode) { - case KeyEvent.VK_SHIFT: - modifier = KeyEvent.SHIFT_MASK; - break; - case KeyEvent.VK_ALT: - modifier = KeyEvent.ALT_MASK; - break; - case KeyEvent.VK_CONTROL: - modifier = KeyEvent.CTRL_MASK; - break; - } - KeyEvent released = new KeyEvent(target, KeyEvent.KEY_RELEASED, - pressTime + getRandom(), 0, keyCode, KeyEvent.CHAR_UNDEFINED); + private KeyEvent createKeyPress(Component target, int keyCode) { + int modifier = 0; + switch (keyCode) { + case KeyEvent.VK_SHIFT: + modifier = KeyEvent.SHIFT_MASK; + break; + case KeyEvent.VK_ALT: + modifier = KeyEvent.ALT_MASK; + break; + case KeyEvent.VK_CONTROL: + modifier = KeyEvent.CTRL_MASK; + break; + } + KeyEvent pressed = new KeyEvent(target, KeyEvent.KEY_PRESSED, + pressTime, modifier, keyCode, KeyEvent.CHAR_UNDEFINED); - return released; - } + return pressed; + } - public void sendKeyEvent(KeyEvent e) { - for (KeyListener kl : component.getKeyListeners()) { - if(kl instanceof Keyboard) { - continue; - } - if (!e.isConsumed()) { - switch (e.getID()) { - case KeyEvent.KEY_PRESSED: - kl.keyPressed(e); - break; - case KeyEvent.KEY_RELEASED: - kl.keyReleased(e); - break; - case KeyEvent.KEY_TYPED: - kl.keyTyped(e); - break; - } - } - } - } + private KeyEvent createKeyRelease(Component target, int keyCode) { + @SuppressWarnings("unused") + int modifier = 0; + switch (keyCode) { + case KeyEvent.VK_SHIFT: + modifier = KeyEvent.SHIFT_MASK; + break; + case KeyEvent.VK_ALT: + modifier = KeyEvent.ALT_MASK; + break; + case KeyEvent.VK_CONTROL: + modifier = KeyEvent.CTRL_MASK; + break; + } + KeyEvent released = new KeyEvent(target, KeyEvent.KEY_RELEASED, + pressTime + getRandom(), 0, keyCode, KeyEvent.CHAR_UNDEFINED); - @Override - public void keyPressed(KeyEvent e) { + return released; + } - } + public void sendKeyEvent(KeyEvent e) { + for (KeyListener kl : component.getKeyListeners()) { + if (kl instanceof Keyboard) { + continue; + } + if (!e.isConsumed()) { + switch (e.getID()) { + case KeyEvent.KEY_PRESSED: + kl.keyPressed(e); + break; + case KeyEvent.KEY_RELEASED: + kl.keyReleased(e); + break; + case KeyEvent.KEY_TYPED: + kl.keyTyped(e); + break; + } + } + } + } - @Override - public void keyReleased(KeyEvent e) { + @Override + public void keyPressed(KeyEvent e) { - } + } - @Override - public void keyTyped(KeyEvent e) { + @Override + public void keyReleased(KeyEvent e) { - } + } + + @Override + public void keyTyped(KeyEvent e) { + + } } diff --git a/src/main/java/org/parabot/environment/input/Mouse.java b/src/main/java/org/parabot/environment/input/Mouse.java index 82fbe55..662037f 100644 --- a/src/main/java/org/parabot/environment/input/Mouse.java +++ b/src/main/java/org/parabot/environment/input/Mouse.java @@ -9,155 +9,156 @@ import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; /** - * * A virtual mouse, dispatches mouse events to a component - * - * @author Everel * + * @author Everel */ public class Mouse implements MouseListener, MouseMotionListener { - private Component component; - private int x; - private int y; - - public Mouse(Component component) { - this.component = component; - } - - public static Mouse getInstance() { - return Context.getInstance().getMouse(); - } - - /** - * Moves the mouse to the given point and clicks - * @param x - * @param y - * @param left - */ - public void click(final int x, final int y, final boolean left) { - - moveMouse(x, y); - Time.sleep(50, 200); - pressMouse(x, y, left); - Time.sleep(10, 100); - releaseMouse(x, y, left); - Time.sleep(10, 100); - clickMouse(x, y, left); - } - - public void pressMouse(int x, int y, boolean left) { - MouseEvent me = new MouseEvent(component, - MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), 0, x, - y, 1, false, left ? MouseEvent.BUTTON1 : MouseEvent.BUTTON3); - for(MouseListener l : component.getMouseListeners()) { - if(!(l instanceof Mouse)) { - l.mousePressed(me); - } - } - } - - public void click(final Point p, final boolean left) { - click(p.x, p.y, left); - } - - public void click(final Point p) { - click(p.x, p.y, true); - } - - public void clickMouse(int x, int y, boolean left) { - try { - - MouseEvent me = new MouseEvent(component, - MouseEvent.MOUSE_CLICKED, System.currentTimeMillis(), 0, x, - y, 0, false, left ? MouseEvent.BUTTON1 : MouseEvent.BUTTON3); - for(MouseListener l : component.getMouseListeners()) { - if(!(l instanceof Mouse)) { - l.mouseClicked(me); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void releaseMouse(int x, int y, boolean left) { - try { - - MouseEvent me = new MouseEvent(component, - MouseEvent.MOUSE_RELEASED, System.currentTimeMillis(), 0, x, - y, 0, false, left ? MouseEvent.BUTTON1 : MouseEvent.BUTTON3); - for(MouseListener l : component.getMouseListeners()) { - if(!(l instanceof Mouse)) { - l.mouseReleased(me); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } + private Component component; + private int x; + private int y; - /** - * Moves the mouse cursor to the given location - * @param x - * @param y - */ - public void moveMouse(int x, int y) { - try { - MouseEvent me = new MouseEvent(component, - MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, x, - y, 0, false); - for(MouseMotionListener l : component.getMouseMotionListeners()) { - if(!(l instanceof Mouse)) { - l.mouseMoved(me); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * Mouse cursor current location - * @return point - */ - public Point getPoint() { - return new Point(x, y); - } - - @Override - public void mouseMoved(MouseEvent e) { - x = e.getX(); - y = e.getY(); - } + public Mouse(Component component) { + this.component = component; + } - @Override - public void mouseDragged(MouseEvent e) { - - } + public static Mouse getInstance() { + return Context.getInstance().getMouse(); + } - @Override - public void mouseClicked(MouseEvent e) { + /** + * Moves the mouse to the given point and clicks + * + * @param x + * @param y + * @param left + */ + public void click(final int x, final int y, final boolean left) { - } + moveMouse(x, y); + Time.sleep(50, 200); + pressMouse(x, y, left); + Time.sleep(10, 100); + releaseMouse(x, y, left); + Time.sleep(10, 100); + clickMouse(x, y, left); + } - @Override - public void mouseEntered(MouseEvent e) { - - } + public void pressMouse(int x, int y, boolean left) { + MouseEvent me = new MouseEvent(component, + MouseEvent.MOUSE_PRESSED, System.currentTimeMillis(), 0, x, + y, 1, false, left ? MouseEvent.BUTTON1 : MouseEvent.BUTTON3); + for (MouseListener l : component.getMouseListeners()) { + if (!(l instanceof Mouse)) { + l.mousePressed(me); + } + } + } - @Override - public void mouseExited(MouseEvent e) { - - } + public void click(final Point p, final boolean left) { + click(p.x, p.y, left); + } - @Override - public void mousePressed(MouseEvent e) { - - } + public void click(final Point p) { + click(p.x, p.y, true); + } - @Override - public void mouseReleased(MouseEvent e) { - - } + public void clickMouse(int x, int y, boolean left) { + try { + + MouseEvent me = new MouseEvent(component, + MouseEvent.MOUSE_CLICKED, System.currentTimeMillis(), 0, x, + y, 0, false, left ? MouseEvent.BUTTON1 : MouseEvent.BUTTON3); + for (MouseListener l : component.getMouseListeners()) { + if (!(l instanceof Mouse)) { + l.mouseClicked(me); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void releaseMouse(int x, int y, boolean left) { + try { + + MouseEvent me = new MouseEvent(component, + MouseEvent.MOUSE_RELEASED, System.currentTimeMillis(), 0, x, + y, 0, false, left ? MouseEvent.BUTTON1 : MouseEvent.BUTTON3); + for (MouseListener l : component.getMouseListeners()) { + if (!(l instanceof Mouse)) { + l.mouseReleased(me); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Moves the mouse cursor to the given location + * + * @param x + * @param y + */ + public void moveMouse(int x, int y) { + try { + MouseEvent me = new MouseEvent(component, + MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0, x, + y, 0, false); + for (MouseMotionListener l : component.getMouseMotionListeners()) { + if (!(l instanceof Mouse)) { + l.mouseMoved(me); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Mouse cursor current location + * + * @return point + */ + public Point getPoint() { + return new Point(x, y); + } + + @Override + public void mouseMoved(MouseEvent e) { + x = e.getX(); + y = e.getY(); + } + + @Override + public void mouseDragged(MouseEvent e) { + + } + + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } } diff --git a/src/main/java/org/parabot/environment/randoms/RandomHandler.java b/src/main/java/org/parabot/environment/randoms/RandomHandler.java index 1b80903..54d0e6c 100644 --- a/src/main/java/org/parabot/environment/randoms/RandomHandler.java +++ b/src/main/java/org/parabot/environment/randoms/RandomHandler.java @@ -48,6 +48,7 @@ public class RandomHandler { /** * @param random + * * @deprecated */ @Deprecated @@ -77,15 +78,6 @@ public class RandomHandler { } } - /** - * Sets the whole random arraylist to the arraylist given as argument - * - * @param randoms The new random arraylist - */ - public void setRandoms(ArrayList randoms) { - this.randoms = randoms; - } - /** * Clears all added randoms */ @@ -104,15 +96,16 @@ public class RandomHandler { * Executes a specific random * * @param r + * * @return True if the random is executed, false if not */ - public boolean executeRandom(Random r){ + public boolean executeRandom(Random r) { if (r.activate()) { Logger.addMessage("Running random '" + r.getName() + "'", true); try { r.execute(); return true; - }catch (Exception e){ + } catch (Exception e) { Logger.addMessage("Random failed: '" + r.getName() + "'", false); e.printStackTrace(); } @@ -126,7 +119,7 @@ public class RandomHandler { * * @param type */ - public void runAll(RandomType type){ + public void runAll(RandomType type) { for (Random r : this.activeRandoms) { if (r.getRandomType().getId() == type.getId()) { executeRandom(r); @@ -152,6 +145,7 @@ public class RandomHandler { * Checks if random occurs and runs it * * @return returns true if a random has been executed, otherwise false + * * @see RandomHandler#checkAndRun(RandomType) * @deprecated */ @@ -165,6 +159,15 @@ public class RandomHandler { return this.randoms; } + /** + * Sets the whole random arraylist to the arraylist given as argument + * + * @param randoms The new random arraylist + */ + public void setRandoms(ArrayList randoms) { + this.randoms = randoms; + } + public ArrayList getActiveRandoms() { return this.activeRandoms; } diff --git a/src/main/java/org/parabot/environment/randoms/RandomType.java b/src/main/java/org/parabot/environment/randoms/RandomType.java index 3743812..7232f23 100644 --- a/src/main/java/org/parabot/environment/randoms/RandomType.java +++ b/src/main/java/org/parabot/environment/randoms/RandomType.java @@ -10,7 +10,7 @@ public enum RandomType { ON_SERVER_START(2, "On server start"), ON_SCRIPT_FINISH(3, "On script finish"); - private int id; + private int id; private String name; RandomType(int id, String name) { @@ -18,6 +18,10 @@ public enum RandomType { this.name = name; } + public static RandomType getDefault() { + return SCRIPT; + } + public int getId() { return id; } @@ -25,8 +29,4 @@ public enum RandomType { public String getName() { return name; } - - public static RandomType getDefault() { - return SCRIPT; - } } diff --git a/src/main/java/org/parabot/environment/scripts/Category.java b/src/main/java/org/parabot/environment/scripts/Category.java index 9cad4c4..523b689 100644 --- a/src/main/java/org/parabot/environment/scripts/Category.java +++ b/src/main/java/org/parabot/environment/scripts/Category.java @@ -5,54 +5,53 @@ import org.parabot.core.ui.images.Images; import java.awt.image.BufferedImage; import java.util.HashMap; - /** - * * Holds script categories - * + * * @author Dane, Paradox - * */ -public enum Category -{ +public enum Category { - AGILITY, COMBAT, COOKING, CRAFTING, CONSTRUCTION, DUNGEONEERING, FARMING, FIREMAKING, FISHING, FLETCHING, HERBLORE, HUNTER, MAGIC, MINIGAMES, MINING, MONEYMAKING, OTHER, PRAYER, RUNECRAFTING, SLAYER, SMITHING, THIEVING, UTILITY, WOODCUTTING; + AGILITY, COMBAT, COOKING, CRAFTING, CONSTRUCTION, DUNGEONEERING, FARMING, FIREMAKING, FISHING, FLETCHING, HERBLORE, HUNTER, MAGIC, MINIGAMES, MINING, MONEYMAKING, OTHER, PRAYER, RUNECRAFTING, SLAYER, SMITHING, THIEVING, UTILITY, WOODCUTTING; - /** - * Gets image belonging to this category - * @return icon - */ - public BufferedImage getIcon() { - return Category.getIcon(this.name().toLowerCase()); - } + /** + * Cache + */ + private static HashMap images = new HashMap<>(); - /** - * Gets category icon image from filename - * @param s Name of the image - used for the hashmap index - * @return icon - */ - public static BufferedImage getIcon(String s) { - if (images.get(s) == null) { - images.put(s, Images.getResource("/storage/images/category/" + s + ".png")); - } - return images.get(s); - } + static { + images.put("script", Images.getResource("/storage/images/category/script.png")); + } - @Override - public String toString() { - StringBuilder b = new StringBuilder(); - b.append(name().charAt(0)); - b.append(name().toLowerCase().substring(1)); - return new String(b); - } + /** + * Gets category icon image from filename + * + * @param s Name of the image - used for the hashmap index + * + * @return icon + */ + public static BufferedImage getIcon(String s) { + if (images.get(s) == null) { + images.put(s, Images.getResource("/storage/images/category/" + s + ".png")); + } + return images.get(s); + } - /** - * Cache - */ - private static HashMap images = new HashMap<>(); + /** + * Gets image belonging to this category + * + * @return icon + */ + public BufferedImage getIcon() { + return Category.getIcon(this.name().toLowerCase()); + } - static { - images.put("script", Images.getResource("/storage/images/category/script.png")); - } + @Override + public String toString() { + StringBuilder b = new StringBuilder(); + b.append(name().charAt(0)); + b.append(name().toLowerCase().substring(1)); + return new String(b); + } } diff --git a/src/main/java/org/parabot/environment/scripts/Frameworks.java b/src/main/java/org/parabot/environment/scripts/Frameworks.java index 0f66eea..af5d40f 100644 --- a/src/main/java/org/parabot/environment/scripts/Frameworks.java +++ b/src/main/java/org/parabot/environment/scripts/Frameworks.java @@ -1,67 +1,66 @@ package org.parabot.environment.scripts; -import java.util.Collection; - import org.parabot.environment.scripts.framework.AbstractFramework; import org.parabot.environment.scripts.framework.LoopTask; import org.parabot.environment.scripts.framework.Strategy; +import java.util.Collection; + /** - * * Holds various script frameworks - * - * @author Everel * + * @author Everel */ public class Frameworks { - - public static Looper getLooper(LoopTask loopTask) { - return new Looper(loopTask); - } - - public static StrategyWorker getStrategyWorker(Collection strategies) { - return new StrategyWorker(strategies); - } + + public static Looper getLooper(LoopTask loopTask) { + return new Looper(loopTask); + } + + public static StrategyWorker getStrategyWorker(Collection strategies) { + return new StrategyWorker(strategies); + } } class Looper extends AbstractFramework { - private LoopTask loopTask = null; - - public Looper(LoopTask loopTask) { - this.loopTask = loopTask; - } - @Override - public boolean execute() { - int sleepTime = loopTask.loop(); - if(sleepTime < 0) { - return false; - } - try { - Thread.sleep(sleepTime); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return true; - } + private LoopTask loopTask = null; + + public Looper(LoopTask loopTask) { + this.loopTask = loopTask; + } + + @Override + public boolean execute() { + int sleepTime = loopTask.loop(); + if (sleepTime < 0) { + return false; + } + try { + Thread.sleep(sleepTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return true; + } } class StrategyWorker extends AbstractFramework { - private Collection strategies; - - public StrategyWorker(Collection strategies) { - this.strategies = strategies; - } + private Collection strategies; + + public StrategyWorker(Collection strategies) { + this.strategies = strategies; + } + + @Override + public boolean execute() { + for (Strategy s : strategies) { + if (s.activate()) { + s.execute(); + return true; + } + } + return true; + } - @Override - public boolean execute() { - for(Strategy s : strategies) { - if(s.activate()) { - s.execute(); - return true; - } - } - return true; - } - } diff --git a/src/main/java/org/parabot/environment/scripts/Script.java b/src/main/java/org/parabot/environment/scripts/Script.java index 21527b0..a57988d 100644 --- a/src/main/java/org/parabot/environment/scripts/Script.java +++ b/src/main/java/org/parabot/environment/scripts/Script.java @@ -20,19 +20,19 @@ import java.util.Collection; */ public class Script implements Runnable { public static final int TYPE_STRATEGY = 0; - public static final int TYPE_LOOP = 1; - public static final int TYPE_OTHER = 2; + public static final int TYPE_LOOP = 1; + public static final int TYPE_OTHER = 2; public static final int STATE_RUNNING = 0; - public static final int STATE_PAUSE = 1; + public static final int STATE_PAUSE = 1; public static final int STATE_STOPPED = 2; private Collection strategies; - private PBPreferences preferences; - private AbstractFramework frameWork; - private int state; - private int frameWorkType; - private int scriptID; + private PBPreferences preferences; + private AbstractFramework frameWork; + private int state; + private int frameWorkType; + private int scriptID; public boolean onExecute() { return true; @@ -141,6 +141,7 @@ public class Script implements Runnable { * * @param conn the condition. * @param timeout the time in miliseconds before it stops sleeping. + * * @return whether it ran successfully without timing out. */ @Deprecated @@ -148,18 +149,6 @@ public class Script implements Runnable { return Time.sleep(conn, timeout); } - /** - * Sets the script's state - * - * @param state - */ - public final void setState(final int state) { - if (state < 0 || state > 2) { - throw new IllegalArgumentException("Illegal state"); - } - this.state = state; - } - /** * Sleeps for an amount of milliseconds * @@ -173,6 +162,18 @@ public class Script implements Runnable { return state; } + /** + * Sets the script's state + * + * @param state + */ + public final void setState(final int state) { + if (state < 0 || state > 2) { + throw new IllegalArgumentException("Illegal state"); + } + this.state = state; + } + public PBPreferences getPreferences() { if (this.preferences == null) { this.preferences = new PBPreferences(scriptID); diff --git a/src/main/java/org/parabot/environment/scripts/ScriptManifest.java b/src/main/java/org/parabot/environment/scripts/ScriptManifest.java index 562ccc5..fcaa090 100644 --- a/src/main/java/org/parabot/environment/scripts/ScriptManifest.java +++ b/src/main/java/org/parabot/environment/scripts/ScriptManifest.java @@ -5,26 +5,26 @@ import java.lang.annotation.RetentionPolicy; /** * A script manifest, holds all script data - * @author Everel * + * @author Everel */ @Retention(RetentionPolicy.RUNTIME) public @interface ScriptManifest { - String author(); + String author(); - String name(); - - Category category(); + String name(); - double version(); + Category category(); - String description(); - - String[] servers(); - - boolean vip() default false; - - boolean premium() default false; + double version(); + + String description(); + + String[] servers(); + + boolean vip() default false; + + boolean premium() default false; } \ No newline at end of file diff --git a/src/main/java/org/parabot/environment/scripts/executers/BDNScriptsExecuter.java b/src/main/java/org/parabot/environment/scripts/executers/BDNScriptsExecuter.java index fdfc199..80e656c 100644 --- a/src/main/java/org/parabot/environment/scripts/executers/BDNScriptsExecuter.java +++ b/src/main/java/org/parabot/environment/scripts/executers/BDNScriptsExecuter.java @@ -15,82 +15,80 @@ import java.net.URL; import java.net.URLConnection; /** - * * Loads a script from the BDN - * - * @author Everel * + * @author Everel */ public class BDNScriptsExecuter extends ScriptExecuter { - - private static AccountManager manager; - public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() { + private static AccountManager manager; - @Override - public final void setManager(AccountManager manager) { - BDNScriptsExecuter.manager = manager; - } + public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() { - }; - - private int id = -1; + @Override + public final void setManager(AccountManager manager) { + BDNScriptsExecuter.manager = manager; + } - public BDNScriptsExecuter(final int id) { - this.id = id; - } + }; - @Override - public void run(ThreadGroup tg) { - try { + private int id = -1; + + public BDNScriptsExecuter(final int id) { + this.id = id; + } + + @Override + public void run(ThreadGroup tg) { + try { final URLConnection urlConnection = WebUtil.getConnection(new URL( Configuration.GET_SCRIPT + this.id), manager.getAccount().getURLUsername(), manager.getAccount().getURLPassword()); - final String contentType = urlConnection.getHeaderField("Content-type"); - switch (contentType) { - case "text/html": - // failed to fetch script - UILog.log("Error", "Failed to load BDN script, error: [Page returned: " + WebUtil.getContents(urlConnection) + "]", JOptionPane.ERROR_MESSAGE); - break; - case "application/jar": - //// JAR LOADING PART //////// - // succesfull request, jar returned - final ClassPath classPath = new ClassPath(); - classPath.addJar(urlConnection); + final String contentType = urlConnection.getHeaderField("Content-type"); + switch (contentType) { + case "text/html": + // failed to fetch script + UILog.log("Error", "Failed to load BDN script, error: [Page returned: " + WebUtil.getContents(urlConnection) + "]", JOptionPane.ERROR_MESSAGE); + break; + case "application/jar": + //// JAR LOADING PART //////// + // succesfull request, jar returned + final ClassPath classPath = new ClassPath(); + classPath.addJar(urlConnection); - final JavaScriptLoader loader = new JavaScriptLoader(classPath); - final String[] scriptClasses = loader.getScriptClassNames(); - if (scriptClasses == null || scriptClasses.length == 0) { - UILog.log("Error", "Failed to load BDN script, error: [No script found in jar file.]", JOptionPane.ERROR_MESSAGE); - return; - } else if (scriptClasses.length > 1) { - UILog.log("Error", "Failed to load BDN script, error: [Multiple scripts found in jar file.]"); - return; - } + final JavaScriptLoader loader = new JavaScriptLoader(classPath); + final String[] scriptClasses = loader.getScriptClassNames(); + if (scriptClasses == null || scriptClasses.length == 0) { + UILog.log("Error", "Failed to load BDN script, error: [No script found in jar file.]", JOptionPane.ERROR_MESSAGE); + return; + } else if (scriptClasses.length > 1) { + UILog.log("Error", "Failed to load BDN script, error: [Multiple scripts found in jar file.]"); + return; + } - final String className = scriptClasses[0]; - try { - final Class scriptClass = loader.loadClass(className); - final Constructor con = scriptClass.getConstructor(); - final Script script = (Script) con.newInstance(); - script.setScriptID(this.id); - super.finalize(tg, script); + final String className = scriptClasses[0]; + try { + final Class scriptClass = loader.loadClass(className); + final Constructor con = scriptClass.getConstructor(); + final Script script = (Script) con.newInstance(); + script.setScriptID(this.id); + super.finalize(tg, script); - } catch (NoClassDefFoundError | ClassNotFoundException ignored) { - UILog.log("Error", "Failed to load BDN script, error: [This server provider does not support this script]", JOptionPane.ERROR_MESSAGE); - } catch (Throwable t) { - t.printStackTrace(); - UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE); - } - //// END JAR LOADING //// - break; - default: - UILog.log("Error", "Failed to load BDN script, error: [Unknown content type: " + contentType + "]", JOptionPane.ERROR_MESSAGE); - break; - } - } catch (Throwable t) { - t.printStackTrace(); - UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE); - } - } + } catch (NoClassDefFoundError | ClassNotFoundException ignored) { + UILog.log("Error", "Failed to load BDN script, error: [This server provider does not support this script]", JOptionPane.ERROR_MESSAGE); + } catch (Throwable t) { + t.printStackTrace(); + UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE); + } + //// END JAR LOADING //// + break; + default: + UILog.log("Error", "Failed to load BDN script, error: [Unknown content type: " + contentType + "]", JOptionPane.ERROR_MESSAGE); + break; + } + } catch (Throwable t) { + t.printStackTrace(); + UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE); + } + } } diff --git a/src/main/java/org/parabot/environment/scripts/executers/LocalScriptExecuter.java b/src/main/java/org/parabot/environment/scripts/executers/LocalScriptExecuter.java index 4b071f4..49a6ca2 100644 --- a/src/main/java/org/parabot/environment/scripts/executers/LocalScriptExecuter.java +++ b/src/main/java/org/parabot/environment/scripts/executers/LocalScriptExecuter.java @@ -5,26 +5,24 @@ import org.parabot.environment.scripts.Script; import java.lang.reflect.Constructor; /** - * * Loads a locally stored script - * - * @author Everel * + * @author Everel */ public class LocalScriptExecuter extends ScriptExecuter { - private Constructor scriptConstructor; - - public LocalScriptExecuter(final Constructor scriptConstructor) { - this.scriptConstructor = scriptConstructor; - } + private Constructor scriptConstructor; - @Override - public void run(ThreadGroup tg) { - try { - super.finalize(tg, (Script) scriptConstructor.newInstance(new Object[] { })); + public LocalScriptExecuter(final Constructor scriptConstructor) { + this.scriptConstructor = scriptConstructor; + } + + @Override + public void run(ThreadGroup tg) { + try { + super.finalize(tg, (Script) scriptConstructor.newInstance(new Object[]{})); } catch (Throwable t) { t.printStackTrace(); } - } + } } diff --git a/src/main/java/org/parabot/environment/scripts/executers/ScriptExecuter.java b/src/main/java/org/parabot/environment/scripts/executers/ScriptExecuter.java index 64723ae..e362884 100644 --- a/src/main/java/org/parabot/environment/scripts/executers/ScriptExecuter.java +++ b/src/main/java/org/parabot/environment/scripts/executers/ScriptExecuter.java @@ -3,25 +3,23 @@ package org.parabot.environment.scripts.executers; import org.parabot.environment.scripts.Script; /** - * * Executes a script - * - * @author Everel * + * @author Everel */ public abstract class ScriptExecuter { - - public abstract void run(final ThreadGroup tg); - - /** - * Start script. - * @param tg - * @param script - */ - public final void finalize(final ThreadGroup tg, final Script script) { - Thread thread = new Thread(tg, script); - thread.start(); - } + public abstract void run(final ThreadGroup tg); + + /** + * Start script. + * + * @param tg + * @param script + */ + public final void finalize(final ThreadGroup tg, final Script script) { + Thread thread = new Thread(tg, script); + thread.start(); + } } diff --git a/src/main/java/org/parabot/environment/scripts/framework/AbstractFramework.java b/src/main/java/org/parabot/environment/scripts/framework/AbstractFramework.java index 867e306..156b7ce 100644 --- a/src/main/java/org/parabot/environment/scripts/framework/AbstractFramework.java +++ b/src/main/java/org/parabot/environment/scripts/framework/AbstractFramework.java @@ -1,18 +1,17 @@ package org.parabot.environment.scripts.framework; /** - * * Abstract framework for a script - * - * @author Everel * + * @author Everel */ public abstract class AbstractFramework { - - /** - * Executes this frame - * @return true if it should keep executing this framework, otherwise false. - */ - public abstract boolean execute(); + + /** + * Executes this frame + * + * @return true if it should keep executing this framework, otherwise false. + */ + public abstract boolean execute(); } diff --git a/src/main/java/org/parabot/environment/scripts/framework/Frameworks.java b/src/main/java/org/parabot/environment/scripts/framework/Frameworks.java index 6b600e7..00d3c91 100644 --- a/src/main/java/org/parabot/environment/scripts/framework/Frameworks.java +++ b/src/main/java/org/parabot/environment/scripts/framework/Frameworks.java @@ -3,61 +3,60 @@ package org.parabot.environment.scripts.framework; import java.util.Collection; /** - * * Holds various script frameworks - * - * @author Everel * + * @author Everel */ public class Frameworks { - - public static Looper getLooper(LoopTask loopTask) { - return new Looper(loopTask); - } - - public static StrategyWorker getStrategyWorker(Collection strategies) { - return new StrategyWorker(strategies); - } + + public static Looper getLooper(LoopTask loopTask) { + return new Looper(loopTask); + } + + public static StrategyWorker getStrategyWorker(Collection strategies) { + return new StrategyWorker(strategies); + } } class Looper extends AbstractFramework { - private LoopTask loopTask = null; - - public Looper(LoopTask loopTask) { - this.loopTask = loopTask; - } - @Override - public boolean execute() { - int sleepTime = loopTask.loop(); - if(sleepTime < 0) { - return false; - } - try { - Thread.sleep(sleepTime); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return true; - } + private LoopTask loopTask = null; + + public Looper(LoopTask loopTask) { + this.loopTask = loopTask; + } + + @Override + public boolean execute() { + int sleepTime = loopTask.loop(); + if (sleepTime < 0) { + return false; + } + try { + Thread.sleep(sleepTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return true; + } } class StrategyWorker extends AbstractFramework { - private Collection strategies; - - public StrategyWorker(Collection strategies) { - this.strategies = strategies; - } + private Collection strategies; + + public StrategyWorker(Collection strategies) { + this.strategies = strategies; + } + + @Override + public boolean execute() { + for (Strategy s : strategies) { + if (s.activate()) { + s.execute(); + return true; + } + } + return true; + } - @Override - public boolean execute() { - for(Strategy s : strategies) { - if(s.activate()) { - s.execute(); - return true; - } - } - return true; - } - } diff --git a/src/main/java/org/parabot/environment/scripts/framework/LoopTask.java b/src/main/java/org/parabot/environment/scripts/framework/LoopTask.java index 243d1cb..411a9b3 100644 --- a/src/main/java/org/parabot/environment/scripts/framework/LoopTask.java +++ b/src/main/java/org/parabot/environment/scripts/framework/LoopTask.java @@ -1,18 +1,15 @@ package org.parabot.environment.scripts.framework; /** - * * A LoopTask interface is used to keep calling the loop method which should return the sleep time - * - * @author Everel * + * @author Everel */ public interface LoopTask { - - /** - * - * @return sleepTime in ms - */ - public int loop(); + + /** + * @return sleepTime in ms + */ + public int loop(); } diff --git a/src/main/java/org/parabot/environment/scripts/framework/SleepCondition.java b/src/main/java/org/parabot/environment/scripts/framework/SleepCondition.java index e2b541a..3c156ec 100644 --- a/src/main/java/org/parabot/environment/scripts/framework/SleepCondition.java +++ b/src/main/java/org/parabot/environment/scripts/framework/SleepCondition.java @@ -2,17 +2,17 @@ package org.parabot.environment.scripts.framework; /** * Keeps sleeping till a condition is valid - * - * @author Everel * + * @author Everel */ public interface SleepCondition { - - /** - * Determine if condition is valid - * @return true if valid, otherwise false. - */ - public boolean isValid(); + + /** + * Determine if condition is valid + * + * @return true if valid, otherwise false. + */ + public boolean isValid(); } diff --git a/src/main/java/org/parabot/environment/scripts/framework/Strategy.java b/src/main/java/org/parabot/environment/scripts/framework/Strategy.java index 23413e1..9c31cdb 100644 --- a/src/main/java/org/parabot/environment/scripts/framework/Strategy.java +++ b/src/main/java/org/parabot/environment/scripts/framework/Strategy.java @@ -2,21 +2,21 @@ package org.parabot.environment.scripts.framework; /** * Strategy framework for scripts - * - * @author Everel * + * @author Everel */ public interface Strategy { - - /** - * Whether to activate this strategy - * @return true if this strategy should be executed, otherwise false. - */ - public boolean activate(); - - /** - * Executes this strategy - */ - public void execute(); + + /** + * Whether to activate this strategy + * + * @return true if this strategy should be executed, otherwise false. + */ + public boolean activate(); + + /** + * Executes this strategy + */ + public void execute(); } diff --git a/src/main/java/org/parabot/environment/scripts/loader/JavaScriptLoader.java b/src/main/java/org/parabot/environment/scripts/loader/JavaScriptLoader.java index 664266e..4fd5466 100644 --- a/src/main/java/org/parabot/environment/scripts/loader/JavaScriptLoader.java +++ b/src/main/java/org/parabot/environment/scripts/loader/JavaScriptLoader.java @@ -1,43 +1,41 @@ package org.parabot.environment.scripts.loader; -import java.util.ArrayList; -import java.util.List; - import org.objectweb.asm.tree.ClassNode; import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.classpath.ClassPath; import org.parabot.environment.scripts.Script; +import java.util.ArrayList; +import java.util.List; + /** - * * An environment to load a script - * + * * @author Everel - * - * */ public class JavaScriptLoader extends ASMClassLoader { - private ClassPath classPath; + private ClassPath classPath; - public JavaScriptLoader(ClassPath classPath) { - super(classPath); - this.classPath = classPath; - } + public JavaScriptLoader(ClassPath classPath) { + super(classPath); + this.classPath = classPath; + } - - /** - * Gets all classes that extends ServerProvider - * @return string array of class names that extends ServerProvider - */ - public final String[] getScriptClassNames() { - final List classNames = new ArrayList(); - for (ClassNode c : classPath.classes.values()) - if (c.superName.replace('/', '.').equals( - Script.class.getName())) { - classNames.add(c.name.replace('/', '.')); - } - return classNames.toArray(new String[classNames.size()]); - } + /** + * Gets all classes that extends ServerProvider + * + * @return string array of class names that extends ServerProvider + */ + public final String[] getScriptClassNames() { + final List classNames = new ArrayList(); + for (ClassNode c : classPath.classes.values()) { + if (c.superName.replace('/', '.').equals( + Script.class.getName())) { + classNames.add(c.name.replace('/', '.')); + } + } + return classNames.toArray(new String[classNames.size()]); + } } diff --git a/src/main/java/org/parabot/environment/scripts/randoms/Random.java b/src/main/java/org/parabot/environment/scripts/randoms/Random.java index 07b9e04..772da2d 100644 --- a/src/main/java/org/parabot/environment/scripts/randoms/Random.java +++ b/src/main/java/org/parabot/environment/scripts/randoms/Random.java @@ -2,31 +2,34 @@ package org.parabot.environment.scripts.randoms; /** * @author Everel - * @deprecated * @see org.parabot.environment.randoms.Random + * @deprecated */ @Deprecated public interface Random { - /** - * Determines whether this random should activate - * @return true if this random should activate - */ - public boolean activate(); + /** + * Determines whether this random should activate + * + * @return true if this random should activate + */ + public boolean activate(); - /** - * Executes this random - */ - public void execute(); + /** + * Executes this random + */ + public void execute(); /** * Returns the name of the random + * * @return Name of the random */ public String getName(); /** * Returns the name of the server which the random is made for + * * @return Name of the server */ public String getServer(); diff --git a/src/main/java/org/parabot/environment/scripts/randoms/RandomHandler.java b/src/main/java/org/parabot/environment/scripts/randoms/RandomHandler.java index 12ffe85..f3a8dd6 100644 --- a/src/main/java/org/parabot/environment/scripts/randoms/RandomHandler.java +++ b/src/main/java/org/parabot/environment/scripts/randoms/RandomHandler.java @@ -2,8 +2,8 @@ package org.parabot.environment.scripts.randoms; /** * @author Everel - * @deprecated * @see org.parabot.environment.randoms.RandomHandler + * @deprecated */ @Deprecated public class RandomHandler extends org.parabot.environment.randoms.RandomHandler { diff --git a/src/main/java/org/parabot/environment/servers/LocalServerExecuter.java b/src/main/java/org/parabot/environment/servers/LocalServerExecuter.java index 257a9c8..060f1ec 100644 --- a/src/main/java/org/parabot/environment/servers/LocalServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/LocalServerExecuter.java @@ -9,44 +9,42 @@ import org.parabot.environment.servers.executers.ServerExecuter; import java.net.MalformedURLException; /** - * * Loads locally stored server providers - * + * * @author Everel - * */ @SuppressWarnings("Duplicates") @Deprecated public class LocalServerExecuter extends ServerExecuter { - private final ServerProvider serverProvider; - private ClassPath classPath; - private String serverName; + private final ServerProvider serverProvider; + private ClassPath classPath; + private String serverName; - public LocalServerExecuter(ServerProvider serverProvider, - ClassPath classPath, final String serverName) { - this.serverProvider = serverProvider; - this.classPath = classPath; - this.serverName = serverName; - } + public LocalServerExecuter(ServerProvider serverProvider, + ClassPath classPath, final String serverName) { + this.serverProvider = serverProvider; + this.classPath = classPath; + this.serverName = serverName; + } - @Override - public void run() { - // add jar or directory to buildpath. - if (this.classPath.isJar()) { - Core.verbose("Adding server provider jar to buildpath: " - + this.classPath.lastParsed.toString()); - this.classPath.addToBuildPath(); - } else { - Core.verbose("Adding server providers directory to buildpath: " - + Directories.getServerPath().getPath()); - try { - BuildPath.add(Directories.getServerPath().toURI().toURL()); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - } - // finalize - super.finalize(this.serverProvider, this.serverName); - } + @Override + public void run() { + // add jar or directory to buildpath. + if (this.classPath.isJar()) { + Core.verbose("Adding server provider jar to buildpath: " + + this.classPath.lastParsed.toString()); + this.classPath.addToBuildPath(); + } else { + Core.verbose("Adding server providers directory to buildpath: " + + Directories.getServerPath().getPath()); + try { + BuildPath.add(Directories.getServerPath().toURI().toURL()); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + // finalize + super.finalize(this.serverProvider, this.serverName); + } } diff --git a/src/main/java/org/parabot/environment/servers/ServerManifest.java b/src/main/java/org/parabot/environment/servers/ServerManifest.java index 1089625..c45e566 100644 --- a/src/main/java/org/parabot/environment/servers/ServerManifest.java +++ b/src/main/java/org/parabot/environment/servers/ServerManifest.java @@ -5,18 +5,18 @@ import java.lang.annotation.RetentionPolicy; /** * A server manifest - * @author Everel * + * @author Everel */ @Retention(RetentionPolicy.RUNTIME) public @interface ServerManifest { - String author(); + String author(); - String name(); + String name(); - double version(); + double version(); - Type type(); + Type type(); } diff --git a/src/main/java/org/parabot/environment/servers/ServerProvider.java b/src/main/java/org/parabot/environment/servers/ServerProvider.java index 6fb090b..da9b465 100644 --- a/src/main/java/org/parabot/environment/servers/ServerProvider.java +++ b/src/main/java/org/parabot/environment/servers/ServerProvider.java @@ -10,141 +10,140 @@ import org.parabot.environment.input.Mouse; import org.parabot.environment.scripts.Script; import javax.swing.*; - import java.applet.Applet; import java.applet.AppletStub; -import java.awt.Dimension; +import java.awt.*; import java.net.URL; /** * Provides a server to the bot - * + * * @author Everel - * */ public abstract class ServerProvider implements Opcodes { - /** - * Get the game/applet dimensions - * @return game/applet dimensions - */ - public Dimension getGameDimensions() { - return new Dimension(765, 503); - } + /** + * Get the game/applet dimensions + * + * @return game/applet dimensions + */ + public Dimension getGameDimensions() { + return new Dimension(765, 503); + } /** - * Hooks to parse - * - * @deprecated use getHookFile() now - * @return URL to hooks file - */ - @Deprecated - public URL getHooks() { - return null; - } - - /** - * Get hook file to parse - * @return hook file - */ - public HookFile getHookFile() { - return null; - } + * Hooks to parse + * + * @return URL to hooks file + * + * @deprecated use getHookFile() now + */ + @Deprecated + public URL getHooks() { + return null; + } - /** - * Jar to parse - * - * @return URL to client jar - */ - public abstract URL getJar(); + /** + * Get hook file to parse + * + * @return hook file + */ + public HookFile getHookFile() { + return null; + } - public abstract Applet fetchApplet(); + /** + * Jar to parse + * + * @return URL to client jar + */ + public abstract URL getJar(); - public String getAccessorsPackage() { - return null; - } + public abstract Applet fetchApplet(); - public void injectHooks() { - HookFile hookFile = fetchHookFile(); - - if(hookFile == null) { - return; - } - - HookParser parser = hookFile.getParser(); - Injectable[] injectables = parser.getInjectables(); - if (injectables == null) { - return; - } - for (Injectable inj : injectables) { - inj.inject(); - } - Context.getInstance().setHookParser(parser); - } - - private HookFile fetchHookFile() { - HookFile hookFile = getHookFile(); - if(hookFile != null) { - return hookFile; - } - - URL hookLocation = getHooks(); - if(hookLocation == null) { - return null; - } - - return new HookFile(hookLocation, HookFile.TYPE_XML); - } + public String getAccessorsPackage() { + return null; + } - /** - * Add custom items to the bot menu bar - * - * @param bar - * menu bar to add items on - */ - public void addMenuItems(JMenuBar bar) { - } + public void injectHooks() { + HookFile hookFile = fetchHookFile(); - public AppletStub getStub() { - return null; - } - - public void setClientInstance(Object client) { - Context.getInstance().setClientInstance(client); - } + if (hookFile == null) { + return; + } - public void parseJar() { - Context.getInstance().getClassPath().addJar(getJar()); - } - - public void initScript(Script script) { - - } - - public void init() { - - } - - public void initMouse() { - final Context context = Context.getInstance(); - final Applet applet = context.getApplet(); - final Mouse mouse = new Mouse(applet); - applet.addMouseListener(mouse); - applet.addMouseMotionListener(mouse); - context.setMouse(mouse); - } - - public void initKeyboard() { - final Context context = Context.getInstance(); - final Applet applet = context.getApplet(); - final Keyboard keyboard = new Keyboard(applet); - applet.addKeyListener(keyboard); - context.setKeyboard(keyboard); - } - - public void unloadScript(Script script) { - - } + HookParser parser = hookFile.getParser(); + Injectable[] injectables = parser.getInjectables(); + if (injectables == null) { + return; + } + for (Injectable inj : injectables) { + inj.inject(); + } + Context.getInstance().setHookParser(parser); + } + private HookFile fetchHookFile() { + HookFile hookFile = getHookFile(); + if (hookFile != null) { + return hookFile; + } + + URL hookLocation = getHooks(); + if (hookLocation == null) { + return null; + } + + return new HookFile(hookLocation, HookFile.TYPE_XML); + } + + /** + * Add custom items to the bot menu bar + * + * @param bar menu bar to add items on + */ + public void addMenuItems(JMenuBar bar) { + } + + public AppletStub getStub() { + return null; + } + + public void setClientInstance(Object client) { + Context.getInstance().setClientInstance(client); + } + + public void parseJar() { + Context.getInstance().getClassPath().addJar(getJar()); + } + + public void initScript(Script script) { + + } + + public void init() { + + } + + public void initMouse() { + final Context context = Context.getInstance(); + final Applet applet = context.getApplet(); + final Mouse mouse = new Mouse(applet); + applet.addMouseListener(mouse); + applet.addMouseMotionListener(mouse); + context.setMouse(mouse); + } + + public void initKeyboard() { + final Context context = Context.getInstance(); + final Applet applet = context.getApplet(); + final Keyboard keyboard = new Keyboard(applet); + applet.addKeyListener(keyboard); + context.setKeyboard(keyboard); + } + + public void unloadScript(Script script) { + + } } diff --git a/src/main/java/org/parabot/environment/servers/Type.java b/src/main/java/org/parabot/environment/servers/Type.java index 4ca7ee6..5fd8135 100644 --- a/src/main/java/org/parabot/environment/servers/Type.java +++ b/src/main/java/org/parabot/environment/servers/Type.java @@ -1,14 +1,12 @@ package org.parabot.environment.servers; /** - * * Server provider type - * - * @author Everel * + * @author Everel */ public enum Type { - - INJECTION, REFLECTION, COLOR, LOADER, OTHER + + INJECTION, REFLECTION, COLOR, LOADER, OTHER } diff --git a/src/main/java/org/parabot/environment/servers/executers/LocalPublicServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/LocalPublicServerExecuter.java index 912745c..3f06b14 100644 --- a/src/main/java/org/parabot/environment/servers/executers/LocalPublicServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/LocalPublicServerExecuter.java @@ -1,14 +1,11 @@ package org.parabot.environment.servers.executers; -import org.parabot.core.Configuration; import org.parabot.core.Context; import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.build.BuildPath; import org.parabot.core.classpath.ClassPath; import org.parabot.core.desc.ServerProviderInfo; -import org.parabot.core.forum.AccountManager; -import org.parabot.core.forum.AccountManagerAccess; import org.parabot.core.ui.components.VerboseLoader; import org.parabot.core.ui.utils.UILog; import org.parabot.environment.api.utils.FileUtil; @@ -22,113 +19,111 @@ import java.lang.reflect.Constructor; import java.net.URL; /** - * * Fetches a server provider from the local config file - * + * * @author JKetelaar - * */ public class LocalPublicServerExecuter extends ServerExecuter { - private String serverName; - private String serverUrl; - private String providerUrl; - private ServerProviderInfo serverProviderInfo; + private String serverName; + private String serverUrl; + private String providerUrl; + private ServerProviderInfo serverProviderInfo; - public LocalPublicServerExecuter(final String serverName, final ServerProviderInfo serverProviderInfo, String serverUrl, String providerUrl) { - this.serverName = serverName; - this.serverUrl = serverUrl; - this.providerUrl = providerUrl; - this.serverProviderInfo = serverProviderInfo; - } + public LocalPublicServerExecuter(final String serverName, final ServerProviderInfo serverProviderInfo, String serverUrl, String providerUrl) { + this.serverName = serverName; + this.serverUrl = serverUrl; + this.providerUrl = providerUrl; + this.serverProviderInfo = serverProviderInfo; + } - @Override - public void run() { - try { - final File destination = new File(Directories.getCachePath(), - serverProviderInfo.getCRC32() + ".jar"); + @Override + public void run() { + try { + final File destination = new File(Directories.getCachePath(), + serverProviderInfo.getCRC32() + ".jar"); - Core.verbose("Downloading: " + providerUrl + " ..."); - - if(destination.exists()) { - Core.verbose("Found cached server provider [CRC32: " + serverProviderInfo.getCRC32() + "]"); - } else { - File local; - if ((local = new File(providerUrl)).exists()){ - FileUtil.copyFile(local, destination); - Core.verbose("Server provider copied..."); - }else { - WebUtil.downloadFile(new URL(providerUrl), destination, VerboseLoader.get()); - Core.verbose("Server provider downloaded..."); - } - } + Core.verbose("Downloading: " + providerUrl + " ..."); - final File clientDestination = new File(Directories.getCachePath(), - serverProviderInfo.getClientCRC32() + ".jar"); + if (destination.exists()) { + Core.verbose("Found cached server provider [CRC32: " + serverProviderInfo.getCRC32() + "]"); + } else { + File local; + if ((local = new File(providerUrl)).exists()) { + FileUtil.copyFile(local, destination); + Core.verbose("Server provider copied..."); + } else { + WebUtil.downloadFile(new URL(providerUrl), destination, VerboseLoader.get()); + Core.verbose("Server provider downloaded..."); + } + } - Core.verbose("Downloading: " + serverUrl + " ..."); + final File clientDestination = new File(Directories.getCachePath(), + serverProviderInfo.getClientCRC32() + ".jar"); - if(clientDestination.exists()) { - Core.verbose("Found cached client [CRC32: " + serverProviderInfo.getClientCRC32() + "]"); - } else { - File local; - if ((local = new File(serverUrl)).exists()){ - FileUtil.copyFile(local, clientDestination); - Core.verbose("Server client copied..."); - }else { - WebUtil.downloadFile(new URL(serverUrl), clientDestination, VerboseLoader.get()); - Core.verbose("Server client downloaded..."); - } - } + Core.verbose("Downloading: " + serverUrl + " ..."); - final ClassPath classPath = new ClassPath(); - classPath.addJar(destination); + if (clientDestination.exists()) { + Core.verbose("Found cached client [CRC32: " + serverProviderInfo.getClientCRC32() + "]"); + } else { + File local; + if ((local = new File(serverUrl)).exists()) { + FileUtil.copyFile(local, clientDestination); + Core.verbose("Server client copied..."); + } else { + WebUtil.downloadFile(new URL(serverUrl), clientDestination, VerboseLoader.get()); + Core.verbose("Server client downloaded..."); + } + } - BuildPath.add(destination.toURI().toURL()); + final ClassPath classPath = new ClassPath(); + classPath.addJar(destination); - ServerLoader serverLoader = new ServerLoader(classPath); - final String[] classNames = serverLoader.getServerClassNames(); - if (classNames.length == 0) { - UILog.log( - "Error", - "Failed to load server provider, error: [No provider found in jar file.]", - JOptionPane.ERROR_MESSAGE); - return; - } else if (classNames.length > 1) { - UILog.log( - "Error", - "Failed to load server provider, error: [Multiple providers found in jar file.]"); - return; - } + BuildPath.add(destination.toURI().toURL()); - final String className = classNames[0]; - try { - final Class providerClass = serverLoader - .loadClass(className); - final Constructor con = providerClass.getConstructor(); - final ServerProvider serverProvider = (ServerProvider) con - .newInstance(); - Context.getInstance(serverProvider).setProviderInfo(serverProviderInfo); - super.finalize(serverProvider, this.serverName); - } catch (NoClassDefFoundError | ClassNotFoundException ignored) { - UILog.log( - "Error", - "Failed to load server provider, error: [This server provider is not compatible with this version of parabot]", - JOptionPane.ERROR_MESSAGE); - } catch (Throwable t) { - t.printStackTrace(); - UILog.log( - "Error", - "Failed to load server provider.", - JOptionPane.ERROR_MESSAGE); - } + ServerLoader serverLoader = new ServerLoader(classPath); + final String[] classNames = serverLoader.getServerClassNames(); + if (classNames.length == 0) { + UILog.log( + "Error", + "Failed to load server provider, error: [No provider found in jar file.]", + JOptionPane.ERROR_MESSAGE); + return; + } else if (classNames.length > 1) { + UILog.log( + "Error", + "Failed to load server provider, error: [Multiple providers found in jar file.]"); + return; + } - } catch (Exception e) { - e.printStackTrace(); - UILog.log( - "Error", - "Failed to load server provider, post the stacktrace/error on the parabot forums.", - JOptionPane.ERROR_MESSAGE); - } + final String className = classNames[0]; + try { + final Class providerClass = serverLoader + .loadClass(className); + final Constructor con = providerClass.getConstructor(); + final ServerProvider serverProvider = (ServerProvider) con + .newInstance(); + Context.getInstance(serverProvider).setProviderInfo(serverProviderInfo); + super.finalize(serverProvider, this.serverName); + } catch (NoClassDefFoundError | ClassNotFoundException ignored) { + UILog.log( + "Error", + "Failed to load server provider, error: [This server provider is not compatible with this version of parabot]", + JOptionPane.ERROR_MESSAGE); + } catch (Throwable t) { + t.printStackTrace(); + UILog.log( + "Error", + "Failed to load server provider.", + JOptionPane.ERROR_MESSAGE); + } - } + } catch (Exception e) { + e.printStackTrace(); + UILog.log( + "Error", + "Failed to load server provider, post the stacktrace/error on the parabot forums.", + JOptionPane.ERROR_MESSAGE); + } + + } } diff --git a/src/main/java/org/parabot/environment/servers/executers/LocalServerExecuter.java b/src/main/java/org/parabot/environment/servers/executers/LocalServerExecuter.java index 135ae02..1ff3a40 100644 --- a/src/main/java/org/parabot/environment/servers/executers/LocalServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/LocalServerExecuter.java @@ -1,55 +1,53 @@ package org.parabot.environment.servers.executers; -import java.lang.reflect.Constructor; -import java.net.MalformedURLException; - import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.build.BuildPath; import org.parabot.core.classpath.ClassPath; import org.parabot.environment.servers.ServerProvider; +import java.lang.reflect.Constructor; +import java.net.MalformedURLException; + /** - * * Loads locally stored server providers - * + * * @author Everel - * */ public class LocalServerExecuter extends ServerExecuter { - private final Constructor serverProviderConstructor; - private ClassPath classPath; - private String serverName; + private final Constructor serverProviderConstructor; + private ClassPath classPath; + private String serverName; - public LocalServerExecuter(Constructor serverProviderConstructor, - ClassPath classPath, final String serverName) { - this.serverProviderConstructor = serverProviderConstructor; - this.classPath = classPath; - this.serverName = serverName; - } + public LocalServerExecuter(Constructor serverProviderConstructor, + ClassPath classPath, final String serverName) { + this.serverProviderConstructor = serverProviderConstructor; + this.classPath = classPath; + this.serverName = serverName; + } - @Override - public void run() { - // add jar or directory to buildpath. - if (this.classPath.isJar()) { - Core.verbose("Adding server provider jar to buildpath: " - + this.classPath.lastParsed.toString()); - this.classPath.addToBuildPath(); - } else { - Core.verbose("Adding server providers directory to buildpath: " - + Directories.getServerPath().getPath()); - try { - BuildPath.add(Directories.getServerPath().toURI().toURL()); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - } - // finalize - try { - super.finalize((ServerProvider) serverProviderConstructor.newInstance(), this.serverName); - } catch (Throwable t) { - t.printStackTrace(); - } - } + @Override + public void run() { + // add jar or directory to buildpath. + if (this.classPath.isJar()) { + Core.verbose("Adding server provider jar to buildpath: " + + this.classPath.lastParsed.toString()); + this.classPath.addToBuildPath(); + } else { + Core.verbose("Adding server providers directory to buildpath: " + + Directories.getServerPath().getPath()); + try { + BuildPath.add(Directories.getServerPath().toURI().toURL()); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + // finalize + try { + super.finalize((ServerProvider) serverProviderConstructor.newInstance(), this.serverName); + } catch (Throwable t) { + t.printStackTrace(); + } + } } 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 6a54f10..b98bd3c 100644 --- a/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java +++ b/src/main/java/org/parabot/environment/servers/executers/PublicServerExecuter.java @@ -16,106 +16,100 @@ import org.parabot.environment.servers.ServerProvider; import org.parabot.environment.servers.loader.ServerLoader; import javax.swing.*; - import java.io.File; import java.lang.reflect.Constructor; import java.net.URL; /** - * * Fetches a server provider from the Parabot BDN - * + * * @author Everel - * */ public class PublicServerExecuter extends ServerExecuter { - private String serverName; - - private static AccountManager manager; + private static AccountManager manager; + public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() { - public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() { + @Override + public final void setManager(AccountManager manager) { + PublicServerExecuter.manager = manager; + } - @Override - public final void setManager(AccountManager manager) { - PublicServerExecuter.manager = manager; - } + }; + private String serverName; - }; + public PublicServerExecuter(final String serverName) { + this.serverName = serverName; + } - public PublicServerExecuter(final String serverName) { - this.serverName = serverName; - } + @Override + public void run() { + try { + ServerProviderInfo serverProviderInfo = new ServerProviderInfo(new URL(Configuration.GET_SERVER_PROVIDER_INFO + + this.serverName), manager.getAccount().getURLUsername(), manager.getAccount().getURLPassword()); - @Override - public void run() { - try { - ServerProviderInfo serverProviderInfo = new ServerProviderInfo(new URL(Configuration.GET_SERVER_PROVIDER_INFO - + this.serverName), manager.getAccount().getURLUsername(), manager.getAccount().getURLPassword()); - - final File destination = new File(Directories.getCachePath(), - serverProviderInfo.getCRC32() + ".jar"); - final String jarUrl = String.format(Configuration.GET_SERVER_PROVIDER, Configuration.BOT_VERSION.isNightly(), serverName); + final File destination = new File(Directories.getCachePath(), + serverProviderInfo.getCRC32() + ".jar"); + final String jarUrl = String.format(Configuration.GET_SERVER_PROVIDER, Configuration.BOT_VERSION.isNightly(), serverName); - Core.verbose("Downloading: " + jarUrl + " ..."); - - if(destination.exists()) { - Core.verbose("Found cached server provider [CRC32: " + serverProviderInfo.getCRC32() + "]"); - } else { - WebUtil.downloadFile(new URL(jarUrl), destination, - VerboseLoader.get()); - Core.verbose("Server provider downloaded..."); - } + Core.verbose("Downloading: " + jarUrl + " ..."); + if (destination.exists()) { + Core.verbose("Found cached server provider [CRC32: " + serverProviderInfo.getCRC32() + "]"); + } else { + WebUtil.downloadFile(new URL(jarUrl), destination, + VerboseLoader.get()); + Core.verbose("Server provider downloaded..."); + } - final ClassPath classPath = new ClassPath(); - classPath.addJar(destination); + final ClassPath classPath = new ClassPath(); + classPath.addJar(destination); - BuildPath.add(destination.toURI().toURL()); + BuildPath.add(destination.toURI().toURL()); - ServerLoader serverLoader = new ServerLoader(classPath); - final String[] classNames = serverLoader.getServerClassNames(); - if (classNames == null || classNames.length == 0) { - UILog.log( - "Error", - "Failed to load server provider, error: [No provider found in jar file.]", - JOptionPane.ERROR_MESSAGE); - return; - } else if (classNames.length > 1) { - UILog.log( - "Error", - "Failed to load server provider, error: [Multiple providers found in jar file.]"); - return; - } + ServerLoader serverLoader = new ServerLoader(classPath); + final String[] classNames = serverLoader.getServerClassNames(); + if (classNames == null || classNames.length == 0) { + UILog.log( + "Error", + "Failed to load server provider, error: [No provider found in jar file.]", + JOptionPane.ERROR_MESSAGE); + return; + } else if (classNames.length > 1) { + UILog.log( + "Error", + "Failed to load server provider, error: [Multiple providers found in jar file.]"); + return; + } - final String className = classNames[0]; - try { - final Class providerClass = serverLoader - .loadClass(className); - final Constructor con = providerClass.getConstructor(); - final ServerProvider serverProvider = (ServerProvider) con - .newInstance(); - Context.getInstance(serverProvider).setProviderInfo(serverProviderInfo); - super.finalize(serverProvider, this.serverName); - } catch (NoClassDefFoundError | ClassNotFoundException ignored) { - UILog.log( - "Error", - "Failed to load server provider, error: [This server provider is not compitable with this version of parabot]", - JOptionPane.ERROR_MESSAGE); - } catch (Throwable t) { - t.printStackTrace(); - UILog.log( - "Error", - "Failed to load server provider, post the stacktrace/error on the parabot forums.", - JOptionPane.ERROR_MESSAGE); - } + final String className = classNames[0]; + try { + final Class providerClass = serverLoader + .loadClass(className); + final Constructor con = providerClass.getConstructor(); + final ServerProvider serverProvider = (ServerProvider) con + .newInstance(); + Context.getInstance(serverProvider).setProviderInfo(serverProviderInfo); + super.finalize(serverProvider, this.serverName); + } catch (NoClassDefFoundError | ClassNotFoundException ignored) { + UILog.log( + "Error", + "Failed to load server provider, error: [This server provider is not compitable with this version of parabot]", + JOptionPane.ERROR_MESSAGE); + } catch (Throwable t) { + t.printStackTrace(); + UILog.log( + "Error", + "Failed to load server provider, post the stacktrace/error on the parabot forums.", + JOptionPane.ERROR_MESSAGE); + } - } catch (Exception e) { - e.printStackTrace(); - UILog.log( - "Error", - "Failed to load server provider, post the stacktrace/error on the parabot forums.", - JOptionPane.ERROR_MESSAGE); - } + } catch (Exception e) { + e.printStackTrace(); + UILog.log( + "Error", + "Failed to load server provider, post the stacktrace/error on the parabot forums.", + JOptionPane.ERROR_MESSAGE); + } - } + } } diff --git a/src/main/java/org/parabot/environment/servers/loader/ServerLoader.java b/src/main/java/org/parabot/environment/servers/loader/ServerLoader.java index 0076800..4ed965b 100644 --- a/src/main/java/org/parabot/environment/servers/loader/ServerLoader.java +++ b/src/main/java/org/parabot/environment/servers/loader/ServerLoader.java @@ -1,46 +1,44 @@ package org.parabot.environment.servers.loader; -import java.util.ArrayList; -import java.util.List; - import org.objectweb.asm.tree.ClassNode; import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.classpath.ClassPath; import org.parabot.environment.servers.ServerProvider; +import java.util.ArrayList; +import java.util.List; + /** - * * An environment to load a server - * + * * @author Everel - * - * */ public class ServerLoader extends ASMClassLoader { - private ClassPath classPath; + private ClassPath classPath; - public ServerLoader(ClassPath classPath) { - super(classPath); - this.classPath = classPath; - } + public ServerLoader(ClassPath classPath) { + super(classPath); + this.classPath = classPath; + } - - /** - * Gets all classes that extends ServerProvider - * @return string array of class names that extends ServerProvider - */ - public final String[] getServerClassNames() { - final List classNames = new ArrayList(); - for (ClassNode c : classPath.classes.values()) - if (c.superName.replace('/', '.').equals( - ServerProvider.class.getName())) { - classNames.add(c.name.replace('/', '.')); - } - return classNames.toArray(new String[classNames.size()]); - } - - public ClassPath getClassPath() { - return classPath; - } + /** + * Gets all classes that extends ServerProvider + * + * @return string array of class names that extends ServerProvider + */ + public final String[] getServerClassNames() { + final List classNames = new ArrayList(); + for (ClassNode c : classPath.classes.values()) { + if (c.superName.replace('/', '.').equals( + ServerProvider.class.getName())) { + classNames.add(c.name.replace('/', '.')); + } + } + return classNames.toArray(new String[classNames.size()]); + } + + public ClassPath getClassPath() { + return classPath; + } } From f284fa0e8002193b8d9e9472146988d001911081 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 11 Sep 2017 23:05:42 +0200 Subject: [PATCH 04/15] [BUGFIX] Solving currentThread null return Solves issue #222 --- src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0c60ec3..22dda99 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java @@ -24,7 +24,7 @@ public class ThreadRedirect { } public static Thread currentThread(){ - return null; + return new Thread(); } public static void join(Thread t) throws InterruptedException{ From 724d98a6e0a60c2a60c40e562698017556addca7 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 11 Sep 2017 23:09:26 +0200 Subject: [PATCH 05/15] [BUGFIX] Solving issues with Travis building --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4b0e919..26f51f2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,9 @@ language: java +dist: trusty + jdk: - - oraclejdk7 + - openjdk7 - oraclejdk8 before_install: @@ -65,4 +67,4 @@ deploy: repo: Parabot/Parabot branch: - master - jdk: 'oraclejdk7' \ No newline at end of file + jdk: 'openjdk7' \ No newline at end of file From f667850121b0ba8723c4a9b1da8e15116ec2fb4a Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 11 Sep 2017 23:13:43 +0200 Subject: [PATCH 06/15] [BUGFIX] Solved issue with returning null image --- .../java/org/parabot/core/asm/redirect/ToolkitRedirect.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 1bafabc..c0844e6 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java @@ -40,11 +40,11 @@ public class ToolkitRedirect { } public static Image createImage(Toolkit t,byte[] b){ - return null; + return Toolkit.getDefaultToolkit().createImage(b); } public static Image createImage(Toolkit t, String s){ - return null; + return Toolkit.getDefaultToolkit().createImage(s); } public static Image getImage(Toolkit t,URL u){ From 0834ff205798809f2eb9389f04b9e33968bbb3a7 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 11 Sep 2017 23:14:12 +0200 Subject: [PATCH 07/15] [BUGFIX] Using the given Toolkit and not default Toolkit --- .../java/org/parabot/core/asm/redirect/ToolkitRedirect.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 c0844e6..bb01d54 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java @@ -40,11 +40,11 @@ public class ToolkitRedirect { } public static Image createImage(Toolkit t,byte[] b){ - return Toolkit.getDefaultToolkit().createImage(b); + return t.createImage(b); } public static Image createImage(Toolkit t, String s){ - return Toolkit.getDefaultToolkit().createImage(s); + return t.createImage(s); } public static Image getImage(Toolkit t,URL u){ From db8d7989cbe8758b3036427ceb136a18db67fa57 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 11 Sep 2017 23:22:03 +0200 Subject: [PATCH 08/15] [BUGFIX] Set deployment requirement to openjdk7 Instead of oraclejdk7 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 26f51f2..4094fa2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -58,7 +58,7 @@ deploy: branch: - master - development - jdk: 'oraclejdk7' + jdk: 'openjdk7' - provider: script script: "cp ./.travis/.travis.settings.xml $HOME/.m2/settings.xml && mvn package javadoc:javadoc deploy site:deploy" From a7debba54b93688c9aecca5069f9a1aa4aeb8555 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Mon, 11 Sep 2017 23:57:24 +0200 Subject: [PATCH 09/15] [BUGFIX] Added getProtectionDomain to ClassRedirect --- .../core/asm/redirect/ClassRedirect.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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 4e0be58..6f252dc 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java @@ -8,9 +8,25 @@ import java.io.InputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.ProtectionDomain; public class ClassRedirect { + public static ProtectionDomain getProtectionDomain(final Class clazz) { + if (validStack()) { + return AccessController.doPrivileged(new PrivilegedAction() { + public ProtectionDomain run() { + return clazz.getProtectionDomain(); + } + }); + } + + System.err.println(clazz.getName() + " getProtectionDomain request Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + public static Object newInstance(Class c) throws IllegalAccessException, InstantiationException { if (validStack()) { return c.newInstance(); @@ -136,8 +152,9 @@ public class ClassRedirect { private static boolean validStack() { Exception e = new Exception(); for (StackTraceElement elem : e.getStackTrace()) { - if (elem.getClassName().equals(Script.class.getName())) + if (elem.getClassName().equals(Script.class.getName())) { return true; + } } return false; } From bbe7496ecb7819c350afe9a707c6d6e6f288b207 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Tue, 12 Sep 2017 00:00:07 +0200 Subject: [PATCH 10/15] [BUGFIX] Granting access instead of blocking it --- .../parabot/core/asm/redirect/ClassRedirect.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) 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 6f252dc..dde1499 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java @@ -15,16 +15,13 @@ import java.security.ProtectionDomain; public class ClassRedirect { public static ProtectionDomain getProtectionDomain(final Class clazz) { - if (validStack()) { - return AccessController.doPrivileged(new PrivilegedAction() { - public ProtectionDomain run() { - return clazz.getProtectionDomain(); - } - }); - } + System.err.println(clazz.getName() + " getProtectionDomain request granted."); - System.err.println(clazz.getName() + " getProtectionDomain request Blocked."); - throw RedirectClassAdapter.createSecurityException(); + return AccessController.doPrivileged(new PrivilegedAction() { + public ProtectionDomain run() { + return clazz.getProtectionDomain(); + } + }); } public static Object newInstance(Class c) throws IllegalAccessException, InstantiationException { From a6b444572d315f6b6d180189fda18899f3059cc1 Mon Sep 17 00:00:00 2001 From: JKetelaar Date: Tue, 12 Sep 2017 00:04:17 +0200 Subject: [PATCH 11/15] [BUGFIX] Added createImage with ImageProducer --- .../org/parabot/core/asm/redirect/ToolkitRedirect.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 bb01d54..820386e 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ToolkitRedirect.java @@ -5,6 +5,7 @@ import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.image.ImageProducer; import java.io.IOException; import java.net.URL; @@ -46,7 +47,11 @@ public class ToolkitRedirect { public static Image createImage(Toolkit t, String s){ return t.createImage(s); } - + + public static Image createImage(Toolkit t, ImageProducer i){ + return t.createImage(i); + } + public static Image getImage(Toolkit t,URL u){ return t.getImage(u); } From 44625f7280898f934886013b8ca5981e6d698183 Mon Sep 17 00:00:00 2001 From: JMapfel Date: Tue, 26 Sep 2017 23:37:07 +0200 Subject: [PATCH 12/15] [BUGFIX] A bug where the method node lookup didn't work The 'getMethod' method in the Invoker wrapper did only check the descriptor of the parameters. To ensure that the right method is returned, the full method desc must be used. The return desc (the 'desc' element in the hooks file) is still optional, but should be used to avoid conflicts. --- .../parabot/core/asm/wrappers/Invoker.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/parabot/core/asm/wrappers/Invoker.java b/src/main/java/org/parabot/core/asm/wrappers/Invoker.java index 276ae52..328e073 100644 --- a/src/main/java/org/parabot/core/asm/wrappers/Invoker.java +++ b/src/main/java/org/parabot/core/asm/wrappers/Invoker.java @@ -1,5 +1,6 @@ package org.parabot.core.asm.wrappers; +import org.objectweb.asm.Type; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.MethodNode; import org.parabot.core.asm.ASMUtils; @@ -35,7 +36,7 @@ public class Invoker implements Injectable { String argsDesc, String returnDesc, String methodName, boolean isInterface, String instanceCast, String argsCheckCastDesc) { this.into = ASMUtils.getClass(into); this.methodLocation = ASMUtils.getClass(methodLoc); - this.mn = getMethod(this.methodLocation, invMethName, argsDesc); + this.mn = getMethod(this.methodLocation, invMethName, argsDesc, returnDesc); this.returnDesc = returnDesc; this.methodName = methodName; this.argsDesc = argsDesc; @@ -47,15 +48,15 @@ public class Invoker implements Injectable { this.argsCheckCastDesc = argsCheckCastDesc; } - private static MethodNode getMethod(ClassNode into, String name, String desc) { - for (Object m : into.methods) { - MethodNode methodNode = (MethodNode) m; - String s = methodNode.desc.substring(0, methodNode.desc.indexOf(')') + 1); - if (methodNode.name.equals(name) && s.equals(desc)) { - return methodNode; - } - } - return null; + private static MethodNode getMethod(ClassNode into, String name, String argsDesc, String returnDesc) { + for (Object method : into.methods) { + MethodNode m = (MethodNode) method; + if (m.name.equals(name) && m.desc.substring(0, m.desc.indexOf(')') + 1).equals(argsDesc) + && (returnDesc == null || Type.getType(m.desc).getReturnType().getDescriptor().equals(returnDesc))) { + return m; + } + } + return null; } /** From 610778597f3acefc425af7b5e32cd947dfe2a7b5 Mon Sep 17 00:00:00 2001 From: Emmastone Date: Tue, 21 Nov 2017 08:59:52 +0000 Subject: [PATCH 13/15] [BUGFIX] Fixed heigh on screenshots --- src/main/java/org/parabot/core/ui/BotUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/ui/BotUI.java b/src/main/java/org/parabot/core/ui/BotUI.java index f3971e0..6a107ac 100644 --- a/src/main/java/org/parabot/core/ui/BotUI.java +++ b/src/main/java/org/parabot/core/ui/BotUI.java @@ -157,7 +157,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() + (menuBar.getHeight() + features.getHeight()), getWidth(), getHeight()); + Rectangle parabotScreen = new Rectangle((int) getLocation().getX(), (int) getLocation().getY() + (menuBar.getHeight() + file.getHeight()), getWidth(), getHeight() - 43); BufferedImage image = robot.createScreenCapture(parabotScreen); String randString = StringUtils.randomString(10); boolean search = true; From 47570cbce0ba4831b12e7e694770e08a7f7b0bd7 Mon Sep 17 00:00:00 2001 From: Emmastone Date: Tue, 21 Nov 2017 10:41:49 +0000 Subject: [PATCH 14/15] [TASK] Removed random number Also bumped version --- .travis.yml | 2 +- README.md | 2 +- pom.xml | 2 +- src/main/java/org/parabot/core/ui/BotUI.java | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1fa9f29..ee17f98 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,7 +34,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.7 + - PARABOT_VERSION=2.6.8 cache: directories: diff --git a/README.md b/README.md index 41f5398..8f46946 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # Parabot -Parabot V2.6.3. +Parabot V2.6.8. #### Links diff --git a/pom.xml b/pom.xml index 92f7153..7a4d27a 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.parabot client - 2.6.7 + 2.6.8 jar diff --git a/src/main/java/org/parabot/core/ui/BotUI.java b/src/main/java/org/parabot/core/ui/BotUI.java index 6a107ac..90b384f 100644 --- a/src/main/java/org/parabot/core/ui/BotUI.java +++ b/src/main/java/org/parabot/core/ui/BotUI.java @@ -157,7 +157,10 @@ 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() + (menuBar.getHeight() + file.getHeight()), getWidth(), getHeight() - 43); + int menuBarHeight = menuBar.getHeight() + file.getHeight(); + Rectangle parabotScreen = new Rectangle( + (int) getLocation().getX(), (int) getLocation().getY() + menuBarHeight, + getWidth(), getHeight() - menuBarHeight); BufferedImage image = robot.createScreenCapture(parabotScreen); String randString = StringUtils.randomString(10); boolean search = true; From 84816acd2757dce55fd1953199cb3e395fe9fb3a Mon Sep 17 00:00:00 2001 From: Emmastone Date: Tue, 28 Nov 2017 21:42:06 +0000 Subject: [PATCH 15/15] [FEATURE] Added Randoms to Script Allows users to add randoms though scripts. --- src/main/java/org/parabot/environment/scripts/Script.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/environment/scripts/Script.java b/src/main/java/org/parabot/environment/scripts/Script.java index a57988d..b07b0c6 100644 --- a/src/main/java/org/parabot/environment/scripts/Script.java +++ b/src/main/java/org/parabot/environment/scripts/Script.java @@ -6,10 +6,10 @@ import org.parabot.core.ui.BotUI; import org.parabot.core.ui.Logger; import org.parabot.environment.api.utils.PBPreferences; import org.parabot.environment.api.utils.Time; +import org.parabot.environment.randoms.Random; import org.parabot.environment.randoms.RandomType; import org.parabot.environment.scripts.framework.*; import org.parabot.environment.scripts.framework.Frameworks; -import org.parabot.environment.scripts.randoms.Random; import java.util.Collection; @@ -61,6 +61,11 @@ public class Script implements Runnable { this.frameWork = f; } + @Deprecated + public final void addRandom(org.parabot.environment.scripts.randoms.Random random) { + new IllegalArgumentException("This type of random is deprecated").printStackTrace(); + } + public final void addRandom(Random random) { Context.getInstance().getRandomHandler().addRandom(random); }