From a0483158d56c523690ddf0681761d0681d7f6ebd Mon Sep 17 00:00:00 2001 From: Emmastone Date: Tue, 12 Dec 2017 10:44:13 +0000 Subject: [PATCH 01/16] [CLEANUP] Removed duplicated class --- .../environment/scripts/Frameworks.java | 66 ------------------- 1 file changed, 66 deletions(-) delete mode 100644 src/main/java/org/parabot/environment/scripts/Frameworks.java diff --git a/src/main/java/org/parabot/environment/scripts/Frameworks.java b/src/main/java/org/parabot/environment/scripts/Frameworks.java deleted file mode 100644 index af5d40f..0000000 --- a/src/main/java/org/parabot/environment/scripts/Frameworks.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.parabot.environment.scripts; - -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 - */ -public class Frameworks { - - 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; - } -} - -class StrategyWorker extends AbstractFramework { - 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; - } - -} From 097a0bdf7b5ed60ab26fa380c5f48ba45d18d666 Mon Sep 17 00:00:00 2001 From: Jak Date: Sun, 29 Jul 2018 14:49:01 +0100 Subject: [PATCH 02/16] Fix ServerDesc comparitor to allow duplicate server names --- src/main/java/org/parabot/core/desc/ServerDescription.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/parabot/core/desc/ServerDescription.java b/src/main/java/org/parabot/core/desc/ServerDescription.java index 687410c..89b191b 100644 --- a/src/main/java/org/parabot/core/desc/ServerDescription.java +++ b/src/main/java/org/parabot/core/desc/ServerDescription.java @@ -37,6 +37,8 @@ public class ServerDescription implements Comparable { @Override public int compareTo(ServerDescription o) { + if (this.getServerName().equalsIgnoreCase(o.getServerName())) + return 1; return this.getServerName().compareTo(o.getServerName()); } From 812e2daa3b749322b4f3f2cc3396944fc5fc870c Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Tue, 28 Aug 2018 14:35:51 +0100 Subject: [PATCH 03/16] Add -uuid flag as an alternative to -server quicklaunch arg --- src/main/java/org/parabot/Landing.java | 3 +++ src/main/java/org/parabot/core/Core.java | 3 ++- .../org/parabot/core/desc/ServerDescription.java | 1 + .../core/parsers/servers/LocalServers.java | 11 +++++++++-- .../java/org/parabot/core/ui/ServerSelector.java | 16 +++++++++++++--- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/parabot/Landing.java b/src/main/java/org/parabot/Landing.java index 51c6a67..edbd93a 100644 --- a/src/main/java/org/parabot/Landing.java +++ b/src/main/java/org/parabot/Landing.java @@ -135,6 +135,9 @@ public final class Landing { case "-no_validation": Core.disableValidation(); break; + case "-uuid": + Core.quickLaunchByUuid = Integer.parseInt(args[++i]); + break; } } } diff --git a/src/main/java/org/parabot/core/Core.java b/src/main/java/org/parabot/core/Core.java index 68f8623..8f2a900 100644 --- a/src/main/java/org/parabot/core/Core.java +++ b/src/main/java/org/parabot/core/Core.java @@ -28,7 +28,8 @@ import java.security.NoSuchAlgorithmException; @SuppressWarnings("Duplicates") public class Core { - private static boolean debug; + public static int quickLaunchByUuid; // used like -server, but denoted by an Int rather than the server name + private static boolean debug; // in debug mode, we will print more detailed error messages. private static boolean verbose; private static boolean dump; private static boolean loadLocal; //Loads both local and public scripts/servers diff --git a/src/main/java/org/parabot/core/desc/ServerDescription.java b/src/main/java/org/parabot/core/desc/ServerDescription.java index 687410c..f3901da 100644 --- a/src/main/java/org/parabot/core/desc/ServerDescription.java +++ b/src/main/java/org/parabot/core/desc/ServerDescription.java @@ -9,6 +9,7 @@ public class ServerDescription implements Comparable { private String serverName; private String author; private double revision; + public int uuid; public ServerDescription(final String serverName, final String author, final double revision) { 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 eb0f698..3da0cf5 100644 --- a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java +++ b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java @@ -86,17 +86,24 @@ public class LocalServers extends ServerParser { if ((bank = object.get("bank")) != null) { bankTabs = (int) bank; } + String uuidStr = (String) object.get("uuid"); // optional + JSONObject locations = (JSONObject) object.get("locations"); 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); - ServerDescription desc = new ServerDescription(name, - author, version); + ServerDescription desc = new ServerDescription(name, author, version); + if (uuidStr != null && uuidStr.length() > 0) { + desc.uuid = Integer.parseInt(uuidStr); + } + SERVER_CACHE.put(desc, new LocalPublicServerExecuter(name, serverProviderInfo, server, provider)); } catch (IOException | ParseException e) { e.printStackTrace(); diff --git a/src/main/java/org/parabot/core/ui/ServerSelector.java b/src/main/java/org/parabot/core/ui/ServerSelector.java index 31da8dd..5b76fdd 100755 --- a/src/main/java/org/parabot/core/ui/ServerSelector.java +++ b/src/main/java/org/parabot/core/ui/ServerSelector.java @@ -1,5 +1,6 @@ package org.parabot.core.ui; +import org.parabot.core.Core; import org.parabot.core.desc.ServerDescription; import org.parabot.core.parsers.servers.ServerParser; import org.parabot.core.ui.components.ServerComponent; @@ -23,7 +24,7 @@ public class ServerSelector extends JPanel { public ServerSelector() { Queue widgets = getServers(); - if (initServer != null) { + if (initServer != null || Core.quickLaunchByUuid > 0) { if (runServer(widgets)) { initServer = null; return; @@ -67,7 +68,7 @@ public class ServerSelector extends JPanel { } /** - * This method is called when -server argument is given + * This method is called when -server argument is given, or -uuid arg is given. * * @param widgets */ @@ -75,7 +76,16 @@ public class ServerSelector extends JPanel { if (widgets == null || widgets.isEmpty()) { return false; } - final String serverName = initServer.toLowerCase(); + if (Core.quickLaunchByUuid > 0) { // match the pre-requested server config uuid to quick-launch + for (ServerComponent widget : widgets) { + if (widget.desc.uuid == Core.quickLaunchByUuid) { + Environment.load(widget.desc); + return true; + } + } + } + + final String serverName = initServer.toLowerCase(); // match the pre-requested server name to quick-launch for (ServerComponent widget : widgets) { if (widget.desc.getServerName().toLowerCase().equals(serverName)) { Environment.load(widget.desc); From 166eb9dbfb13d88ca8865c26b2a682dd29a83e11 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Tue, 28 Aug 2018 16:33:57 +0100 Subject: [PATCH 04/16] NPE Fix --- .../java/org/parabot/core/ui/ServerSelector.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/parabot/core/ui/ServerSelector.java b/src/main/java/org/parabot/core/ui/ServerSelector.java index 5b76fdd..289712d 100755 --- a/src/main/java/org/parabot/core/ui/ServerSelector.java +++ b/src/main/java/org/parabot/core/ui/ServerSelector.java @@ -85,11 +85,13 @@ public class ServerSelector extends JPanel { } } - final String serverName = initServer.toLowerCase(); // match the pre-requested server name to quick-launch - for (ServerComponent widget : widgets) { - if (widget.desc.getServerName().toLowerCase().equals(serverName)) { - Environment.load(widget.desc); - return true; + if (initServer != null) { + final String serverName = initServer.toLowerCase(); // match the pre-requested server name to quick-launch + for (ServerComponent widget : widgets) { + if (widget.desc.getServerName().toLowerCase().equals(serverName)) { + Environment.load(widget.desc); + return true; + } } } return false; From b4ba5efb49ff791fbcf6cec1693969407073d4f0 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Sat, 1 Sep 2018 20:11:12 +0100 Subject: [PATCH 05/16] Brackets --- src/main/java/org/parabot/core/desc/ServerDescription.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/desc/ServerDescription.java b/src/main/java/org/parabot/core/desc/ServerDescription.java index 89b191b..f908842 100644 --- a/src/main/java/org/parabot/core/desc/ServerDescription.java +++ b/src/main/java/org/parabot/core/desc/ServerDescription.java @@ -37,8 +37,9 @@ public class ServerDescription implements Comparable { @Override public int compareTo(ServerDescription o) { - if (this.getServerName().equalsIgnoreCase(o.getServerName())) + if (this.getServerName().equalsIgnoreCase(o.getServerName())) { return 1; + } return this.getServerName().compareTo(o.getServerName()); } From 43cfd1b17008c5f552d3930d2df4391861346a25 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Sat, 1 Sep 2018 20:18:38 +0100 Subject: [PATCH 06/16] Code style fixes --- src/main/java/org/parabot/Landing.java | 2 +- src/main/java/org/parabot/core/Core.java | 12 ++++++++++-- .../java/org/parabot/core/ui/ServerSelector.java | 8 +++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/parabot/Landing.java b/src/main/java/org/parabot/Landing.java index edbd93a..b3a9ea2 100644 --- a/src/main/java/org/parabot/Landing.java +++ b/src/main/java/org/parabot/Landing.java @@ -136,7 +136,7 @@ public final class Landing { Core.disableValidation(); break; case "-uuid": - Core.quickLaunchByUuid = Integer.parseInt(args[++i]); + Core.setQuickLaunchByUuid(Integer.parseInt(args[++i])); break; } } diff --git a/src/main/java/org/parabot/core/Core.java b/src/main/java/org/parabot/core/Core.java index 8f2a900..7e17c12 100644 --- a/src/main/java/org/parabot/core/Core.java +++ b/src/main/java/org/parabot/core/Core.java @@ -28,8 +28,8 @@ import java.security.NoSuchAlgorithmException; @SuppressWarnings("Duplicates") public class Core { - public static int quickLaunchByUuid; // used like -server, but denoted by an Int rather than the server name - private static boolean debug; // in debug mode, we will print more detailed error messages. + private static int quickLaunchByUuid = -1; // used like -server, but denoted by an Int rather than the server name + private static boolean debug; // in debug mode, we will print more detailed error messages. private static boolean verbose; private static boolean dump; private static boolean loadLocal; //Loads both local and public scripts/servers @@ -47,6 +47,14 @@ public class Core { return validate; } + public static int getQuickLaunchByUuid() { + return quickLaunchByUuid; + } + + public static void setQuickLaunchByUuid(int quickLaunchByUuid) { + Core.quickLaunchByUuid = quickLaunchByUuid; + } + /** * Enabled loadLocal mode * diff --git a/src/main/java/org/parabot/core/ui/ServerSelector.java b/src/main/java/org/parabot/core/ui/ServerSelector.java index 289712d..97884d6 100755 --- a/src/main/java/org/parabot/core/ui/ServerSelector.java +++ b/src/main/java/org/parabot/core/ui/ServerSelector.java @@ -24,7 +24,7 @@ public class ServerSelector extends JPanel { public ServerSelector() { Queue widgets = getServers(); - if (initServer != null || Core.quickLaunchByUuid > 0) { + if (initServer != null || Core.getQuickLaunchByUuid() > -1) { if (runServer(widgets)) { initServer = null; return; @@ -76,13 +76,14 @@ public class ServerSelector extends JPanel { if (widgets == null || widgets.isEmpty()) { return false; } - if (Core.quickLaunchByUuid > 0) { // match the pre-requested server config uuid to quick-launch + if (Core.getQuickLaunchByUuid() > -1) { // match the pre-requested server config uuid to quick-launch for (ServerComponent widget : widgets) { - if (widget.desc.uuid == Core.quickLaunchByUuid) { + if (widget.desc.uuid == Core.getQuickLaunchByUuid()) { Environment.load(widget.desc); return true; } } + System.err.println("No server config with -uuid "+Core.getQuickLaunchByUuid()+" was found to quick launch."); } if (initServer != null) { @@ -93,6 +94,7 @@ public class ServerSelector extends JPanel { return true; } } + System.err.println("No server config with -server "+serverName+" was found to quick launch."); } return false; } From ff788b4309c1d6c30a2c245bfd9666e461602d75 Mon Sep 17 00:00:00 2001 From: Jak Date: Sun, 29 Jul 2018 04:12:13 +0100 Subject: [PATCH 07/16] Add support for customizable URL for randoms --- .../parabot/core/desc/ServerProviderInfo.java | 21 +++++++++- .../core/parsers/randoms/PublicRandoms.java | 42 +++++++++++-------- .../core/parsers/servers/LocalServers.java | 22 ++++++---- 3 files changed, 57 insertions(+), 28 deletions(-) diff --git a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java index 4172151..309c4e0 100644 --- a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java +++ b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java @@ -50,7 +50,16 @@ public class ServerProviderInfo { } } - public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs) { + /** + * Initialize configuration with data provided by {@link org.parabot.core.parsers.servers.LocalServers} from a {@code /parabot/servers/config.json} file. Also loads the default Settings map from the BDN. + * @param clientJar Name of the client jar file + * @param hooks Name of the hooks file + * @param name Server name + * @param clientClass Entry class within the client jar + * @param bankTabs Bank tabs - only relevant for certain servers. Default 0 + * @param randoms + */ + public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs, String randoms) { this.properties = new Properties(); this.settings = new HashMap<>(); @@ -69,6 +78,7 @@ public class ServerProviderInfo { 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("randoms_jar", randoms); } private long getCRC32(String name, String type) { @@ -141,4 +151,13 @@ public class ServerProviderInfo { public HashMap getSettings() { return settings; } + + public URL getRandoms() { + try { + return new URL(properties.getProperty("randoms_jar")); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + return null; + } } 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 ed285ff..e8cea40 100644 --- a/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java +++ b/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java @@ -1,18 +1,18 @@ package org.parabot.core.parsers.randoms; -import org.parabot.api.io.WebUtil; -import org.parabot.core.Configuration; -import org.parabot.core.Context; -import org.parabot.core.Core; -import org.parabot.core.Directories; -import org.parabot.core.io.NoProgressListener; - import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; +import org.parabot.api.io.WebUtil; +import org.parabot.api.output.Logger; +import org.parabot.core.Configuration; +import org.parabot.core.Context; +import org.parabot.core.Core; +import org.parabot.core.Directories; +import org.parabot.core.io.NoProgressListener; /** * @author JKetelaar @@ -23,12 +23,21 @@ public class PublicRandoms extends RandomParser { @Override public void parse() { - File myJar = new File(Directories.getCachePath() + File.separator + fileName); - if (!myJar.exists() || !myJar.canRead()) { - download(); + + final File destination = new File(Directories.getCachePath() + File.separator + fileName); + final URL overrideDownload = Context.getInstance().getServerProviderInfo().getRandoms(); + if (overrideDownload == null) { + throw new NullPointerException("randoms() URL is null - expected to default to BDN URL!"); + } + + Core.verbose(String.format("[%s] Destination: %s | dl: %s", getClass().getName(), destination, overrideDownload)); + + if (!destination.exists() || !destination.canRead()) { + Core.verbose(String.format("[%s] Missing %s - downloading from %s...", PublicRandoms.class.getSimpleName(), destination.getAbsolutePath(), overrideDownload)); + download(destination, overrideDownload); } try { - URL url = myJar.toURI().toURL(); + URL url = destination.toURI().toURL(); URL[] urls = new URL[]{ url }; String server = Context.getInstance().getServerProviderInfo().getServerName(); @@ -36,7 +45,7 @@ public class PublicRandoms extends RandomParser { 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); + Core.verbose(String.format("[%s] %s %s", PublicRandoms.class.getSimpleName(), "Initing core Randoms for", server)); method.invoke(instance, server); Core.verbose("Successfully parsed public random!"); } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException | ClassNotFoundException | MalformedURLException e) { @@ -45,17 +54,14 @@ public class PublicRandoms extends RandomParser { } } - private void download() { + private void download(final File destination, URL downloadLink) { try { - File random = new File(Directories.getCachePath() + File.separator + fileName); - if (random.exists()) { + if (destination.exists()) { Core.verbose("Public random dependency already exists, no need to download it..."); return; } - String downloadLink = ((Configuration.BOT_VERSION.isNightly()) ? Configuration.GET_RANDOMS + Configuration.NIGHTLY_APPEND : Configuration.GET_RANDOMS); - - WebUtil.downloadFile(new URL(downloadLink), random, new NoProgressListener()); + WebUtil.downloadFile(downloadLink, destination, new NoProgressListener()); } catch (Exception e) { e.printStackTrace(); } 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 eb0f698..e0ec811 100644 --- a/src/main/java/org/parabot/core/parsers/servers/LocalServers.java +++ b/src/main/java/org/parabot/core/parsers/servers/LocalServers.java @@ -1,7 +1,13 @@ package org.parabot.core.parsers.servers; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.util.ArrayList; import org.json.simple.JSONObject; import org.json.simple.parser.ParseException; +import org.parabot.core.Configuration; import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.classpath.ClassPath; @@ -13,12 +19,6 @@ import org.parabot.environment.servers.executers.LocalPublicServerExecuter; import org.parabot.environment.servers.executers.LocalServerExecuter; import org.parabot.environment.servers.loader.ServerLoader; -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 * @@ -91,9 +91,13 @@ public class LocalServers extends ServerParser { 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); + String randoms = (String) locations.get("randoms"); + if (randoms == null) { + randoms = Configuration.GET_RANDOMS + (Configuration.BOT_VERSION.isNightly() ? Configuration.NIGHTLY_APPEND : ""); + } + + Core.verbose("[LocalServers]: Parsed server: " + name); + ServerProviderInfo serverProviderInfo = new ServerProviderInfo(server, hooks, name, clientClass, bankTabs, randoms); ServerDescription desc = new ServerDescription(name, author, version); From c60f808d125ad2af8e3a05e96208a9a5f9686192 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Mon, 3 Sep 2018 04:26:32 +0100 Subject: [PATCH 08/16] NPE fix for getRandoms --- src/main/java/org/parabot/core/desc/ServerProviderInfo.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java index 309c4e0..9f42f59 100644 --- a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java +++ b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java @@ -154,7 +154,11 @@ public class ServerProviderInfo { public URL getRandoms() { try { - return new URL(properties.getProperty("randoms_jar")); + String randomsUrl = properties.getProperty("randoms_jar"); + if (randomsUrl == null || randomsUrl.length() == 0) { + randomsUrl = Configuration.GET_RANDOMS + (Configuration.BOT_VERSION.isNightly() ? Configuration.NIGHTLY_APPEND : ""); + } + return new URL(randomsUrl); } catch (MalformedURLException e) { e.printStackTrace(); } From beeaebf323c0998a21b9be5bd2bf19b72f920748 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Tue, 4 Sep 2018 22:21:07 +0100 Subject: [PATCH 09/16] Add waypoint methods for Applet pre init and post start --- src/main/java/org/parabot/core/Context.java | 4 ++++ .../environment/servers/ServerProvider.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index 943d051..e709ff9 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -185,9 +185,13 @@ public class Context { panel.add(gameApplet); panel.validate(); + serverProvider.preAppletInit(); + gameApplet.init(); gameApplet.start(); + serverProvider.postAppletStart(); + java.util.Timer t = new java.util.Timer(); t.schedule(new TimerTask() { @Override diff --git a/src/main/java/org/parabot/environment/servers/ServerProvider.java b/src/main/java/org/parabot/environment/servers/ServerProvider.java index da9b465..6765781 100644 --- a/src/main/java/org/parabot/environment/servers/ServerProvider.java +++ b/src/main/java/org/parabot/environment/servers/ServerProvider.java @@ -146,4 +146,20 @@ public abstract class ServerProvider implements Opcodes { } + /** + * Called in Context.setApplet before applet.init() is called. Exclusively used for manipulating the Frame attached + * to the applet of Roatpkz. + */ + public void preAppletInit() { + + } + + /** + * Called in Context.setApplet before after applet.start() and applet.init() are called. Exclusively used for manipulating the Frame attached + * to the applet of Roatpkz. + */ + public void postAppletStart() { + + } + } From d609d7d8bb7d56935c0f50f651b5ebab8f97105e Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Wed, 5 Sep 2018 10:06:37 +0100 Subject: [PATCH 10/16] Add support for zero-arg callbacks --- .../core/asm/adapters/AddCallbackAdapter.java | 22 ++++++++++--------- .../parabot/core/asm/wrappers/Callback.java | 16 ++++++++------ .../core/parsers/hooks/XMLHookParser.java | 6 +++++ 3 files changed, 27 insertions(+), 17 deletions(-) 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 1384452..1b6ea3f 100644 --- a/src/main/java/org/parabot/core/asm/adapters/AddCallbackAdapter.java +++ b/src/main/java/org/parabot/core/asm/adapters/AddCallbackAdapter.java @@ -40,17 +40,19 @@ public class AddCallbackAdapter implements Injectable, Opcodes { 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++; + if (args != null && args.length > 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)); } - } else { - inject.add(new VarInsnNode(ASMUtils.getLoadOpcode(types[arg] - .getDescriptor()), arg + 1)); } } inject.add(new MethodInsnNode(INVOKESTATIC, 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 039b41c..5917f0f 100644 --- a/src/main/java/org/parabot/core/asm/wrappers/Callback.java +++ b/src/main/java/org/parabot/core/asm/wrappers/Callback.java @@ -26,14 +26,16 @@ public class Callback implements Injectable { 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]); + if (args.length() > 0) { + 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)}; } - } else { - this.args = new int[]{ Integer.parseInt(args) }; } } 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 af01411..acde8cf 100644 --- a/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java +++ b/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java @@ -67,6 +67,12 @@ public class XMLHookParser extends HookParser { private static final String getValue(String tag, Element element) { NodeList nodes = element.getElementsByTagName(tag).item(0) .getChildNodes(); + if (nodes.getLength() == 0 || nodes.item(0) == null) { + if (Core.inVerboseMode()) { + System.err.println("WARNING: Invalid Hook "+tag+" subnode. Tag is missing or empty?"); + } + return ""; + } Node node = (Node) nodes.item(0); return node.getNodeValue(); } From ca0d68ed0854f46ef643e10fb74aff5f5d005263 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Wed, 5 Sep 2018 10:40:58 +0100 Subject: [PATCH 11/16] Add an NPE catch wtih useful message --- .../java/org/parabot/core/parsers/hooks/XMLHookParser.java | 3 +++ 1 file changed, 3 insertions(+) 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 acde8cf..073b78e 100644 --- a/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java +++ b/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java @@ -65,6 +65,9 @@ public class XMLHookParser extends HookParser { } private static final String getValue(String tag, Element element) { + if (element.getElementsByTagName(tag).item(0) == null) { + throw new NullPointerException("MISSING HOOK TAG: The '"+tag+"' xml tag is missing from one of the hooks of type: "+element.getParentNode().getNodeName()); + } NodeList nodes = element.getElementsByTagName(tag).item(0) .getChildNodes(); if (nodes.getLength() == 0 || nodes.item(0) == null) { From d98bab9c0c116efb281a74a3d1f3a0c796b089e5 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Wed, 5 Sep 2018 13:15:10 +0100 Subject: [PATCH 12/16] Restore previous constructor to ensure backwards compat --- .../org/parabot/core/desc/ServerProviderInfo.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java index 9f42f59..9eca6eb 100644 --- a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java +++ b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java @@ -57,7 +57,19 @@ public class ServerProviderInfo { * @param name Server name * @param clientClass Entry class within the client jar * @param bankTabs Bank tabs - only relevant for certain servers. Default 0 - * @param randoms + */ + public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs) { + this(clientJar, hooks, name, clientClass, bankTabs, null); + } + + /** + * Initialize configuration with data provided by {@link org.parabot.core.parsers.servers.LocalServers} from a {@code /parabot/servers/config.json} file. Also loads the default Settings map from the BDN. + * @param clientJar Name of the client jar file + * @param hooks Name of the hooks file + * @param name Server name + * @param clientClass Entry class within the client jar + * @param bankTabs Bank tabs - only relevant for certain servers. Default 0 + * @param randoms A URL to an endpoint where the Randoms are located. Can be Null, in which case getRandoms() will fallback to the default BDN Randoms URL. */ public ServerProviderInfo(String clientJar, String hooks, String name, String clientClass, int bankTabs, String randoms) { this.properties = new Properties(); From 32a3a013aac93a5fbedd92aef4c2558baca1cc0c Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Fri, 7 Sep 2018 13:51:59 +0100 Subject: [PATCH 13/16] Improve comments --- src/main/java/org/parabot/core/desc/ServerProviderInfo.java | 6 ++++++ .../org/parabot/core/parsers/randoms/PublicRandoms.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java index 9eca6eb..a4e8c98 100644 --- a/src/main/java/org/parabot/core/desc/ServerProviderInfo.java +++ b/src/main/java/org/parabot/core/desc/ServerProviderInfo.java @@ -164,16 +164,22 @@ public class ServerProviderInfo { return settings; } + /** + * Gets the URL to download the Randoms JAR from. + * @return The provided URL in the server config JSON (denoted by 'randoms:') or, fallback to the default BDN URL. + */ public URL getRandoms() { try { String randomsUrl = properties.getProperty("randoms_jar"); if (randomsUrl == null || randomsUrl.length() == 0) { + // Fallback to default BDN URL if there is no 'randoms' specified in the server JSON configuration. randomsUrl = Configuration.GET_RANDOMS + (Configuration.BOT_VERSION.isNightly() ? Configuration.NIGHTLY_APPEND : ""); } return new URL(randomsUrl); } catch (MalformedURLException e) { e.printStackTrace(); } + // Will never return null, unless the BDN URL is changed. It shouldn't be. return null; } } 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 e8cea40..158c907 100644 --- a/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java +++ b/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java @@ -27,7 +27,7 @@ public class PublicRandoms extends RandomParser { final File destination = new File(Directories.getCachePath() + File.separator + fileName); final URL overrideDownload = Context.getInstance().getServerProviderInfo().getRandoms(); if (overrideDownload == null) { - throw new NullPointerException("randoms() URL is null - expected to default to BDN URL!"); + throw new NullPointerException("Unable to grab URL for Randoms jar. Default URL for BDN randoms must have changed!"); } Core.verbose(String.format("[%s] Destination: %s | dl: %s", getClass().getName(), destination, overrideDownload)); From 3a91763a57e8d7ed4b0e3de7a139c9278fc68e2c Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Fri, 7 Sep 2018 17:59:27 +0100 Subject: [PATCH 14/16] Code style fix --- .../org/parabot/core/asm/adapters/AddCallbackAdapter.java | 2 +- .../java/org/parabot/core/parsers/hooks/XMLHookParser.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 1b6ea3f..8b26227 100644 --- a/src/main/java/org/parabot/core/asm/adapters/AddCallbackAdapter.java +++ b/src/main/java/org/parabot/core/asm/adapters/AddCallbackAdapter.java @@ -40,7 +40,7 @@ public class AddCallbackAdapter implements Injectable, Opcodes { Label l0 = new Label(); inject.add(new LabelNode(l0)); int offset = 0; - if (args != null && args.length > 0) { + if (args != null) { for (int arg : args) { if (Modifier.isStatic(method.access)) { int loadOpcode = ASMUtils.getLoadOpcode(types[arg] 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 073b78e..e7fa473 100644 --- a/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java +++ b/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java @@ -66,13 +66,13 @@ public class XMLHookParser extends HookParser { private static final String getValue(String tag, Element element) { if (element.getElementsByTagName(tag).item(0) == null) { - throw new NullPointerException("MISSING HOOK TAG: The '"+tag+"' xml tag is missing from one of the hooks of type: "+element.getParentNode().getNodeName()); + throw new NullPointerException("MISSING HOOK TAG: The '" + tag + "' xml tag is missing from one of the hooks of type: " + element.getParentNode().getNodeName()); } NodeList nodes = element.getElementsByTagName(tag).item(0) .getChildNodes(); if (nodes.getLength() == 0 || nodes.item(0) == null) { if (Core.inVerboseMode()) { - System.err.println("WARNING: Invalid Hook "+tag+" subnode. Tag is missing or empty?"); + System.err.println("WARNING: Invalid Hook " + tag + " subnode. Tag is missing or empty?"); } return ""; } From 295a096fa4f4decf12f13795e26b0e0d24a2427b Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Mon, 10 Sep 2018 12:20:43 +0100 Subject: [PATCH 15/16] [BUGFIX] Fix print message naming inconsistency --- .../org/parabot/core/parsers/randoms/PublicRandoms.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 158c907..69973b4 100644 --- a/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java +++ b/src/main/java/org/parabot/core/parsers/randoms/PublicRandoms.java @@ -30,10 +30,10 @@ public class PublicRandoms extends RandomParser { throw new NullPointerException("Unable to grab URL for Randoms jar. Default URL for BDN randoms must have changed!"); } - Core.verbose(String.format("[%s] Destination: %s | dl: %s", getClass().getName(), destination, overrideDownload)); + Core.verbose(String.format("[%s] Destination: %s | dl: %s", getClass().getSimpleName(), destination, overrideDownload)); if (!destination.exists() || !destination.canRead()) { - Core.verbose(String.format("[%s] Missing %s - downloading from %s...", PublicRandoms.class.getSimpleName(), destination.getAbsolutePath(), overrideDownload)); + Core.verbose(String.format("[%s] Missing %s - downloading from %s...", getClass().getSimpleName(), destination.getAbsolutePath(), overrideDownload)); download(destination, overrideDownload); } try { @@ -45,7 +45,7 @@ public class PublicRandoms extends RandomParser { Class classToLoad = Class.forName("org.parabot.randoms.Core", true, child); Method method = classToLoad.getDeclaredMethod("init", String.class); Object instance = classToLoad.newInstance(); - Core.verbose(String.format("[%s] %s %s", PublicRandoms.class.getSimpleName(), "Initing core Randoms for", server)); + Core.verbose(String.format("[%s] %s %s", getClass().getSimpleName(), "Initing core Randoms for", server)); method.invoke(instance, server); Core.verbose("Successfully parsed public random!"); } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException | ClassNotFoundException | MalformedURLException e) { From e8af65335b2022a7e8cc05636d0c28519c540c0b Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Wed, 12 Sep 2018 00:59:46 +0100 Subject: [PATCH 16/16] Code style fixes --- src/main/java/org/parabot/core/ui/ServerSelector.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/parabot/core/ui/ServerSelector.java b/src/main/java/org/parabot/core/ui/ServerSelector.java index 97884d6..8140122 100755 --- a/src/main/java/org/parabot/core/ui/ServerSelector.java +++ b/src/main/java/org/parabot/core/ui/ServerSelector.java @@ -83,7 +83,7 @@ public class ServerSelector extends JPanel { return true; } } - System.err.println("No server config with -uuid "+Core.getQuickLaunchByUuid()+" was found to quick launch."); + System.err.println("No server config with -uuid " + Core.getQuickLaunchByUuid() + " was found to quick launch."); } if (initServer != null) { @@ -94,7 +94,7 @@ public class ServerSelector extends JPanel { return true; } } - System.err.println("No server config with -server "+serverName+" was found to quick launch."); + System.err.println("No server config with -server " + serverName + " was found to quick launch."); } return false; }