From a8b98fbac4afff362390b86897b81cc0a3730d96 Mon Sep 17 00:00:00 2001 From: tunikakeks Date: Sun, 22 Mar 2026 00:15:09 +0100 Subject: [PATCH 1/2] impl: fallback server --- .../platform/waterdogpe/WDPEHandler.java | 32 +++++++++++++++---- .../waterdogpe/commands/HubCommand.java | 2 +- 2 files changed, 27 insertions(+), 7 deletions(-) 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..5f2d80c 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(); + if(!cfg.has("hub_template") && !cfg.has("fallback_name")) return null; + ServerInfo fallback = ProxyServer.getInstance().getServerInfo(cfg.get("fallback_name").getAsString()); + 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,6 +79,8 @@ 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; 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; From c941d27723d5c2acb8fe35c9b8d4e624a8e4b7b1 Mon Sep 17 00:00:00 2001 From: tunikakeks Date: Sun, 22 Mar 2026 00:22:31 +0100 Subject: [PATCH 2/2] fix fallback fetch --- .../bridge/platform/waterdogpe/WDPEHandler.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 5f2d80c..5ee57e2 100644 --- a/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEHandler.java +++ b/src/main/java/de/redstonecloud/bridge/platform/waterdogpe/WDPEHandler.java @@ -54,8 +54,8 @@ public ServerInfo determineServer(ProxiedPlayer player) { public static ServerInfo fetchServer(ProxiedPlayer player) { JsonObject cfg = CloudInterface.getBridgeConfig(); - if(!cfg.has("hub_template") && !cfg.has("fallback_name")) return null; - ServerInfo fallback = ProxyServer.getInstance().getServerInfo(cfg.get("fallback_name").getAsString()); + 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")) @@ -86,4 +86,10 @@ public static ServerInfo fetchHub() { 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()); + } }