2011-07-18 22:06:02 +02:00
package com.massivecraft.factions ;
2011-02-06 13:36:11 +01: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 ;
2011-10-13 05:31:18 +02:00
import com.massivecraft.factions.struct.Permission ;
2011-07-18 22:06:02 +02:00
import com.massivecraft.factions.struct.Relation ;
import com.massivecraft.factions.struct.Role ;
2014-04-05 22:42:01 +02:00
import com.massivecraft.factions.util.LazyLocation ;
import com.massivecraft.factions.util.MiscUtil ;
import com.massivecraft.factions.util.RelationUtil ;
2011-10-08 22:03:44 +02:00
import com.massivecraft.factions.zcore.persist.Entity ;
2014-06-30 20:41:52 +02:00
import org.bukkit.Bukkit ;
2014-04-04 20:55:21 +02:00
import org.bukkit.ChatColor ;
import org.bukkit.Location ;
2014-06-30 20:41:52 +02:00
import org.bukkit.OfflinePlayer ;
2014-04-04 20:55:21 +02:00
import org.bukkit.entity.Player ;
import java.util.* ;
import java.util.Map.Entry ;
import java.util.concurrent.ConcurrentHashMap ;
public class Faction extends Entity implements EconomyParticipator {
// FIELD: relationWish
private Map < String , Relation > relationWish ;
// FIELD: claimOwnership
2014-04-15 21:19:00 +02:00
private Map < FLocation , Set < String > > claimOwnership = new ConcurrentHashMap < FLocation , Set < String > > ( ) ;
2014-04-04 20:55:21 +02:00
// FIELD: fplayers
// speedy lookup of players in faction
2014-04-15 21:19:00 +02:00
private transient Set < FPlayer > fplayers = new HashSet < FPlayer > ( ) ;
2014-04-04 20:55:21 +02:00
// FIELD: invites
private Set < String > invites ;
2014-04-17 03:10:12 +02:00
public Set < String > getInvites ( ) {
return invites ;
}
2014-04-04 20:55:21 +02:00
public void invite ( FPlayer fplayer ) {
2014-04-17 03:10:12 +02:00
this . invites . add ( fplayer . getId ( ) ) ;
2014-04-04 20:55:21 +02:00
}
public void deinvite ( FPlayer fplayer ) {
2014-04-17 03:10:12 +02:00
this . invites . remove ( fplayer . getId ( ) ) ;
2014-04-04 20:55:21 +02:00
}
public boolean isInvited ( FPlayer fplayer ) {
2014-04-17 03:10:12 +02:00
return this . invites . contains ( fplayer . getId ( ) ) ;
2014-04-04 20:55:21 +02:00
}
// FIELD: open
private boolean open ;
public boolean getOpen ( ) {
return open ;
}
public void setOpen ( boolean isOpen ) {
open = isOpen ;
}
// FIELD: peaceful
// "peaceful" status can only be set by server admins/moderators/ops, and prevents PvP and land capture to/from the faction
private boolean peaceful ;
public boolean isPeaceful ( ) {
return this . peaceful ;
}
public void setPeaceful ( boolean isPeaceful ) {
this . peaceful = isPeaceful ;
}
// FIELD: peacefulExplosionsEnabled
private boolean peacefulExplosionsEnabled ;
public void setPeacefulExplosionsEnabled ( boolean val ) {
peacefulExplosionsEnabled = val ;
}
public boolean getPeacefulExplosionsEnabled ( ) {
return this . peacefulExplosionsEnabled ;
}
public boolean noExplosionsInTerritory ( ) {
return this . peaceful & & ! peacefulExplosionsEnabled ;
}
// FIELD: permanent
// "permanent" status can only be set by server admins/moderators/ops, and allows the faction to remain even with 0 members
private boolean permanent ;
public boolean isPermanent ( ) {
return permanent | | ! this . isNormal ( ) ;
}
public void setPermanent ( boolean isPermanent ) {
permanent = isPermanent ;
}
// FIELD: tag
private String tag ;
public String getTag ( ) {
return this . tag ;
}
public String getTag ( String prefix ) {
return prefix + this . tag ;
}
public String getTag ( Faction otherFaction ) {
if ( otherFaction = = null ) {
return getTag ( ) ;
2014-07-01 21:52:40 +02:00
} return this . getTag ( this . getColorTo ( otherFaction ) . toString ( ) ) ;
2014-04-04 20:55:21 +02:00
}
2011-02-06 13:36:11 +01:00
2014-04-04 20:55:21 +02:00
public String getTag ( FPlayer otherFplayer ) {
if ( otherFplayer = = null ) {
return getTag ( ) ;
2014-07-01 21:52:40 +02:00
} return this . getTag ( this . getColorTo ( otherFplayer ) . toString ( ) ) ;
2014-04-04 20:55:21 +02:00
}
2011-02-06 13:36:11 +01:00
2014-04-04 20:55:21 +02:00
public void setTag ( String str ) {
if ( Conf . factionTagForceUpperCase ) {
str = str . toUpperCase ( ) ;
2014-07-01 21:52:40 +02:00
} this . tag = str ;
2014-04-04 20:55:21 +02:00
}
public String getComparisonTag ( ) {
return MiscUtil . getComparisonString ( this . tag ) ;
}
// FIELD: description
private String description ;
public String getDescription ( ) {
return this . description ;
}
public void setDescription ( String value ) {
this . description = value ;
}
// FIELD: home
private LazyLocation home ;
public void setHome ( Location home ) {
this . home = new LazyLocation ( home ) ;
}
public boolean hasHome ( ) {
return this . getHome ( ) ! = null ;
}
public Location getHome ( ) {
2014-07-01 21:52:40 +02:00
confirmValidHome ( ) ; return ( this . home ! = null ) ? this . home . getLocation ( ) : null ;
2014-04-04 20:55:21 +02:00
}
public void confirmValidHome ( ) {
2014-07-01 21:49:42 +02:00
if ( ! Conf . homesMustBeInClaimedTerritory | | this . home = = null | | ( this . home . getLocation ( ) ! = null & & Board . getFactionAt ( new FLocation ( this . home . getLocation ( ) ) ) = = this ) ) {
2014-04-04 20:55:21 +02:00
return ;
2014-07-01 21:49:42 +02:00
}
2014-04-04 20:55:21 +02:00
2014-07-01 21:52:40 +02:00
msg ( " <b>Your faction home has been un-set since it is no longer in your territory. " ) ; this . home = null ;
2014-04-04 20:55:21 +02:00
}
// FIELD: lastPlayerLoggedOffTime
private transient long lastPlayerLoggedOffTime ;
// FIELD: account (fake field)
// Bank functions
public double money ;
public String getAccountId ( ) {
String aid = " faction- " + this . getId ( ) ;
// We need to override the default money given to players.
2014-07-01 21:49:42 +02:00
if ( ! Econ . hasAccount ( aid ) ) { Econ . setBalance ( aid , 0 ) ; }
2014-04-04 20:55:21 +02:00
return aid ;
}
// FIELD: permanentPower
private Integer permanentPower ;
public Integer getPermanentPower ( ) {
return this . permanentPower ;
}
public void setPermanentPower ( Integer permanentPower ) {
this . permanentPower = permanentPower ;
}
public boolean hasPermanentPower ( ) {
return this . permanentPower ! = null ;
}
// 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 ;
}
// -------------------------------------------- //
// Construct
// -------------------------------------------- //
public Faction ( ) {
2014-07-01 21:52:40 +02:00
this . relationWish = new HashMap < String , Relation > ( ) ; this . invites = new HashSet < String > ( ) ;
this . open = Conf . newFactionsDefaultOpen ; this . tag = " ??? " ; this . description = " Default faction description :( " ;
this . lastPlayerLoggedOffTime = 0 ; this . peaceful = false ; this . peacefulExplosionsEnabled = false ;
this . permanent = false ; this . money = 0 . 0 ; this . powerBoost = 0 . 0 ;
2014-04-04 20:55:21 +02:00
}
// -------------------------------------------- //
// Extra Getters And Setters
// -------------------------------------------- //
public boolean noPvPInTerritory ( ) {
return isSafeZone ( ) | | ( peaceful & & Conf . peacefulTerritoryDisablePVP ) ;
}
public boolean noMonstersInTerritory ( ) {
return isSafeZone ( ) | | ( peaceful & & Conf . peacefulTerritoryDisableMonsters ) ;
}
// -------------------------------
// Understand the types
// -------------------------------
public boolean isNormal ( ) {
return ! ( this . isNone ( ) | | this . isSafeZone ( ) | | this . isWarZone ( ) ) ;
}
public boolean isNone ( ) {
return this . getId ( ) . equals ( " 0 " ) ;
}
public boolean isSafeZone ( ) {
return this . getId ( ) . equals ( " -1 " ) ;
}
public boolean isWarZone ( ) {
return this . getId ( ) . equals ( " -2 " ) ;
}
public boolean isPlayerFreeType ( ) {
return this . isSafeZone ( ) | | this . isWarZone ( ) ;
}
// -------------------------------
// Relation and relation colors
// -------------------------------
@Override
public String describeTo ( RelationParticipator that , boolean ucfirst ) {
return RelationUtil . describeThatToMe ( this , that , ucfirst ) ;
}
@Override
public String describeTo ( RelationParticipator that ) {
return RelationUtil . describeThatToMe ( this , that ) ;
}
@Override
public Relation getRelationTo ( RelationParticipator rp ) {
return RelationUtil . getRelationTo ( this , rp ) ;
}
@Override
public Relation getRelationTo ( RelationParticipator rp , boolean ignorePeaceful ) {
return RelationUtil . getRelationTo ( this , rp , ignorePeaceful ) ;
}
@Override
public ChatColor getColorTo ( RelationParticipator rp ) {
return RelationUtil . getColorOfThatToMe ( this , rp ) ;
}
public Relation getRelationWish ( Faction otherFaction ) {
if ( this . relationWish . containsKey ( otherFaction . getId ( ) ) ) {
return this . relationWish . get ( otherFaction . getId ( ) ) ;
2014-07-01 21:52:40 +02:00
} return Relation . NEUTRAL ;
2014-04-04 20:55:21 +02:00
}
public void setRelationWish ( Faction otherFaction , Relation relation ) {
if ( this . relationWish . containsKey ( otherFaction . getId ( ) ) & & relation . equals ( Relation . NEUTRAL ) ) {
this . relationWish . remove ( otherFaction . getId ( ) ) ;
2014-07-01 21:52:40 +02:00
} else {
2014-04-04 20:55:21 +02:00
this . relationWish . put ( otherFaction . getId ( ) , relation ) ;
}
}
//----------------------------------------------//
// Power
//----------------------------------------------//
public double getPower ( ) {
if ( this . hasPermanentPower ( ) ) {
return this . getPermanentPower ( ) ;
}
2014-07-01 21:52:40 +02:00
double ret = 0 ; for ( FPlayer fplayer : fplayers ) {
2014-04-04 20:55:21 +02:00
ret + = fplayer . getPower ( ) ;
2014-07-01 21:52:40 +02:00
} if ( Conf . powerFactionMax > 0 & & ret > Conf . powerFactionMax ) {
2014-04-04 20:55:21 +02:00
ret = Conf . powerFactionMax ;
2014-07-01 21:52:40 +02:00
} return ret + this . powerBoost ;
2014-04-04 20:55:21 +02:00
}
public double getPowerMax ( ) {
if ( this . hasPermanentPower ( ) ) {
return this . getPermanentPower ( ) ;
}
2014-07-01 21:52:40 +02:00
double ret = 0 ; for ( FPlayer fplayer : fplayers ) {
2014-04-04 20:55:21 +02:00
ret + = fplayer . getPowerMax ( ) ;
2014-07-01 21:52:40 +02:00
} if ( Conf . powerFactionMax > 0 & & ret > Conf . powerFactionMax ) {
2014-04-04 20:55:21 +02:00
ret = Conf . powerFactionMax ;
2014-07-01 21:52:40 +02:00
} return ret + this . powerBoost ;
2014-04-04 20:55:21 +02:00
}
public int getPowerRounded ( ) {
return ( int ) Math . round ( this . getPower ( ) ) ;
}
public int getPowerMaxRounded ( ) {
return ( int ) Math . round ( this . getPowerMax ( ) ) ;
}
public int getLandRounded ( ) {
return Board . getFactionCoordCount ( this ) ;
}
public int getLandRoundedInWorld ( String worldName ) {
return Board . getFactionCoordCountInWorld ( this , worldName ) ;
}
public boolean hasLandInflation ( ) {
return this . getLandRounded ( ) > this . getPowerRounded ( ) ;
}
// -------------------------------
// FPlayers
// -------------------------------
// maintain the reference list of FPlayers in this faction
public void refreshFPlayers ( ) {
2014-07-01 21:52:40 +02:00
fplayers . clear ( ) ; if ( this . isPlayerFreeType ( ) ) { return ; }
2014-04-04 20:55:21 +02:00
for ( FPlayer fplayer : FPlayers . i . get ( ) ) {
if ( fplayer . getFaction ( ) = = this ) {
fplayers . add ( fplayer ) ;
}
}
}
protected boolean addFPlayer ( FPlayer fplayer ) {
2014-07-01 21:49:42 +02:00
if ( this . isPlayerFreeType ( ) ) { return false ; }
2014-04-04 20:55:21 +02:00
return fplayers . add ( fplayer ) ;
}
protected boolean removeFPlayer ( FPlayer fplayer ) {
2014-07-01 21:49:42 +02:00
if ( this . isPlayerFreeType ( ) ) { return false ; }
2014-04-04 20:55:21 +02:00
return fplayers . remove ( fplayer ) ;
}
public Set < FPlayer > getFPlayers ( ) {
// return a shallow copy of the FPlayer list, to prevent tampering and concurrency issues
2014-07-01 21:52:40 +02:00
Set < FPlayer > ret = new HashSet < FPlayer > ( fplayers ) ; return ret ;
2014-04-04 20:55:21 +02:00
}
public Set < FPlayer > getFPlayersWhereOnline ( boolean online ) {
2014-04-15 21:19:00 +02:00
Set < FPlayer > ret = new HashSet < FPlayer > ( ) ;
2014-04-04 20:55:21 +02:00
for ( FPlayer fplayer : fplayers ) {
if ( fplayer . isOnline ( ) = = online ) {
ret . add ( fplayer ) ;
}
}
return ret ;
}
public FPlayer getFPlayerAdmin ( ) {
2014-07-01 21:49:42 +02:00
if ( ! this . isNormal ( ) ) { return null ; }
2014-04-04 20:55:21 +02:00
for ( FPlayer fplayer : fplayers ) {
if ( fplayer . getRole ( ) = = Role . ADMIN ) {
return fplayer ;
}
2014-07-01 21:52:40 +02:00
} return null ;
2014-04-04 20:55:21 +02:00
}
public ArrayList < FPlayer > getFPlayersWhereRole ( Role role ) {
2014-07-01 21:52:40 +02:00
ArrayList < FPlayer > ret = new ArrayList < FPlayer > ( ) ; if ( ! this . isNormal ( ) ) { return ret ; }
2014-04-04 20:55:21 +02:00
for ( FPlayer fplayer : fplayers ) {
if ( fplayer . getRole ( ) = = role ) {
ret . add ( fplayer ) ;
}
}
return ret ;
}
public ArrayList < Player > getOnlinePlayers ( ) {
2014-07-01 21:52:40 +02:00
ArrayList < Player > ret = new ArrayList < Player > ( ) ; if ( this . isPlayerFreeType ( ) ) { return ret ; }
2014-04-04 20:55:21 +02:00
for ( Player player : P . p . getServer ( ) . getOnlinePlayers ( ) ) {
2014-07-01 21:52:40 +02:00
FPlayer fplayer = FPlayers . i . get ( player ) ; if ( fplayer . getFaction ( ) = = this ) {
2014-04-04 20:55:21 +02:00
ret . add ( player ) ;
}
}
return ret ;
}
// slightly faster check than getOnlinePlayers() if you just want to see if there are any players online
public boolean hasPlayersOnline ( ) {
// only real factions can have players online, not safe zone / war zone
2014-07-01 21:49:42 +02:00
if ( this . isPlayerFreeType ( ) ) { return false ; }
2014-04-04 20:55:21 +02:00
for ( Player player : P . p . getServer ( ) . getOnlinePlayers ( ) ) {
2014-07-01 21:52:40 +02:00
FPlayer fplayer = FPlayers . i . get ( player ) ; if ( fplayer ! = null & & fplayer . getFaction ( ) = = this ) {
2014-04-04 20:55:21 +02:00
return true ;
}
}
// even if all players are technically logged off, maybe someone was on recently enough to not consider them officially offline yet
if ( Conf . considerFactionsReallyOfflineAfterXMinutes > 0 & & System . currentTimeMillis ( ) < lastPlayerLoggedOffTime + ( Conf . considerFactionsReallyOfflineAfterXMinutes * 60000 ) ) {
return true ;
2014-07-01 21:52:40 +02:00
} return false ;
2014-04-04 20:55:21 +02:00
}
public void memberLoggedOff ( ) {
if ( this . isNormal ( ) ) {
lastPlayerLoggedOffTime = System . currentTimeMillis ( ) ;
}
}
// 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 ( ) {
2014-07-01 21:49:42 +02:00
if ( ! this . isNormal ( ) ) { return ; }
if ( this . isPermanent ( ) & & Conf . permanentFactionsDisableLeaderPromotion ) { return ; }
2014-04-04 20:55:21 +02:00
FPlayer oldLeader = this . getFPlayerAdmin ( ) ;
// get list of moderators, or list of normal members if there are no moderators
ArrayList < FPlayer > replacements = this . getFPlayersWhereRole ( Role . MODERATOR ) ;
2014-07-01 21:49:42 +02:00
if ( replacements = = null | | replacements . isEmpty ( ) ) { replacements = this . getFPlayersWhereRole ( Role . NORMAL ) ; }
2014-04-04 20:55:21 +02:00
if ( replacements = = null | | replacements . isEmpty ( ) ) { // faction admin is the only member; one-man faction
if ( this . isPermanent ( ) ) {
2014-07-01 21:52:40 +02:00
if ( oldLeader ! = null ) { oldLeader . setRole ( Role . NORMAL ) ; } return ;
2014-04-04 20:55:21 +02:00
}
// no members left and faction isn't permanent, so disband it
2014-07-01 21:49:42 +02:00
if ( Conf . logFactionDisband ) {
2014-04-04 20:55:21 +02:00
P . p . log ( " The faction " + this . getTag ( ) + " ( " + this . getId ( ) + " ) has been disbanded since it has no members left. " ) ;
2014-07-01 21:49:42 +02:00
}
2014-04-04 20:55:21 +02:00
for ( FPlayer fplayer : FPlayers . i . getOnline ( ) ) {
fplayer . msg ( " The faction %s<i> was disbanded. " , this . getTag ( fplayer ) ) ;
}
this . detach ( ) ;
2014-07-01 21:52:40 +02:00
} else { // promote new faction admin
if ( oldLeader ! = null ) { oldLeader . setRole ( Role . NORMAL ) ; } replacements . get ( 0 ) . setRole ( Role . ADMIN ) ;
2014-04-04 20:55:21 +02:00
this . msg ( " <i>Faction admin <h>%s<i> has been removed. %s<i> has been promoted as the new faction admin. " , oldLeader = = null ? " " : oldLeader . getName ( ) , replacements . get ( 0 ) . getName ( ) ) ;
P . p . log ( " Faction " + this . getTag ( ) + " ( " + this . getId ( ) + " ) admin was removed. Replacement admin: " + replacements . get ( 0 ) . getName ( ) ) ;
}
}
//----------------------------------------------//
// Messages
//----------------------------------------------//
public void msg ( String message , Object . . . args ) {
message = P . p . txt . parse ( message , args ) ;
for ( FPlayer fplayer : this . getFPlayersWhereOnline ( true ) ) {
fplayer . sendMessage ( message ) ;
}
}
public void sendMessage ( String message ) {
for ( FPlayer fplayer : this . getFPlayersWhereOnline ( true ) ) {
fplayer . sendMessage ( message ) ;
}
}
public void sendMessage ( List < String > messages ) {
for ( FPlayer fplayer : this . getFPlayersWhereOnline ( true ) ) {
fplayer . sendMessage ( messages ) ;
}
}
//----------------------------------------------//
// Ownership of specific claims
//----------------------------------------------//
2014-04-17 03:10:12 +02:00
public Map < FLocation , Set < String > > getClaimOwnership ( ) {
return claimOwnership ;
}
2014-04-04 20:55:21 +02:00
public void clearAllClaimOwnership ( ) {
claimOwnership . clear ( ) ;
}
public void clearClaimOwnership ( FLocation loc ) {
claimOwnership . remove ( loc ) ;
}
2014-04-17 03:10:12 +02:00
public void clearClaimOwnership ( FPlayer player ) {
if ( id = = null | | id . isEmpty ( ) ) {
2014-04-04 20:55:21 +02:00
return ;
}
Set < String > ownerData ;
for ( Entry < FLocation , Set < String > > entry : claimOwnership . entrySet ( ) ) {
ownerData = entry . getValue ( ) ;
2014-07-01 21:49:42 +02:00
if ( ownerData = = null ) { continue ; }
2014-04-04 20:55:21 +02:00
2014-07-01 21:52:40 +02:00
Iterator < String > iter = ownerData . iterator ( ) ; while ( iter . hasNext ( ) ) {
2014-04-17 03:10:12 +02:00
if ( iter . next ( ) . equals ( player . getId ( ) ) ) {
2014-04-04 20:55:21 +02:00
iter . remove ( ) ;
}
}
if ( ownerData . isEmpty ( ) ) {
claimOwnership . remove ( entry . getKey ( ) ) ;
}
}
}
public int getCountOfClaimsWithOwners ( ) {
return claimOwnership . isEmpty ( ) ? 0 : claimOwnership . size ( ) ;
}
public boolean doesLocationHaveOwnersSet ( FLocation loc ) {
if ( claimOwnership . isEmpty ( ) | | ! claimOwnership . containsKey ( loc ) ) {
return false ;
}
2014-07-01 21:52:40 +02:00
Set < String > ownerData = claimOwnership . get ( loc ) ; return ownerData ! = null & & ! ownerData . isEmpty ( ) ;
2014-04-04 20:55:21 +02:00
}
2014-04-17 03:10:12 +02:00
public boolean isPlayerInOwnerList ( FPlayer player , FLocation loc ) {
2014-04-04 20:55:21 +02:00
if ( claimOwnership . isEmpty ( ) ) {
return false ;
2014-07-01 21:52:40 +02:00
} Set < String > ownerData = claimOwnership . get ( loc ) ; if ( ownerData = = null ) {
2014-04-04 20:55:21 +02:00
return false ;
2014-07-01 21:52:40 +02:00
} if ( ownerData . contains ( player . getId ( ) ) ) {
2014-04-04 20:55:21 +02:00
return true ;
}
return false ;
}
2014-04-17 03:10:12 +02:00
public void setPlayerAsOwner ( FPlayer player , FLocation loc ) {
2014-07-01 21:52:40 +02:00
Set < String > ownerData = claimOwnership . get ( loc ) ; if ( ownerData = = null ) {
2014-04-04 20:55:21 +02:00
ownerData = new HashSet < String > ( ) ;
2014-07-01 21:52:40 +02:00
} ownerData . add ( player . getId ( ) ) ; claimOwnership . put ( loc , ownerData ) ;
2014-04-04 20:55:21 +02:00
}
2014-04-17 03:10:12 +02:00
public void removePlayerAsOwner ( FPlayer player , FLocation loc ) {
2014-07-01 21:52:40 +02:00
Set < String > ownerData = claimOwnership . get ( loc ) ; if ( ownerData = = null ) {
2014-04-04 20:55:21 +02:00
return ;
2014-07-01 21:52:40 +02:00
} ownerData . remove ( player . getId ( ) ) ; claimOwnership . put ( loc , ownerData ) ;
2014-04-04 20:55:21 +02:00
}
public Set < String > getOwnerList ( FLocation loc ) {
return claimOwnership . get ( loc ) ;
}
public String getOwnerListString ( FLocation loc ) {
2014-07-01 21:52:40 +02:00
Set < String > ownerData = claimOwnership . get ( loc ) ; if ( ownerData = = null | | ownerData . isEmpty ( ) ) {
2014-04-04 20:55:21 +02:00
return " " ;
}
String ownerList = " " ;
2014-07-01 21:52:40 +02:00
Iterator < String > iter = ownerData . iterator ( ) ; while ( iter . hasNext ( ) ) {
2014-04-04 20:55:21 +02:00
if ( ! ownerList . isEmpty ( ) ) {
ownerList + = " , " ;
2014-07-01 21:52:40 +02:00
} OfflinePlayer offlinePlayer = Bukkit . getOfflinePlayer ( UUID . fromString ( iter . next ( ) ) ) ;
2014-06-30 20:41:52 +02:00
ownerList + = offlinePlayer ! = null ? offlinePlayer . getName ( ) : " null player " ;
2014-07-01 21:52:40 +02:00
} return ownerList ;
2014-04-04 20:55:21 +02:00
}
public boolean playerHasOwnershipRights ( FPlayer fplayer , FLocation loc ) {
// in own faction, with sufficient role or permission to bypass ownership?
2014-07-01 21:52:40 +02:00
if ( fplayer . getFaction ( ) = = this & & ( fplayer . getRole ( ) . isAtLeast ( Conf . ownedAreaModeratorsBypass ? Role . MODERATOR : Role . ADMIN ) | | Permission . OWNERSHIP_BYPASS . has ( fplayer . getPlayer ( ) ) ) ) {
2014-04-04 20:55:21 +02:00
return true ;
}
// make sure claimOwnership is initialized
2014-07-01 21:49:42 +02:00
if ( claimOwnership . isEmpty ( ) ) { return true ; }
2014-04-04 20:55:21 +02:00
// need to check the ownership list, then
Set < String > ownerData = claimOwnership . get ( loc ) ;
// if no owner list, owner list is empty, or player is in owner list, they're allowed
2014-07-01 21:49:42 +02:00
if ( ownerData = = null | | ownerData . isEmpty ( ) | | ownerData . contains ( fplayer . getId ( ) ) ) { return true ; }
2014-04-04 20:55:21 +02:00
return false ;
}
//----------------------------------------------//
// Persistance and entity management
//----------------------------------------------//
@Override
public void postDetach ( ) {
if ( Econ . shouldBeUsed ( ) ) {
Econ . setBalance ( getAccountId ( ) , 0 ) ;
}
// Clean the board
Board . clean ( ) ;
// Clean the fplayers
FPlayers . i . clean ( ) ;
}
2011-02-06 13:36:11 +01:00
}