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.FPlayer ;
2011-10-09 14:53:38 +02:00
import com.massivecraft.factions.FPlayers ;
2014-04-04 20:55:21 +02:00
import com.massivecraft.factions.Faction ;
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 ;
2014-04-04 20:55:21 +02:00
import org.bukkit.Bukkit ;
public class CmdAdmin extends FCommand {
public CmdAdmin ( ) {
2014-07-01 22:10:18 +02:00
super ( ) ;
this . aliases . add ( " admin " ) ;
2014-04-04 20:55:21 +02:00
this . requiredArgs . add ( " player name " ) ;
//this.optionalArgs.put("", "");
2014-07-01 22:10:18 +02:00
this . permission = Permission . ADMIN . node ;
this . disableOnLock = true ;
2014-04-04 20:55:21 +02:00
2014-07-01 22:10:18 +02:00
senderMustBePlayer = false ;
senderMustBeMember = false ;
senderMustBeModerator = false ;
2014-04-04 20:55:21 +02:00
senderMustBeAdmin = false ;
}
@Override
public void perform ( ) {
2014-07-01 22:10:18 +02:00
FPlayer fyou = this . argAsBestFPlayerMatch ( 0 ) ;
if ( fyou = = null ) {
return ;
}
2014-04-04 20:55:21 +02:00
2014-07-01 22:10:18 +02:00
boolean permAny = Permission . ADMIN_ANY . has ( sender , false ) ;
Faction targetFaction = fyou . getFaction ( ) ;
2014-04-04 20:55:21 +02:00
if ( targetFaction ! = myFaction & & ! permAny ) {
2014-07-01 22:10:18 +02:00
msg ( " %s<i> is not a member in your faction. " , fyou . describeTo ( fme , true ) ) ;
return ;
2014-04-04 20:55:21 +02:00
}
if ( fme ! = null & & fme . getRole ( ) ! = Role . ADMIN & & ! permAny ) {
2014-07-01 22:10:18 +02:00
msg ( " <b>You are not the faction admin. " ) ;
return ;
2014-04-04 20:55:21 +02:00
}
if ( fyou = = fme & & ! permAny ) {
2014-07-01 22:10:18 +02:00
msg ( " <b>The target player musn't be yourself. " ) ;
return ;
2014-04-04 20:55:21 +02: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 ) ;
2014-07-01 22:10:18 +02:00
Bukkit . getServer ( ) . getPluginManager ( ) . callEvent ( event ) ;
if ( event . isCancelled ( ) ) {
return ;
}
2014-04-04 20:55:21 +02: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
2014-07-01 22:10:18 +02:00
if ( admin ! = null ) {
admin . setRole ( Role . MODERATOR ) ;
}
fyou . setRole ( Role . ADMIN ) ;
2014-04-04 20:55:21 +02:00
msg ( " <i>You have promoted %s<i> to the position of faction admin. " , fyou . describeTo ( fme , true ) ) ;
// Inform all players
for ( FPlayer fplayer : FPlayers . i . getOnline ( ) ) {
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
}