diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java index 2b83db37..cb943b59 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java @@ -382,6 +382,8 @@ public final class SubCommand extends Command implements TabExecutor { case "subserver": getServer.run(); break; + case "u": + case "user": case "player": getPlayer.run(); break; diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java index 633fc05c..c58c3c0a 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java @@ -328,6 +328,8 @@ public final class SubCommand extends Command { case "subserver": getServer.run(); break; + case "u": + case "user": case "player": getPlayer.run(); break; diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java index 05e8c952..e943cedf 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java @@ -634,6 +634,8 @@ public final class SubCommand implements CommandExecutor { case "subserver": getServer.run(); break; + case "u": + case "user": case "player": getPlayer.run(); break; diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java b/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java index bad04478..105cdc80 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/SubCommand.java @@ -317,6 +317,8 @@ public class SubCommand { case "subserver": getServer.run(); break; + case "u": + case "user": case "player": getPlayer.run(); break; diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java index 64762df5..31c452fc 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java @@ -688,8 +688,7 @@ public final class ExProxy extends BungeeCommon implements Listener { @EventHandler(priority = Byte.MIN_VALUE) public void remove(SubRemoveServerEvent e) { - if (servers.keySet().contains(e.getServer().toLowerCase())) - servers.remove(e.getServer().toLowerCase()); + if (servers.remove(e.getServer().toLowerCase()) != null) Logger.get("SubServers").info("Removed Server: " + e.getServer()); } } diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java index b42ff053..029b4285 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java @@ -5,7 +5,6 @@ import net.ME1312.Galaxi.Library.Container.Pair; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Util; import net.ME1312.Galaxi.Library.Version.Version; -import net.ME1312.SubData.Client.Library.DataSize; import net.ME1312.SubData.Client.SubDataClient; import net.ME1312.SubData.Client.SubDataProtocol; import net.ME1312.SubServers.Client.Common.Network.API.RemotePlayer; @@ -13,6 +12,7 @@ import net.ME1312.SubServers.Client.Common.Network.API.Server; import net.ME1312.SubServers.Client.Common.Network.Packet.*; import net.ME1312.SubServers.Sync.Event.SubNetworkConnectEvent; import net.ME1312.SubServers.Sync.Event.SubNetworkDisconnectEvent; +import net.ME1312.SubServers.Sync.Event.SubRemoveServerEvent; import net.ME1312.SubServers.Sync.ExProxy; import net.ME1312.SubServers.Sync.Network.Packet.*; import net.ME1312.SubServers.Sync.Server.CachedPlayer; @@ -192,18 +192,28 @@ public class SubProtocol extends SubDataProtocol { subdata.sendPacket(new PacketExSyncPlayer(null, localPlayers.toArray(new CachedPlayer[0]))); plugin.api.getServers(servers -> { + HashMap localServers = new HashMap(plugin.servers); for (Server server : servers.values()) { + localServers.remove(server.getName().toLowerCase()); plugin.merge(server); } + for (ServerImpl server : localServers.values()) { + plugin.remove(new SubRemoveServerEvent(null, null, server.getName())); + } plugin.api.getRemotePlayers(players -> { - for (RemotePlayer player : players.values()) { - plugin.rPlayerLinkP.put(player.getUniqueId(), player.getProxyName().toLowerCase()); - plugin.rPlayers.put(player.getUniqueId(), (CachedPlayer) player); + synchronized (plugin.rPlayers) { + plugin.rPlayerLinkS.clear(); + plugin.rPlayerLinkP.clear(); + plugin.rPlayers.clear(); + for (RemotePlayer player : players.values()) { + plugin.rPlayerLinkP.put(player.getUniqueId(), player.getProxyName().toLowerCase()); + plugin.rPlayers.put(player.getUniqueId(), (CachedPlayer) player); - ServerInfo server = plugin.getServerInfo(player.getServerName()); - if (server instanceof ServerImpl) - plugin.rPlayerLinkS.put(player.getUniqueId(), (ServerImpl) server); + ServerInfo server = plugin.getServerInfo(player.getServerName()); + if (server instanceof ServerImpl) + plugin.rPlayerLinkS.put(player.getUniqueId(), (ServerImpl) server); + } } }); }); diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java index 44c997a0..4c5d24bb 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubCommand.java @@ -322,6 +322,8 @@ public final class SubCommand extends Command implements TabExecutor { case "subserver": getServer.run(); break; + case "u": + case "user": case "player": getPlayer.run(); break; diff --git a/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/Network/SubProtocol.java b/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/Network/SubProtocol.java index 5429ea9c..1f544f3b 100644 --- a/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/Network/SubProtocol.java +++ b/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/Network/SubProtocol.java @@ -12,6 +12,7 @@ import net.ME1312.SubServers.Client.Common.Network.API.Server; import net.ME1312.SubServers.Client.Common.Network.Packet.*; import net.ME1312.SubServers.Velocity.Event.SubNetworkConnectEvent; import net.ME1312.SubServers.Velocity.Event.SubNetworkDisconnectEvent; +import net.ME1312.SubServers.Velocity.Event.SubRemoveServerEvent; import net.ME1312.SubServers.Velocity.ExProxy; import net.ME1312.SubServers.Velocity.Network.Packet.*; import net.ME1312.SubServers.Velocity.Server.CachedPlayer; @@ -20,6 +21,7 @@ import net.ME1312.SubServers.Velocity.SubAPI; import com.velocitypowered.api.proxy.config.ProxyConfig; import com.velocitypowered.api.proxy.server.RegisteredServer; +import com.velocitypowered.api.proxy.server.ServerInfo; import java.io.File; import java.io.IOException; @@ -188,18 +190,28 @@ public class SubProtocol extends SubDataProtocol { subdata.sendPacket(new PacketExSyncPlayer(null, localPlayers.toArray(new CachedPlayer[0]))); plugin.api.getServers(servers -> { + ArrayList localServers = new ArrayList(plugin.servers.values()); for (Server server : servers.values()) { + ExProxy.getInstance().getServer(server.getName()).map(RegisteredServer::getServerInfo).map(plugin::getData).ifPresent(localServers::remove); plugin.merge(server); } + for (ServerData server : localServers) { + plugin.remove(new SubRemoveServerEvent(null, null, server.getName())); + } plugin.api.getRemotePlayers(players -> { - for (RemotePlayer player : players.values()) { - plugin.rPlayerLinkP.put(player.getUniqueId(), player.getProxyName().toLowerCase()); - plugin.rPlayers.put(player.getUniqueId(), (CachedPlayer) player); + synchronized (plugin.rPlayers) { + plugin.rPlayerLinkS.clear(); + plugin.rPlayerLinkP.clear(); + plugin.rPlayers.clear(); + for (RemotePlayer player : players.values()) { + plugin.rPlayerLinkP.put(player.getUniqueId(), player.getProxyName().toLowerCase()); + plugin.rPlayers.put(player.getUniqueId(), (CachedPlayer) player); - ExProxy.getInstance().getServer(player.getServerName()).map(RegisteredServer::getServerInfo).map(plugin::getData).ifPresent(server -> - plugin.rPlayerLinkS.put(player.getUniqueId(), server) - ); + ExProxy.getInstance().getServer(player.getServerName()).map(RegisteredServer::getServerInfo).map(plugin::getData).ifPresent(server -> + plugin.rPlayerLinkS.put(player.getUniqueId(), server) + ); + } } }); }); diff --git a/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/SubCommand.java b/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/SubCommand.java index d4ec9860..a35dce13 100644 --- a/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/SubCommand.java +++ b/SubServers.Sync/velocity/src/net/ME1312/SubServers/Velocity/SubCommand.java @@ -327,6 +327,8 @@ public final class SubCommand implements SimpleCommand { case "subserver": getServer.run(); break; + case "u": + case "user": case "player": getPlayer.run(); break;