/** * Copyright © 2013 tuxed * This work is free. You can redistribute it and/or modify it under the * terms of the Do What The Fuck You Want To Public License, Version 2, * as published by Sam Hocevar. See http://www.wtfpl.net/ for more details. */ package com.imaginarycode.minecraft.redisbungee; import com.google.common.collect.Multimap; import lombok.NonNull; import net.md_5.bungee.api.config.ServerInfo; import java.net.InetAddress; import java.util.List; import java.util.Set; /** * This class exposes some internal RedisBungee functions. You obtain an instance of this object by invoking {@link RedisBungee#getApi()}. * * @author tuxed * @since 0.2.3 */ public class RedisBungeeAPI { private final RedisBungee plugin; RedisBungeeAPI(RedisBungee plugin) { this.plugin = plugin; } /** * Get a combined count of all players on this network. * * @return a count of all players found */ public final int getPlayerCount() { return plugin.getCount(); } /** * Get the last time a player was on. If the player is currently online, this will return 0. If the player has not been recorded, * this will return -1. Otherwise it will return a value in milliseconds. * * @param player a player name * @return the last time a player was on, if online returns a 0 */ public final long getLastOnline(@NonNull String player) { return plugin.getLastOnline(player); } /** * Get the server where the specified player is playing. This function also deals with the case of local players * as well, and will return local information on them. * * @param player a player name * @return a {@link net.md_5.bungee.api.config.ServerInfo} for the server the player is on. */ public final ServerInfo getServerFor(@NonNull String player) { return plugin.getServerFor(player); } /** * Get a combined list of players on this network. *

* Note that this function returns an immutable {@link java.util.Set}. * * @return a Set with all players found */ public final Set getPlayersOnline() { return plugin.getPlayers(); } /** * Get a full list of players on all servers. * @return a immutable Multimap with all players found on this server * @since 0.2.5 */ public final Multimap getServerToPlayers() { return plugin.serversToPlayers(); } /** * Get a list of players on the server with the given name. * @param server a server name * @return a Set with all players found on this server */ public final Set getPlayersOnServer(@NonNull String server) { return plugin.getPlayersOnServer(server); } /** * Convenience method: Checks if the specified player is online. * * @param player a player name * @return if the player is online */ public final boolean isPlayerOnline(@NonNull String player) { return getLastOnline(player) == 0; } /** * Get the {@link java.net.InetAddress} associated with this player. * * @param player the player to fetch the IP for * @return an {@link java.net.InetAddress} if the player is online, null otherwise * @since 0.2.4 */ public final InetAddress getPlayerIp(@NonNull String player) { return plugin.getIpAddress(player); } /** * Sends a proxy command to all proxies. * @param command the command to send and execute * @see #sendProxyCommand(String, String) * @since 0.2.5 */ public final void sendProxyCommand(@NonNull String command) { plugin.sendProxyCommand("allservers", command); } /** * Sends a proxy command to the proxy with the given ID. "allservers" means all proxies. * @param proxyId a proxy ID * @param command the command to send and execute * @see #getServerId() * @see #getAllServers() * @since 0.2.5 */ public final void sendProxyCommand(@NonNull String proxyId, @NonNull String command) { plugin.sendProxyCommand(proxyId, command); } /** * Get the current BungeeCord server ID for this server. * @return the current server ID * @since 0.2.5 * @see #getAllServers() */ public final String getServerId() { return RedisBungee.getConfiguration().getString("server-id"); } /** * Get all the linked proxies in this network. * @return the list of all proxies * @since 0.2.5 * @see #getServerId() */ public final List getAllServers() { return RedisBungee.getServerIds(); } /** * Register (a) PubSub channel(s), so that you may capture {@link com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent} for it. * * @param channels the channels to register * @since 0.2.6 */ public final void registerPubSubChannels(String... channels) { RedisBungee.getPubSubListener().addChannel(channels); } /** * Unregister (a) PubSub channel(s). * * @param channels the channels to unregister * @since 0.2.6 */ public final void unregisterPubSubChannels(String... channels) { RedisBungee.getPubSubListener().removeChannel(channels); } }