2013-11-15 22:55:57 +00:00
/ * *
* Copyright © 2013 tuxed < write @imaginarycode.com >
* 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.base.Joiner ;
2013-12-14 05:31:57 +00:00
import com.google.common.collect.HashMultimap ;
2013-11-15 22:55:57 +00:00
import com.google.common.collect.Multimap ;
import net.md_5.bungee.api.ChatColor ;
import net.md_5.bungee.api.CommandSender ;
2013-12-14 14:28:51 +00:00
import net.md_5.bungee.api.chat.BaseComponent ;
import net.md_5.bungee.api.chat.ComponentBuilder ;
2013-11-15 22:55:57 +00:00
import net.md_5.bungee.api.config.ServerInfo ;
import net.md_5.bungee.api.plugin.Command ;
2013-12-13 21:32:55 +00:00
import java.net.InetAddress ;
import java.text.SimpleDateFormat ;
2013-12-14 05:31:57 +00:00
import java.util.TreeSet ;
2013-11-15 22:55:57 +00:00
import java.util.concurrent.TimeUnit ;
/ * *
* This class contains subclasses that are used for the commands RedisBungee overrides or includes : / glist , / find and / lastseen .
2013-12-04 21:54:51 +00:00
* < p / >
2013-11-15 22:55:57 +00:00
* All classes use the { @link RedisBungeeAPI } .
*
* @author tuxed
* @since 0 . 2 . 3
* /
public class RedisBungeeCommands {
2013-12-14 14:34:42 +00:00
private static final BaseComponent [ ] NO_PLAYER_SPECIFIED =
new ComponentBuilder ( " " ) . color ( ChatColor . RED ) . append ( " You must specify a player name. " ) . create ( ) ;
private static final BaseComponent [ ] PLAYER_NOT_FOUND =
new ComponentBuilder ( " " ) . color ( ChatColor . RED ) . append ( " No such player found. " ) . create ( ) ;
2013-11-15 22:55:57 +00:00
public static class GlistCommand extends Command {
protected GlistCommand ( ) {
2013-11-16 18:58:15 +00:00
super ( " glist " , " bungeecord.command.list " , " redisbungee " ) ;
2013-11-15 22:55:57 +00:00
}
@Override
public void execute ( CommandSender sender , String [ ] args ) {
int count = RedisBungee . getApi ( ) . getPlayerCount ( ) ;
2013-12-14 14:28:51 +00:00
BaseComponent [ ] playersOnline = new ComponentBuilder ( " " ) . color ( ChatColor . YELLOW ) . append ( String . valueOf ( count ) )
. append ( " player(s) are currently online. " ) . create ( ) ;
2013-11-15 22:55:57 +00:00
if ( args . length > 0 & & args [ 0 ] . equals ( " showall " ) ) {
if ( RedisBungee . getConfiguration ( ) . isCanonicalGlist ( ) ) {
2013-12-14 05:31:57 +00:00
Multimap < String , String > serverToPlayers = HashMultimap . create ( ) ;
2013-11-15 22:55:57 +00:00
for ( String p : RedisBungee . getApi ( ) . getPlayersOnline ( ) ) {
ServerInfo si = RedisBungee . getApi ( ) . getServerFor ( p ) ;
if ( si ! = null )
serverToPlayers . put ( si . getName ( ) , p ) ;
}
2013-12-14 05:31:57 +00:00
for ( String server : new TreeSet < > ( serverToPlayers . keySet ( ) ) )
2013-12-14 14:28:51 +00:00
sender . sendMessage ( new ComponentBuilder ( " " ) . color ( ChatColor . GREEN ) . append ( " [ " ) . append ( server )
. append ( " ] " ) . color ( ChatColor . YELLOW ) . append ( " ( " ) . append ( String . valueOf ( serverToPlayers . get ( server ) . size ( ) ) )
. append ( " ): " ) . color ( ChatColor . WHITE ) . append ( Joiner . on ( " , " ) . join ( serverToPlayers . get ( server ) ) ) . create ( ) ) ;
2013-11-15 22:55:57 +00:00
} else {
2013-12-14 14:28:51 +00:00
sender . sendMessage ( new ComponentBuilder ( " " ) . color ( ChatColor . YELLOW ) . append ( " Players: " )
. append ( Joiner . on ( " , " ) . join ( RedisBungee . getApi ( ) . getPlayersOnline ( ) ) ) . create ( ) ) ;
2013-11-15 22:55:57 +00:00
}
2013-12-14 14:28:51 +00:00
sender . sendMessage ( playersOnline ) ;
2013-11-15 22:55:57 +00:00
} else {
2013-12-14 14:28:51 +00:00
sender . sendMessage ( playersOnline ) ;
sender . sendMessage ( new ComponentBuilder ( " " ) . color ( ChatColor . YELLOW ) . append ( " To see all players online, use /glist showall. " ) . create ( ) ) ;
2013-11-15 22:55:57 +00:00
}
}
}
public static class FindCommand extends Command {
protected FindCommand ( ) {
super ( " find " , " bungeecord.command.find " ) ;
}
@Override
public void execute ( CommandSender sender , String [ ] args ) {
if ( args . length > 0 ) {
ServerInfo si = RedisBungee . getApi ( ) . getServerFor ( args [ 0 ] ) ;
if ( si ! = null ) {
2013-12-14 14:28:51 +00:00
sender . sendMessage ( new ComponentBuilder ( " " ) . color ( ChatColor . BLUE ) . append ( args [ 0 ] ) . append ( " is on " )
. append ( si . getName ( ) ) . append ( " . " ) . create ( ) ) ;
2013-11-15 22:55:57 +00:00
} else {
2013-12-14 14:34:42 +00:00
sender . sendMessage ( PLAYER_NOT_FOUND ) ;
2013-11-15 22:55:57 +00:00
}
} else {
2013-12-14 14:34:42 +00:00
sender . sendMessage ( NO_PLAYER_SPECIFIED ) ;
2013-11-15 22:55:57 +00:00
}
}
}
public static class LastSeenCommand extends Command {
protected LastSeenCommand ( ) {
super ( " lastseen " , " redisbungee.command.lastseen " ) ;
}
@Override
public void execute ( CommandSender sender , String [ ] args ) {
if ( args . length > 0 ) {
long secs = RedisBungee . getApi ( ) . getLastOnline ( args [ 0 ] ) ;
if ( secs = = 0 ) {
2013-12-14 14:28:51 +00:00
sender . sendMessage ( new ComponentBuilder ( " " ) . color ( ChatColor . GREEN ) . append ( args [ 0 ] ) . append ( " is currently online. " ) . create ( ) ) ;
2013-11-15 22:55:57 +00:00
} else if ( secs ! = - 1 ) {
2013-12-14 14:28:51 +00:00
sender . sendMessage ( new ComponentBuilder ( " " ) . color ( ChatColor . BLUE ) . append ( args [ 0 ] ) . append ( " was last online on " ) .
append ( new SimpleDateFormat ( ) . format ( TimeUnit . SECONDS . toMillis ( secs ) ) ) . append ( " . " ) . create ( ) ) ;
2013-11-15 22:55:57 +00:00
} else {
2013-12-14 14:28:51 +00:00
sender . sendMessage ( new ComponentBuilder ( " " ) . color ( ChatColor . RED ) . append ( args [ 0 ] ) . append ( " has never been online. " ) . create ( ) ) ;
2013-11-15 22:55:57 +00:00
}
} else {
2013-12-14 14:34:42 +00:00
sender . sendMessage ( NO_PLAYER_SPECIFIED ) ;
2013-11-15 22:55:57 +00:00
}
}
}
2013-12-13 21:32:55 +00:00
public static class IpCommand extends Command {
protected IpCommand ( ) {
super ( " ip " , " redisbungee.command.ip " , " playerip " ) ;
}
@Override
public void execute ( CommandSender sender , String [ ] args ) {
if ( args . length > 0 ) {
InetAddress ia = RedisBungee . getApi ( ) . getPlayerIp ( args [ 0 ] ) ;
if ( ia ! = null ) {
2013-12-14 14:28:51 +00:00
sender . sendMessage ( new ComponentBuilder ( " " ) . color ( ChatColor . GREEN ) . append ( args [ 0 ] ) . append ( " is connected from " ) . append ( ia . toString ( ) ) . append ( " . " ) . create ( ) ) ;
2013-12-13 21:32:55 +00:00
} else {
2013-12-14 14:34:42 +00:00
sender . sendMessage ( PLAYER_NOT_FOUND ) ;
2013-12-13 21:32:55 +00:00
}
} else {
2013-12-14 14:34:42 +00:00
sender . sendMessage ( NO_PLAYER_SPECIFIED ) ;
2013-12-13 21:32:55 +00:00
}
}
}
2013-11-15 22:55:57 +00:00
}