package net.md_5.bungee.api.config; import java.net.InetSocketAddress; import java.util.Collection; import net.md_5.bungee.api.Callback; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ServerPing; import net.md_5.bungee.api.connection.ProxiedPlayer; /** * Class used to represent a server to connect to. */ public interface ServerInfo { /** * Get the name of this server. * * @return the configured name for this server address */ String getName(); /** * Gets the connectable host + port pair for this server. Implementations * expect this to be used as the unique identifier per each instance of this * class. * * @return the IP and port pair for this server */ InetSocketAddress getAddress(); /** * Get the set of all players on this server. * * @return an unmodifiable collection of all players on this server */ Collection<ProxiedPlayer> getPlayers(); /** * Returns the MOTD which should be used when this server is a forced host. * * @return the motd */ String getMotd(); /** * Whether the player can access this server. It will only return false when * the player has no permission and this server is restricted. * * @param sender the player to check access for * @return whether access is granted to this server */ boolean canAccess(CommandSender sender); /** * Send data by any available means to this server. This data may be queued * and there is no guarantee of its timely arrival. * * @param channel the channel to send this data via * @param data the data to send */ void sendData(String channel, byte[] data); /** * Send data by any available means to this server. * * @param channel the channel to send this data via * @param data the data to send * @param queue hold the message for later sending if it cannot be sent * immediately. * @return <code>true</code> if the message was sent immediately, * <code>false</code> otherwise if queue is true, it has been queued, if it * is false it has been discarded. */ boolean sendData(String channel, byte[] data, boolean queue); /** * Asynchronously gets the current player count on this server. * * @param callback the callback to call when the count has been retrieved. */ void ping(Callback<ServerPing> callback); }