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 ;
2019-04-21 00:16:00 +00:00
import me.totalfreedom.totalfreedommod.config.ConfigEntry ;
2020-09-12 19:42:12 +00:00
import me.totalfreedom.totalfreedommod.discord.Discord ;
2016-03-02 19:28:01 +00:00
import me.totalfreedom.totalfreedommod.player.FPlayer ;
2016-03-06 15:56:15 +00:00
import me.totalfreedom.totalfreedommod.rank.Rank ;
2020-08-15 22:58:48 +00:00
import me.totalfreedom.totalfreedommod.staff.StaffMember ;
2016-03-02 19:28:01 +00:00
import me.totalfreedom.totalfreedommod.util.FUtil ;
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-08-15 16:35:48 +00:00
@CommandParameters ( description = " List, add, remove, or set the rank of staff, clean or reload the staff list, or view the info of staff. " , usage = " /<command> <list | clean | reload | | setrank <username> <rank> | <add | remove | info> <username>> " )
2020-08-15 22:42:46 +00:00
public class Command_slconfig extends FreedomCommand
2016-03-02 19:28:01 +00:00
{
@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 " :
{
2020-08-15 22:42:46 +00:00
msg ( " Staff: " + StringUtils . join ( plugin . sl . getAdminNames ( ) , " , " ) , ChatColor . GOLD ) ;
2016-03-02 19:28:01 +00:00
return true ;
}
case " clean " :
{
2020-07-20 02:10:51 +00:00
checkConsole ( ) ;
2020-09-28 02:51:15 +00:00
checkRank ( Rank . SENIOR_ADMIN ) ;
2016-03-02 19:28:01 +00:00
2020-08-15 22:42:46 +00:00
FUtil . staffAction ( sender . getName ( ) , " Cleaning staff list " , true ) ;
plugin . sl . deactivateOldEntries ( true ) ;
msg ( " Staff: " + StringUtils . join ( plugin . sl . getAdminNames ( ) , " , " ) , ChatColor . GOLD ) ;
2016-03-02 19:28:01 +00:00
return true ;
}
2016-03-07 20:32:05 +00:00
case " reload " :
{
2020-09-28 02:51:15 +00:00
checkRank ( Rank . SENIOR_ADMIN ) ;
2016-03-07 20:32:05 +00:00
2020-08-15 22:42:46 +00:00
FUtil . staffAction ( sender . getName ( ) , " Reloading the staff list " , true ) ;
plugin . sl . load ( ) ;
msg ( " Staff list reloaded! " ) ;
2016-03-07 20:32:05 +00:00
return true ;
}
case " setrank " :
{
2020-07-20 02:10:51 +00:00
checkConsole ( ) ;
2020-09-28 02:51:15 +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 )
{
2020-07-20 02:10:51 +00:00
msg ( " Unknown rank: " + args [ 2 ] ) ;
2016-05-12 19:40:39 +00:00
return true ;
}
2016-08-26 10:43:36 +00:00
if ( rank . isConsole ( ) )
{
msg ( " You cannot set players to a console rank " ) ;
return true ;
}
2020-09-28 03:17:01 +00:00
if ( ! rank . isAtLeast ( Rank . ADMIN ) )
2016-03-07 20:32:05 +00:00
{
2020-11-30 23:17:27 +00:00
msg ( " Rank must be Admin or higher. " , ChatColor . RED ) ;
2016-03-07 20:32:05 +00:00
return true ;
}
2020-08-15 22:42:46 +00:00
StaffMember staffMember = plugin . sl . getEntryByName ( args [ 1 ] ) ;
if ( staffMember = = null )
2016-03-07 20:32:05 +00:00
{
2020-08-15 22:42:46 +00:00
msg ( " Unknown staff member: " + args [ 1 ] ) ;
2016-03-07 20:32:05 +00:00
return true ;
}
2020-08-15 22:42:46 +00:00
FUtil . staffAction ( sender . getName ( ) , " Setting " + staffMember . getName ( ) + " 's rank to " + rank . getName ( ) , true ) ;
2016-05-12 19:40:39 +00:00
2020-08-15 22:42:46 +00:00
staffMember . setRank ( rank ) ;
plugin . sl . save ( staffMember ) ;
2016-03-07 20:32:05 +00:00
2020-08-15 22:42:46 +00:00
Player player = getPlayer ( staffMember . getName ( ) ) ;
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 ( ) )
{
2020-11-10 02:11:21 +00:00
Discord . syncRoles ( staffMember , plugin . pl . getData ( staffMember . getName ( ) ) . getDiscordID ( ) ) ;
2019-04-21 00:16:00 +00:00
}
2020-09-14 09:36:25 +00:00
plugin . ptero . updateAccountStatus ( staffMember ) ;
2020-08-08 05:51:09 +00:00
2020-08-15 22:42:46 +00:00
msg ( " Set " + staffMember . getName ( ) + " 's rank to " + rank . getName ( ) ) ;
2016-03-07 20:32:05 +00:00
return true ;
}
2016-03-02 19:28:01 +00:00
case " info " :
{
if ( args . length < 2 )
{
return false ;
}
2020-09-28 03:17:01 +00:00
checkRank ( Rank . ADMIN ) ;
2016-03-02 19:28:01 +00:00
2020-08-15 22:42:46 +00:00
StaffMember staffMember = plugin . sl . getEntryByName ( args [ 1 ] ) ;
2016-03-02 19:28:01 +00:00
2020-08-15 22:42:46 +00:00
if ( staffMember = = null )
2016-03-02 19:28:01 +00:00
{
final Player player = getPlayer ( args [ 1 ] ) ;
if ( player ! = null )
{
2020-08-15 22:42:46 +00:00
staffMember = plugin . sl . getAdmin ( player ) ;
2016-03-02 19:28:01 +00:00
}
}
2020-08-15 22:42:46 +00:00
if ( staffMember = = null )
2016-03-02 19:28:01 +00:00
{
2020-08-15 22:42:46 +00:00
msg ( " Staff member not found: " + args [ 1 ] ) ;
2016-03-02 19:28:01 +00:00
}
else
{
2020-08-15 22:42:46 +00:00
msg ( staffMember . toString ( ) ) ;
2016-03-02 19:28:01 +00:00
}
return true ;
}
case " add " :
{
if ( args . length < 2 )
{
return false ;
}
2020-07-20 02:10:51 +00:00
checkConsole ( ) ;
2020-09-28 03:17:01 +00:00
checkRank ( Rank . ADMIN ) ;
2016-03-02 19:28:01 +00:00
2020-08-15 16:35:48 +00:00
// Player already staff?
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 ;
}
2020-08-15 22:42:46 +00:00
if ( plugin . sl . isStaff ( player ) )
2016-03-02 19:28:01 +00:00
{
2020-08-15 22:42:46 +00:00
msg ( " That player is already a staff member. " ) ;
2016-03-02 19:28:01 +00:00
return true ;
}
2020-08-15 16:35:48 +00:00
// Find the old staff entry
2016-03-07 20:32:05 +00:00
String name = player ! = null ? player . getName ( ) : args [ 1 ] ;
2020-08-15 22:42:46 +00:00
StaffMember staffMember = null ;
for ( StaffMember loopStaffMember : plugin . sl . getAllStaffMembers ( ) )
2016-03-02 19:28:01 +00:00
{
2020-08-15 22:42:46 +00:00
if ( loopStaffMember . getName ( ) . equalsIgnoreCase ( name ) | | loopStaffMember . getIps ( ) . contains ( FUtil . getIp ( player ) ) )
2016-03-07 20:32:05 +00:00
{
2020-08-15 22:42:46 +00:00
staffMember = loopStaffMember ;
2016-03-07 20:32:05 +00:00
break ;
}
}
2016-03-02 19:28:01 +00:00
2020-06-30 07:25:38 +00:00
if ( plugin . pl . isPlayerImpostor ( player ) )
2019-02-09 17:30:02 +00:00
{
2020-08-15 22:42:46 +00:00
msg ( " This player was labeled as a Player impostor and is not a staff member, therefore they cannot be added to the staff list. " , ChatColor . RED ) ;
2019-02-09 17:30:02 +00:00
return true ;
}
2020-08-15 22:42:46 +00:00
if ( staffMember = = null ) // New staff member
2016-03-07 20:32:05 +00:00
{
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
}
2020-08-15 22:42:46 +00:00
FUtil . staffAction ( sender . getName ( ) , " Adding " + player . getName ( ) + " to the staff list " , true ) ;
staffMember = new StaffMember ( player ) ;
2019-04-21 00:16:00 +00:00
2020-08-15 22:42:46 +00:00
plugin . sl . addAdmin ( staffMember ) ;
2020-05-29 10:14:21 +00:00
plugin . rm . updateDisplay ( player ) ;
2020-09-14 09:36:25 +00:00
plugin . ptero . updateAccountStatus ( staffMember ) ;
2016-03-02 19:28:01 +00:00
}
2020-08-15 22:42:46 +00:00
else // Existing staff member
2016-03-02 19:28:01 +00:00
{
2020-08-15 22:42:46 +00:00
FUtil . staffAction ( sender . getName ( ) , " Re-adding " + player . getName ( ) + " to the staff 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
{
2020-08-15 22:42:46 +00:00
String oldName = staffMember . getName ( ) ;
2020-06-30 07:25:38 +00:00
if ( oldName ! = player . getName ( ) )
2020-07-17 04:40:10 +00:00
{
2020-08-15 22:42:46 +00:00
staffMember . setName ( player . getName ( ) ) ;
plugin . sql . updateStaffMemberName ( oldName , staffMember . getName ( ) ) ;
2020-07-17 04:40:10 +00:00
}
2020-08-15 22:42:46 +00:00
staffMember . addIp ( FUtil . getIp ( player ) ) ;
2016-03-02 19:28:01 +00:00
}
2020-08-15 22:42:46 +00:00
staffMember . setActive ( true ) ;
staffMember . setLastLogin ( new Date ( ) ) ;
2016-03-02 19:28:01 +00:00
2020-08-15 16:35:48 +00:00
if ( plugin . sl . isVerifiedStaff ( player ) )
2019-08-04 02:50:31 +00:00
{
2020-08-15 22:42:46 +00:00
plugin . sl . verifiedNoStaff . remove ( player . getName ( ) ) ;
plugin . sl . verifiedNoStaffIps . remove ( player . getName ( ) ) ;
2019-08-04 02:50:31 +00:00
}
2020-08-15 22:42:46 +00:00
plugin . sl . save ( staffMember ) ;
plugin . sl . 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 ( ) )
{
2020-08-15 22:42:46 +00:00
plugin . dc . syncRoles ( staffMember , plugin . pl . getData ( player ) . getDiscordID ( ) ) ;
2019-04-21 00:16:00 +00:00
}
2020-09-14 09:36:25 +00:00
plugin . ptero . updateAccountStatus ( staffMember ) ;
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 ) ;
2020-07-20 02:10:51 +00:00
msg ( player , " You have been unfrozen. " ) ;
2016-03-02 19:28:01 +00:00
}
2018-03-03 04:29:08 +00:00
if ( ! player . isOp ( ) )
{
player . setOp ( true ) ;
player . sendMessage ( YOU_ARE_OP ) ;
}
2016-03-02 19:28:01 +00:00
}
return true ;
}
case " remove " :
{
if ( args . length < 2 )
{
return false ;
}
2020-07-20 02:10:51 +00:00
checkConsole ( ) ;
2020-09-28 03:17:01 +00:00
checkRank ( Rank . ADMIN ) ;
2016-03-02 19:28:01 +00:00
Player player = getPlayer ( args [ 1 ] ) ;
2020-08-15 22:42:46 +00:00
StaffMember staffMember = player ! = null ? plugin . sl . getAdmin ( player ) : plugin . sl . getEntryByName ( args [ 1 ] ) ;
2016-03-02 19:28:01 +00:00
2020-08-15 22:42:46 +00:00
if ( staffMember = = null )
2016-03-02 19:28:01 +00:00
{
2020-08-15 22:42:46 +00:00
msg ( " Staff member not found: " + args [ 1 ] ) ;
2016-03-02 19:28:01 +00:00
return true ;
}
2020-08-15 22:42:46 +00:00
FUtil . staffAction ( sender . getName ( ) , " Removing " + staffMember . getName ( ) + " from the staff list " , true ) ;
staffMember . setActive ( false ) ;
2020-08-09 03:20:06 +00:00
2020-08-15 22:42:46 +00:00
plugin . sl . save ( staffMember ) ;
plugin . sl . updateTables ( ) ;
2018-03-03 04:29:08 +00:00
if ( player ! = null )
{
plugin . rm . updateDisplay ( player ) ;
2020-09-12 19:42:12 +00:00
plugin . pl . getPlayer ( player ) . setStaffChat ( false ) ;
2018-03-03 04:29:08 +00:00
}
2019-04-21 00:16:00 +00:00
if ( plugin . dc . enabled & & ConfigEntry . DISCORD_ROLE_SYNC . getBoolean ( ) )
{
2020-09-12 19:42:12 +00:00
Discord . syncRoles ( staffMember , plugin . pl . getData ( staffMember . getName ( ) ) . getDiscordID ( ) ) ;
2019-04-21 00:16:00 +00:00
}
2020-09-14 09:36:25 +00:00
plugin . ptero . updateAccountStatus ( staffMember ) ;
2020-08-08 05:51:09 +00:00
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
{
2020-07-01 03:21:44 +00:00
if ( args . length = = 1 )
2019-01-29 04:57:41 +00:00
{
2020-07-01 03:21:44 +00:00
List < String > arguments = new ArrayList < > ( ) ;
arguments . add ( " list " ) ;
2020-08-15 22:42:46 +00:00
if ( plugin . sl . isStaff ( sender ) )
2019-01-29 04:57:41 +00:00
{
2020-07-01 03:21:44 +00:00
arguments . add ( " info " ) ;
2019-01-29 04:57:41 +00:00
}
2020-08-15 22:42:46 +00:00
if ( plugin . sl . isMod ( sender ) )
2019-01-29 04:57:41 +00:00
{
2020-07-01 03:21:44 +00:00
arguments . add ( " add " ) ;
arguments . add ( " remove " ) ;
2019-01-29 04:57:41 +00:00
}
2020-08-15 22:42:46 +00:00
if ( plugin . sl . isAdmin ( sender ) )
2019-01-29 04:57:41 +00:00
{
2020-07-01 03:21:44 +00:00
arguments . add ( " reload " ) ;
arguments . add ( " clean " ) ;
arguments . add ( " setrank " ) ;
2019-01-29 04:57:41 +00:00
}
2020-07-01 03:21:44 +00:00
return arguments ;
}
if ( args . length = = 2 & & ( args [ 0 ] . equals ( " add " ) | | args [ 0 ] . equals ( " remove " ) | | args [ 0 ] . equals ( " setrank " ) | | args [ 0 ] . equals ( " info " ) ) )
{
return FUtil . getPlayerList ( ) ;
}
if ( args . length = = 3 & & args [ 0 ] . equals ( " setrank " ) )
{
2020-11-10 02:16:26 +00:00
return Arrays . asList ( " ADMIN " , " SENIOR_ADMIN " ) ;
2019-01-29 04:57:41 +00:00
}
return Collections . emptyList ( ) ;
}
2020-08-09 03:20:06 +00:00
}