From ff788b4309c1d6c30a2c245bfd9666e461602d75 Mon Sep 17 00:00:00 2001 From: Jak Date: Sun, 29 Jul 2018 04:12:13 +0100 Subject: [PATCH 1/5] 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 2/5] 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 d98bab9c0c116efb281a74a3d1f3a0c796b089e5 Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Wed, 5 Sep 2018 13:15:10 +0100 Subject: [PATCH 3/5] 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 4/5] 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 295a096fa4f4decf12f13795e26b0e0d24a2427b Mon Sep 17 00:00:00 2001 From: Shadowrs Date: Mon, 10 Sep 2018 12:20:43 +0100 Subject: [PATCH 5/5] [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) {