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 ;
2019-06-29 03:49:46 +02:00
import com.massivecraft.factions.SaberFactions ;
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 {
2019-03-03 04:51:21 +01:00
public CmdKick ( ) {
super ( ) ;
this . aliases . add ( " kick " ) ;
this . optionalArgs . put ( " player name " , " player name " ) ;
//this.optionalArgs.put("", "");
this . permission = Permission . KICK . node ;
this . disableOnLock = false ;
senderMustBePlayer = true ;
senderMustBeMember = false ;
senderMustBeModerator = false ;
senderMustBeAdmin = false ;
}
@Override
public void perform ( ) {
FPlayer toKick = this . argIsSet ( 0 ) ? this . argAsBestFPlayerMatch ( 0 ) : null ;
if ( toKick = = null ) {
FancyMessage msg = new FancyMessage ( TL . COMMAND_KICK_CANDIDATES . toString ( ) ) . color ( ChatColor . GOLD ) ;
for ( FPlayer player : myFaction . getFPlayersWhereRole ( Role . NORMAL ) ) {
String s = player . getName ( ) ;
msg . then ( s + " " ) . color ( ChatColor . WHITE ) . tooltip ( TL . COMMAND_KICK_CLICKTOKICK . toString ( ) + s ) . command ( " / " + Conf . baseCommandAliases . get ( 0 ) + " kick " + s ) ;
}
if ( fme . getRole ( ) . isAtLeast ( Role . COLEADER ) ) {
// For both coleader and admin, add mods.
for ( FPlayer player : myFaction . getFPlayersWhereRole ( Role . MODERATOR ) ) {
String s = player . getName ( ) ;
msg . then ( s + " " ) . color ( ChatColor . GRAY ) . tooltip ( TL . COMMAND_KICK_CLICKTOKICK . toString ( ) + s ) . command ( " / " + Conf . baseCommandAliases . get ( 0 ) + " kick " + s ) ;
}
if ( fme . getRole ( ) = = Role . LEADER ) {
// 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 ) ;
}
}
}
sendFancyMessage ( msg ) ;
return ;
}
if ( fme = = toKick ) {
msg ( TL . COMMAND_KICK_SELF ) ;
msg ( TL . GENERIC_YOUMAYWANT . toString ( ) + p . cmdBase . cmdLeave . getUseageTemplate ( false ) ) ;
return ;
}
2019-05-19 22:09:00 +02:00
if ( toKick . isAlt ( ) ) {
2019-06-29 03:49:46 +02:00
msg ( SaberFactions . plugin . color ( " &cToo few arguments, &eUse like this: " ) ) ;
msg ( SaberFactions . plugin . color ( " &b/f alts,alt kick &3<player name> " ) ) ;
2019-05-19 22:09:00 +02:00
return ;
}
2019-03-03 04:51:21 +01:00
Faction toKickFaction = toKick . getFaction ( ) ;
if ( toKickFaction . isWilderness ( ) ) {
sender . sendMessage ( TL . COMMAND_KICK_NONE . toString ( ) ) ;
return ;
}
// 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.
if ( ! fme . isAdminBypassing ( ) ) {
Access access = myFaction . getAccess ( fme , PermissableAction . KICK ) ;
if ( access ! = Access . ALLOW & & fme . getRole ( ) ! = Role . LEADER ) {
fme . msg ( TL . GENERIC_NOPERMISSION , " kick " ) ;
return ;
}
if ( toKickFaction ! = myFaction ) {
msg ( TL . COMMAND_KICK_NOTMEMBER , toKick . describeTo ( fme , true ) , myFaction . describeTo ( fme ) ) ;
return ;
}
if ( toKick . getRole ( ) . value > = fme . getRole ( ) . value ) {
msg ( TL . COMMAND_KICK_INSUFFICIENTRANK ) ;
return ;
}
if ( ! Conf . canLeaveWithNegativePower & & toKick . getPower ( ) < 0 ) {
msg ( TL . COMMAND_KICK_NEGATIVEPOWER ) ;
return ;
}
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
if ( ! canAffordCommand ( Conf . econCostKick , TL . COMMAND_KICK_TOKICK . toString ( ) ) ) {
return ;
}
// trigger the leave event (cancellable) [reason:kicked]
FPlayerLeaveEvent event = new FPlayerLeaveEvent ( toKick , toKick . getFaction ( ) , FPlayerLeaveEvent . PlayerLeaveReason . KICKED ) ;
Bukkit . getServer ( ) . getPluginManager ( ) . callEvent ( event ) ;
if ( event . isCancelled ( ) ) {
return ;
}
// then make 'em pay (if applicable)
if ( ! payForCommand ( Conf . econCostKick , TL . COMMAND_KICK_TOKICK . toString ( ) , TL . COMMAND_KICK_FORKICK . toString ( ) ) ) {
return ;
}
toKickFaction . msg ( TL . COMMAND_KICK_FACTION , fme . describeTo ( toKickFaction , true ) , toKick . describeTo ( toKickFaction , true ) ) ;
toKick . msg ( TL . COMMAND_KICK_KICKED , fme . describeTo ( toKick , true ) , toKickFaction . describeTo ( toKick ) ) ;
if ( toKickFaction ! = myFaction ) {
fme . msg ( TL . COMMAND_KICK_KICKS , toKick . describeTo ( fme ) , toKickFaction . describeTo ( fme ) ) ;
}
if ( Conf . logFactionKick ) {
2019-06-29 03:49:46 +02:00
SaberFactions . plugin . log ( ( senderIsConsole ? " A console command " : fme . getName ( ) ) + " kicked " + toKick . getName ( ) + " from the faction: " + toKickFaction . getTag ( ) ) ;
2019-03-03 04:51:21 +01:00
}
if ( toKick . getRole ( ) = = Role . LEADER ) {
toKickFaction . promoteNewLeader ( ) ;
}
toKickFaction . deinvite ( toKick ) ;
toKick . resetFactionData ( ) ;
}
@Override
public TL getUsageTranslation ( ) {
return TL . COMMAND_KICK_DESCRIPTION ;
}
2015-01-22 00:58:33 +01:00
2018-03-27 01:42:26 +02:00
}