mirror of
https://github.com/PaperMC/Waterfall.git
synced 2024-09-28 22:47:49 +02:00
25ecd402f3
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing BungeeCord Changes: 1a807731 #3567: Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.2 to 3.6.3 772ad995 #3566: Bump actions/setup-java from 3 to 4 2431c40a #3562: Bump io.netty:netty-bom from 4.1.100.Final to 4.1.101.Final 8144ae8d #3555: Bump com.mysql:mysql-connector-j from 8.1.0 to 8.2.0 0757c39a Attempt upgrade of resolver libraries
84 lines
4.5 KiB
Diff
84 lines
4.5 KiB
Diff
From 3a0cdd8be9488802c79ab27cc6f92ce0b661624a Mon Sep 17 00:00:00 2001
|
|
From: Techcable <Techcable@outlook.com>
|
|
Date: Thu, 28 Jan 2016 15:13:29 -0700
|
|
Subject: [PATCH] Allow removing servers or changing addresses on reload
|
|
|
|
Moves all players on the removed server to the default server.
|
|
Address changes also move the players to the default server.
|
|
Kicks players on failure to move.
|
|
|
|
Original Issue: https://github.com/WaterfallMC/Waterfall-Old/issues/17
|
|
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java b/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java
|
|
index 54a6cb38..ecd3b619 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/conf/Configuration.java
|
|
@@ -11,12 +11,15 @@ import java.util.UUID;
|
|
import java.util.logging.Level;
|
|
import javax.imageio.ImageIO;
|
|
import lombok.Getter;
|
|
+
|
|
+import net.md_5.bungee.BungeeCord;
|
|
import net.md_5.bungee.api.Favicon;
|
|
import net.md_5.bungee.api.ProxyConfig;
|
|
import net.md_5.bungee.api.ProxyServer;
|
|
import net.md_5.bungee.api.config.ConfigurationAdapter;
|
|
import net.md_5.bungee.api.config.ListenerInfo;
|
|
import net.md_5.bungee.api.config.ServerInfo;
|
|
+import net.md_5.bungee.api.connection.ProxiedPlayer;
|
|
import net.md_5.bungee.util.CaseInsensitiveMap;
|
|
import net.md_5.bungee.util.CaseInsensitiveSet;
|
|
|
|
@@ -116,20 +119,38 @@ public abstract class Configuration implements ProxyConfig
|
|
servers = new CaseInsensitiveMap<>( newServers );
|
|
} else
|
|
{
|
|
- for ( ServerInfo oldServer : servers.values() )
|
|
- {
|
|
- // Don't allow servers to be removed
|
|
- Preconditions.checkArgument( newServers.containsKey( oldServer.getName() ), "Server %s removed on reload!", oldServer.getName() );
|
|
- }
|
|
+ Map<String, ServerInfo> oldServers = this.servers;
|
|
|
|
- // Add new servers
|
|
- for ( Map.Entry<String, ServerInfo> newServer : newServers.entrySet() )
|
|
+ for ( ServerInfo oldServer : oldServers.values() )
|
|
{
|
|
- if ( !servers.containsValue( newServer.getValue() ) )
|
|
- {
|
|
- servers.put( newServer.getKey(), newServer.getValue() );
|
|
+ ServerInfo newServer = newServers.get(oldServer.getName());
|
|
+ if ((newServer == null || !oldServer.getAddress().equals(newServer.getAddress())) && !oldServer.getPlayers().isEmpty()) {
|
|
+ BungeeCord.getInstance().getLogger().info("Moving players off of server: " + oldServer.getName());
|
|
+ // The server is being removed, or having it's address changed
|
|
+ for (ProxiedPlayer player : oldServer.getPlayers()) {
|
|
+ ListenerInfo listener = player.getPendingConnection().getListener();
|
|
+ String destinationName = newServers.get(listener.getDefaultServer()) == null ? listener.getDefaultServer() : listener.getFallbackServer();
|
|
+ ServerInfo destination = newServers.get(destinationName);
|
|
+ if (destination == null) {
|
|
+ BungeeCord.getInstance().getLogger().severe("Couldn't find server " + listener.getDefaultServer() + " or " + listener.getFallbackServer() + " to put player " + player.getName() + " on");
|
|
+ player.disconnect(BungeeCord.getInstance().getTranslation("fallback_kick", "Not found on reload"));
|
|
+ continue;
|
|
+ }
|
|
+ player.connect(destination, (success, cause) -> {
|
|
+ if (!success) {
|
|
+ BungeeCord.getInstance().getLogger().log(Level.WARNING, "Failed to connect " + player.getName() + " to " + destination.getName(), cause);
|
|
+ player.disconnect(BungeeCord.getInstance().getTranslation("fallback_kick", cause.getCause().getClass().getName()));
|
|
+ }
|
|
+ });
|
|
+ }
|
|
+ } else {
|
|
+ // This server isn't new or removed, we'll use bungees behavior of just ignoring
|
|
+ // any changes to info outside of the address, this is not ideal, but the alternative
|
|
+ // requires resetting multiple objects of which have no proper identity
|
|
+ newServers.put(oldServer.getName(), oldServer);
|
|
}
|
|
}
|
|
+ this.servers = new CaseInsensitiveMap<>(newServers);
|
|
}
|
|
|
|
for ( ListenerInfo listener : listeners )
|
|
--
|
|
2.43.0
|
|
|