diff --git a/src/main/java/de/redstonecloud/bridge/platform/nukkit/NukkitListener.java b/src/main/java/de/redstonecloud/bridge/platform/nukkit/NukkitListener.java index 010c80d..fc53c7e 100644 --- a/src/main/java/de/redstonecloud/bridge/platform/nukkit/NukkitListener.java +++ b/src/main/java/de/redstonecloud/bridge/platform/nukkit/NukkitListener.java @@ -12,7 +12,7 @@ public class NukkitListener implements Listener { public void onLogin(PlayerLoginEvent ev) { Player player = ev.getPlayer(); - CloudInterface.getInstance().playerLogin(player.getName(), player.getUniqueId().toString(), player.getAddress()); + CloudInterface.getInstance().playerLogin(player.getName(), player.getUniqueId().toString(), player.getRawSocketAddress().toString()); } @EventHandler diff --git a/src/main/java/de/redstonecloud/bridge/platform/pnx/PNXListener.java b/src/main/java/de/redstonecloud/bridge/platform/pnx/PNXListener.java index 54deecf..3a32142 100644 --- a/src/main/java/de/redstonecloud/bridge/platform/pnx/PNXListener.java +++ b/src/main/java/de/redstonecloud/bridge/platform/pnx/PNXListener.java @@ -12,7 +12,7 @@ public class PNXListener implements Listener { public void onLogin(PlayerLoginEvent ev) { Player player = ev.getPlayer(); - CloudInterface.getInstance().playerLogin(player.getName(), player.getUniqueId().toString(), player.getAddress()); + CloudInterface.getInstance().playerLogin(player.getName(), player.getUniqueId().toString(), player.getRawSocketAddress().toString()); } @EventHandler diff --git a/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEHandler.java b/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEHandler.java index 55d2682..5ee57e2 100644 --- a/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEHandler.java +++ b/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEHandler.java @@ -1,5 +1,6 @@ package de.redstonecloud.bridge.platform.waterdogpe; +import com.google.gson.JsonObject; import de.redstonecloud.api.redis.broker.packet.defaults.template.BestTemplateResultPacket; import de.redstonecloud.api.redis.broker.packet.defaults.template.GetBestTemplatePacket; import de.redstonecloud.bridge.cloudinterface.CloudInterface; @@ -29,12 +30,12 @@ public WDPEHandler( @Override public ServerInfo resolveForcedHost(@Nullable String domain, @NonNull ProxiedPlayer player) { - return fetchServer(); + return fetchServer(player); } @Override public ServerInfo getFallbackServer(ProxiedPlayer player, ServerInfo oldServer, ReconnectReason reason, String kickMessage) { - return fetchServer(); + return fetchServer(player); } @Override @@ -43,16 +44,33 @@ public ServerInfo getFallbackServer( @NonNull ServerInfo oldServer, @NonNull String kickMessage ) { - return fetchServer(); + return fetchServer(player); } @Override public ServerInfo determineServer(ProxiedPlayer player) { - return fetchServer(); + return fetchServer(player); } - public static ServerInfo fetchServer() { - if(!CloudInterface.getBridgeConfig().has("hub_template")) return null; + public static ServerInfo fetchServer(ProxiedPlayer player) { + JsonObject cfg = CloudInterface.getBridgeConfig(); + ServerInfo fallback = fetchFallback(); + if(!cfg.has("hub_template")) return fallback; + boolean fallbackOnJoin = !cfg.has("fallback_on_join") || cfg.get("fallback_on_join").getAsBoolean(); + + if(!cfg.has("hub_template")) + return fallback; + + ServerInfo hub = fetchHub(); + if(hub != null) return hub; + + if(player.getDownstreamConnection() != null && fallbackOnJoin) + return fallback; + + return null; + } + + public static ServerInfo fetchHub() { CompletableFuture name = new CompletableFuture<>(); new GetBestTemplatePacket(CloudInterface.getBridgeConfig().get("hub_template").getAsString()) @@ -61,9 +79,17 @@ public static ServerInfo fetchServer() { try { BridgeServer srv = CloudInterface.getExecutor().determineServer(name.completeOnTimeout("", 3, TimeUnit.SECONDS).get().toUpperCase()); + if(srv == null) return null; + return ProxyServer.getInstance().getServerInfo(srv.getName()); } catch (Exception e) { return null; } } + + public static ServerInfo fetchFallback() { + JsonObject cfg = CloudInterface.getBridgeConfig(); + if(!cfg.has("fallback_name")) return null; + return ProxyServer.getInstance().getServerInfo(cfg.get("fallback_name").getAsString()); + } } diff --git a/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEListener.java b/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEListener.java index 6ec0ebd..9a6bfb8 100644 --- a/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEListener.java +++ b/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEListener.java @@ -9,7 +9,7 @@ public class WDPEListener { public static void onLogin(PlayerLoginEvent ev) { ProxiedPlayer player = ev.getPlayer(); - if(!ev.isCancelled()) CloudInterface.getInstance().playerLogin(player.getName(), player.getUniqueId().toString(), player.getAddress().getHostName()); + if(!ev.isCancelled()) CloudInterface.getInstance().playerLogin(player.getName(), player.getUniqueId().toString(), player.getAddress().toString()); if(ev.isCancelled()) CloudInterface.getInstance().playerDisconnect(player.getUniqueId().toString()); } diff --git a/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/commands/HubCommand.java b/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/commands/HubCommand.java index 63a9040..d93c29d 100644 --- a/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/commands/HubCommand.java +++ b/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/commands/HubCommand.java @@ -19,7 +19,7 @@ public HubCommand() { @Override public boolean onExecute(CommandSender sender, String alias, String[] args) { if(!(sender instanceof ProxiedPlayer)) return false; - ServerInfo hub = WDPEHandler.fetchServer(); + ServerInfo hub = WDPEHandler.fetchServer((ProxiedPlayer) sender); if(hub == null) { sender.sendMessage(CloudInterface.getBridgeConfig().has("hubcommand_no_hub_available") ? CloudInterface.getBridgeConfig().get("hubcommand_no_hub_available").getAsString() : "No hub available"); return true;