2016-03-02 19:28:01 +00:00
package me.totalfreedom.totalfreedommod.command ;
2013-08-12 10:26:49 +00:00
2018-07-31 07:01:29 +00:00
import java.util.Arrays ;
import java.util.List ;
2018-07-31 05:58:50 +00:00
import me.totalfreedom.totalfreedommod.admin.Admin ;
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilder ;
2015-10-19 17:43:46 +00:00
import me.totalfreedom.totalfreedommod.player.FPlayer ;
2018-07-31 05:58:50 +00:00
import me.totalfreedom.totalfreedommod.playerverification.VPlayer ;
2016-03-06 15:56:15 +00:00
import me.totalfreedom.totalfreedommod.rank.Rank ;
2015-10-19 17:43:46 +00:00
import me.totalfreedom.totalfreedommod.util.FUtil ;
2018-07-31 06:36:03 +00:00
import org.apache.commons.lang3.ArrayUtils ;
2019-07-31 16:19:23 +00:00
import org.apache.commons.lang3.StringUtils ;
2013-08-12 18:19:17 +00:00
import org.bukkit.ChatColor ;
2013-08-12 10:26:49 +00:00
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 = " Allows you to set your own prefix. " , usage = " /<command> [-s[ave]] <set <tag..> | list | off | clear <player> | clearall> " )
2015-10-19 17:43:46 +00:00
public class Command_tag extends FreedomCommand
2013-08-12 10:26:49 +00:00
{
2015-11-22 18:26:47 +00:00
2018-07-31 05:58:50 +00:00
public static final List < String > FORBIDDEN_WORDS = Arrays . asList (
2018-07-31 06:36:03 +00:00
" admin " , " owner " , " moderator " , " developer " , " console " , " dev " , " staff " , " mod " , " sra " , " tca " , " sta " , " sa " ) ;
2013-08-12 12:41:04 +00:00
2018-07-31 08:03:12 +00:00
public boolean save = false ;
2013-08-12 10:26:49 +00:00
@Override
2015-11-22 18:26:47 +00:00
public boolean run ( CommandSender sender , Player playerSender , Command cmd , String commandLabel , String [ ] args , boolean senderIsConsole )
2013-08-12 10:26:49 +00:00
{
2018-07-31 08:03:12 +00:00
if ( args . length < 1 )
{
return false ;
}
2018-07-31 06:36:03 +00:00
if ( args [ 0 ] . equals ( " -s " ) | | args [ 0 ] . equals ( " -save " ) )
{
2018-07-31 08:03:12 +00:00
if ( ! plugin . al . isAdmin ( playerSender ) & & ! plugin . mbl . isMasterBuilder ( playerSender ) & & ! plugin . pv . getVerificationPlayer ( playerSender ) . getEnabled ( ) )
{
msg ( " Only admins, Master Builders, and players with verification enabled can save their tags. " , ChatColor . RED ) ;
return true ;
}
2018-07-31 06:36:03 +00:00
save = true ;
args = ArrayUtils . remove ( args , 0 ) ;
}
2013-08-12 10:50:39 +00:00
if ( args . length = = 1 )
2013-08-12 10:26:49 +00:00
{
2018-07-31 06:36:03 +00:00
2014-08-12 22:25:57 +00:00
if ( " list " . equalsIgnoreCase ( args [ 0 ] ) )
{
2016-03-02 19:28:01 +00:00
msg ( " Tags for all online players: " ) ;
2014-08-12 22:25:57 +00:00
for ( final Player player : server . getOnlinePlayers ( ) )
{
2020-04-14 06:40:22 +00:00
if ( plugin . al . vanished . contains ( player ) & & ! plugin . al . isAdmin ( sender ) )
2020-03-17 00:58:44 +00:00
{
continue ;
}
2015-10-19 17:43:46 +00:00
final FPlayer playerdata = plugin . pl . getPlayer ( player ) ;
2014-08-12 22:25:57 +00:00
if ( playerdata . getTag ( ) ! = null )
{
2016-03-02 19:28:01 +00:00
msg ( player . getName ( ) + " : " + playerdata . getTag ( ) ) ;
2014-08-12 22:25:57 +00:00
}
}
return true ;
}
else if ( " clearall " . equalsIgnoreCase ( args [ 0 ] ) )
2013-08-12 10:50:39 +00:00
{
2015-10-19 17:43:46 +00:00
if ( ! plugin . al . isAdmin ( sender ) )
2013-08-12 10:50:39 +00:00
{
2015-11-15 23:32:04 +00:00
noPerms ( ) ;
2013-08-12 10:50:39 +00:00
return true ;
}
2015-10-19 17:43:46 +00:00
FUtil . adminAction ( sender . getName ( ) , " Removing all tags " , false ) ;
2014-08-12 22:25:57 +00:00
2013-08-12 10:50:39 +00:00
int count = 0 ;
2014-08-12 22:25:57 +00:00
for ( final Player player : server . getOnlinePlayers ( ) )
2013-08-12 10:50:39 +00:00
{
2015-10-19 17:43:46 +00:00
final FPlayer playerdata = plugin . pl . getPlayer ( player ) ;
2013-08-12 10:50:39 +00:00
if ( playerdata . getTag ( ) ! = null )
{
count + + ;
2014-08-12 22:25:57 +00:00
playerdata . setTag ( null ) ;
2013-08-12 10:50:39 +00:00
}
}
2016-03-02 19:28:01 +00:00
msg ( count + " tag(s) removed. " ) ;
2013-08-12 10:50:39 +00:00
return true ;
}
2014-08-12 22:25:57 +00:00
else if ( " off " . equalsIgnoreCase ( args [ 0 ] ) )
2013-08-12 10:50:39 +00:00
{
2014-08-12 22:25:57 +00:00
if ( senderIsConsole )
{
2016-03-02 19:28:01 +00:00
msg ( " \" /tag off \" can't be used from the console. Use \" /tag clear <player> \" or \" /tag clearall \" instead. " ) ;
2014-08-12 22:25:57 +00:00
}
else
{
2015-11-22 18:26:47 +00:00
plugin . pl . getPlayer ( playerSender ) . setTag ( null ) ;
2018-07-31 06:36:03 +00:00
if ( save )
{
save ( playerSender , null ) ;
}
msg ( " Your tag has been removed. " + ( save ? " (Saved) " : " " ) ) ;
2014-08-12 22:25:57 +00:00
}
2013-08-12 10:50:39 +00:00
return true ;
}
2014-08-12 22:25:57 +00:00
else
2013-08-12 10:50:39 +00:00
{
2014-08-12 22:25:57 +00:00
return false ;
2013-08-12 10:50:39 +00:00
}
2013-08-12 10:26:49 +00:00
}
2014-08-12 22:25:57 +00:00
else if ( args . length > = 2 )
2013-08-12 10:26:49 +00:00
{
2014-08-12 22:25:57 +00:00
if ( " clear " . equalsIgnoreCase ( args [ 0 ] ) )
2013-08-12 10:26:49 +00:00
{
2015-10-19 17:43:46 +00:00
if ( ! plugin . al . isAdmin ( sender ) )
2013-08-12 10:26:49 +00:00
{
2015-11-15 23:32:04 +00:00
noPerms ( ) ;
2013-08-12 10:50:39 +00:00
return true ;
}
2014-04-26 11:55:24 +00:00
final Player player = getPlayer ( args [ 1 ] ) ;
2014-05-04 21:03:34 +00:00
2014-04-26 11:55:24 +00:00
if ( player = = null )
2013-08-12 10:50:39 +00:00
{
2016-03-02 19:28:01 +00:00
msg ( FreedomCommand . PLAYER_NOT_FOUND ) ;
2013-08-12 10:26:49 +00:00
return true ;
}
2015-10-19 17:43:46 +00:00
plugin . pl . getPlayer ( player ) . setTag ( null ) ;
2018-07-31 06:36:03 +00:00
if ( save )
{
save ( player , null ) ;
}
msg ( " Removed " + player . getName ( ) + " 's tag. " + ( save ? " (Saved) " : " " ) ) ;
2014-08-12 22:25:57 +00:00
2013-08-12 10:50:39 +00:00
return true ;
}
2014-08-12 22:25:57 +00:00
else if ( " set " . equalsIgnoreCase ( args [ 0 ] ) )
2014-05-05 14:25:57 +00:00
{
2014-08-12 22:25:57 +00:00
final String inputTag = StringUtils . join ( args , " " , 1 , args . length ) ;
2018-07-31 05:58:50 +00:00
final String strippedTag = StringUtils . replaceEachRepeatedly ( StringUtils . strip ( inputTag ) ,
2014-08-12 22:25:57 +00:00
new String [ ]
2018-07-31 06:36:03 +00:00
{
" " + ChatColor . COLOR_CHAR , " &k "
} ,
2014-08-12 22:25:57 +00:00
new String [ ]
2018-07-31 06:36:03 +00:00
{
" " , " "
} ) ;
2018-07-31 05:58:50 +00:00
final String outputTag = FUtil . colorize ( strippedTag ) ;
2014-08-12 22:25:57 +00:00
2018-12-29 19:41:48 +00:00
int tagLimit = ( plugin . al . isAdmin ( sender ) ? 30 : 20 ) ;
2014-05-05 14:25:57 +00:00
2019-07-11 02:13:57 +00:00
final String rawTag = ChatColor . stripColor ( outputTag ) . toLowerCase ( ) ;
2018-12-29 19:41:48 +00:00
if ( rawTag . length ( ) > tagLimit )
{
msg ( " That tag is too long (Max is " + String . valueOf ( tagLimit ) + " characters). " ) ;
return true ;
}
2014-08-12 22:25:57 +00:00
2018-12-29 19:41:48 +00:00
if ( ! plugin . al . isAdmin ( sender ) )
{
2014-08-12 22:25:57 +00:00
for ( String word : FORBIDDEN_WORDS )
2014-05-05 14:25:57 +00:00
{
2014-08-12 22:25:57 +00:00
if ( rawTag . contains ( word ) )
{
2016-03-02 19:28:01 +00:00
msg ( " That tag contains a forbidden word. " ) ;
2014-08-12 22:25:57 +00:00
return true ;
}
2014-05-05 14:25:57 +00:00
}
}
2015-11-22 18:26:47 +00:00
plugin . pl . getPlayer ( playerSender ) . setTag ( outputTag ) ;
2018-07-31 06:36:03 +00:00
if ( save )
{
2018-07-31 08:03:12 +00:00
save ( playerSender , outputTag ) ;
2018-07-31 06:36:03 +00:00
}
msg ( " Tag set to ' " + outputTag + ChatColor . GRAY + " '. " + ( save ? " (Saved) " : " " ) ) ;
2014-05-05 14:25:57 +00:00
2014-08-12 22:25:57 +00:00
return true ;
}
else
{
return false ;
}
}
else
{
return false ;
2013-08-12 10:50:39 +00:00
}
2013-08-12 10:26:49 +00:00
}
2018-07-31 05:58:50 +00:00
public void save ( Player player , String tag )
{
2018-07-31 08:03:12 +00:00
if ( plugin . al . isAdmin ( player ) )
2018-07-31 05:58:50 +00:00
{
Admin admin = plugin . al . getAdmin ( player ) ;
admin . setTag ( tag ) ;
plugin . al . save ( ) ;
plugin . al . updateTables ( ) ;
}
2018-07-31 08:03:12 +00:00
else if ( plugin . mbl . isMasterBuilder ( player ) )
2018-07-31 05:58:50 +00:00
{
MasterBuilder masterBuilder = plugin . mbl . getMasterBuilder ( player ) ;
masterBuilder . setTag ( tag ) ;
plugin . mbl . save ( ) ;
plugin . mbl . updateTables ( ) ;
}
else if ( plugin . pv . getVerificationPlayer ( player ) . getEnabled ( ) )
{
VPlayer vPlayer = plugin . pv . getVerificationPlayer ( player ) ;
vPlayer . setTag ( tag ) ;
plugin . pv . saveVerificationData ( vPlayer ) ;
}
}
2013-08-12 10:26:49 +00:00
}