2011-10-09 21:57:43 +02:00
package com.massivecraft.factions.cmd ;
2011-03-19 13:00:03 +01:00
2014-04-04 20:55:21 +02:00
import com.massivecraft.factions.* ;
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 ;
2014-04-04 20:55:21 +02:00
import org.bukkit.Bukkit ;
2011-03-19 13:00:03 +01:00
2014-04-04 20:55:21 +02:00
public class CmdJoin extends FCommand {
public CmdJoin ( ) {
super ( ) ;
this . aliases . add ( " join " ) ;
this . requiredArgs . add ( " faction name " ) ;
this . optionalArgs . put ( " player " , " you " ) ;
this . permission = Permission . JOIN . node ;
this . disableOnLock = true ;
senderMustBePlayer = true ;
senderMustBeMember = false ;
senderMustBeModerator = false ;
senderMustBeAdmin = false ;
}
@Override
public void perform ( ) {
Faction faction = this . argAsFaction ( 0 ) ;
2014-07-01 21:49:42 +02:00
if ( faction = = null ) { return ; }
2014-04-04 20:55:21 +02:00
FPlayer fplayer = this . argAsBestFPlayerMatch ( 1 , fme , false ) ;
boolean samePlayer = fplayer = = fme ;
if ( ! samePlayer & & ! Permission . JOIN_OTHERS . has ( sender , false ) ) {
msg ( " <b>You do not have permission to move other players into a faction. " ) ;
return ;
}
if ( ! faction . isNormal ( ) ) {
msg ( " <b>Players may only join normal factions. This is a system faction. " ) ;
return ;
}
if ( faction = = fplayer . getFaction ( ) ) {
msg ( " <b>%s %s already a member of %s " , fplayer . describeTo ( fme , true ) , ( samePlayer ? " are " : " is " ) , faction . getTag ( fme ) ) ;
return ;
}
if ( Conf . factionMemberLimit > 0 & & faction . getFPlayers ( ) . size ( ) > = Conf . factionMemberLimit ) {
msg ( " <b>!<white> The faction %s is at the limit of %d members, so %s cannot currently join. " , faction . getTag ( fme ) , Conf . factionMemberLimit , fplayer . describeTo ( fme , false ) ) ;
return ;
}
if ( fplayer . hasFaction ( ) ) {
msg ( " <b>%s must leave %s current faction first. " , fplayer . describeTo ( fme , true ) , ( samePlayer ? " your " : " their " ) ) ;
return ;
}
if ( ! Conf . canLeaveWithNegativePower & & fplayer . getPower ( ) < 0 ) {
msg ( " <b>%s cannot join a faction with a negative power level. " , fplayer . describeTo ( fme , true ) ) ;
return ;
}
if ( ! ( faction . getOpen ( ) | | faction . isInvited ( fplayer ) | | fme . isAdminBypassing ( ) | | Permission . JOIN_ANY . has ( sender , false ) ) ) {
msg ( " <i>This faction requires invitation. " ) ;
2014-07-01 21:49:42 +02:00
if ( samePlayer ) { faction . msg ( " %s<i> tried to join your faction. " , fplayer . describeTo ( faction , true ) ) ; }
2014-04-04 20:55:21 +02:00
return ;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
2014-07-01 21:49:42 +02:00
if ( samePlayer & & ! canAffordCommand ( Conf . econCostJoin , " to join a faction " ) ) { return ; }
2014-04-04 20:55:21 +02:00
// trigger the join event (cancellable)
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent ( FPlayers . i . get ( me ) , faction , FPlayerJoinEvent . PlayerJoinReason . COMMAND ) ;
Bukkit . getServer ( ) . getPluginManager ( ) . callEvent ( joinEvent ) ;
2014-07-01 21:49:42 +02:00
if ( joinEvent . isCancelled ( ) ) { return ; }
2014-04-04 20:55:21 +02:00
// then make 'em pay (if applicable)
2014-07-01 21:49:42 +02:00
if ( samePlayer & & ! payForCommand ( Conf . econCostJoin , " to join a faction " , " for joining a faction " ) ) { return ; }
2014-04-04 20:55:21 +02:00
fme . msg ( " <i>%s successfully joined %s. " , fplayer . describeTo ( fme , true ) , faction . getTag ( fme ) ) ;
2014-07-01 21:49:42 +02:00
if ( ! samePlayer ) {
2014-04-04 20:55:21 +02:00
fplayer . msg ( " <i>%s moved you into the faction %s. " , fme . describeTo ( fplayer , true ) , faction . getTag ( fplayer ) ) ;
2014-07-01 21:49:42 +02:00
}
2014-04-04 20:55:21 +02:00
faction . msg ( " <i>%s joined your faction. " , fplayer . describeTo ( faction , true ) ) ;
fplayer . resetFactionData ( ) ;
fplayer . setFaction ( faction ) ;
faction . deinvite ( fplayer ) ;
if ( Conf . logFactionJoin ) {
2014-07-01 21:49:42 +02:00
if ( samePlayer ) { P . p . log ( " %s joined the faction %s. " , fplayer . getName ( ) , faction . getTag ( ) ) ; }
else {
2014-04-04 20:55:21 +02:00
P . p . log ( " %s moved the player %s into the faction %s. " , fme . getName ( ) , fplayer . getName ( ) , faction . getTag ( ) ) ;
2014-07-01 21:49:42 +02:00
}
2014-04-04 20:55:21 +02:00
}
}
2011-03-19 13:00:03 +01:00
}