2011-10-09 21:57:43 +02:00
package com.massivecraft.factions.cmd ;
2011-03-22 15:45:41 +01:00
2012-03-02 02:16:45 +01:00
import org.bukkit.Bukkit ;
2011-07-18 22:06:02 +02:00
import com.massivecraft.factions.FPlayer ;
2013-04-09 13:22:23 +02:00
import com.massivecraft.factions.FPlayerColl ;
2011-12-23 01:13:55 +01:00
import com.massivecraft.factions.Faction ;
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 ;
2012-03-02 02:16:45 +01:00
import com.massivecraft.factions.event.FPlayerJoinEvent ;
2011-12-23 01:13:55 +01:00
import com.massivecraft.factions.util.RelationUtil ;
2011-03-22 15:45:41 +01:00
2011-10-23 17:55:53 +02:00
public class CmdLeader extends FCommand
2011-10-09 14:53:38 +02:00
{
2011-10-23 17:55:53 +02:00
public CmdLeader ( )
2011-10-09 14:53:38 +02:00
{
super ( ) ;
2011-10-23 17:55:53 +02:00
this . aliases . add ( " leader " ) ;
2011-10-09 14:53:38 +02:00
2011-10-24 11:11:53 +02:00
this . requiredArgs . add ( " player " ) ;
2011-12-23 01:13:55 +01:00
this . optionalArgs . put ( " faction " , " your " ) ;
2011-03-22 18:48:09 +01:00
2013-04-09 12:56:29 +02:00
this . permission = Perm . LEADER . node ;
2011-10-09 21:57:43 +02:00
this . disableOnLock = true ;
2011-03-22 15:45:41 +01:00
2011-12-23 01:13:55 +01:00
senderMustBePlayer = false ;
2011-10-09 14:53:38 +02:00
senderMustBeMember = false ;
2011-10-23 17:55:53 +02:00
senderMustBeOfficer = false ;
2011-12-23 01:13:55 +01:00
senderMustBeLeader = false ;
2011-03-22 15:45:41 +01:00
}
2011-06-21 07:38:31 +02:00
@Override
2011-10-09 14:53:38 +02:00
public void perform ( )
{
2011-12-23 01:13:55 +01:00
FPlayer newLeader = this . argAsBestFPlayerMatch ( 0 ) ;
if ( newLeader = = null ) return ;
2011-03-22 15:45:41 +01:00
2011-12-23 01:13:55 +01:00
Faction targetFaction = this . argAsFaction ( 1 , myFaction ) ;
if ( targetFaction = = null ) return ;
FPlayer targetFactionCurrentLeader = targetFaction . getFPlayerLeader ( ) ;
// We now have fplayer and the target faction
2013-04-09 12:56:29 +02:00
if ( this . senderIsConsole | | fme . hasAdminMode ( ) | | Perm . LEADER_ANY . has ( sender , false ) )
2011-10-09 14:53:38 +02:00
{
2011-12-23 01:13:55 +01:00
// Do whatever you wish
2011-03-22 15:45:41 +01:00
}
2011-12-23 01:13:55 +01:00
else
2011-10-09 14:53:38 +02:00
{
2011-12-23 01:13:55 +01:00
// Follow the standard rules
2012-02-07 22:23:19 +01:00
if ( fme . getRole ( ) ! = Rel . LEADER | | targetFaction ! = myFaction )
2011-12-23 01:13:55 +01:00
{
2012-02-07 22:31:35 +01:00
sender . sendMessage ( p . txt . parse ( " <b>You must be leader of the faction to %s. " , this . getHelpShort ( ) ) ) ;
2011-12-23 01:13:55 +01:00
return ;
}
if ( newLeader . getFaction ( ) ! = myFaction )
{
2012-02-07 22:15:25 +01:00
msg ( " %s<i> is not a member in the faction. " , newLeader . describeTo ( fme , true ) ) ;
2011-12-23 01:13:55 +01:00
return ;
}
if ( newLeader = = fme )
{
msg ( " <b>The target player musn't be yourself. " ) ;
return ;
}
2011-03-22 15:45:41 +01:00
}
2012-03-09 23:09:33 +01:00
// only perform a FPlayerJoinEvent when newLeader isn't actually in the faction
if ( newLeader . getFaction ( ) ! = targetFaction )
2012-03-13 13:47:54 +01:00
{
2013-04-09 13:22:23 +02:00
FPlayerJoinEvent event = new FPlayerJoinEvent ( FPlayerColl . i . get ( me ) , targetFaction , FPlayerJoinEvent . PlayerJoinReason . LEADER ) ;
2012-03-13 13:47:54 +01:00
Bukkit . getServer ( ) . getPluginManager ( ) . callEvent ( event ) ;
if ( event . isCancelled ( ) ) return ;
}
2012-03-09 23:09:33 +01:00
2012-01-18 13:01:50 +01:00
// if target player is currently leader, demote and replace him
if ( targetFactionCurrentLeader = = newLeader )
{
targetFaction . promoteNewLeader ( ) ;
msg ( " <i>You have demoted %s<i> from the position of faction leader. " , newLeader . describeTo ( fme , true ) ) ;
newLeader . msg ( " <i>You have been demoted from the position of faction leader by %s<i>. " , senderIsConsole ? " a server admin " : fme . describeTo ( newLeader , true ) ) ;
return ;
}
2011-12-23 01:13:55 +01:00
// Perform the switching
if ( targetFactionCurrentLeader ! = null )
{
targetFactionCurrentLeader . setRole ( Rel . OFFICER ) ;
}
newLeader . setFaction ( targetFaction ) ;
newLeader . setRole ( Rel . LEADER ) ;
2012-01-18 13:01:50 +01:00
msg ( " <i>You have promoted %s<i> to the position of faction leader. " , newLeader . describeTo ( fme , true ) ) ;
2011-03-22 15:45:41 +01:00
// Inform all players
2013-04-09 13:22:23 +02:00
for ( FPlayer fplayer : FPlayerColl . i . getOnline ( ) )
2011-10-09 14:53:38 +02:00
{
2012-01-18 13:01:50 +01:00
fplayer . msg ( " %s<i> gave %s<i> the leadership of %s<i>. " , senderIsConsole ? " A server admin " : RelationUtil . describeThatToMe ( fme , fplayer , true ) , newLeader . describeTo ( fplayer ) , targetFaction . describeTo ( fplayer ) ) ;
2011-03-22 15:45:41 +01:00
}
}
}