2011-10-09 21:57:43 +02:00
package com.massivecraft.factions.cmd ;
2011-03-22 15:45:41 +01:00
2011-07-18 22:06:02 +02:00
import com.massivecraft.factions.Conf ;
import com.massivecraft.factions.FPlayer ;
import com.massivecraft.factions.Faction ;
2018-10-23 01:42:57 +02:00
import com.massivecraft.factions.SavageFactions ;
2012-03-13 13:58:51 +01:00
import com.massivecraft.factions.event.FPlayerLeaveEvent ;
2011-10-09 14:53:38 +02:00
import com.massivecraft.factions.struct.Permission ;
2011-12-18 14:47:15 +01:00
import com.massivecraft.factions.struct.Role ;
2018-02-03 21:59:05 +01:00
import com.massivecraft.factions.zcore.fperms.Access ;
import com.massivecraft.factions.zcore.fperms.PermissableAction ;
2014-07-09 20:38:19 +02:00
import com.massivecraft.factions.zcore.util.TL ;
2015-05-25 22:46:18 +02:00
import mkremins.fanciful.FancyMessage ;
2014-04-04 20:55:21 +02:00
import org.bukkit.Bukkit ;
2015-05-25 22:46:18 +02:00
import org.bukkit.ChatColor ;
2014-04-04 20:55:21 +02:00
public class CmdKick extends FCommand {
public CmdKick ( ) {
2014-07-01 22:10:18 +02:00
super ( ) ;
this . aliases . add ( " kick " ) ;
2014-04-04 20:55:21 +02:00
2014-11-14 16:56:13 +01:00
this . optionalArgs . put ( " player name " , " player name " ) ;
2014-04-04 20:55:21 +02:00
//this.optionalArgs.put("", "");
2014-07-01 22:10:18 +02:00
this . permission = Permission . KICK . node ;
this . disableOnLock = false ;
2014-04-04 20:55:21 +02:00
2018-12-21 22:46:10 +01:00
2019-02-11 05:57:45 +01:00
senderMustBePlayer = true ;
2014-07-01 22:10:18 +02:00
senderMustBeMember = false ;
2018-02-03 21:59:05 +01:00
senderMustBeModerator = false ;
2014-07-01 22:10:18 +02:00
senderMustBeAdmin = false ;
2014-04-04 20:55:21 +02:00
}
@Override
public void perform ( ) {
2015-01-07 22:59:42 +01:00
FPlayer toKick = this . argIsSet ( 0 ) ? this . argAsBestFPlayerMatch ( 0 ) : null ;
2014-07-09 20:38:19 +02:00
if ( toKick = = null ) {
2015-05-25 22:46:18 +02:00
FancyMessage msg = new FancyMessage ( TL . COMMAND_KICK_CANDIDATES . toString ( ) ) . color ( ChatColor . GOLD ) ;
2014-11-14 16:56:13 +01:00
for ( FPlayer player : myFaction . getFPlayersWhereRole ( Role . NORMAL ) ) {
String s = player . getName ( ) ;
2015-09-12 06:03:40 +02:00
msg . then ( s + " " ) . color ( ChatColor . WHITE ) . tooltip ( TL . COMMAND_KICK_CLICKTOKICK . toString ( ) + s ) . command ( " / " + Conf . baseCommandAliases . get ( 0 ) + " kick " + s ) ;
2014-11-14 16:56:13 +01:00
}
2018-03-27 01:42:26 +02:00
if ( fme . getRole ( ) . isAtLeast ( Role . COLEADER ) ) {
// For both coleader and admin, add mods.
2014-11-14 16:56:13 +01:00
for ( FPlayer player : myFaction . getFPlayersWhereRole ( Role . MODERATOR ) ) {
String s = player . getName ( ) ;
2015-09-12 06:03:40 +02:00
msg . then ( s + " " ) . color ( ChatColor . GRAY ) . tooltip ( TL . COMMAND_KICK_CLICKTOKICK . toString ( ) + s ) . command ( " / " + Conf . baseCommandAliases . get ( 0 ) + " kick " + s ) ;
2014-11-14 16:56:13 +01:00
}
2018-11-07 06:38:43 +01:00
if ( fme . getRole ( ) = = Role . LEADER ) {
2018-03-27 01:42:26 +02:00
// Only add coleader to this for the leader.
for ( FPlayer player : myFaction . getFPlayersWhereRole ( Role . COLEADER ) ) {
String s = player . getName ( ) ;
msg . then ( s + " " ) . color ( ChatColor . RED ) . tooltip ( TL . COMMAND_KICK_CLICKTOKICK . toString ( ) + s ) . command ( " / " + Conf . baseCommandAliases . get ( 0 ) + " kick " + s ) ;
}
}
2014-11-14 16:56:13 +01:00
}
2015-05-25 22:46:18 +02:00
sendFancyMessage ( msg ) ;
2014-11-17 21:30:41 +01:00
return ;
2014-07-01 22:10:18 +02:00
}
2014-04-04 20:55:21 +02:00
2014-07-09 20:38:19 +02:00
if ( fme = = toKick ) {
2014-12-08 00:12:52 +01:00
msg ( TL . COMMAND_KICK_SELF ) ;
msg ( TL . GENERIC_YOUMAYWANT . toString ( ) + p . cmdBase . cmdLeave . getUseageTemplate ( false ) ) ;
2014-07-01 22:10:18 +02:00
return ;
2014-04-04 20:55:21 +02:00
}
2014-07-09 20:38:19 +02:00
Faction toKickFaction = toKick . getFaction ( ) ;
2015-09-08 18:46:48 +02:00
if ( toKickFaction . isWilderness ( ) ) {
2015-01-10 18:32:56 +01:00
sender . sendMessage ( TL . COMMAND_KICK_NONE . toString ( ) ) ;
2014-07-09 20:38:19 +02:00
return ;
}
2014-04-04 20:55:21 +02:00
2018-08-02 16:13:16 +02:00
// This permission check has been cleaned to be more understandable and logical
// Unless is admin,
// - Check for the kick permission.
// - Make sure the player is in the faction.
// - Make sure the kicked player has lower rank than the kicker.
2018-11-07 17:14:42 +01:00
if ( ! fme . isAdminBypassing ( ) ) {
2018-09-09 00:28:09 +02:00
Access access = myFaction . getAccess ( fme , PermissableAction . KICK ) ;
2018-11-07 06:38:43 +01:00
if ( access ! = Access . ALLOW & & fme . getRole ( ) ! = Role . LEADER ) {
2018-02-03 21:59:05 +01:00
fme . msg ( TL . GENERIC_NOPERMISSION , " kick " ) ;
return ;
}
2014-07-09 20:38:19 +02:00
if ( toKickFaction ! = myFaction ) {
2014-12-08 00:12:52 +01:00
msg ( TL . COMMAND_KICK_NOTMEMBER , toKick . describeTo ( fme , true ) , myFaction . describeTo ( fme ) ) ;
2014-07-01 22:10:18 +02:00
return ;
2014-04-04 20:55:21 +02:00
}
2018-08-02 16:13:16 +02:00
if ( toKick . getRole ( ) . value > = fme . getRole ( ) . value ) {
2014-12-08 00:12:52 +01:00
msg ( TL . COMMAND_KICK_INSUFFICIENTRANK ) ;
2014-07-01 22:10:18 +02:00
return ;
2014-04-04 20:55:21 +02:00
}
2018-11-07 17:14:42 +01:00
if ( ! Conf . canLeaveWithNegativePower & & toKick . getPower ( ) < 0 ) {
2014-12-08 00:12:52 +01:00
msg ( TL . COMMAND_KICK_NEGATIVEPOWER ) ;
2014-07-01 22:10:18 +02:00
return ;
2014-04-04 20:55:21 +02:00
}
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
2018-11-07 17:14:42 +01:00
if ( ! canAffordCommand ( Conf . econCostKick , TL . COMMAND_KICK_TOKICK . toString ( ) ) ) {
2014-07-01 22:10:18 +02:00
return ;
}
2014-04-04 20:55:21 +02:00
// trigger the leave event (cancellable) [reason:kicked]
2014-07-09 20:38:19 +02:00
FPlayerLeaveEvent event = new FPlayerLeaveEvent ( toKick , toKick . getFaction ( ) , FPlayerLeaveEvent . PlayerLeaveReason . KICKED ) ;
2014-07-01 22:10:18 +02:00
Bukkit . getServer ( ) . getPluginManager ( ) . callEvent ( event ) ;
if ( event . isCancelled ( ) ) {
return ;
}
2014-04-04 20:55:21 +02:00
// then make 'em pay (if applicable)
2018-11-07 17:14:42 +01:00
if ( ! payForCommand ( Conf . econCostKick , TL . COMMAND_KICK_TOKICK . toString ( ) , TL . COMMAND_KICK_FORKICK . toString ( ) ) ) {
2014-04-04 20:55:21 +02:00
return ;
2014-07-01 21:49:42 +02:00
}
2014-04-04 20:55:21 +02:00
2014-12-08 00:12:52 +01:00
toKickFaction . msg ( TL . COMMAND_KICK_FACTION , fme . describeTo ( toKickFaction , true ) , toKick . describeTo ( toKickFaction , true ) ) ;
2018-04-04 05:20:30 +02:00
2014-12-08 00:12:52 +01:00
toKick . msg ( TL . COMMAND_KICK_KICKED , fme . describeTo ( toKick , true ) , toKickFaction . describeTo ( toKick ) ) ;
2014-07-09 20:38:19 +02:00
if ( toKickFaction ! = myFaction ) {
2014-12-08 00:12:52 +01:00
fme . msg ( TL . COMMAND_KICK_KICKS , toKick . describeTo ( fme ) , toKickFaction . describeTo ( fme ) ) ;
2014-04-04 20:55:21 +02:00
}
2014-07-01 21:49:42 +02:00
if ( Conf . logFactionKick ) {
2018-11-07 06:38:43 +01:00
SavageFactions . plugin . log ( ( senderIsConsole ? " A console command " : fme . getName ( ) ) + " kicked " + toKick . getName ( ) + " from the faction: " + toKickFaction . getTag ( ) ) ;
2014-07-01 21:49:42 +02:00
}
2018-11-07 06:38:43 +01:00
if ( toKick . getRole ( ) = = Role . LEADER ) {
2014-07-09 20:38:19 +02:00
toKickFaction . promoteNewLeader ( ) ;
2014-07-01 22:10:18 +02:00
}
2014-07-09 20:38:19 +02:00
toKickFaction . deinvite ( toKick ) ;
toKick . resetFactionData ( ) ;
2014-04-04 20:55:21 +02:00
}
2011-12-18 14:47:15 +01:00
2015-01-22 00:58:33 +01:00
@Override
public TL getUsageTranslation ( ) {
return TL . COMMAND_KICK_DESCRIPTION ;
}
2018-03-27 01:42:26 +02:00
}