2011-10-09 21:57:43 +02:00
package com.massivecraft.factions.cmd ;
2011-03-22 15:45:41 +01:00
2015-09-08 19:18:45 +02:00
import org.bukkit.ChatColor ;
2013-04-09 13:00:09 +02:00
import com.massivecraft.factions.Factions ;
2013-04-09 12:56:29 +02:00
import com.massivecraft.factions.Perm ;
2013-04-09 13:24:55 +02:00
import com.massivecraft.factions.Rel ;
2014-09-17 13:29:58 +02:00
import com.massivecraft.factions.cmd.arg.ARMPlayer ;
2014-09-17 13:17:33 +02:00
import com.massivecraft.factions.entity.FactionColl ;
2014-10-02 14:02:07 +02:00
import com.massivecraft.factions.entity.MPerm ;
2014-09-17 13:17:33 +02:00
import com.massivecraft.factions.entity.MPlayer ;
2013-04-22 09:37:53 +02:00
import com.massivecraft.factions.entity.Faction ;
2013-04-22 10:05:03 +02:00
import com.massivecraft.factions.entity.MConf ;
2014-06-04 16:47:01 +02:00
import com.massivecraft.factions.event.EventFactionsMembershipChange ;
import com.massivecraft.factions.event.EventFactionsMembershipChange.MembershipChangeReason ;
2015-02-12 12:00:55 +01:00
import com.massivecraft.massivecore.MassiveException ;
2014-06-04 14:02:23 +02:00
import com.massivecraft.massivecore.cmd.req.ReqHasPerm ;
2015-09-08 19:18:45 +02:00
import com.massivecraft.massivecore.mson.Mson ;
2014-06-21 19:03:39 +02:00
import com.massivecraft.massivecore.util.IdUtil ;
2011-03-22 15:45:41 +01:00
2014-09-18 13:41:20 +02:00
public class CmdFactionsKick extends FactionsCommand
2011-10-09 14:53:38 +02:00
{
2013-11-11 09:31:04 +01:00
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
2011-03-22 15:45:41 +01:00
2013-04-10 13:12:22 +02:00
public CmdFactionsKick ( )
2011-10-09 14:53:38 +02:00
{
2013-11-11 09:31:04 +01:00
// Aliases
2013-04-16 10:11:59 +02:00
this . addAliases ( " kick " ) ;
2013-11-11 09:31:04 +01:00
// Args
2015-07-24 13:42:06 +02:00
this . addArg ( ARMPlayer . get ( ) , " player " ) ;
2013-11-11 09:31:04 +01:00
// Requirements
2013-04-16 10:11:59 +02:00
this . addRequirements ( ReqHasPerm . get ( Perm . KICK . node ) ) ;
2011-03-22 15:45:41 +01:00
}
2013-11-11 09:31:04 +01:00
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
2011-03-22 15:45:41 +01:00
2011-06-21 07:38:31 +02:00
@Override
2015-02-12 12:00:55 +01:00
public void perform ( ) throws MassiveException
2013-04-19 14:08:45 +02:00
{
// Arg
2015-05-06 17:04:35 +02:00
MPlayer mplayer = this . readArg ( ) ;
2011-03-22 15:45:41 +01:00
2013-04-19 14:08:45 +02:00
// Validate
2014-09-18 13:41:20 +02:00
if ( msender = = mplayer )
2011-10-09 14:53:38 +02:00
{
2015-02-25 20:36:47 +01:00
msg ( " <b>You can't kick yourself. " ) ;
2015-09-08 19:18:45 +02:00
message ( Mson . mson ( mson ( " You might want to: " ) . color ( ChatColor . YELLOW ) , Factions . get ( ) . getOuterCmdFactions ( ) . cmdFactionsLeave . getUseageTemplate ( false ) ) ) ;
2011-03-22 15:45:41 +01:00
return ;
}
2011-12-23 01:13:55 +01:00
2014-09-18 13:41:20 +02:00
if ( mplayer . getRole ( ) = = Rel . LEADER & & ! ( this . senderIsConsole | | msender . isUsingAdminMode ( ) ) )
2011-12-23 01:13:55 +01:00
{
msg ( " <b>The leader can not be kicked. " ) ;
return ;
}
2015-02-25 20:36:47 +01:00
if ( mplayer . getRole ( ) . compareTo ( msender . getRole ( ) ) < 0 & & ! ( this . senderIsConsole | | msender . isUsingAdminMode ( ) ) )
{
msg ( " <b>You can't kick people of higher rank than yourself. " ) ;
return ;
}
2011-07-09 05:06:55 +02:00
2015-02-22 12:04:55 +01:00
if ( ! MConf . get ( ) . canLeaveWithNegativePower & & mplayer . getPower ( ) < 0 & & ! msender . isUsingAdminMode ( ) )
2011-10-09 14:53:38 +02:00
{
2015-02-25 20:36:47 +01:00
msg ( " <b>You can't kick that person until their power is positive. " ) ;
2011-10-25 21:18:08 +02:00
return ;
2011-03-22 15:45:41 +01:00
}
2011-10-25 21:18:08 +02:00
2014-10-02 14:02:07 +02:00
// MPerm
2014-09-17 13:29:58 +02:00
Faction mplayerFaction = mplayer . getFaction ( ) ;
2014-10-03 09:01:36 +02:00
if ( ! MPerm . getPermKick ( ) . has ( msender , mplayerFaction , true ) ) return ;
2012-03-13 15:48:34 +01:00
2013-04-19 14:08:45 +02:00
// Event
2014-09-17 13:29:58 +02:00
EventFactionsMembershipChange event = new EventFactionsMembershipChange ( sender , mplayer , FactionColl . get ( ) . getNone ( ) , MembershipChangeReason . KICK ) ;
2013-04-19 14:08:45 +02:00
event . run ( ) ;
2012-03-02 02:16:45 +01:00
if ( event . isCancelled ( ) ) return ;
2012-03-13 15:48:34 +01:00
2013-04-19 14:08:45 +02:00
// Inform
2014-09-18 13:41:20 +02:00
mplayerFaction . msg ( " %s<i> kicked %s<i> from the faction! :O " , msender . describeTo ( mplayerFaction , true ) , mplayer . describeTo ( mplayerFaction , true ) ) ;
mplayer . msg ( " %s<i> kicked you from %s<i>! :O " , msender . describeTo ( mplayer , true ) , mplayerFaction . describeTo ( mplayer ) ) ;
if ( mplayerFaction ! = msenderFaction )
2011-10-09 14:53:38 +02:00
{
2014-09-18 13:41:20 +02:00
msender . msg ( " <i>You kicked %s<i> from the faction %s<i>! " , mplayer . describeTo ( msender ) , mplayerFaction . describeTo ( msender ) ) ;
2011-05-29 23:41:50 +02:00
}
2011-07-09 05:06:55 +02:00
2013-04-22 10:05:03 +02:00
if ( MConf . get ( ) . logFactionKick )
2013-04-19 14:08:45 +02:00
{
2014-09-18 13:41:20 +02:00
Factions . get ( ) . log ( msender . getDisplayName ( IdUtil . getConsole ( ) ) + " kicked " + mplayer . getName ( ) + " from the faction " + mplayerFaction . getName ( ) ) ;
2013-04-19 14:08:45 +02:00
}
Additional logging, with new conf.json settings to enable/disable logging of specific events:
"logFactionCreate": true, - log faction creation
"logFactionDisband": true, - log factions being disbanded, by command or by circumstance
"logFactionJoin": true, - log player joining a faction
"logFactionKick": true, - log player being kicked from a faction
"logFactionLeave": true, - log player leaving a faction
"logLandClaims": true, - log land being claimed (including safe zone and war zone)
"logLandUnclaims": true, - log land being unclaimed (including safe zone and war zone)
"logMoneyTransactions": true, - log money being deposited, withdrawn, and otherwise transferred in relation to faction banks
Also a fix for a potential NPE from players logging out and Spout appearance handler referencing them afterwards
2011-10-23 19:50:02 +02:00
2013-04-19 14:08:45 +02:00
// Apply
2014-09-17 13:29:58 +02:00
if ( mplayer . getRole ( ) = = Rel . LEADER )
2013-04-19 14:08:45 +02:00
{
2014-09-17 13:29:58 +02:00
mplayerFaction . promoteNewLeader ( ) ;
2013-04-19 14:08:45 +02:00
}
2014-09-17 13:29:58 +02:00
mplayerFaction . setInvited ( mplayer , false ) ;
mplayer . resetFactionData ( ) ;
2011-03-22 15:45:41 +01:00
}
}