2016-03-02 19:28:01 +00:00
package me.totalfreedom.totalfreedommod.command ;
2011-10-19 00:37:00 +00:00
2020-08-04 06:31:26 +00:00
import de.myzelyam.api.vanish.VanishAPI ;
2018-07-31 07:01:29 +00:00
import java.util.ArrayList ;
import java.util.List ;
2020-04-23 11:18:03 +00:00
import me.totalfreedom.totalfreedommod.admin.Admin ;
2018-02-09 08:21:44 +00:00
import me.totalfreedom.totalfreedommod.config.ConfigEntry ;
2017-10-13 18:35:11 +00:00
import me.totalfreedom.totalfreedommod.rank.Displayable ;
2018-01-04 17:27:58 +00:00
import me.totalfreedom.totalfreedommod.rank.Rank ;
import me.totalfreedom.totalfreedommod.util.FUtil ;
2020-06-30 07:25:38 +00:00
import net.md_5.bungee.api.ChatColor ;
2020-07-01 03:38:29 +00:00
import org.apache.commons.lang.StringUtils ;
2011-10-19 00:37:00 +00:00
import org.bukkit.command.Command ;
2017-10-13 18:35:11 +00:00
import org.bukkit.command.CommandSender ;
2018-02-09 08:21:44 +00:00
import org.bukkit.entity.Player ;
2016-05-12 19:40:39 +00:00
@CommandPermissions ( level = Rank . IMPOSTOR , source = SourceType . BOTH )
2018-08-13 03:21:59 +00:00
@CommandParameters ( description = " Lists the real names of all online players. " , usage = " /<command> [-a | -i | -f | -v] " , aliases = " who,lsit " )
2015-10-19 17:43:46 +00:00
public class Command_list extends FreedomCommand
2011-10-19 00:37:00 +00:00
{
2020-08-04 06:31:26 +00:00
2018-07-31 06:41:56 +00:00
public boolean run ( final CommandSender sender , final Player playerSender , final Command cmd , final String commandLabel , final String [ ] args , final boolean senderIsConsole )
{
2018-01-01 03:43:10 +00:00
if ( args . length > 1 )
{
2013-12-01 12:00:02 +00:00
return false ;
}
2018-01-01 03:43:10 +00:00
if ( FUtil . isFromHostConsole ( sender . getName ( ) ) )
{
2018-02-09 08:21:44 +00:00
List < String > names = new ArrayList < > ( ) ;
2018-01-01 03:43:10 +00:00
for ( Player player : server . getOnlinePlayers ( ) )
{
2013-12-01 12:00:02 +00:00
names . add ( player . getName ( ) ) ;
2012-12-02 01:33:36 +00:00
}
2018-02-09 08:21:44 +00:00
msg ( " There are " + names . size ( ) + " / " + server . getMaxPlayers ( ) + " players online: \ n " + StringUtils . join ( names , " , " ) , ChatColor . WHITE ) ;
2012-12-01 23:07:27 +00:00
return true ;
}
2018-02-09 08:21:44 +00:00
ListFilter listFilter ;
2018-01-01 03:43:10 +00:00
if ( args . length = = 1 )
{
String s = args [ 0 ] ;
switch ( s )
{
case " -a " :
{
2016-05-12 19:40:39 +00:00
listFilter = ListFilter . ADMINS ;
break ;
2017-10-13 18:35:11 +00:00
}
2018-01-01 03:43:10 +00:00
case " -v " :
{
2018-02-09 08:21:44 +00:00
checkRank ( Rank . SUPER_ADMIN ) ;
2017-10-13 18:35:11 +00:00
listFilter = ListFilter . VANISHED_ADMINS ;
break ;
}
2020-04-23 11:18:03 +00:00
case " -t " :
{
2020-04-26 02:13:54 +00:00
checkRank ( Rank . TELNET_ADMIN ) ;
2020-04-23 11:18:03 +00:00
listFilter = ListFilter . TELNET_SESSIONS ;
break ;
}
2018-01-01 03:43:10 +00:00
case " -i " :
{
2016-05-12 19:40:39 +00:00
listFilter = ListFilter . IMPOSTORS ;
break ;
2017-10-13 18:35:11 +00:00
}
2018-01-01 03:43:10 +00:00
case " -f " :
{
2016-05-12 19:40:39 +00:00
listFilter = ListFilter . FAMOUS_PLAYERS ;
break ;
2017-10-13 18:35:11 +00:00
}
2018-01-01 03:43:10 +00:00
default :
{
2016-05-12 19:40:39 +00:00
return false ;
2017-10-13 18:35:11 +00:00
}
2014-06-22 16:07:02 +00:00
}
}
2018-01-01 03:43:10 +00:00
else
{
2016-05-12 19:40:39 +00:00
listFilter = ListFilter . PLAYERS ;
2014-06-22 16:07:02 +00:00
}
2018-01-01 03:43:10 +00:00
StringBuilder onlineStats = new StringBuilder ( ) ;
StringBuilder onlineUsers = new StringBuilder ( ) ;
2020-04-23 11:18:03 +00:00
2018-02-09 08:21:44 +00:00
List < String > n = new ArrayList < > ( ) ;
2020-04-23 11:18:03 +00:00
if ( listFilter = = ListFilter . TELNET_SESSIONS & & plugin . al . isAdmin ( sender ) & & plugin . al . getAdmin ( sender ) . getRank ( ) . isAtLeast ( Rank . TELNET_ADMIN ) )
2018-01-01 03:43:10 +00:00
{
2020-04-23 11:18:03 +00:00
List < Admin > connectedAdmins = plugin . btb . getConnectedAdmins ( ) ;
onlineStats . append ( ChatColor . BLUE ) . append ( " There are " ) . append ( ChatColor . RED ) . append ( connectedAdmins . size ( ) )
. append ( ChatColor . BLUE )
. append ( " admins connected to telnet. " ) ;
for ( Admin admin : connectedAdmins )
2018-01-01 03:43:10 +00:00
{
2020-04-23 11:18:03 +00:00
n . add ( plugin . rm . getDisplay ( admin ) . getColoredTag ( ) + admin . getName ( ) ) ;
2016-05-12 19:40:39 +00:00
}
2020-04-23 11:18:03 +00:00
}
else
{
2020-08-04 06:31:26 +00:00
onlineStats . append ( ChatColor . BLUE ) . append ( " There are " ) . append ( ChatColor . RED ) . append ( server . getOnlinePlayers ( ) . size ( ) - VanishAPI . getInvisiblePlayers ( ) . size ( ) )
2020-04-23 11:18:03 +00:00
. append ( ChatColor . BLUE )
. append ( " out of a maximum " )
. append ( ChatColor . RED )
. append ( server . getMaxPlayers ( ) )
. append ( ChatColor . BLUE )
. append ( " players online. " ) ;
for ( Player p : server . getOnlinePlayers ( ) )
2018-01-01 03:43:10 +00:00
{
2020-04-23 11:18:03 +00:00
if ( listFilter = = ListFilter . ADMINS & & ! plugin . al . isAdmin ( p ) )
{
continue ;
}
2020-08-04 06:31:26 +00:00
if ( listFilter = = ListFilter . ADMINS & & plugin . al . isVanished ( p ) )
2020-04-23 11:18:03 +00:00
{
continue ;
}
2020-08-04 06:31:26 +00:00
if ( listFilter = = ListFilter . VANISHED_ADMINS & & ! plugin . al . isVanished ( p ) )
2020-04-23 11:18:03 +00:00
{
continue ;
}
if ( listFilter = = ListFilter . IMPOSTORS & & ! plugin . al . isAdminImpostor ( p ) )
{
continue ;
}
if ( listFilter = = ListFilter . FAMOUS_PLAYERS & & ! ConfigEntry . FAMOUS_PLAYERS . getList ( ) . contains ( p . getName ( ) . toLowerCase ( ) ) )
{
continue ;
}
2020-08-04 06:31:26 +00:00
if ( listFilter = = ListFilter . PLAYERS & & plugin . al . isVanished ( p ) )
2020-04-23 11:18:03 +00:00
{
continue ;
}
2018-04-19 14:29:19 +00:00
2020-04-23 11:18:03 +00:00
final Displayable display = plugin . rm . getDisplay ( p ) ;
if ( ! senderIsConsole & & plugin . al . isAdmin ( playerSender ) & & plugin . al . getAdmin ( playerSender ) . getOldTags ( ) )
{
n . add ( getOldPrefix ( display ) + p . getName ( ) ) ;
}
else
{
n . add ( display . getColoredTag ( ) + p . getName ( ) ) ;
}
2018-04-19 14:29:19 +00:00
}
2011-10-19 00:37:00 +00:00
}
2018-02-09 08:21:44 +00:00
String playerType = listFilter . toString ( ) . toLowerCase ( ) . replace ( '_' , ' ' ) ;
2018-01-01 03:43:10 +00:00
onlineUsers . append ( " Connected " )
2018-02-09 08:21:44 +00:00
. append ( playerType )
. append ( " : " )
. append ( StringUtils . join ( n , ChatColor . WHITE + " , " ) ) ;
2018-01-01 03:43:10 +00:00
if ( senderIsConsole )
2020-04-26 02:13:54 +00:00
2018-01-01 03:43:10 +00:00
{
2012-09-18 01:33:01 +00:00
sender . sendMessage ( ChatColor . stripColor ( onlineStats . toString ( ) ) ) ;
sender . sendMessage ( ChatColor . stripColor ( onlineUsers . toString ( ) ) ) ;
}
2018-01-01 03:43:10 +00:00
else
2020-04-26 02:13:54 +00:00
2018-01-01 03:43:10 +00:00
{
2012-09-18 01:33:01 +00:00
sender . sendMessage ( onlineStats . toString ( ) ) ;
sender . sendMessage ( onlineUsers . toString ( ) ) ;
}
2018-01-01 03:43:10 +00:00
n . clear ( ) ;
2011-10-19 00:37:00 +00:00
return true ;
}
2018-04-19 14:29:19 +00:00
public String getOldPrefix ( Displayable display )
{
ChatColor color = display . getColor ( ) ;
if ( color . equals ( ChatColor . AQUA ) )
{
color = ChatColor . GOLD ;
}
else if ( color . equals ( ChatColor . GOLD ) )
{
color = ChatColor . LIGHT_PURPLE ;
}
String prefix = " [ " + display . getAbbr ( ) + " ] " ;
return color + prefix ;
}
2018-07-31 06:41:56 +00:00
2017-10-13 18:35:11 +00:00
private enum ListFilter
{
2018-07-31 06:41:56 +00:00
PLAYERS ,
ADMINS ,
VANISHED_ADMINS ,
2020-04-23 11:18:03 +00:00
TELNET_SESSIONS ,
2018-07-31 06:41:56 +00:00
FAMOUS_PLAYERS ,
2018-02-09 08:21:44 +00:00
IMPOSTORS
2017-10-13 18:35:11 +00:00
}
2020-04-26 02:13:54 +00:00
}