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-09-14 21:13:01 +02:00
import com.massivecraft.factions.FactionsPlugin ;
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.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 ;
2019-09-14 21:13:01 +02:00
import org.bukkit.command.ConsoleCommandSender ;
2014-04-04 20:55:21 +02:00
public class CmdKick extends FCommand {
2019-09-15 11:19:06 +02:00
public CmdKick ( ) {
super ( ) ;
this . aliases . add ( " kick " ) ;
this . optionalArgs . put ( " player name " , " player name " ) ;
this . requirements = new CommandRequirements . Builder ( Permission . KICK )
. playerOnly ( )
. withAction ( PermissableAction . KICK )
. memberOnly ( )
. build ( ) ;
}
@Override
public void perform ( CommandContext context ) {
FPlayer toKick = context . argIsSet ( 0 ) ? context . argAsBestFPlayerMatch ( 0 ) : null ;
if ( toKick = = null ) {
FancyMessage msg = new FancyMessage ( TL . COMMAND_KICK_CANDIDATES . toString ( ) ) . color ( ChatColor . GOLD ) ;
for ( FPlayer player : context . faction . 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 ( context . fPlayer . getRole ( ) . isAtLeast ( Role . COLEADER ) ) {
// For both coleader and admin, add mods.
for ( FPlayer player : context . faction . getFPlayersWhereRole ( Role . MODERATOR ) ) {
2019-08-24 19:18:50 +02:00
String s = player . getName ( ) ;
2019-09-15 11:19:06 +02:00
msg . then ( s + " " ) . color ( ChatColor . GRAY ) . tooltip ( TL . COMMAND_KICK_CLICKTOKICK . toString ( ) + s ) . command ( " / " + Conf . baseCommandAliases . get ( 0 ) + " kick " + s ) ;
}
if ( context . fPlayer . getRole ( ) = = Role . LEADER ) {
// Only add coleader to this for the leader.
for ( FPlayer player : context . faction . 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 ) ;
2019-08-24 19:18:50 +02:00
}
2019-09-15 11:19:06 +02:00
}
}
context . sendFancyMessage ( msg ) ;
return ;
}
if ( context . fPlayer = = toKick ) {
context . msg ( TL . COMMAND_KICK_SELF ) ;
context . msg ( TL . GENERIC_YOUMAYWANT . toString ( ) + FactionsPlugin . getInstance ( ) . cmdBase . cmdLeave . getUseageTemplate ( context ) ) ;
return ;
}
Faction toKickFaction = toKick . getFaction ( ) ;
if ( toKickFaction . isWilderness ( ) ) {
context . 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 ( ! context . fPlayer . isAdminBypassing ( ) ) {
if ( toKickFaction ! = context . faction ) {
context . msg ( TL . COMMAND_KICK_NOTMEMBER , toKick . describeTo ( context . fPlayer , true ) , context . faction . describeTo ( context . fPlayer ) ) ;
return ;
}
if ( toKick . getRole ( ) . value > = context . fPlayer . getRole ( ) . value ) {
context . msg ( TL . COMMAND_KICK_INSUFFICIENTRANK ) ;
return ;
}
if ( ! Conf . canLeaveWithNegativePower & & toKick . getPower ( ) < 0 ) {
context . 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 ( ! context . 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 ( ! context . payForCommand ( Conf . econCostKick , TL . COMMAND_KICK_TOKICK . toString ( ) , TL . COMMAND_KICK_FORKICK . toString ( ) ) ) {
return ;
}
toKickFaction . msg ( TL . COMMAND_KICK_FACTION , context . fPlayer . describeTo ( toKickFaction , true ) , toKick . describeTo ( toKickFaction , true ) ) ;
toKick . msg ( TL . COMMAND_KICK_KICKED , context . fPlayer . describeTo ( toKick , true ) , toKickFaction . describeTo ( toKick ) ) ;
if ( toKickFaction ! = context . faction ) {
context . fPlayer . msg ( TL . COMMAND_KICK_KICKS , toKick . describeTo ( context . fPlayer ) , toKickFaction . describeTo ( context . fPlayer ) ) ;
}
if ( Conf . logFactionKick ) {
FactionsPlugin . getInstance ( ) . log ( ( context . sender instanceof ConsoleCommandSender ? " A console command " : context . fPlayer . getName ( ) ) + " kicked " + toKick . getName ( ) + " from the faction: " + toKickFaction . getTag ( ) ) ;
}
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
}