diff --git a/SubServers.Bungee/pom.xml b/SubServers.Bungee/pom.xml
index 91f4dae8..f9073198 100644
--- a/SubServers.Bungee/pom.xml
+++ b/SubServers.Bungee/pom.xml
@@ -30,14 +30,14 @@
net.ME1312.Galaxi
GalaxiUtil
- 20w15a
+ 20w27a
compile
true
net.ME1312.Galaxi
GalaxiEngine
- 20w15a
+ 20w27a
provided
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ConfigUpdater.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ConfigUpdater.java
index e27be951..8f448c59 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ConfigUpdater.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/ConfigUpdater.java
@@ -118,6 +118,16 @@ public class ConfigUpdater {
}
}
+ existing = updated.clone();
+ i++;
+ } if (was.compareTo(new Version("20w26a")) <= 0) {
+ if (existing.getMap("Settings", new YAMLSection()).contains("Smart-Fallback") && existing.getMap("Settings").isBoolean("Smart-Fallback")) {
+ YAMLSection smart_fallback = new YAMLSection();
+ smart_fallback.set("Enabled", existing.getMap("Settings").getBoolean("Smart-Fallback"));
+ smart_fallback.set("Fallback", existing.getMap("Settings").getBoolean("Smart-Fallback"));
+ updated.getMap("Settings").set("Smart-Fallback", smart_fallback);
+ }
+
existing = updated.clone();
i++;
}// if (was.compareTo(new Version("99w99a")) <= 0) {
@@ -132,9 +142,15 @@ public class ConfigUpdater {
if (i > 0) {
YAMLSection settings = new YAMLSection();
settings.set("Version", ((now.compareTo(was) <= 0)?was:now).toString());
- settings.set("Smart-Fallback", updated.getMap("Settings", new YAMLSection()).getBoolean("Smart-Fallback", true));
settings.set("Override-Bungee-Commands", updated.getMap("Settings", new YAMLSection()).getBoolean("Override-Bungee-Commands", true));
+ YAMLSection smart_fallback = new YAMLSection();
+ smart_fallback.set("Enabled", updated.getMap("Settings", new YAMLSection()).getMap("Smart-Fallback", new YAMLSection()).getBoolean("Enabled", true));
+ smart_fallback.set("Fallback", updated.getMap("Settings", new YAMLSection()).getMap("Smart-Fallback", new YAMLSection()).getBoolean("Fallback", true));
+ smart_fallback.set("Reconnect", updated.getMap("Settings", new YAMLSection()).getMap("Smart-Fallback", new YAMLSection()).getBoolean("Reconnect", false));
+ smart_fallback.set("DNS-Forward", updated.getMap("Settings", new YAMLSection()).getMap("Smart-Fallback", new YAMLSection()).getBoolean("DNS-Forward", false));
+ settings.set("Smart-Fallback", smart_fallback);
+
YAMLSection upnp = new YAMLSection();
upnp.set("Forward-Proxy", updated.getMap("Settings", new YAMLSection()).getMap("UPnP", new YAMLSection()).getBoolean("Forward-Proxy", true));
upnp.set("Forward-SubData", updated.getMap("Settings", new YAMLSection()).getMap("UPnP", new YAMLSection()).getBoolean("Forward-SubData", false));
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Fallback/SmartFallback.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Fallback/SmartFallback.java
index 065f32e7..8c1395d7 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Fallback/SmartFallback.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/Fallback/SmartFallback.java
@@ -1,9 +1,11 @@
package net.ME1312.SubServers.Bungee.Library.Fallback;
+import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.SubAPI;
+import net.ME1312.SubServers.Bungee.SubProxy;
import net.md_5.bungee.UserConnection;
import net.md_5.bungee.api.AbstractReconnectHandler;
import net.md_5.bungee.api.ProxyServer;
@@ -22,12 +24,22 @@ import java.util.concurrent.CopyOnWriteArrayList;
*/
public class SmartFallback implements ReconnectHandler {
private static List inspectors = new CopyOnWriteArrayList();
+ private static ReconnectHandler reconnect;
+
+ public SmartFallback(SubProxy proxy) {
+ if (reconnect == null && proxy.config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("Reconnect", false))
+ reconnect = Util.getDespiteException(() -> Util.reflect(ProxyServer.getInstance().getPluginManager().getPlugin("reconnect_yaml").getClass().getClassLoader().loadClass("net.md_5.bungee.module.reconnect.yaml.YamlReconnectHandler").getConstructor()), null);
+ }
@Override
public ServerInfo getServer(ProxiedPlayer player) {
- ServerInfo forced = getForcedHost(player.getPendingConnection());
- if (forced != null) {
- return forced;
+ ServerInfo override;
+ if ((override = getForcedHost(player.getPendingConnection())) != null) {
+ return override;
+ } else if ((override = getDNS(player.getPendingConnection())) != null) {
+ return override;
+ } else if ((override = getReconnectServer(player)) != null) {
+ return override;
} else {
Map fallbacks = getFallbackServers(player.getPendingConnection().getListener(), player);
if (fallbacks.isEmpty()) {
@@ -59,6 +71,45 @@ public class SmartFallback implements ReconnectHandler {
}
}
+ /**
+ * Grabs the Server that a connection's DNS matches
+ *
+ * @param connection Connection to check
+ * @return DNS Forward Server
+ */
+ public static ServerInfo getDNS(PendingConnection connection) {
+ if (connection.getVirtualHost() == null || !((SubProxy) ProxyServer.getInstance()).config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("DNS-Forward", false)) {
+ return null;
+ } else {
+ Map.Entry server = null;
+ String dns = connection.getVirtualHost().getHostString().toLowerCase();
+ for (Map.Entry s : ((SubProxy) ProxyServer.getInstance()).getServersCopy().entrySet()) {
+ if (dns.startsWith(s.getKey().toLowerCase() + '.'))
+ if (server == null || server.getKey().length() < s.getKey().length())
+ server = s;
+ }
+
+ return (server == null)?null:server.getValue();
+ }
+ }
+
+ /**
+ * Grabs the Server that a player was last connected to
+ *
+ * @param player Player
+ * @return Reconnect Server
+ */
+ public static ServerInfo getReconnectServer(ProxiedPlayer player) {
+ if (reconnect == null) {
+ return null;
+ } else try {
+ return Util.reflect(reconnect.getClass().getDeclaredMethod("getStoredServer", ProxiedPlayer.class), reconnect, player);
+ } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
/**
* Generates a smart sorted map of fallback servers using a generated confidence score
*
@@ -151,16 +202,16 @@ public class SmartFallback implements ReconnectHandler {
@Override
public void setServer(ProxiedPlayer player) {
- // Ignore server switching
+ if (reconnect != null) reconnect.setServer(player);
}
@Override
public void save() {
- // Nothing to save
+ if (reconnect != null) reconnect.save();
}
@Override
public void close() {
- // Nothing to close
+ if (reconnect != null) reconnect.close();
}
}
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java
index 3b5c1049..daf05c62 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java
@@ -74,7 +74,7 @@ public final class SubProxy extends BungeeCord implements Listener {
public SubProtocol subprotocol;
public SubDataServer subdata = null;
public SubServer sudo = null;
- public static final Version version = Version.fromString("2.16a");
+ public static final Version version = Version.fromString("2.16.1a");
public Proxy redis = null;
public boolean canSudo = false;
@@ -237,9 +237,8 @@ public final class SubProxy extends BungeeCord implements Listener {
}
}
- if (config.get().getMap("Settings").getBoolean("Smart-Fallback", true)) {
- setReconnectHandler(new SmartFallback());
- }
+ if (config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("Enabled", true))
+ setReconnectHandler(new SmartFallback(this));
subprotocol = SubProtocol.get();
subprotocol.registerCipher("DHE", DHE.get(128));
@@ -661,6 +660,9 @@ public final class SubProxy extends BungeeCord implements Listener {
getPluginManager().registerCommand(null, SubCommand.newInstance(this, "sub").get());
GalaxiCommand.group(SubCommand.class);
+ if (getReconnectHandler() != null && getReconnectHandler().getClass().equals(SmartFallback.class))
+ setReconnectHandler(new SmartFallback(this)); // Re-initialize Smart Fallback
+
new Metrics(this);
new Timer("SubServers.Bungee::Routine_Update_Check").schedule(new TimerTask() {
@SuppressWarnings("unchecked")
@@ -695,7 +697,7 @@ public final class SubProxy extends BungeeCord implements Listener {
public void stopListeners() {
try {
legServers.clear();
- legServers.putAll(getServers());
+ legServers.putAll(getServersCopy());
if (api.disableListeners.size() > 0) {
Logger.get("SubServers").info("Resetting SubAPI Plugins...");
for (Runnable listener : api.disableListeners) {
@@ -860,7 +862,7 @@ public final class SubProxy extends BungeeCord implements Listener {
if (servers.keySet().contains(e.getTarget().getName().toLowerCase()) && e.getTarget() != servers.get(e.getTarget().getName().toLowerCase())) {
e.setTarget(servers.get(e.getTarget().getName().toLowerCase()));
} else {
- servers = getServers();
+ servers = getServersCopy();
if (servers.keySet().contains(e.getTarget().getName()) && e.getTarget() != servers.get(e.getTarget().getName())) {
e.setTarget(servers.get(e.getTarget().getName()));
}
@@ -897,7 +899,7 @@ public final class SubProxy extends BungeeCord implements Listener {
@SuppressWarnings("deprecation")
@EventHandler(priority = Byte.MAX_VALUE)
public void fallback(ServerKickEvent e) {
- if (e.getPlayer() instanceof UserConnection && config.get().getMap("Settings").getBoolean("Smart-Fallback", true)) {
+ if (e.getPlayer() instanceof UserConnection && config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("Fallback", true)) {
Map fallbacks;
if (!fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId())) {
fallbacks = SmartFallback.getFallbackServers(e.getPlayer().getPendingConnection().getListener(), e.getPlayer());
diff --git a/SubServers.Client/Bukkit/pom.xml b/SubServers.Client/Bukkit/pom.xml
index d2e8913b..ad3db9f3 100644
--- a/SubServers.Client/Bukkit/pom.xml
+++ b/SubServers.Client/Bukkit/pom.xml
@@ -44,7 +44,7 @@
net.ME1312.Galaxi
GalaxiUtil
- 20w15a
+ 20w27a
compile
true
diff --git a/SubServers.Client/Bukkit/src/plugin.yml b/SubServers.Client/Bukkit/src/plugin.yml
index 053c4111..14256c92 100644
--- a/SubServers.Client/Bukkit/src/plugin.yml
+++ b/SubServers.Client/Bukkit/src/plugin.yml
@@ -1,6 +1,6 @@
name: SubServers-Client-Bukkit
main: net.ME1312.SubServers.Client.Bukkit.SubPlugin
-version: "2.16a"
+version: "2.16.1a"
authors: ["ME1312"]
softdepend: [TitleManager]
website: "https://github.com/ME1312/SubServers-2"
diff --git a/SubServers.Client/Sponge/pom.xml b/SubServers.Client/Sponge/pom.xml
index f2542339..d5262664 100644
--- a/SubServers.Client/Sponge/pom.xml
+++ b/SubServers.Client/Sponge/pom.xml
@@ -30,7 +30,7 @@
net.ME1312.Galaxi
GalaxiUtil
- 20w15a
+ 20w27a
compile
true
diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java
index d14b3ad8..a5a5896b 100644
--- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java
+++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java
@@ -46,7 +46,7 @@ import java.util.concurrent.TimeUnit;
/**
* SubServers Client Plugin Class
*/
-@Plugin(id = "subservers-client-sponge", name = "SubServers-Client-Sponge", authors = "ME1312", version = "2.16a", url = "https://github.com/ME1312/SubServers-2", description = "Take control of the server manager — from your servers")
+@Plugin(id = "subservers-client-sponge", name = "SubServers-Client-Sponge", authors = "ME1312", version = "2.16.1a", url = "https://github.com/ME1312/SubServers-2", description = "Take control of the server manager — from your servers")
public final class SubPlugin {
HashMap subdata = new HashMap();
NamedContainer>> lang = null;
diff --git a/SubServers.Host/pom.xml b/SubServers.Host/pom.xml
index f7f9e6ea..d9b8f0f5 100644
--- a/SubServers.Host/pom.xml
+++ b/SubServers.Host/pom.xml
@@ -20,7 +20,7 @@
net.ME1312.Galaxi
GalaxiEngine
- 20w15a
+ 20w27a
compile
true
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java
index 61f16185..066f740d 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java
@@ -42,7 +42,7 @@ import java.util.jar.Manifest;
/**
* SubServers.Host Main Class
*/
-@App(name = "SubServers.Host", version = "2.16a", authors = "ME1312", website = "https://github.com/ME1312/SubServers-2", description = "Host subservers on separate machines")
+@App(name = "SubServers.Host", version = "2.16.1a", authors = "ME1312", website = "https://github.com/ME1312/SubServers-2", description = "Host subservers on separate machines")
public final class ExHost {
HashMap subdata = new HashMap();
NamedContainer>> lang = null;
diff --git a/SubServers.Sync/pom.xml b/SubServers.Sync/pom.xml
index 4dc5573a..f4282e2c 100644
--- a/SubServers.Sync/pom.xml
+++ b/SubServers.Sync/pom.xml
@@ -30,14 +30,14 @@
net.ME1312.Galaxi
GalaxiUtil
- 20w15a
+ 20w27a
compile
true
net.ME1312.Galaxi
GalaxiEngine
- 20w15a
+ 20w27a
provided
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java
index 7c11c8a5..49fcf9c3 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java
@@ -59,7 +59,7 @@ public final class ExProxy extends BungeeCord implements Listener {
public boolean redis = false;
public final SubAPI api = new SubAPI(this);
public SubProtocol subprotocol;
- public static final Version version = Version.fromString("2.16a");
+ public static final Version version = Version.fromString("2.16.1a");
public final boolean isPatched;
public final boolean isGalaxi;
@@ -92,9 +92,8 @@ public final class ExProxy extends BungeeCord implements Listener {
ConfigUpdater.updateConfig(new UniversalFile(dir, "sync.yml"));
config = new YAMLConfig(new UniversalFile(dir, "sync.yml"));
- if (config.get().getMap("Settings").getBoolean("Smart-Fallback", true)) {
- setReconnectHandler(new SmartFallback());
- }
+ if (config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("Enabled", true))
+ setReconnectHandler(new SmartFallback(this));
subprotocol = SubProtocol.get();
subprotocol.registerCipher("DHE", DHE.get(128));
@@ -203,6 +202,9 @@ public final class ExProxy extends BungeeCord implements Listener {
getPluginManager().registerCommand(null, SubCommand.newInstance(this, "sub").get());
GalaxiCommand.group(SubCommand.class);
+ if (getReconnectHandler() != null && getReconnectHandler().getClass().equals(SmartFallback.class))
+ setReconnectHandler(new SmartFallback(this)); // Re-initialize Smart Fallback
+
new Metrics(this);
new Timer("SubServers.Sync::Routine_Update_Check").schedule(new TimerTask() {
@SuppressWarnings("unchecked")
@@ -394,7 +396,7 @@ public final class ExProxy extends BungeeCord implements Listener {
@SuppressWarnings("deprecation")
@EventHandler(priority = Byte.MAX_VALUE)
public void fallback(ServerKickEvent e) {
- if (e.getPlayer() instanceof UserConnection && config.get().getMap("Settings").getBoolean("Smart-Fallback", true)) {
+ if (e.getPlayer() instanceof UserConnection && config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("Fallback", true)) {
Map fallbacks;
if (!fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId())) {
fallbacks = SmartFallback.getFallbackServers(e.getPlayer().getPendingConnection().getListener(), e.getPlayer());
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/ConfigUpdater.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/ConfigUpdater.java
index a338abec..dbc46ad2 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/ConfigUpdater.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/ConfigUpdater.java
@@ -41,6 +41,16 @@ public class ConfigUpdater {
} else {
if (was.compareTo(new Version("19w17a")) <= 0) {
+ i++;
+ } if (was.compareTo(new Version("20w26a")) <= 0) {
+ if (existing.getMap("Settings", new YAMLSection()).contains("Smart-Fallback") && existing.getMap("Settings").isBoolean("Smart-Fallback")) {
+ YAMLSection smart_fallback = new YAMLSection();
+ smart_fallback.set("Enabled", existing.getMap("Settings").getBoolean("Smart-Fallback"));
+ smart_fallback.set("Fallback", existing.getMap("Settings").getBoolean("Smart-Fallback"));
+ updated.getMap("Settings").set("Smart-Fallback", smart_fallback);
+ }
+
+ existing = updated.clone();
i++;
}// if (was.compareTo(new Version("99w99a")) <= 0) {
// // do something
@@ -53,9 +63,15 @@ public class ConfigUpdater {
if (i > 0) {
YAMLSection settings = new YAMLSection();
settings.set("Version", ((now.compareTo(was) <= 0)?was:now).toString());
- settings.set("Smart-Fallback", updated.getMap("Settings", new YAMLSection()).getBoolean("Smart-Fallback", true));
settings.set("Override-Bungee-Commands", updated.getMap("Settings", new YAMLSection()).getBoolean("Override-Bungee-Commands", true));
+ YAMLSection smart_fallback = new YAMLSection();
+ smart_fallback.set("Enabled", updated.getMap("Settings", new YAMLSection()).getMap("Smart-Fallback", new YAMLSection()).getBoolean("Enabled", true));
+ smart_fallback.set("Fallback", updated.getMap("Settings", new YAMLSection()).getMap("Smart-Fallback", new YAMLSection()).getBoolean("Fallback", true));
+ smart_fallback.set("Reconnect", updated.getMap("Settings", new YAMLSection()).getMap("Smart-Fallback", new YAMLSection()).getBoolean("Reconnect", false));
+ smart_fallback.set("DNS-Forward", updated.getMap("Settings", new YAMLSection()).getMap("Smart-Fallback", new YAMLSection()).getBoolean("DNS-Forward", false));
+ settings.set("Smart-Fallback", smart_fallback);
+
YAMLSection upnp = new YAMLSection();
upnp.set("Forward-Proxy", updated.getMap("Settings", new YAMLSection()).getMap("UPnP", new YAMLSection()).getBoolean("Forward-Proxy", true));
settings.set("UPnP", upnp);
diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Fallback/SmartFallback.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Fallback/SmartFallback.java
index a5b4f975..2aeff5a4 100644
--- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Fallback/SmartFallback.java
+++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Library/Fallback/SmartFallback.java
@@ -1,6 +1,8 @@
package net.ME1312.SubServers.Sync.Library.Fallback;
+import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
+import net.ME1312.SubServers.Sync.ExProxy;
import net.ME1312.SubServers.Sync.Server.ServerImpl;
import net.ME1312.SubServers.Sync.Server.SubServerImpl;
import net.ME1312.SubServers.Sync.SubAPI;
@@ -22,12 +24,22 @@ import java.util.concurrent.CopyOnWriteArrayList;
*/
public class SmartFallback implements ReconnectHandler {
private static List inspectors = new CopyOnWriteArrayList();
+ private static ReconnectHandler reconnect;
+
+ public SmartFallback(ExProxy proxy) {
+ if (reconnect == null && proxy.config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("Reconnect", false))
+ reconnect = Util.getDespiteException(() -> Util.reflect(ProxyServer.getInstance().getPluginManager().getPlugin("reconnect_yaml").getClass().getClassLoader().loadClass("net.md_5.bungee.module.reconnect.yaml.YamlReconnectHandler").getConstructor()), null);
+ }
@Override
public ServerInfo getServer(ProxiedPlayer player) {
- ServerInfo forced = getForcedHost(player.getPendingConnection());
- if (forced != null) {
- return forced;
+ ServerInfo override;
+ if ((override = getForcedHost(player.getPendingConnection())) != null) {
+ return override;
+ } else if ((override = getDNS(player.getPendingConnection())) != null) {
+ return override;
+ } else if ((override = getReconnectServer(player)) != null) {
+ return override;
} else {
Map fallbacks = getFallbackServers(player.getPendingConnection().getListener(), player);
if (fallbacks.isEmpty()) {
@@ -59,6 +71,45 @@ public class SmartFallback implements ReconnectHandler {
}
}
+ /**
+ * Grabs the Server that a connection's DNS matches
+ *
+ * @param connection Connection to check
+ * @return DNS Forward Server
+ */
+ public static ServerInfo getDNS(PendingConnection connection) {
+ if (connection.getVirtualHost() == null || !((ExProxy) ProxyServer.getInstance()).config.get().getMap("Settings").getMap("Smart-Fallback", new ObjectMap<>()).getBoolean("DNS-Forward", false)) {
+ return null;
+ } else {
+ Map.Entry server = null;
+ String dns = connection.getVirtualHost().getHostString().toLowerCase();
+ for (Map.Entry s : ((ExProxy) ProxyServer.getInstance()).getServersCopy().entrySet()) {
+ if (dns.startsWith(s.getKey().toLowerCase() + '.'))
+ if (server == null || server.getKey().length() < s.getKey().length())
+ server = s;
+ }
+
+ return (server == null)?null:server.getValue();
+ }
+ }
+
+ /**
+ * Grabs the Server that a player was last connected to
+ *
+ * @param player Player
+ * @return Reconnect Server
+ */
+ public static ServerInfo getReconnectServer(ProxiedPlayer player) {
+ if (reconnect == null) {
+ return null;
+ } else try {
+ return Util.reflect(reconnect.getClass().getDeclaredMethod("getStoredServer", ProxiedPlayer.class), reconnect, player);
+ } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
/**
* Generates a smart sorted map of fallback servers using a generated confidence score
*
@@ -152,16 +203,16 @@ public class SmartFallback implements ReconnectHandler {
@Override
public void setServer(ProxiedPlayer player) {
- // Ignore server switching
+ if (reconnect != null) reconnect.setServer(player);
}
@Override
public void save() {
- // Nothing to save
+ if (reconnect != null) reconnect.save();
}
@Override
public void close() {
- // Nothing to close
+ if (reconnect != null) reconnect.close();
}
}