2016-03-02 19:28:01 +00:00
package me.totalfreedom.totalfreedommod.command ;
2019-01-29 04:57:41 +00:00
import java.util.ArrayList ;
2019-01-28 01:49:07 +00:00
import java.util.Arrays ;
2019-01-29 04:57:41 +00:00
import java.util.Collections ;
2018-07-31 07:01:29 +00:00
import java.util.Date ;
2019-01-28 01:49:07 +00:00
import java.util.List ;
2016-03-02 19:28:01 +00:00
import me.totalfreedom.totalfreedommod.admin.Admin ;
2019-04-21 00:16:00 +00:00
import me.totalfreedom.totalfreedommod.config.ConfigEntry ;
2018-05-13 19:49:13 +00:00
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilder ;
2016-03-02 19:28:01 +00:00
import me.totalfreedom.totalfreedommod.player.FPlayer ;
2019-04-21 00:16:00 +00:00
import me.totalfreedom.totalfreedommod.playerverification.VPlayer ;
2016-03-06 15:56:15 +00:00
import me.totalfreedom.totalfreedommod.rank.Rank ;
2016-03-02 19:28:01 +00:00
import me.totalfreedom.totalfreedommod.util.FUtil ;
import net.pravian.aero.util.Ips ;
2019-07-28 06:04:16 +00:00
import org.apache.commons.lang.StringUtils ;
2016-03-02 19:28:01 +00:00
import org.bukkit.ChatColor ;
import org.bukkit.command.Command ;
import org.bukkit.command.CommandSender ;
import org.bukkit.entity.Player ;
2016-03-06 15:56:15 +00:00
@CommandPermissions ( level = Rank . OP , source = SourceType . BOTH )
2020-03-30 23:43:57 +00:00
@CommandParameters ( description = " List, add, remove, or set the rank of admins, clean or reload the admin list, or view the info of admins. " , usage = " /<command> <list | clean | reload | | setrank <username> <rank> | <add | remove | info> <username>> " )
2016-03-02 19:28:01 +00:00
public class Command_saconfig extends FreedomCommand
{
@Override
public boolean run ( CommandSender sender , Player playerSender , Command cmd , String commandLabel , String [ ] args , boolean senderIsConsole )
{
if ( args . length < 1 )
{
return false ;
}
switch ( args [ 0 ] )
{
case " list " :
{
2018-01-02 02:46:35 +00:00
msg ( " Admins: " + StringUtils . join ( plugin . al . getAdminNames ( ) , " , " ) , ChatColor . GOLD ) ;
2016-03-02 19:28:01 +00:00
return true ;
}
case " clean " :
{
2019-08-19 01:06:47 +00:00
checkRank ( Rank . SENIOR_ADMIN ) ;
2016-03-02 19:28:01 +00:00
FUtil . adminAction ( sender . getName ( ) , " Cleaning admin list " , true ) ;
plugin . al . deactivateOldEntries ( true ) ;
2018-01-02 02:46:35 +00:00
msg ( " Admins: " + StringUtils . join ( plugin . al . getAdminNames ( ) , " , " ) , ChatColor . GOLD ) ;
2016-03-02 19:28:01 +00:00
return true ;
}
2016-03-07 20:32:05 +00:00
case " reload " :
{
2019-08-19 01:06:47 +00:00
checkRank ( Rank . SENIOR_ADMIN ) ;
2016-03-07 20:32:05 +00:00
FUtil . adminAction ( sender . getName ( ) , " Reloading the admin list " , true ) ;
plugin . al . load ( ) ;
msg ( " Admin list reloaded! " ) ;
return true ;
}
case " setrank " :
{
2019-08-19 01:06:47 +00:00
checkRank ( Rank . SENIOR_ADMIN ) ;
2016-05-12 19:40:39 +00:00
2016-03-07 20:32:05 +00:00
if ( args . length < 3 )
{
return false ;
}
Rank rank = Rank . findRank ( args [ 2 ] ) ;
2016-05-12 19:40:39 +00:00
if ( rank = = null )
{
msg ( " Unknown rank: " + rank ) ;
return true ;
}
2016-08-26 10:43:36 +00:00
if ( rank . isConsole ( ) )
{
msg ( " You cannot set players to a console rank " ) ;
return true ;
}
2016-03-07 20:32:05 +00:00
if ( ! rank . isAtLeast ( Rank . SUPER_ADMIN ) )
{
2019-01-29 04:57:41 +00:00
msg ( " Rank must be Super Admin or higher. " , ChatColor . RED ) ;
2016-03-07 20:32:05 +00:00
return true ;
}
Admin admin = plugin . al . getEntryByName ( args [ 1 ] ) ;
if ( admin = = null )
{
msg ( " Unknown admin: " + args [ 1 ] ) ;
return true ;
}
2016-05-12 19:40:39 +00:00
FUtil . adminAction ( sender . getName ( ) , " Setting " + admin . getName ( ) + " 's rank to " + rank . getName ( ) , true ) ;
2016-03-07 20:32:05 +00:00
admin . setRank ( rank ) ;
2016-05-12 19:40:39 +00:00
plugin . al . save ( ) ;
2016-03-07 20:32:05 +00:00
2018-03-03 04:29:08 +00:00
Player player = getPlayer ( admin . getName ( ) ) ;
if ( player ! = null )
{
plugin . rm . updateDisplay ( player ) ;
}
2019-04-21 00:16:00 +00:00
if ( plugin . dc . enabled & & ConfigEntry . DISCORD_ROLE_SYNC . getBoolean ( ) )
{
plugin . dc . syncRoles ( admin ) ;
}
2016-03-07 20:32:05 +00:00
msg ( " Set " + admin . getName ( ) + " 's rank to " + rank . getName ( ) ) ;
return true ;
}
2016-03-02 19:28:01 +00:00
case " info " :
{
if ( args . length < 2 )
{
return false ;
}
2016-03-06 15:56:15 +00:00
checkRank ( Rank . SUPER_ADMIN ) ;
2016-03-02 19:28:01 +00:00
Admin admin = plugin . al . getEntryByName ( args [ 1 ] ) ;
if ( admin = = null )
{
final Player player = getPlayer ( args [ 1 ] ) ;
if ( player ! = null )
{
admin = plugin . al . getAdmin ( player ) ;
}
}
if ( admin = = null )
{
2018-01-02 02:46:35 +00:00
msg ( " Admin not found: " + args [ 1 ] ) ;
2016-03-02 19:28:01 +00:00
}
else
{
msg ( admin . toString ( ) ) ;
}
return true ;
}
case " add " :
{
if ( args . length < 2 )
{
return false ;
}
2016-03-06 15:56:15 +00:00
checkRank ( Rank . TELNET_ADMIN ) ;
2016-03-02 19:28:01 +00:00
2016-05-12 19:40:39 +00:00
// Player already an admin?
2016-03-02 19:28:01 +00:00
final Player player = getPlayer ( args [ 1 ] ) ;
2018-07-25 05:54:00 +00:00
if ( player = = null )
{
msg ( FreedomCommand . PLAYER_NOT_FOUND ) ;
return true ;
}
2016-05-12 19:40:39 +00:00
if ( player ! = null & & plugin . al . isAdmin ( player ) )
2016-03-02 19:28:01 +00:00
{
msg ( " That player is already admin. " ) ;
return true ;
}
2016-05-12 19:40:39 +00:00
// Find the old admin entry
2016-03-07 20:32:05 +00:00
String name = player ! = null ? player . getName ( ) : args [ 1 ] ;
Admin admin = null ;
for ( Admin loopAdmin : plugin . al . getAllAdmins ( ) . values ( ) )
2016-03-02 19:28:01 +00:00
{
2016-03-07 20:32:05 +00:00
if ( loopAdmin . getName ( ) . equalsIgnoreCase ( name ) )
{
admin = loopAdmin ;
break ;
}
}
2016-03-02 19:28:01 +00:00
2019-02-09 17:30:02 +00:00
if ( plugin . pv . isPlayerImpostor ( player ) )
{
msg ( " This player was labeled as a Player impostor and is not an admin, therefore they cannot be added to the admin list. " , ChatColor . RED ) ;
return true ;
}
2016-05-12 19:40:39 +00:00
if ( admin = = null ) // New admin
2016-03-07 20:32:05 +00:00
{
2018-05-13 19:49:13 +00:00
if ( plugin . mbl . isMasterBuilderImpostor ( player ) )
{
2019-02-09 17:30:02 +00:00
msg ( " This player was labeled as a Master Builder impostor and is not an admin, therefore they cannot be added to the admin list. " , ChatColor . RED ) ;
2018-05-13 19:49:13 +00:00
return true ;
}
2016-05-12 19:40:39 +00:00
if ( player = = null )
2016-03-07 20:32:05 +00:00
{
2016-05-12 19:40:39 +00:00
msg ( FreedomCommand . PLAYER_NOT_FOUND ) ;
return true ;
2016-03-07 20:32:05 +00:00
}
2016-05-12 19:40:39 +00:00
FUtil . adminAction ( sender . getName ( ) , " Adding " + player . getName ( ) + " to the admin list " , true ) ;
plugin . al . addAdmin ( new Admin ( player ) ) ;
2018-03-03 04:29:08 +00:00
if ( player ! = null )
{
plugin . rm . updateDisplay ( player ) ;
}
2019-04-21 00:16:00 +00:00
// Attempt to find discord account
if ( plugin . mbl . isMasterBuilder ( player ) )
{
MasterBuilder masterBuilder = plugin . mbl . getMasterBuilder ( player ) ;
admin . setDiscordID ( plugin . mbl . getMasterBuilder ( player ) . getDiscordID ( ) ) ;
}
2019-07-20 19:56:28 +00:00
else if ( plugin . pv . getVerificationPlayer ( player . getName ( ) ) ! = null )
2019-04-21 00:16:00 +00:00
{
2019-07-20 19:56:28 +00:00
VPlayer vPlayer = plugin . pv . getVerificationPlayer ( player . getName ( ) ) ;
2019-04-21 00:16:00 +00:00
if ( vPlayer . getDiscordId ( ) ! = null )
{
admin . setDiscordID ( vPlayer . getDiscordId ( ) ) ;
}
}
2016-03-02 19:28:01 +00:00
}
2016-05-12 19:40:39 +00:00
else // Existing admin
2016-03-02 19:28:01 +00:00
{
2018-08-01 07:08:06 +00:00
FUtil . adminAction ( sender . getName ( ) , " Re-adding " + admin . getName ( ) + " to the admin list " , true ) ;
2016-03-02 19:28:01 +00:00
2016-05-12 19:40:39 +00:00
if ( player ! = null )
2016-03-02 19:28:01 +00:00
{
2016-05-12 19:40:39 +00:00
admin . setName ( player . getName ( ) ) ;
admin . addIp ( Ips . getIp ( player ) ) ;
2016-03-02 19:28:01 +00:00
}
2018-05-13 19:49:13 +00:00
// Handle master builders
if ( ! plugin . mbl . isMasterBuilder ( player ) )
{
MasterBuilder masterBuilder = null ;
for ( MasterBuilder loopMasterBuilder : plugin . mbl . getAllMasterBuilders ( ) . values ( ) )
{
if ( loopMasterBuilder . getName ( ) . equalsIgnoreCase ( name ) )
{
masterBuilder = loopMasterBuilder ;
break ;
}
}
if ( masterBuilder ! = null )
{
if ( player ! = null )
{
masterBuilder . setName ( player . getName ( ) ) ;
masterBuilder . addIp ( Ips . getIp ( player ) ) ;
}
masterBuilder . setLastLogin ( new Date ( ) ) ;
plugin . mbl . save ( ) ;
plugin . mbl . updateTables ( ) ;
}
}
2016-05-12 19:40:39 +00:00
admin . setActive ( true ) ;
admin . setLastLogin ( new Date ( ) ) ;
2016-03-02 19:28:01 +00:00
2019-04-21 00:16:00 +00:00
// Attempt to find discord account
if ( plugin . mbl . isMasterBuilder ( player ) )
{
MasterBuilder masterBuilder = plugin . mbl . getMasterBuilder ( player ) ;
admin . setDiscordID ( plugin . mbl . getMasterBuilder ( player ) . getDiscordID ( ) ) ;
}
else if ( plugin . pv . getVerificationPlayer ( admin . getName ( ) ) ! = null )
{
VPlayer vPlayer = plugin . pv . getVerificationPlayer ( admin . getName ( ) ) ;
if ( vPlayer . getDiscordId ( ) ! = null )
{
admin . setDiscordID ( vPlayer . getDiscordId ( ) ) ;
}
}
2019-08-04 02:50:31 +00:00
if ( plugin . al . isVerifiedAdmin ( player ) )
{
plugin . al . verifiedNoAdmins . remove ( player . getName ( ) ) ;
plugin . al . verifiedNoAdminIps . remove ( player . getName ( ) ) ;
}
2016-05-12 19:40:39 +00:00
plugin . al . save ( ) ;
plugin . al . updateTables ( ) ;
2018-03-03 04:29:08 +00:00
if ( player ! = null )
{
plugin . rm . updateDisplay ( player ) ;
}
2019-04-21 00:16:00 +00:00
if ( plugin . dc . enabled & & ConfigEntry . DISCORD_ROLE_SYNC . getBoolean ( ) )
{
plugin . dc . syncRoles ( admin ) ;
}
2016-03-02 19:28:01 +00:00
}
2016-03-06 15:56:15 +00:00
if ( player ! = null )
{
2016-03-02 19:28:01 +00:00
final FPlayer fPlayer = plugin . pl . getPlayer ( player ) ;
if ( fPlayer . getFreezeData ( ) . isFrozen ( ) )
{
fPlayer . getFreezeData ( ) . setFrozen ( false ) ;
msg ( player . getPlayer ( ) , " You have been unfrozen. " ) ;
}
2018-03-03 04:29:08 +00:00
if ( ! player . isOp ( ) )
{
player . setOp ( true ) ;
player . sendMessage ( YOU_ARE_OP ) ;
}
2018-03-24 15:41:45 +00:00
plugin . pv . removeEntry ( player . getName ( ) ) ; // admins can't have player verification entries
2016-03-02 19:28:01 +00:00
}
return true ;
}
case " remove " :
{
if ( args . length < 2 )
{
return false ;
}
2016-03-06 15:56:15 +00:00
checkRank ( Rank . TELNET_ADMIN ) ;
2016-03-02 19:28:01 +00:00
Player player = getPlayer ( args [ 1 ] ) ;
2016-05-12 19:40:39 +00:00
Admin admin = player ! = null ? plugin . al . getAdmin ( player ) : plugin . al . getEntryByName ( args [ 1 ] ) ;
2016-03-02 19:28:01 +00:00
if ( admin = = null )
{
2018-01-02 02:46:35 +00:00
msg ( " Admin not found: " + args [ 1 ] ) ;
2016-03-02 19:28:01 +00:00
return true ;
}
FUtil . adminAction ( sender . getName ( ) , " Removing " + admin . getName ( ) + " from the admin list " , true ) ;
2016-03-07 20:32:05 +00:00
admin . setActive ( false ) ;
2016-05-12 19:40:39 +00:00
plugin . al . save ( ) ;
2016-03-07 20:32:05 +00:00
plugin . al . updateTables ( ) ;
2018-03-03 04:29:08 +00:00
if ( player ! = null )
{
plugin . rm . updateDisplay ( player ) ;
}
2019-04-21 00:16:00 +00:00
if ( plugin . dc . enabled & & ConfigEntry . DISCORD_ROLE_SYNC . getBoolean ( ) )
{
plugin . dc . syncRoles ( admin ) ;
}
2016-03-02 19:28:01 +00:00
return true ;
}
default :
{
return false ;
}
}
}
2019-01-28 01:49:07 +00:00
2019-01-29 04:57:41 +00:00
@Override
public List < String > getTabCompleteOptions ( CommandSender sender , Command command , String alias , String [ ] args )
2019-01-28 01:49:07 +00:00
{
2019-01-29 04:57:41 +00:00
if ( sender instanceof Player )
{
if ( args . length = = 1 )
{
List < String > arguments = new ArrayList < > ( ) ;
arguments . add ( " list " ) ;
if ( plugin . al . isAdmin ( sender ) )
{
arguments . add ( " info " ) ;
}
return arguments ;
}
else if ( args . length = = 2 & & args [ 0 ] . equals ( " info " ) & & plugin . al . isAdmin ( sender ) )
{
return plugin . al . getActiveAdminNames ( ) ;
}
return Collections . emptyList ( ) ;
}
else
{
if ( args . length = = 1 )
{
return Arrays . asList ( " add " , " remove " , " clean " , " reload " , " setrank " , " info " , " list " ) ;
}
else if ( args . length = = 2 )
{
if ( args [ 0 ] . equals ( " add " ) | | args [ 0 ] . equals ( " remove " ) | | args [ 0 ] . equals ( " setrank " ) | | args [ 0 ] . equals ( " info " ) )
{
return FUtil . getPlayerList ( ) ;
}
}
else if ( args . length = = 3 & & args [ 0 ] . equals ( " setrank " ) )
{
return Arrays . asList ( " super_admin " , " telnet_admin " , " senior_admin " ) ;
}
}
return Collections . emptyList ( ) ;
}
2016-03-02 19:28:01 +00:00
}