2012-03-09 23:09:33 +01:00
package com.massivecraft.factions.cmd ;
2013-04-16 11:05:49 +02:00
import com.massivecraft.factions.cmd.arg.ARFaction ;
2013-04-25 13:25:15 +02:00
import com.massivecraft.factions.cmd.req.ReqFactionsEnabled ;
2013-04-22 17:59:51 +02:00
import com.massivecraft.factions.entity.UPlayer ;
import com.massivecraft.factions.entity.UPlayerColls ;
2013-04-22 09:37:53 +02:00
import com.massivecraft.factions.entity.Faction ;
2013-04-22 13:03:21 +02:00
import com.massivecraft.factions.entity.FactionColls ;
2013-04-22 10:05:03 +02:00
import com.massivecraft.factions.entity.MConf ;
2013-04-19 12:27:39 +02:00
import com.massivecraft.factions.event.FactionsEventDisband ;
2013-04-19 14:08:45 +02:00
import com.massivecraft.factions.event.FactionsEventMembershipChange ;
import com.massivecraft.factions.event.FactionsEventMembershipChange.MembershipChangeReason ;
2013-04-09 13:24:55 +02:00
import com.massivecraft.factions.FFlag ;
import com.massivecraft.factions.FPerm ;
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-16 10:11:59 +02:00
import com.massivecraft.mcore.cmd.req.ReqHasPerm ;
2013-06-18 09:07:05 +02:00
import com.massivecraft.mcore.util.Txt ;
2012-03-09 23:09:33 +01:00
2013-04-10 13:12:22 +02:00
public class CmdFactionsDisband extends FCommand
2012-03-09 23:09:33 +01:00
{
2013-04-10 13:12:22 +02:00
public CmdFactionsDisband ( )
2012-03-09 23:09:33 +01:00
{
2013-04-16 10:11:59 +02:00
this . addAliases ( " disband " ) ;
2012-03-09 23:09:33 +01:00
2013-04-16 10:30:21 +02:00
this . addOptionalArg ( " faction " , " you " ) ;
2013-04-25 13:25:15 +02:00
this . addRequirements ( ReqFactionsEnabled . get ( ) ) ;
2013-04-16 10:11:59 +02:00
this . addRequirements ( ReqHasPerm . get ( Perm . DISBAND . node ) ) ;
2012-03-09 23:09:33 +01:00
}
@Override
public void perform ( )
2013-04-25 13:25:15 +02:00
{
2013-04-19 12:44:28 +02:00
// Args
2013-04-25 07:29:19 +02:00
Faction faction = this . arg ( 0 , ARFaction . get ( usender ) , usenderFaction ) ;
2012-03-09 23:09:33 +01:00
if ( faction = = null ) return ;
2013-04-19 12:44:28 +02:00
// FPerm
2013-04-29 12:48:11 +02:00
if ( ! FPerm . DISBAND . has ( usender , faction , true ) ) return ;
2012-03-09 23:09:33 +01:00
2013-04-19 12:44:28 +02:00
// Verify
2012-03-09 23:09:33 +01:00
if ( faction . getFlag ( FFlag . PERMANENT ) )
{
msg ( " <i>This faction is designated as permanent, so you cannot disband it. " ) ;
return ;
}
2013-04-19 12:44:28 +02:00
// Event
FactionsEventDisband event = new FactionsEventDisband ( me , faction ) ;
event . run ( ) ;
if ( event . isCancelled ( ) ) return ;
2012-03-09 23:09:33 +01:00
2013-04-19 12:44:28 +02:00
// Merged Apply and Inform
2013-04-22 17:59:51 +02:00
// Run event for each player in the faction
for ( UPlayer uplayer : faction . getUPlayers ( ) )
2012-03-13 13:47:54 +01:00
{
2013-04-22 17:59:51 +02:00
FactionsEventMembershipChange membershipChangeEvent = new FactionsEventMembershipChange ( sender , uplayer , FactionColls . get ( ) . get ( faction ) . getNone ( ) , MembershipChangeReason . DISBAND ) ;
2013-04-19 14:08:45 +02:00
membershipChangeEvent . run ( ) ;
2012-03-09 23:09:33 +01:00
}
// Inform all players
2013-04-25 07:29:19 +02:00
for ( UPlayer uplayer : UPlayerColls . get ( ) . get ( usender ) . getAllOnline ( ) )
2012-03-09 23:09:33 +01:00
{
2013-04-25 07:29:19 +02:00
String who = usender . describeTo ( uplayer ) ;
2013-04-22 17:59:51 +02:00
if ( uplayer . getFaction ( ) = = faction )
2012-03-09 23:09:33 +01:00
{
2013-04-22 17:59:51 +02:00
uplayer . msg ( " <h>%s<i> disbanded your faction. " , who ) ;
2012-03-09 23:09:33 +01:00
}
else
{
2013-04-24 19:01:17 +02:00
uplayer . msg ( " <h>%s<i> disbanded the faction %s. " , who , faction . getName ( uplayer ) ) ;
2012-03-09 23:09:33 +01:00
}
}
2013-04-22 10:05:03 +02:00
if ( MConf . get ( ) . logFactionDisband )
{
2013-06-18 09:07:05 +02:00
Factions . get ( ) . log ( Txt . parse ( " <i>The faction <h>%s <i>(<h>%s<i>) was disbanded by <h>%s<i>. " , faction . getName ( ) , faction . getId ( ) , usender . getDisplayName ( ) ) ) ;
}
2012-03-09 23:09:33 +01:00
faction . detach ( ) ;
}
}