diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java index 54d11d16..8e1b78c7 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java @@ -80,7 +80,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.16.1a"); + public static final Version version = Version.fromString("2.16.2a"); public final Proxy mProxy; public boolean canSudo = false; @@ -802,8 +802,9 @@ public final class SubProxy extends BungeeCord implements Listener { @EventHandler(priority = Byte.MIN_VALUE) public void ping_passthrough(ProxyPingEvent e) { + boolean dynamic; ServerInfo override; - if (SmartFallback.getForcedHost(e.getConnection()) == null && (override = SmartFallback.getDNS(e.getConnection())) != null) { + if ((dynamic = SmartFallback.getForcedHost(e.getConnection()) == null) && getReconnectHandler() instanceof SmartFallback && (override = SmartFallback.getDNS(e.getConnection())) != null) { if (!(override instanceof SubServer) || ((SubServer) override).isRunning()) { if (!e.getConnection().getListener().isPingPassthrough()) { e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(override.getMotd()), null)); @@ -818,14 +819,15 @@ public final class SubProxy extends BungeeCord implements Listener { while (lock.value) Util.isException(() -> Thread.sleep(4)); } } + } else if (dynamic) { + e.getResponse().getPlayers().setOnline(rPlayers.size()); } } @EventHandler(priority = Byte.MAX_VALUE) public void ping(ProxyPingEvent e) { - boolean forced; ServerInfo override; - if ((forced = (override = SmartFallback.getForcedHost(e.getConnection())) != null) || (override = SmartFallback.getDNS(e.getConnection())) != null) { + if ((override = SmartFallback.getForcedHost(e.getConnection())) != null || (override = SmartFallback.getDNS(e.getConnection())) != null) { if (override instanceof SubServer && !((SubServer) override).isRunning()) { e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(api.getLang("SubServers", "Bungee.Ping.Offline")), null)); } @@ -843,6 +845,14 @@ public final class SubProxy extends BungeeCord implements Listener { } } + @EventHandler(priority = Byte.MIN_VALUE) + public void login(LoginEvent e) { + if (rPlayers.containsKey(e.getConnection().getUniqueId())) { + e.setCancelled(true); + e.setCancelReason(new TextComponent(getTranslation("already_connected_proxy"))); + } + } + @EventHandler(priority = Byte.MAX_VALUE) public void validate(ServerConnectEvent e) { Map servers = new TreeMap(api.getServers()); @@ -885,7 +895,7 @@ public final class SubProxy extends BungeeCord implements Listener { @SuppressWarnings("deprecation") @EventHandler(priority = Byte.MAX_VALUE) - public void setPlayer(ServerConnectedEvent e) { + public void connected(ServerConnectedEvent e) { RemotePlayer player = new RemotePlayer(e.getPlayer().getName(), e.getPlayer().getUniqueId(), mProxy, (e.getServer().getInfo() instanceof Server)?(Server) e.getServer().getInfo():null, e.getPlayer().getAddress()); rPlayers.put(player.getUniqueId(), player); rPlayerLinkP.put(player.getUniqueId(), player.getProxy()); @@ -894,6 +904,16 @@ public final class SubProxy extends BungeeCord implements Listener { ((SubDataClient) proxy.getSubData()[0]).sendPacket(new PacketExSyncPlayer(mProxy.getName(), true, player)); } + + if (fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId())) new Timer("SubServers.Bungee::Fallback_Limbo_Timer(" + e.getPlayer().getUniqueId() + ')').schedule(new TimerTask() { + @Override + public void run() { + if (e.getPlayer().getServer() != null && !((UserConnection) e.getPlayer()).isDimensionChange() && e.getPlayer().getServer().getInfo().getAddress().equals(e.getServer().getInfo().getAddress())) { + fallbackLimbo.remove(e.getPlayer().getUniqueId()); + e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Smart-Fallback.Result").replace("$str$", (e.getServer().getInfo() instanceof Server)?((Server) e.getServer().getInfo()).getDisplayName():e.getServer().getInfo().getName())); + } + } + }, 1000); } @SuppressWarnings("deprecation") @@ -923,19 +943,7 @@ public final class SubProxy extends BungeeCord implements Listener { } } } - @SuppressWarnings("deprecation") - @EventHandler(priority = Byte.MAX_VALUE) - public void fallbackFound(ServerConnectedEvent e) { - if (fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId())) new Timer("SubServers.Bungee::Fallback_Limbo_Timer(" + e.getPlayer().getUniqueId() + ')').schedule(new TimerTask() { - @Override - public void run() { - if (e.getPlayer().getServer() != null && !((UserConnection) e.getPlayer()).isDimensionChange() && e.getPlayer().getServer().getInfo().getAddress().equals(e.getServer().getInfo().getAddress())) { - fallbackLimbo.remove(e.getPlayer().getUniqueId()); - e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Smart-Fallback.Result").replace("$str$", (e.getServer().getInfo() instanceof Server)?((Server) e.getServer().getInfo()).getDisplayName():e.getServer().getInfo().getName())); - } - } - }, 1000); - } + @EventHandler(priority = Byte.MIN_VALUE) public void resetPlayer(PlayerDisconnectEvent e) { fallbackLimbo.remove(e.getPlayer().getUniqueId()); diff --git a/SubServers.Client/Bukkit/src/plugin.yml b/SubServers.Client/Bukkit/src/plugin.yml index 2866cc48..7a014dca 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.16.1a" +version: "2.16.2a" authors: ["ME1312"] softdepend: [TitleManager, PlaceholderAPI] website: "https://github.com/ME1312/SubServers-2" 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 a5a5896b..2d1b7ea6 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.16.1a", 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.2a", 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/src/net/ME1312/SubServers/Host/ExHost.java b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java index 066f740d..556b81c4 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.16.1a", authors = "ME1312", website = "https://github.com/ME1312/SubServers-2", description = "Host subservers on separate machines") +@App(name = "SubServers.Host", version = "2.16.2a", 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/src/net/ME1312/SubServers/Sync/ExProxy.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java index 5fd2c62f..dc91ff2a 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java @@ -66,7 +66,7 @@ public final class ExProxy extends BungeeCord implements Listener { public YAMLConfig config; public final SubAPI api = new SubAPI(this); public SubProtocol subprotocol; - public static final Version version = Version.fromString("2.16.1a"); + public static final Version version = Version.fromString("2.16.2a"); public final boolean isPatched; public final boolean isGalaxi; @@ -327,8 +327,9 @@ public final class ExProxy extends BungeeCord implements Listener { @EventHandler(priority = Byte.MIN_VALUE) public void ping_passthrough(ProxyPingEvent e) { + boolean dynamic; ServerInfo override; - if (SmartFallback.getForcedHost(e.getConnection()) == null && (override = SmartFallback.getDNS(e.getConnection())) != null) { + if ((dynamic = SmartFallback.getForcedHost(e.getConnection()) == null) && getReconnectHandler() instanceof SmartFallback && (override = SmartFallback.getDNS(e.getConnection())) != null) { if (!(override instanceof SubServerImpl) || ((SubServerImpl) override).isRunning()) { if (!e.getConnection().getListener().isPingPassthrough()) { e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(override.getMotd()), null)); @@ -343,14 +344,15 @@ public final class ExProxy extends BungeeCord implements Listener { while (lock.value) Util.isException(() -> Thread.sleep(4)); } } + } else if (dynamic) { + e.getResponse().getPlayers().setOnline(rPlayers.size()); } } @EventHandler(priority = Byte.MAX_VALUE) public void ping(ProxyPingEvent e) { - boolean forced; ServerInfo override; - if ((forced = (override = SmartFallback.getForcedHost(e.getConnection())) != null) || (override = SmartFallback.getDNS(e.getConnection())) != null) { + if ((override = SmartFallback.getForcedHost(e.getConnection())) != null || (override = SmartFallback.getDNS(e.getConnection())) != null) { if (override instanceof SubServerImpl && !((SubServerImpl) override).isRunning()) { e.setResponse(new ServerPing(e.getResponse().getVersion(), e.getResponse().getPlayers(), new TextComponent(api.getLang("SubServers", "Bungee.Ping.Offline")), null)); } @@ -367,6 +369,14 @@ public final class ExProxy extends BungeeCord implements Listener { } } + @EventHandler(priority = Byte.MIN_VALUE) + public void login(LoginEvent e) { + if (rPlayers.containsKey(e.getConnection().getUniqueId())) { + e.setCancelled(true); + e.setCancelReason(new TextComponent(getTranslation("already_connected_proxy"))); + } + } + @EventHandler(priority = Byte.MAX_VALUE) public void validate(ServerConnectEvent e) { Map servers = new TreeMap(this.servers); @@ -409,7 +419,7 @@ public final class ExProxy extends BungeeCord implements Listener { @SuppressWarnings("deprecation") @EventHandler(priority = Byte.MAX_VALUE) - public void setPlayer(ServerConnectedEvent e) { + public void connected(ServerConnectedEvent e) { ObjectMap raw = RemotePlayer.translate(e.getPlayer()); raw.set("server", e.getServer().getInfo().getName()); RemotePlayer player = new RemotePlayer(raw); @@ -419,6 +429,17 @@ public final class ExProxy extends BungeeCord implements Listener { if (api.getSubDataNetwork()[0] != null) { ((SubDataClient) api.getSubDataNetwork()[0]).sendPacket(new PacketExSyncPlayer(true, player)); } + + + if (fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId())) new Timer("SubServers.Sync::Fallback_Limbo_Timer(" + e.getPlayer().getUniqueId() + ')').schedule(new TimerTask() { + @Override + public void run() { + if (e.getPlayer().getServer() != null && !((UserConnection) e.getPlayer()).isDimensionChange() && e.getPlayer().getServer().getInfo().getAddress().equals(e.getServer().getInfo().getAddress())) { + fallbackLimbo.remove(e.getPlayer().getUniqueId()); + e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Smart-Fallback.Result").replace("$str$", (e.getServer().getInfo() instanceof ServerImpl)?((ServerImpl) e.getServer().getInfo()).getDisplayName():e.getServer().getInfo().getName())); + } + } + }, 1000); } @SuppressWarnings("deprecation") @@ -448,19 +469,7 @@ public final class ExProxy extends BungeeCord implements Listener { } } } - @SuppressWarnings("deprecation") - @EventHandler(priority = Byte.MAX_VALUE) - public void fallbackFound(ServerConnectedEvent e) { - if (fallbackLimbo.keySet().contains(e.getPlayer().getUniqueId())) new Timer("SubServers.Sync::Fallback_Limbo_Timer(" + e.getPlayer().getUniqueId() + ')').schedule(new TimerTask() { - @Override - public void run() { - if (e.getPlayer().getServer() != null && !((UserConnection) e.getPlayer()).isDimensionChange() && e.getPlayer().getServer().getInfo().getAddress().equals(e.getServer().getInfo().getAddress())) { - fallbackLimbo.remove(e.getPlayer().getUniqueId()); - e.getPlayer().sendMessage(api.getLang("SubServers", "Bungee.Feature.Smart-Fallback.Result").replace("$str$", (e.getServer().getInfo() instanceof ServerImpl)?((ServerImpl) e.getServer().getInfo()).getDisplayName():e.getServer().getInfo().getName())); - } - } - }, 1000); - } + @EventHandler(priority = Byte.MIN_VALUE) public void resetPlayer(PlayerDisconnectEvent e) { fallbackLimbo.remove(e.getPlayer().getUniqueId());