2011-07-18 22:06:02 +02:00
package com.massivecraft.factions ;
2011-02-06 13:36:11 +01:00
import java.util.* ;
import org.bukkit.ChatColor ;
2011-03-23 17:39:56 +01:00
import org.bukkit.Location ;
2011-02-06 13:36:11 +01:00
import org.bukkit.entity.Player ;
2011-07-18 22:06:02 +02:00
2011-10-12 17:25:01 +02:00
import com.massivecraft.factions.iface.EconomyParticipator ;
import com.massivecraft.factions.iface.RelationParticipator ;
import com.massivecraft.factions.integration.Econ ;
2012-05-09 03:32:04 +02:00
import com.massivecraft.factions.integration.SpoutFeatures ;
2011-10-24 02:33:30 +02:00
import com.massivecraft.factions.struct.FFlag ;
2011-10-24 01:37:51 +02:00
import com.massivecraft.factions.struct.FPerm ;
2011-10-23 17:30:41 +02:00
import com.massivecraft.factions.struct.Rel ;
2011-07-18 22:06:02 +02:00
import com.massivecraft.factions.util.* ;
2011-10-08 22:03:44 +02:00
import com.massivecraft.factions.zcore.persist.Entity ;
2011-02-06 13:36:11 +01:00
2011-10-12 17:25:01 +02:00
public class Faction extends Entity implements EconomyParticipator
2011-10-08 22:03:44 +02:00
{
// FIELD: relationWish
2011-10-23 17:30:41 +02:00
private Map < String , Rel > relationWish ;
2012-01-13 10:46:31 +01:00
// FIELD: fplayers
// speedy lookup of players in faction
2012-01-28 19:11:12 +01:00
private transient Set < FPlayer > fplayers = new HashSet < FPlayer > ( ) ;
2012-01-13 10:46:31 +01:00
2011-10-08 22:03:44 +02:00
// FIELD: invites
// Where string is a lowercase player name
private Set < String > invites ;
2011-10-24 03:02:25 +02:00
public void invite ( FPlayer fplayer ) { this . invites . add ( fplayer . getId ( ) . toLowerCase ( ) ) ; }
public void deinvite ( FPlayer fplayer ) { this . invites . remove ( fplayer . getId ( ) . toLowerCase ( ) ) ; }
public boolean isInvited ( FPlayer fplayer ) { return this . invites . contains ( fplayer . getId ( ) . toLowerCase ( ) ) ; }
2011-03-22 17:20:21 +01:00
2011-10-08 22:03:44 +02:00
// FIELD: open
2011-03-22 17:20:21 +01:00
private boolean open ;
2011-10-08 22:03:44 +02:00
public boolean getOpen ( ) { return open ; }
public void setOpen ( boolean isOpen ) { open = isOpen ; }
// FIELD: tag
private String tag ;
public String getTag ( ) { return this . tag ; }
public String getTag ( String prefix ) { return prefix + this . tag ; }
2011-10-24 09:28:08 +02:00
public String getTag ( RelationParticipator observer )
2011-10-08 22:03:44 +02:00
{
2011-10-24 09:28:08 +02:00
if ( observer = = null )
2011-10-08 22:03:44 +02:00
{
2011-06-30 12:56:02 +02:00
return getTag ( ) ;
2011-10-08 22:03:44 +02:00
}
2011-10-24 09:28:08 +02:00
return this . getTag ( this . getColorTo ( observer ) . toString ( ) ) ;
2011-03-22 18:48:09 +01:00
}
2011-10-08 22:03:44 +02:00
public void setTag ( String str )
{
if ( Conf . factionTagForceUpperCase )
{
2011-03-22 18:48:09 +01:00
str = str . toUpperCase ( ) ;
}
this . tag = str ;
}
2011-10-08 22:03:44 +02:00
public String getComparisonTag ( ) { return MiscUtil . getComparisonString ( this . tag ) ; }
2011-03-22 18:48:09 +01:00
2011-10-08 22:03:44 +02:00
// FIELD: description
private String description ;
public String getDescription ( ) { return this . description ; }
public void setDescription ( String value ) { this . description = value ; }
2011-03-23 17:39:56 +01:00
2011-10-08 22:03:44 +02:00
// FIELD: home
2012-03-14 19:06:38 +01:00
private LazyLocation home ;
public void setHome ( Location home ) { this . home = new LazyLocation ( home ) ; }
2011-10-08 22:03:44 +02:00
public boolean hasHome ( ) { return this . getHome ( ) ! = null ; }
2012-03-14 19:06:38 +01:00
public Location getHome ( )
{
confirmValidHome ( ) ;
return ( this . home ! = null ) ? this . home . getLocation ( ) : null ;
}
2011-10-08 22:03:44 +02:00
public void confirmValidHome ( )
{
2012-05-08 19:47:46 +02:00
if ( ! Conf . homesMustBeInClaimedTerritory | | this . home = = null | | ( this . home . getLocation ( ) ! = null & & Board . getFactionAt ( new FLocation ( this . home . getLocation ( ) ) ) = = this ) )
2011-06-30 12:17:34 +02:00
return ;
2011-10-13 14:41:07 +02:00
msg ( " <b>Your faction home has been un-set since it is no longer in your territory. " ) ;
2011-06-30 12:17:34 +02:00
this . home = null ;
}
2011-10-08 22:03:44 +02:00
2011-10-12 17:25:01 +02:00
// FIELD: account (fake field)
2011-10-08 22:03:44 +02:00
// Bank functions
2011-10-13 14:41:07 +02:00
public double money ;
2012-01-17 02:38:14 +01:00
public String getAccountId ( )
2011-10-12 17:25:01 +02:00
{
2012-01-17 02:38:14 +01:00
String aid = " faction- " + this . getId ( ) ;
2011-10-12 18:48:47 +02:00
// We need to override the default money given to players.
2012-01-17 02:38:14 +01:00
if ( ! Econ . hasAccount ( aid ) )
Econ . setBalance ( aid , 0 ) ;
return aid ;
2011-10-12 17:25:01 +02:00
}
2012-05-09 03:24:07 +02:00
// FIELD: cape
private String cape ;
public String getCape ( ) { return cape ; }
2012-05-09 03:32:04 +02:00
public void setCape ( String val ) { this . cape = val ; SpoutFeatures . updateCape ( this , null ) ; }
2012-01-17 02:38:14 +01:00
2012-01-28 18:56:51 +01:00
// FIELD: powerBoost
// special increase/decrease to default and max power for this faction
private double powerBoost ;
public double getPowerBoost ( ) { return this . powerBoost ; }
public void setPowerBoost ( double powerBoost ) { this . powerBoost = powerBoost ; }
2011-10-23 20:50:49 +02:00
// FIELDS: Flag management
// TODO: This will save... defaults if they where changed to...
2011-10-24 02:33:30 +02:00
private Map < FFlag , Boolean > flagOverrides ; // Contains the modifications to the default values
public boolean getFlag ( FFlag flag )
2011-10-23 20:50:49 +02:00
{
Boolean ret = this . flagOverrides . get ( flag ) ;
if ( ret = = null ) ret = flag . getDefault ( ) ;
return ret ;
}
2011-10-24 02:33:30 +02:00
public void setFlag ( FFlag flag , boolean value )
2011-10-23 20:50:49 +02:00
{
2011-10-23 23:17:02 +02:00
if ( Conf . factionFlagDefaults . get ( flag ) . equals ( value ) )
2011-10-23 20:50:49 +02:00
{
this . flagOverrides . remove ( flag ) ;
return ;
}
this . flagOverrides . put ( flag , value ) ;
}
2011-10-23 23:17:02 +02:00
2011-10-23 20:50:49 +02:00
// FIELDS: Permission <-> Groups management
2011-10-24 01:37:51 +02:00
private Map < FPerm , Set < Rel > > permOverrides ; // Contains the modifications to the default values
public Set < Rel > getPermittedRelations ( FPerm perm )
2011-10-23 23:17:02 +02:00
{
Set < Rel > ret = this . permOverrides . get ( perm ) ;
if ( ret = = null ) ret = perm . getDefault ( ) ;
return ret ;
}
2011-10-25 21:18:08 +02:00
2012-05-09 06:29:52 +02:00
/ *
2011-10-25 21:18:08 +02:00
public void addPermittedRelation ( FPerm perm , Rel rel )
{
Set < Rel > newPermittedRelations = EnumSet . noneOf ( Rel . class ) ;
newPermittedRelations . addAll ( this . getPermittedRelations ( perm ) ) ;
newPermittedRelations . add ( rel ) ;
this . setPermittedRelations ( perm , newPermittedRelations ) ;
}
public void removePermittedRelation ( FPerm perm , Rel rel )
{
Set < Rel > newPermittedRelations = EnumSet . noneOf ( Rel . class ) ;
newPermittedRelations . addAll ( this . getPermittedRelations ( perm ) ) ;
newPermittedRelations . remove ( rel ) ;
this . setPermittedRelations ( perm , newPermittedRelations ) ;
2012-05-09 06:29:52 +02:00
} * /
public void setRelationPermitted ( FPerm perm , Rel rel , boolean permitted )
{
Set < Rel > newPermittedRelations = EnumSet . noneOf ( Rel . class ) ;
newPermittedRelations . addAll ( this . getPermittedRelations ( perm ) ) ;
if ( permitted )
{
newPermittedRelations . add ( rel ) ;
}
else
{
newPermittedRelations . remove ( rel ) ;
}
this . setPermittedRelations ( perm , newPermittedRelations ) ;
2011-10-25 21:18:08 +02:00
}
2011-10-24 02:33:30 +02:00
public void setPermittedRelations ( FPerm perm , Set < Rel > rels )
2011-10-23 23:17:02 +02:00
{
2011-10-25 21:18:08 +02:00
if ( perm . getDefault ( ) . equals ( rels ) )
2011-10-23 23:17:02 +02:00
{
this . permOverrides . remove ( perm ) ;
return ;
}
2011-10-24 02:33:30 +02:00
this . permOverrides . put ( perm , rels ) ;
}
public void setPermittedRelations ( FPerm perm , Rel . . . rels )
{
Set < Rel > temp = new HashSet < Rel > ( ) ;
temp . addAll ( Arrays . asList ( rels ) ) ;
this . setPermittedRelations ( perm , temp ) ;
2011-10-23 23:17:02 +02:00
}
2011-10-23 20:50:49 +02:00
2011-10-22 18:12:15 +02:00
2011-10-08 22:03:44 +02:00
// -------------------------------------------- //
// Construct
// -------------------------------------------- //
public Faction ( )
{
2011-10-23 17:30:41 +02:00
this . relationWish = new HashMap < String , Rel > ( ) ;
2011-10-08 22:03:44 +02:00
this . invites = new HashSet < String > ( ) ;
this . open = Conf . newFactionsDefaultOpen ;
this . tag = " ??? " ;
this . description = " Default faction description :( " ;
this . money = 0 . 0 ;
2012-01-28 18:56:51 +01:00
this . powerBoost = 0 . 0 ;
2011-10-24 02:33:30 +02:00
this . flagOverrides = new LinkedHashMap < FFlag , Boolean > ( ) ;
2011-10-24 01:37:51 +02:00
this . permOverrides = new LinkedHashMap < FPerm , Set < Rel > > ( ) ;
2011-08-05 10:50:47 +02:00
}
2011-10-08 22:03:44 +02:00
2011-08-05 10:50:47 +02:00
2011-03-23 17:39:56 +01:00
// -------------------------------
// Understand the types
// -------------------------------
2011-10-23 20:50:49 +02:00
// TODO: These should be gone after the refactoring...
2011-10-08 22:03:44 +02:00
public boolean isNormal ( )
{
2011-10-23 22:08:57 +02:00
//return ! (this.isNone() || this.isSafeZone() || this.isWarZone());
return ! this . isNone ( ) ;
2011-03-23 17:39:56 +01:00
}
2011-10-08 22:03:44 +02:00
public boolean isNone ( )
{
return this . getId ( ) . equals ( " 0 " ) ;
2011-03-23 17:39:56 +01:00
}
2011-03-22 17:20:21 +01:00
// -------------------------------
2011-10-22 17:42:13 +02:00
// Relation and relation colors
2011-03-22 17:20:21 +01:00
// -------------------------------
2011-10-12 17:25:01 +02:00
@Override
2011-10-24 11:07:06 +02:00
public String describeTo ( RelationParticipator observer , boolean ucfirst )
2011-10-12 17:25:01 +02:00
{
2011-10-24 11:07:06 +02:00
return RelationUtil . describeThatToMe ( this , observer , ucfirst ) ;
2011-10-12 17:25:01 +02:00
}
@Override
2011-10-24 11:07:06 +02:00
public String describeTo ( RelationParticipator observer )
2011-10-12 17:25:01 +02:00
{
2011-10-24 11:07:06 +02:00
return RelationUtil . describeThatToMe ( this , observer ) ;
2011-10-12 17:25:01 +02:00
}
@Override
2011-10-24 11:07:06 +02:00
public Rel getRelationTo ( RelationParticipator observer )
2011-10-12 17:25:01 +02:00
{
2011-10-24 11:07:06 +02:00
return RelationUtil . getRelationOfThatToMe ( this , observer ) ;
2011-10-12 17:25:01 +02:00
}
@Override
2011-10-24 11:07:06 +02:00
public Rel getRelationTo ( RelationParticipator observer , boolean ignorePeaceful )
2011-10-12 17:25:01 +02:00
{
2011-10-24 11:07:06 +02:00
return RelationUtil . getRelationOfThatToMe ( this , observer , ignorePeaceful ) ;
2011-10-12 17:25:01 +02:00
}
@Override
2011-10-24 11:07:06 +02:00
public ChatColor getColorTo ( RelationParticipator observer )
2011-10-12 17:25:01 +02:00
{
2011-10-24 11:07:06 +02:00
return RelationUtil . getColorOfThatToMe ( this , observer ) ;
2011-10-12 17:25:01 +02:00
}
2011-10-23 17:30:41 +02:00
public Rel getRelationWish ( Faction otherFaction )
2011-10-08 22:03:44 +02:00
{
if ( this . relationWish . containsKey ( otherFaction . getId ( ) ) )
{
2011-03-22 17:20:21 +01:00
return this . relationWish . get ( otherFaction . getId ( ) ) ;
}
2011-10-23 17:30:41 +02:00
return Rel . NEUTRAL ;
2011-03-22 17:20:21 +01:00
}
2011-10-23 17:30:41 +02:00
public void setRelationWish ( Faction otherFaction , Rel relation )
2011-10-08 22:03:44 +02:00
{
2011-10-23 17:30:41 +02:00
if ( this . relationWish . containsKey ( otherFaction . getId ( ) ) & & relation . equals ( Rel . NEUTRAL ) )
2011-10-08 22:03:44 +02:00
{
2011-03-22 17:20:21 +01:00
this . relationWish . remove ( otherFaction . getId ( ) ) ;
2011-10-08 22:03:44 +02:00
}
else
{
2011-03-22 17:20:21 +01:00
this . relationWish . put ( otherFaction . getId ( ) , relation ) ;
}
}
2011-11-24 16:53:59 +01:00
public Map < Rel , List < String > > getFactionTagsPerRelation ( RelationParticipator rp )
2012-11-06 16:43:27 +01:00
{
return getFactionTagsPerRelation ( rp , false ) ;
}
// onlyNonNeutral option provides substantial performance boost on large servers for listing only non-neutral factions
public Map < Rel , List < String > > getFactionTagsPerRelation ( RelationParticipator rp , boolean onlyNonNeutral )
2011-11-24 16:27:14 +01:00
{
Map < Rel , List < String > > ret = new HashMap < Rel , List < String > > ( ) ;
for ( Rel rel : Rel . values ( ) )
{
ret . put ( rel , new ArrayList < String > ( ) ) ;
}
for ( Faction faction : Factions . i . get ( ) )
{
Rel relation = faction . getRelationTo ( this ) ;
2012-11-06 16:43:27 +01:00
if ( onlyNonNeutral & & relation = = Rel . NEUTRAL ) continue ;
2011-11-24 16:53:59 +01:00
ret . get ( relation ) . add ( faction . getTag ( rp ) ) ;
2011-11-24 16:27:14 +01:00
}
return ret ;
}
2011-10-24 03:02:25 +02:00
// TODO: Implement a has enough feature.
2011-02-06 13:36:11 +01:00
//----------------------------------------------//
// Power
//----------------------------------------------//
2011-10-08 22:03:44 +02:00
public double getPower ( )
{
2011-10-24 02:33:30 +02:00
if ( this . getFlag ( FFlag . INFPOWER ) )
2011-10-22 18:12:15 +02:00
{
2011-10-23 20:50:49 +02:00
return 999999 ;
2011-10-22 18:12:15 +02:00
}
2011-02-07 21:42:14 +01:00
double ret = 0 ;
2012-01-13 10:46:31 +01:00
for ( FPlayer fplayer : fplayers )
2011-10-21 20:08:54 +02:00
{
2011-03-23 12:00:38 +01:00
ret + = fplayer . getPower ( ) ;
2011-02-06 13:36:11 +01:00
}
2011-10-21 20:08:54 +02:00
if ( Conf . powerFactionMax > 0 & & ret > Conf . powerFactionMax )
{
2011-07-24 13:10:48 +02:00
ret = Conf . powerFactionMax ;
}
2012-01-28 18:56:51 +01:00
return ret + this . powerBoost ;
2011-02-06 13:36:11 +01:00
}
2011-10-21 20:08:54 +02:00
public double getPowerMax ( )
{
2011-10-24 02:33:30 +02:00
if ( this . getFlag ( FFlag . INFPOWER ) )
2011-10-22 18:12:15 +02:00
{
2011-10-23 20:50:49 +02:00
return 999999 ;
2011-10-22 18:12:15 +02:00
}
2011-02-07 21:42:14 +01:00
double ret = 0 ;
2012-01-13 10:46:31 +01:00
for ( FPlayer fplayer : fplayers )
2011-10-21 20:08:54 +02:00
{
2011-03-23 12:00:38 +01:00
ret + = fplayer . getPowerMax ( ) ;
2011-02-06 13:36:11 +01:00
}
2011-10-21 20:08:54 +02:00
if ( Conf . powerFactionMax > 0 & & ret > Conf . powerFactionMax )
{
2011-07-24 13:10:48 +02:00
ret = Conf . powerFactionMax ;
}
2012-01-28 18:56:51 +01:00
return ret + this . powerBoost ;
2011-02-06 13:36:11 +01:00
}
2011-10-21 20:08:54 +02:00
public int getPowerRounded ( )
{
2011-02-06 13:36:11 +01:00
return ( int ) Math . round ( this . getPower ( ) ) ;
}
2011-10-21 20:08:54 +02:00
public int getPowerMaxRounded ( )
{
2011-02-06 13:36:11 +01:00
return ( int ) Math . round ( this . getPowerMax ( ) ) ;
}
public int getLandRounded ( ) {
2011-03-22 17:20:21 +01:00
return Board . getFactionCoordCount ( this ) ;
2011-02-06 13:36:11 +01:00
}
2011-10-21 20:08:54 +02:00
public int getLandRoundedInWorld ( String worldName )
{
2011-06-30 13:13:47 +02:00
return Board . getFactionCoordCountInWorld ( this , worldName ) ;
}
2011-10-21 20:08:54 +02:00
public boolean hasLandInflation ( )
{
2011-02-12 18:05:05 +01:00
return this . getLandRounded ( ) > this . getPowerRounded ( ) ;
2011-02-06 13:36:11 +01:00
}
// -------------------------------
2011-10-22 17:42:13 +02:00
// FPlayers
2011-02-06 13:36:11 +01:00
// -------------------------------
2012-01-13 10:46:31 +01:00
// maintain the reference list of FPlayers in this faction
public void refreshFPlayers ( )
2011-10-08 22:03:44 +02:00
{
2012-01-13 10:46:31 +01:00
fplayers . clear ( ) ;
if ( this . isNone ( ) ) return ;
2011-06-10 21:14:02 +02:00
2011-10-08 22:03:44 +02:00
for ( FPlayer fplayer : FPlayers . i . get ( ) )
{
if ( fplayer . getFaction ( ) = = this )
{
2012-01-13 10:46:31 +01:00
fplayers . add ( fplayer ) ;
2011-02-06 13:36:11 +01:00
}
}
2012-01-13 10:46:31 +01:00
}
2012-01-28 19:11:12 +01:00
protected boolean addFPlayer ( FPlayer fplayer )
2012-01-13 10:46:31 +01:00
{
if ( this . isNone ( ) ) return false ;
2011-06-10 21:14:02 +02:00
2012-01-13 10:46:31 +01:00
return fplayers . add ( fplayer ) ;
}
2012-01-28 19:11:12 +01:00
protected boolean removeFPlayer ( FPlayer fplayer )
2012-01-13 10:46:31 +01:00
{
if ( this . isNone ( ) ) return false ;
return fplayers . remove ( fplayer ) ;
}
public Set < FPlayer > getFPlayers ( )
{
// return a shallow copy of the FPlayer list, to prevent tampering and concurrency issues
2012-01-27 22:22:32 +01:00
Set < FPlayer > ret = new HashSet < FPlayer > ( fplayers ) ;
2011-02-06 13:36:11 +01:00
return ret ;
}
2012-01-13 10:46:31 +01:00
public Set < FPlayer > getFPlayersWhereOnline ( boolean online )
2011-10-08 22:03:44 +02:00
{
2012-01-13 10:46:31 +01:00
Set < FPlayer > ret = new HashSet < FPlayer > ( ) ;
2011-06-10 21:14:02 +02:00
2012-01-13 10:46:31 +01:00
for ( FPlayer fplayer : fplayers )
2011-10-08 22:03:44 +02:00
{
2012-01-13 10:46:31 +01:00
if ( fplayer . isOnline ( ) = = online )
2011-10-08 22:03:44 +02:00
{
2011-03-22 17:20:21 +01:00
ret . add ( fplayer ) ;
2011-02-06 13:36:11 +01:00
}
}
2011-06-10 21:14:02 +02:00
2011-02-06 13:36:11 +01:00
return ret ;
}
2011-10-23 17:55:53 +02:00
public FPlayer getFPlayerLeader ( )
2011-10-08 22:03:44 +02:00
{
2011-10-24 02:33:30 +02:00
//if ( ! this.isNormal()) return null;
2011-08-02 00:54:05 +02:00
2012-01-13 10:46:31 +01:00
for ( FPlayer fplayer : fplayers )
2011-10-08 22:03:44 +02:00
{
2012-01-13 10:46:31 +01:00
if ( fplayer . getRole ( ) = = Rel . LEADER )
2011-10-08 22:03:44 +02:00
{
2011-08-02 00:54:05 +02:00
return fplayer ;
}
}
return null ;
}
2011-10-23 17:30:41 +02:00
public ArrayList < FPlayer > getFPlayersWhereRole ( Rel role )
2011-10-22 17:42:13 +02:00
{
2011-03-18 17:33:23 +01:00
ArrayList < FPlayer > ret = new ArrayList < FPlayer > ( ) ;
2011-10-24 02:33:30 +02:00
//if ( ! this.isNormal()) return ret;
2011-02-06 13:36:11 +01:00
2012-01-13 10:46:31 +01:00
for ( FPlayer fplayer : fplayers )
2011-10-22 17:42:13 +02:00
{
2012-01-13 10:46:31 +01:00
if ( fplayer . getRole ( ) = = role )
2011-10-22 17:42:13 +02:00
{
2011-03-22 17:20:21 +01:00
ret . add ( fplayer ) ;
2011-02-06 13:36:11 +01:00
}
}
return ret ;
}
2011-10-08 22:03:44 +02:00
public ArrayList < Player > getOnlinePlayers ( )
{
2011-02-06 13:36:11 +01:00
ArrayList < Player > ret = new ArrayList < Player > ( ) ;
2011-10-23 22:08:57 +02:00
//if (this.isPlayerFreeType()) return ret;
2011-06-10 21:14:02 +02:00
2011-10-08 22:03:44 +02:00
for ( Player player : P . p . getServer ( ) . getOnlinePlayers ( ) )
{
FPlayer fplayer = FPlayers . i . get ( player ) ;
if ( fplayer . getFaction ( ) = = this )
{
2011-02-06 13:36:11 +01:00
ret . add ( player ) ;
}
}
2011-06-10 21:14:02 +02:00
2011-02-06 13:36:11 +01:00
return ret ;
}
2011-12-18 14:50:41 +01:00
// used when current leader is about to be removed from the faction; promotes new leader, or disbands faction if no other members left
public void promoteNewLeader ( )
{
if ( ! this . isNormal ( ) ) return ;
2012-01-19 04:21:26 +01:00
if ( this . getFlag ( FFlag . PERMANENT ) & & Conf . permanentFactionsDisableLeaderPromotion ) return ;
2011-12-18 14:50:41 +01:00
FPlayer oldLeader = this . getFPlayerLeader ( ) ;
// get list of officers, or list of normal members if there are no officers
ArrayList < FPlayer > replacements = this . getFPlayersWhereRole ( Rel . OFFICER ) ;
if ( replacements = = null | | replacements . isEmpty ( ) )
replacements = this . getFPlayersWhereRole ( Rel . MEMBER ) ;
if ( replacements = = null | | replacements . isEmpty ( ) )
{ // faction leader is the only member; one-man faction
if ( this . getFlag ( FFlag . PERMANENT ) )
{
2012-01-18 13:01:50 +01:00
if ( oldLeader ! = null )
oldLeader . setRole ( Rel . MEMBER ) ;
2011-12-18 14:50:41 +01:00
return ;
}
// no members left and faction isn't permanent, so disband it
if ( Conf . logFactionDisband )
P . p . log ( " The faction " + this . getTag ( ) + " ( " + this . getId ( ) + " ) has been disbanded since it has no members left. " ) ;
for ( FPlayer fplayer : FPlayers . i . getOnline ( ) )
{
fplayer . msg ( " The faction %s<i> was disbanded. " , this . getTag ( fplayer ) ) ;
}
this . detach ( ) ;
}
else
{ // promote new faction leader
2012-01-18 13:01:50 +01:00
if ( oldLeader ! = null )
oldLeader . setRole ( Rel . MEMBER ) ;
2011-12-18 14:50:41 +01:00
replacements . get ( 0 ) . setRole ( Rel . LEADER ) ;
2012-01-18 13:01:50 +01:00
this . msg ( " <i>Faction leader <h>%s<i> has been removed. %s<i> has been promoted as the new faction leader. " , oldLeader = = null ? " " : oldLeader . getName ( ) , replacements . get ( 0 ) . getName ( ) ) ;
2011-12-18 14:50:41 +01:00
P . p . log ( " Faction " + this . getTag ( ) + " ( " + this . getId ( ) + " ) leader was removed. Replacement leader: " + replacements . get ( 0 ) . getName ( ) ) ;
}
}
2011-02-06 13:36:11 +01:00
//----------------------------------------------//
2011-03-22 17:20:21 +01:00
// Messages
2011-02-06 13:36:11 +01:00
//----------------------------------------------//
2011-10-10 13:40:24 +02:00
public void msg ( String message , Object . . . args )
2011-10-09 14:53:38 +02:00
{
message = P . p . txt . parse ( message , args ) ;
for ( FPlayer fplayer : this . getFPlayersWhereOnline ( true ) )
{
fplayer . sendMessage ( message ) ;
}
}
2011-10-08 22:03:44 +02:00
public void sendMessage ( String message )
{
for ( FPlayer fplayer : this . getFPlayersWhereOnline ( true ) )
{
2011-03-22 17:20:21 +01:00
fplayer . sendMessage ( message ) ;
2011-02-06 13:36:11 +01:00
}
}
2011-10-08 22:03:44 +02:00
public void sendMessage ( List < String > messages )
{
for ( FPlayer fplayer : this . getFPlayersWhereOnline ( true ) )
{
2011-03-22 17:20:21 +01:00
fplayer . sendMessage ( messages ) ;
2011-02-06 13:36:11 +01:00
}
}
2011-11-27 23:13:43 +01:00
//----------------------------------------------//
// Deprecated
//----------------------------------------------//
/ * *
* @deprecated As of release 1 . 7 , replaced by { @link # getFPlayerLeader ( ) }
* /
public FPlayer getFPlayerAdmin ( )
{
return getFPlayerLeader ( ) ;
}
/ * *
* @deprecated As of release 1 . 7 , replaced by { @link # getFlag ( ) }
* /
public boolean isPeaceful ( )
{
return this . getFlag ( FFlag . PEACEFUL ) ;
}
/ * *
* @deprecated As of release 1 . 7 , replaced by { @link # getFlag ( ) }
* /
public boolean getPeacefulExplosionsEnabled ( )
{
return this . getFlag ( FFlag . EXPLOSIONS ) ;
}
2012-04-27 20:29:41 +02:00
/ * *
* @deprecated As of release 1 . 7 , replaced by { @link # getFlag ( ) }
* /
public boolean noExplosionsInTerritory ( )
{
return ! this . getFlag ( FFlag . EXPLOSIONS ) ;
}
/ * *
* @deprecated As of release 1 . 7 , replaced by { @link # getFlag ( ) }
* /
public boolean isSafeZone ( )
{
return ! this . getFlag ( FFlag . EXPLOSIONS ) ;
}
2011-02-06 13:36:11 +01:00
//----------------------------------------------//
// Persistance and entity management
//----------------------------------------------//
2011-10-08 22:03:44 +02:00
2011-03-18 17:33:23 +01:00
2011-10-08 22:03:44 +02:00
@Override
public void postDetach ( )
{
2011-10-12 18:48:47 +02:00
if ( Econ . shouldBeUsed ( ) )
{
2012-01-17 02:38:14 +01:00
Econ . setBalance ( getAccountId ( ) , 0 ) ;
2011-10-12 18:48:47 +02:00
}
2011-10-08 22:03:44 +02:00
// Clean the board
Board . clean ( ) ;
// Clean the fplayers
FPlayers . i . clean ( ) ;
2011-03-18 17:33:23 +01:00
}
2011-02-06 13:36:11 +01:00
}