2011-10-09 21:57:43 +02:00
package com.massivecraft.factions.cmd ;
2011-03-22 15:45:41 +01:00
2012-03-13 13:58:51 +01:00
import org.bukkit.Bukkit ;
2012-01-18 13:01:29 +01:00
import com.massivecraft.factions.Faction ;
2011-07-18 22:06:02 +02:00
import com.massivecraft.factions.FPlayer ;
2011-10-09 14:53:38 +02:00
import com.massivecraft.factions.FPlayers ;
2012-03-13 13:58:51 +01:00
import com.massivecraft.factions.event.FPlayerJoinEvent ;
2011-10-09 14:53:38 +02:00
import com.massivecraft.factions.struct.Permission ;
2011-07-18 22:06:02 +02:00
import com.massivecraft.factions.struct.Role ;
2011-03-22 15:45:41 +01:00
2011-10-09 20:10:19 +02:00
public class CmdAdmin extends FCommand
2011-10-09 14:53:38 +02:00
{
2011-10-09 20:10:19 +02:00
public CmdAdmin ( )
2011-10-09 14:53:38 +02:00
{
super ( ) ;
this . aliases . add ( " admin " ) ;
this . requiredArgs . add ( " player name " ) ;
//this.optionalArgs.put("", "");
2011-03-22 18:48:09 +01:00
2011-10-09 21:57:43 +02:00
this . permission = Permission . ADMIN . node ;
this . disableOnLock = true ;
2011-03-22 15:45:41 +01:00
2012-01-18 13:01:29 +01:00
senderMustBePlayer = false ;
2011-10-09 14:53:38 +02:00
senderMustBeMember = false ;
senderMustBeModerator = false ;
2012-01-18 13:01:29 +01:00
senderMustBeAdmin = 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 ( )
{
FPlayer fyou = this . argAsBestFPlayerMatch ( 0 ) ;
if ( fyou = = null ) return ;
2012-01-18 13:01:29 +01:00
boolean permAny = Permission . ADMIN_ANY . has ( sender , false ) ;
Faction targetFaction = fyou . getFaction ( ) ;
if ( targetFaction ! = myFaction & & ! permAny )
2011-10-09 14:53:38 +02:00
{
2011-10-21 19:20:33 +02:00
msg ( " %s<i> is not a member in your faction. " , fyou . describeTo ( fme , true ) ) ;
2011-03-22 15:45:41 +01:00
return ;
}
2012-01-18 13:01:29 +01:00
if ( fme ! = null & & fme . getRole ( ) ! = Role . ADMIN & & ! permAny )
{
msg ( " <b>You are not the faction admin. " ) ;
return ;
}
if ( fyou = = fme & & ! permAny )
2011-10-09 14:53:38 +02:00
{
2011-10-10 13:40:24 +02:00
msg ( " <b>The target player musn't be yourself. " ) ;
2011-03-22 15:45:41 +01:00
return ;
}
2012-01-18 13:01:29 +01:00
2012-03-13 13:58:51 +01:00
// only perform a FPlayerJoinEvent when newLeader isn't actually in the faction
if ( fyou . getFaction ( ) ! = targetFaction )
{
FPlayerJoinEvent event = new FPlayerJoinEvent ( FPlayers . i . get ( me ) , targetFaction , FPlayerJoinEvent . PlayerJoinReason . LEADER ) ;
Bukkit . getServer ( ) . getPluginManager ( ) . callEvent ( event ) ;
if ( event . isCancelled ( ) ) return ;
}
2012-01-18 13:01:29 +01:00
FPlayer admin = targetFaction . getFPlayerAdmin ( ) ;
// if target player is currently admin, demote and replace him
if ( fyou = = admin )
{
targetFaction . promoteNewLeader ( ) ;
msg ( " <i>You have demoted %s<i> from the position of faction admin. " , fyou . describeTo ( fme , true ) ) ;
fyou . msg ( " <i>You have been demoted from the position of faction admin by %s<i>. " , senderIsConsole ? " a server admin " : fme . describeTo ( fyou , true ) ) ;
return ;
}
// promote target player, and demote existing admin if one exists
if ( admin ! = null )
admin . setRole ( Role . MODERATOR ) ;
2011-10-09 14:53:38 +02:00
fyou . setRole ( Role . ADMIN ) ;
2012-01-18 13:01:29 +01:00
msg ( " <i>You have promoted %s<i> to the position of faction admin. " , fyou . describeTo ( fme , true ) ) ;
2011-03-22 15:45:41 +01:00
// Inform all players
2011-10-09 14:53:38 +02:00
for ( FPlayer fplayer : FPlayers . i . getOnline ( ) )
{
2012-01-18 13:01:29 +01:00
fplayer . msg ( " %s<i> gave %s<i> the leadership of %s<i>. " , senderIsConsole ? " A server admin " : fme . describeTo ( fplayer , true ) , fyou . describeTo ( fplayer ) , targetFaction . describeTo ( fplayer ) ) ;
2011-03-22 15:45:41 +01:00
}
}
}