2013-04-22 09:37:53 +02:00
package com.massivecraft.factions.entity ;
2011-02-06 13:36:11 +01:00
import java.util.* ;
2013-04-17 10:22:51 +02:00
import java.util.Map.Entry ;
2011-02-06 13:36:11 +01:00
2013-04-17 08:49:43 +02:00
import org.bukkit.Bukkit ;
2011-02-06 13:36:11 +01:00
import org.bukkit.ChatColor ;
2013-04-17 08:49:43 +02:00
import org.bukkit.command.CommandSender ;
2011-02-06 13:36:11 +01:00
import org.bukkit.entity.Player ;
2011-07-18 22:06:02 +02:00
2013-04-22 09:37:53 +02:00
import com.massivecraft.factions.EconomyParticipator ;
import com.massivecraft.factions.FFlag ;
import com.massivecraft.factions.FPerm ;
import com.massivecraft.factions.FactionEqualsPredictate ;
import com.massivecraft.factions.Factions ;
import com.massivecraft.factions.Lang ;
import com.massivecraft.factions.Rel ;
import com.massivecraft.factions.RelationParticipator ;
2011-07-18 22:06:02 +02:00
import com.massivecraft.factions.util.* ;
2013-04-17 13:16:22 +02:00
import com.massivecraft.mcore.mixin.Mixin ;
2013-06-18 09:07:05 +02:00
import com.massivecraft.mcore.money.Money ;
2013-04-11 11:11:31 +02:00
import com.massivecraft.mcore.ps.PS ;
2013-04-12 09:47:43 +02:00
import com.massivecraft.mcore.store.Entity ;
2013-04-17 14:44:08 +02:00
import com.massivecraft.mcore.util.MUtil ;
2013-04-17 08:49:43 +02:00
import com.massivecraft.mcore.util.SenderUtil ;
2013-06-18 09:07:05 +02:00
import com.massivecraft.mcore.util.Txt ;
2011-02-06 13:36:11 +01:00
2013-04-12 15:10:11 +02:00
public class Faction extends Entity < Faction > implements EconomyParticipator
2011-10-08 22:03:44 +02:00
{
2013-04-11 12:22:35 +02:00
// -------------------------------------------- //
// META
// -------------------------------------------- //
2013-04-12 09:47:43 +02:00
public static Faction get ( Object oid )
2013-04-11 12:22:35 +02:00
{
2013-04-22 12:26:13 +02:00
return FactionColls . get ( ) . get2 ( oid ) ;
2013-04-12 09:47:43 +02:00
}
2013-04-11 12:22:35 +02:00
// -------------------------------------------- //
// OVERRIDE: ENTITY
// -------------------------------------------- //
2013-04-12 09:47:43 +02:00
@Override
2013-04-11 12:22:35 +02:00
public Faction load ( Faction that )
{
2013-04-24 19:01:17 +02:00
this . setName ( that . name ) ;
2013-04-17 08:49:43 +02:00
this . setDescription ( that . description ) ;
2013-04-25 10:51:11 +02:00
this . setCreatedAtMillis ( that . createdAtMillis ) ;
2013-04-24 18:22:52 +02:00
this . setHome ( that . home ) ;
2013-04-17 12:08:30 +02:00
this . setPowerBoost ( that . powerBoost ) ;
2013-04-24 18:22:52 +02:00
this . setOpen ( that . open ) ;
2013-04-17 10:22:51 +02:00
this . setInvitedPlayerIds ( that . invitedPlayerIds ) ;
2013-04-25 08:34:10 +02:00
this . setRelationWishes ( that . relationWishes ) ;
this . setFlags ( that . flags ) ;
this . setPerms ( that . perms ) ;
2013-04-11 12:22:35 +02:00
return this ;
2013-04-12 08:56:26 +02:00
}
2013-06-18 09:07:05 +02:00
@Override
public void preDetach ( String id )
{
Money . set ( this , 0 ) ;
String universe = this . getUniverse ( ) ;
// Clean the board
BoardColls . get ( ) . getForUniverse ( universe ) . clean ( ) ;
// Clean the uplayers
UPlayerColls . get ( ) . getForUniverse ( universe ) . clean ( ) ;
}
2013-04-11 12:22:35 +02:00
// -------------------------------------------- //
// FIELDS: RAW
// -------------------------------------------- //
2013-04-17 10:22:51 +02:00
// In this section of the source code we place the field declarations only.
2013-04-17 15:30:21 +02:00
// Each field has it's own section further down since just the getter and setter logic takes up quite some place.
2013-04-11 12:22:35 +02:00
2013-04-17 10:22:51 +02:00
// The actual faction id looks something like "54947df8-0e9e-4471-a2f9-9af509fb5889" and that is not too easy to remember for humans.
// Thus we make use of a name. Since the id is used in all foreign key situations changing the name is fine.
2013-04-24 19:01:17 +02:00
// Null should never happen. The name must not be null.
private String name = null ;
2013-04-11 12:22:35 +02:00
2013-04-17 12:08:30 +02:00
// Factions can optionally set a description for themselves.
// This description can for example be seen in territorial alerts.
2013-04-24 14:42:52 +02:00
// Null means the faction has no description.
2013-04-17 10:22:51 +02:00
private String description = null ;
2011-10-08 22:03:44 +02:00
2013-04-25 10:51:11 +02:00
// We store the creation date for the faction.
// It can be displayed on info pages etc.
private long createdAtMillis = System . currentTimeMillis ( ) ;
2013-04-17 12:08:30 +02:00
// Factions can optionally set a home location.
// If they do their members can teleport there using /f home
2013-04-24 14:42:52 +02:00
// Null means the faction has no home.
2013-04-17 12:08:30 +02:00
private PS home = null ;
// Factions usually do not have a powerboost. It defaults to 0.
// The powerBoost is a custom increase/decrease to default and maximum power.
2013-04-24 14:42:52 +02:00
// Null means the faction has powerBoost (0).
2013-04-17 12:08:30 +02:00
private Double powerBoost = null ;
// Can anyone join the Faction?
// If the faction is open they can.
// If the faction is closed an invite is required.
2013-04-24 14:42:52 +02:00
// Null means default for the universe.
2013-04-17 10:22:51 +02:00
private Boolean open = null ;
2011-03-22 18:48:09 +01:00
2013-04-17 12:08:30 +02:00
// This is the ids of the invited players.
// They are actually "senderIds" since you can invite "@console" to your faction.
2013-04-24 14:42:52 +02:00
// Null means no one is invited
2013-04-17 10:22:51 +02:00
private Set < String > invitedPlayerIds = null ;
2013-04-17 12:08:30 +02:00
// The keys in this map are factionIds.
2013-04-24 14:42:52 +02:00
// Null means no special relation whishes.
2013-04-25 08:34:10 +02:00
private Map < String , Rel > relationWishes = null ;
2011-03-23 17:39:56 +01:00
2013-04-17 13:16:22 +02:00
// The flag overrides are modifications to the default values.
2013-04-24 14:42:52 +02:00
// Null means default for the universe.
2013-04-25 08:34:10 +02:00
private Map < FFlag , Boolean > flags = null ;
2011-10-23 23:17:02 +02:00
2013-04-17 13:16:22 +02:00
// The perm overrides are modifications to the default values.
2013-04-24 14:42:52 +02:00
// Null means default for the universe.
2013-04-25 08:34:10 +02:00
private Map < FPerm , Set < Rel > > perms = null ;
2011-10-23 20:50:49 +02:00
2013-04-11 12:22:35 +02:00
// -------------------------------------------- //
2013-04-17 10:22:51 +02:00
// FIELD: id
2013-04-11 12:22:35 +02:00
// -------------------------------------------- //
2013-04-17 10:22:51 +02:00
// FINER
2013-04-11 12:22:35 +02:00
2013-04-17 10:22:51 +02:00
public boolean isNone ( )
2013-04-11 12:22:35 +02:00
{
2013-04-24 13:50:02 +02:00
return this . getId ( ) . equals ( UConf . get ( this ) . factionIdNone ) ;
2013-04-17 10:22:51 +02:00
}
public boolean isNormal ( )
{
return ! this . isNone ( ) ;
}
// -------------------------------------------- //
2013-04-24 19:01:17 +02:00
// FIELD: name
2013-04-17 10:22:51 +02:00
// -------------------------------------------- //
// RAW
2013-04-24 19:01:17 +02:00
public String getName ( )
2013-04-11 12:22:35 +02:00
{
2013-04-24 19:01:17 +02:00
String ret = this . name ;
2013-04-24 16:40:35 +02:00
UConf uconf = UConf . get ( this ) ;
2013-04-24 19:01:17 +02:00
if ( uconf ! = null & & UConf . get ( this ) . factionNameForceUpperCase )
2013-04-11 12:22:35 +02:00
{
2013-04-17 10:22:51 +02:00
ret = ret . toUpperCase ( ) ;
2013-04-11 12:22:35 +02:00
}
2013-04-24 16:40:35 +02:00
2013-04-17 10:22:51 +02:00
return ret ;
2013-04-11 12:22:35 +02:00
}
2013-04-25 08:34:10 +02:00
public void setName ( String name )
2013-04-11 12:22:35 +02:00
{
2013-04-25 08:34:10 +02:00
// Clean input
String target = name ;
// Detect Nochange
if ( MUtil . equals ( this . name , target ) ) return ;
2013-04-24 16:40:35 +02:00
2013-04-25 08:34:10 +02:00
// Apply
this . name = target ;
// Mark as changed
2013-04-17 10:22:51 +02:00
this . changed ( ) ;
2013-04-11 12:22:35 +02:00
}
2013-04-17 10:22:51 +02:00
// FINER
2013-04-11 12:22:35 +02:00
2013-04-24 19:01:17 +02:00
public String getComparisonName ( )
2013-04-11 12:22:35 +02:00
{
2013-04-24 19:01:17 +02:00
return MiscUtil . getComparisonString ( this . getName ( ) ) ;
2013-04-11 12:22:35 +02:00
}
2013-04-24 19:01:17 +02:00
public String getName ( String prefix )
2013-04-11 12:22:35 +02:00
{
2013-04-24 19:01:17 +02:00
return prefix + this . getName ( ) ;
2013-04-11 12:22:35 +02:00
}
2013-04-17 10:22:51 +02:00
2013-04-24 19:01:17 +02:00
public String getName ( RelationParticipator observer )
2013-04-17 10:22:51 +02:00
{
2013-04-24 19:01:17 +02:00
if ( observer = = null ) return getName ( ) ;
return this . getName ( this . getColorTo ( observer ) . toString ( ) ) ;
2013-04-17 10:22:51 +02:00
}
2013-04-17 08:49:43 +02:00
// -------------------------------------------- //
2013-04-17 10:22:51 +02:00
// FIELD: description
2013-04-17 08:49:43 +02:00
// -------------------------------------------- //
2011-10-23 20:50:49 +02:00
2013-04-17 10:22:51 +02:00
// RAW
public boolean hasDescription ( )
2011-10-08 22:03:44 +02:00
{
2013-04-17 10:22:51 +02:00
return this . description ! = null ;
2011-03-23 17:39:56 +01:00
}
2013-04-17 10:22:51 +02:00
public String getDescription ( )
2011-10-08 22:03:44 +02:00
{
2013-04-17 10:22:51 +02:00
if ( this . hasDescription ( ) ) return this . description ;
return Lang . FACTION_NODESCRIPTION ;
}
public void setDescription ( String description )
{
2013-04-25 08:34:10 +02:00
// Clean input
String target = description ;
if ( target ! = null )
2013-04-17 10:22:51 +02:00
{
2013-04-25 08:34:10 +02:00
target = target . trim ( ) ;
2013-04-17 10:22:51 +02:00
// This code should be kept for a while to clean out the previous default text that was actually stored in the database.
2013-04-25 08:34:10 +02:00
if ( target . length ( ) = = 0 | | target . equals ( " Default faction description :( " ) )
2013-04-17 10:22:51 +02:00
{
2013-04-25 08:34:10 +02:00
target = null ;
2013-04-17 10:22:51 +02:00
}
}
2013-04-25 08:34:10 +02:00
// Detect Nochange
if ( MUtil . equals ( this . description , target ) ) return ;
// Apply
this . description = target ;
// Mark as changed
2013-04-17 10:22:51 +02:00
this . changed ( ) ;
2011-03-23 17:39:56 +01:00
}
2013-04-25 10:51:11 +02:00
// -------------------------------------------- //
// FIELD: createdAtMillis
// -------------------------------------------- //
public long getCreatedAtMillis ( )
{
return this . createdAtMillis ;
}
public void setCreatedAtMillis ( long createdAtMillis )
{
// Clean input
long target = createdAtMillis ;
// Detect Nochange
if ( MUtil . equals ( this . createdAtMillis , createdAtMillis ) ) return ;
// Apply
this . createdAtMillis = target ;
// Mark as changed
this . changed ( ) ;
}
2013-04-17 08:49:43 +02:00
// -------------------------------------------- //
2013-04-17 12:08:30 +02:00
// FIELD: home
2013-04-17 08:49:43 +02:00
// -------------------------------------------- //
2011-03-22 17:20:21 +01:00
2013-04-17 12:08:30 +02:00
public PS getHome ( )
2011-10-12 17:25:01 +02:00
{
2013-04-17 12:08:30 +02:00
this . verifyHomeIsValid ( ) ;
return this . home ;
2011-10-12 17:25:01 +02:00
}
2013-04-17 12:08:30 +02:00
public void verifyHomeIsValid ( )
2011-10-12 17:25:01 +02:00
{
2013-04-17 12:08:30 +02:00
if ( this . isValidHome ( this . home ) ) return ;
this . home = null ;
msg ( " <b>Your faction home has been un-set since it is no longer in your territory. " ) ;
}
public boolean isValidHome ( PS ps )
{
if ( ps = = null ) return true ;
2013-04-23 18:07:17 +02:00
if ( ! UConf . get ( this ) . homesMustBeInClaimedTerritory ) return true ;
2013-04-22 12:26:13 +02:00
if ( BoardColls . get ( ) . getFactionAt ( ps ) = = this ) return true ;
2013-04-17 12:08:30 +02:00
return false ;
}
public boolean hasHome ( )
{
return this . getHome ( ) ! = null ;
}
public void setHome ( PS home )
{
2013-04-25 08:34:10 +02:00
// Clean input
PS target = home ;
// Detect Nochange
if ( MUtil . equals ( this . home , target ) ) return ;
// Apply
this . home = target ;
// Mark as changed
2013-04-24 18:22:52 +02:00
this . changed ( ) ;
2011-10-12 17:25:01 +02:00
}
2013-04-17 10:22:51 +02:00
// -------------------------------------------- //
2013-04-17 12:08:30 +02:00
// FIELD: powerBoost
2013-04-17 10:22:51 +02:00
// -------------------------------------------- //
// RAW
2013-04-17 12:08:30 +02:00
public double getPowerBoost ( )
2011-10-12 17:25:01 +02:00
{
2013-04-17 12:08:30 +02:00
Double ret = this . powerBoost ;
if ( ret = = null ) ret = 0D ;
2013-04-17 10:22:51 +02:00
return ret ;
2011-10-12 17:25:01 +02:00
}
2013-04-17 12:08:30 +02:00
public void setPowerBoost ( Double powerBoost )
2011-10-12 17:25:01 +02:00
{
2013-04-25 08:34:10 +02:00
// Clean input
Double target = powerBoost ;
if ( target = = null | | target = = 0 ) target = null ;
// Detect Nochange
if ( MUtil . equals ( this . powerBoost , target ) ) return ;
// Apply
this . powerBoost = target ;
// Mark as changed
2013-04-17 10:22:51 +02:00
this . changed ( ) ;
2011-10-12 17:25:01 +02:00
}
2013-04-17 12:08:30 +02:00
// -------------------------------------------- //
// FIELD: open
// -------------------------------------------- //
2011-03-22 17:20:21 +01:00
2013-04-23 14:00:18 +02:00
public boolean isDefaultOpen ( )
{
2013-04-24 16:40:35 +02:00
UConf uconf = UConf . get ( this ) ;
if ( uconf = = null ) return false ;
return uconf . defaultFactionOpen ;
2013-04-23 14:00:18 +02:00
}
2013-04-17 12:08:30 +02:00
public boolean isOpen ( )
2013-04-17 10:22:51 +02:00
{
2013-04-17 12:08:30 +02:00
Boolean ret = this . open ;
2013-04-23 14:00:18 +02:00
if ( ret = = null ) ret = this . isDefaultOpen ( ) ;
2013-04-17 12:08:30 +02:00
return ret ;
2013-04-17 10:22:51 +02:00
}
2013-04-25 11:00:17 +02:00
public void setOpen ( Boolean open )
2011-11-24 16:27:14 +01:00
{
2013-04-25 08:34:10 +02:00
// Clean input
2013-04-25 11:00:17 +02:00
Boolean target = open ;
2013-04-25 08:34:10 +02:00
// Detect Nochange
if ( MUtil . equals ( this . open , target ) ) return ;
// Apply
this . open = target ;
// Mark as changed
2013-04-17 12:08:30 +02:00
this . changed ( ) ;
2011-11-24 16:27:14 +01:00
}
2013-04-17 10:22:51 +02:00
// -------------------------------------------- //
// FIELD: invitedPlayerIds
// -------------------------------------------- //
// RAW
public TreeSet < String > getInvitedPlayerIds ( )
{
TreeSet < String > ret = new TreeSet < String > ( String . CASE_INSENSITIVE_ORDER ) ;
if ( this . invitedPlayerIds ! = null ) ret . addAll ( this . invitedPlayerIds ) ;
return ret ;
}
public void setInvitedPlayerIds ( Collection < String > invitedPlayerIds )
{
2013-04-25 08:34:10 +02:00
// Clean input
TreeSet < String > target ;
2013-04-17 10:22:51 +02:00
if ( invitedPlayerIds = = null | | invitedPlayerIds . isEmpty ( ) )
{
2013-04-25 08:34:10 +02:00
target = null ;
2013-04-17 10:22:51 +02:00
}
else
{
2013-04-25 08:34:10 +02:00
target = new TreeSet < String > ( String . CASE_INSENSITIVE_ORDER ) ;
2013-04-17 10:22:51 +02:00
for ( String invitedPlayerId : invitedPlayerIds )
{
target . add ( invitedPlayerId . toLowerCase ( ) ) ;
}
}
2013-04-25 08:34:10 +02:00
// Detect Nochange
if ( MUtil . equals ( this . invitedPlayerIds , target ) ) return ;
// Apply
this . invitedPlayerIds = target ;
// Mark as changed
2013-04-17 10:22:51 +02:00
this . changed ( ) ;
}
// FINER
public boolean isInvited ( String playerId )
{
return this . getInvitedPlayerIds ( ) . contains ( playerId ) ;
}
2013-04-22 17:59:51 +02:00
public boolean isInvited ( UPlayer uplayer )
2013-04-17 10:22:51 +02:00
{
2013-04-22 17:59:51 +02:00
return this . isInvited ( uplayer . getId ( ) ) ;
2013-04-17 10:22:51 +02:00
}
2013-04-19 12:27:39 +02:00
public boolean setInvited ( String playerId , boolean invited )
2013-04-17 10:22:51 +02:00
{
TreeSet < String > invitedPlayerIds = this . getInvitedPlayerIds ( ) ;
2013-04-19 12:27:39 +02:00
boolean ret ;
if ( invited )
2013-04-17 10:22:51 +02:00
{
2013-04-19 12:27:39 +02:00
ret = invitedPlayerIds . add ( playerId . toLowerCase ( ) ) ;
2013-04-17 10:22:51 +02:00
}
2013-04-19 12:27:39 +02:00
else
2013-04-17 10:22:51 +02:00
{
2013-04-19 12:27:39 +02:00
ret = invitedPlayerIds . remove ( playerId . toLowerCase ( ) ) ;
2013-04-17 10:22:51 +02:00
}
2013-04-19 12:27:39 +02:00
this . setInvitedPlayerIds ( invitedPlayerIds ) ;
return ret ;
2013-04-17 10:22:51 +02:00
}
2013-04-22 17:59:51 +02:00
public void setInvited ( UPlayer uplayer , boolean invited )
2013-04-17 10:22:51 +02:00
{
2013-04-22 17:59:51 +02:00
this . setInvited ( uplayer . getId ( ) , invited ) ;
2013-04-17 10:22:51 +02:00
}
2013-04-17 11:47:48 +02:00
// -------------------------------------------- //
2013-04-17 12:08:30 +02:00
// FIELD: relationWish
2013-04-17 11:47:48 +02:00
// -------------------------------------------- //
2013-04-17 12:08:30 +02:00
// RAW
2013-04-17 11:47:48 +02:00
2013-04-17 12:08:30 +02:00
public Map < String , Rel > getRelationWishes ( )
2013-04-17 11:47:48 +02:00
{
2013-04-17 12:08:30 +02:00
Map < String , Rel > ret = new LinkedHashMap < String , Rel > ( ) ;
2013-04-25 08:34:10 +02:00
if ( this . relationWishes ! = null ) ret . putAll ( this . relationWishes ) ;
2013-04-17 12:08:30 +02:00
return ret ;
2013-04-17 11:47:48 +02:00
}
2013-04-17 12:08:30 +02:00
public void setRelationWishes ( Map < String , Rel > relationWishes )
2013-04-17 11:47:48 +02:00
{
2013-04-25 08:34:10 +02:00
// Clean input
Map < String , Rel > target ;
2013-04-17 12:08:30 +02:00
if ( relationWishes = = null | | relationWishes . isEmpty ( ) )
{
2013-04-25 08:34:10 +02:00
target = null ;
2013-04-17 12:08:30 +02:00
}
else
{
2013-04-25 08:34:10 +02:00
target = new LinkedHashMap < String , Rel > ( relationWishes ) ;
2013-04-17 12:08:30 +02:00
}
2013-04-25 08:34:10 +02:00
// Detect Nochange
if ( MUtil . equals ( this . relationWishes , target ) ) return ;
// Apply
this . relationWishes = target ;
// Mark as changed
2013-04-17 12:08:30 +02:00
this . changed ( ) ;
2013-04-17 11:47:48 +02:00
}
2013-04-17 12:08:30 +02:00
// FINER
2013-04-17 11:47:48 +02:00
2013-04-17 12:08:30 +02:00
public Rel getRelationWish ( String factionId )
2013-04-17 11:47:48 +02:00
{
2013-04-17 12:08:30 +02:00
Rel ret = this . getRelationWishes ( ) . get ( factionId ) ;
if ( ret = = null ) ret = Rel . NEUTRAL ;
return ret ;
2013-04-17 11:47:48 +02:00
}
2013-04-17 12:08:30 +02:00
public Rel getRelationWish ( Faction faction )
2013-04-17 11:47:48 +02:00
{
2013-04-17 12:08:30 +02:00
return this . getRelationWish ( faction . getId ( ) ) ;
2013-04-17 11:47:48 +02:00
}
2013-04-17 12:08:30 +02:00
public void setRelationWish ( String factionId , Rel rel )
2013-04-17 11:47:48 +02:00
{
2013-04-17 12:08:30 +02:00
Map < String , Rel > relationWishes = this . getRelationWishes ( ) ;
if ( rel = = null | | rel = = Rel . NEUTRAL )
{
relationWishes . remove ( factionId ) ;
}
else
{
relationWishes . put ( factionId , rel ) ;
}
this . setRelationWishes ( relationWishes ) ;
2013-04-17 11:47:48 +02:00
}
2013-04-17 12:08:30 +02:00
public void setRelationWish ( Faction faction , Rel rel )
2013-04-17 11:47:48 +02:00
{
2013-04-17 12:08:30 +02:00
this . setRelationWish ( faction . getId ( ) , rel ) ;
2013-04-17 11:47:48 +02:00
}
2013-04-17 12:08:30 +02:00
// TODO: What is this and where is it used?
2013-04-17 10:22:51 +02:00
2013-04-24 19:01:17 +02:00
public Map < Rel , List < String > > getFactionNamesPerRelation ( RelationParticipator rp )
2013-04-17 10:22:51 +02:00
{
2013-04-24 19:01:17 +02:00
return getFactionNamesPerRelation ( rp , false ) ;
2013-04-17 10:22:51 +02:00
}
2013-04-17 12:08:30 +02:00
// onlyNonNeutral option provides substantial performance boost on large servers for listing only non-neutral factions
2013-04-24 19:01:17 +02:00
public Map < Rel , List < String > > getFactionNamesPerRelation ( RelationParticipator rp , boolean onlyNonNeutral )
2013-04-17 10:22:51 +02:00
{
2013-04-17 12:08:30 +02:00
Map < Rel , List < String > > ret = new HashMap < Rel , List < String > > ( ) ;
for ( Rel rel : Rel . values ( ) )
2013-04-17 10:22:51 +02:00
{
2013-04-17 12:08:30 +02:00
ret . put ( rel , new ArrayList < String > ( ) ) ;
2013-04-17 10:22:51 +02:00
}
2013-04-22 12:26:13 +02:00
for ( Faction faction : FactionColls . get ( ) . get ( this ) . getAll ( ) )
2013-04-17 12:08:30 +02:00
{
Rel relation = faction . getRelationTo ( this ) ;
if ( onlyNonNeutral & & relation = = Rel . NEUTRAL ) continue ;
2013-04-24 19:01:17 +02:00
ret . get ( relation ) . add ( faction . getName ( rp ) ) ;
2013-04-17 12:08:30 +02:00
}
return ret ;
2013-04-17 10:22:51 +02:00
}
// -------------------------------------------- //
// FIELD: flagOverrides
// -------------------------------------------- //
// RAW
public Map < FFlag , Boolean > getFlags ( )
{
Map < FFlag , Boolean > ret = new LinkedHashMap < FFlag , Boolean > ( ) ;
for ( FFlag fflag : FFlag . values ( ) )
{
2013-04-22 16:58:22 +02:00
ret . put ( fflag , fflag . getDefault ( this ) ) ;
2013-04-17 10:22:51 +02:00
}
2013-04-25 08:34:10 +02:00
if ( this . flags ! = null )
2013-04-17 10:22:51 +02:00
{
2013-04-25 08:34:10 +02:00
for ( Entry < FFlag , Boolean > entry : this . flags . entrySet ( ) )
2013-04-17 10:22:51 +02:00
{
ret . put ( entry . getKey ( ) , entry . getValue ( ) ) ;
}
}
return ret ;
}
public void setFlags ( Map < FFlag , Boolean > flags )
{
2013-04-25 08:34:10 +02:00
// Clean input
Map < FFlag , Boolean > target ;
if ( flags = = null )
2013-04-17 10:22:51 +02:00
{
2013-04-25 08:34:10 +02:00
target = null ;
2013-04-17 10:22:51 +02:00
}
2013-04-25 08:34:10 +02:00
else
2013-04-17 10:22:51 +02:00
{
2013-04-25 08:34:10 +02:00
target = new LinkedHashMap < FFlag , Boolean > ( flags ) ;
if ( this . attached ( ) & & Factions . get ( ) . isDatabaseInitialized ( ) )
2013-04-17 10:22:51 +02:00
{
2013-04-25 08:34:10 +02:00
Iterator < Entry < FFlag , Boolean > > iter = target . entrySet ( ) . iterator ( ) ;
while ( iter . hasNext ( ) )
2013-04-24 18:22:52 +02:00
{
2013-04-25 08:34:10 +02:00
Entry < FFlag , Boolean > entry = iter . next ( ) ;
if ( entry . getKey ( ) . getDefault ( this ) = = entry . getValue ( ) )
{
iter . remove ( ) ;
}
2013-04-24 18:22:52 +02:00
}
2013-04-25 08:34:10 +02:00
if ( target . isEmpty ( ) ) target = null ;
2013-04-17 10:22:51 +02:00
}
}
2013-04-25 08:34:10 +02:00
// Detect Nochange
if ( MUtil . equals ( this . flags , target ) ) return ;
2013-04-17 10:22:51 +02:00
2013-04-25 08:34:10 +02:00
// Apply
this . flags = target ;
// Mark as changed
2013-04-17 10:22:51 +02:00
this . changed ( ) ;
}
// FINER
public boolean getFlag ( FFlag flag )
{
return this . getFlags ( ) . get ( flag ) ;
}
public void setFlag ( FFlag flag , boolean value )
{
Map < FFlag , Boolean > flags = this . getFlags ( ) ;
flags . put ( flag , value ) ;
this . setFlags ( flags ) ;
}
// -------------------------------------------- //
2013-04-17 13:16:22 +02:00
// FIELD: permOverrides
// -------------------------------------------- //
// RAW
public Map < FPerm , Set < Rel > > getPerms ( )
{
Map < FPerm , Set < Rel > > ret = new LinkedHashMap < FPerm , Set < Rel > > ( ) ;
for ( FPerm fperm : FPerm . values ( ) )
{
2013-04-22 16:58:22 +02:00
ret . put ( fperm , fperm . getDefault ( this ) ) ;
2013-04-17 13:16:22 +02:00
}
2013-04-25 08:34:10 +02:00
if ( this . perms ! = null )
2013-04-17 13:16:22 +02:00
{
2013-04-25 08:34:10 +02:00
for ( Entry < FPerm , Set < Rel > > entry : this . perms . entrySet ( ) )
2013-04-17 13:16:22 +02:00
{
ret . put ( entry . getKey ( ) , new LinkedHashSet < Rel > ( entry . getValue ( ) ) ) ;
}
}
return ret ;
}
public void setPerms ( Map < FPerm , Set < Rel > > perms )
{
2013-04-25 08:34:10 +02:00
// Clean input
Map < FPerm , Set < Rel > > target ;
if ( perms = = null )
{
target = null ;
}
else
2013-04-17 13:16:22 +02:00
{
2013-04-25 08:34:10 +02:00
target = new LinkedHashMap < FPerm , Set < Rel > > ( ) ;
2013-04-17 13:16:22 +02:00
for ( Entry < FPerm , Set < Rel > > entry : perms . entrySet ( ) )
{
target . put ( entry . getKey ( ) , new LinkedHashSet < Rel > ( entry . getValue ( ) ) ) ;
}
2013-04-25 08:34:10 +02:00
if ( this . attached ( ) & & Factions . get ( ) . isDatabaseInitialized ( ) )
2013-04-17 13:16:22 +02:00
{
2013-04-25 08:34:10 +02:00
Iterator < Entry < FPerm , Set < Rel > > > iter = target . entrySet ( ) . iterator ( ) ;
while ( iter . hasNext ( ) )
2013-04-24 18:22:52 +02:00
{
2013-04-25 08:34:10 +02:00
Entry < FPerm , Set < Rel > > entry = iter . next ( ) ;
2013-05-28 09:10:24 +02:00
FPerm key = entry . getKey ( ) ;
if ( key = = null )
{
// TODO: I have no idea why this key is null at times... Why?
System . out . println ( " key was null :/ " ) ;
iter . remove ( ) ;
continue ;
}
2013-04-26 10:32:02 +02:00
Set < Rel > keyDefault = key . getDefault ( this ) ;
Set < Rel > value = entry . getValue ( ) ;
if ( keyDefault . equals ( value ) )
2013-04-25 08:34:10 +02:00
{
iter . remove ( ) ;
}
2013-04-24 18:22:52 +02:00
}
2013-04-25 08:34:10 +02:00
if ( target . isEmpty ( ) ) target = null ;
2013-04-17 13:16:22 +02:00
}
}
2013-04-25 08:34:10 +02:00
// Detect Nochange
if ( MUtil . equals ( this . perms , target ) ) return ;
// Apply
this . perms = target ;
// Mark as changed
2013-04-17 13:16:22 +02:00
this . changed ( ) ;
}
// FINER
public Set < Rel > getPermittedRelations ( FPerm perm )
{
return this . getPerms ( ) . get ( perm ) ;
}
public void setPermittedRelations ( FPerm perm , Set < Rel > rels )
{
Map < FPerm , Set < Rel > > perms = this . getPerms ( ) ;
perms . put ( perm , rels ) ;
this . setPerms ( perms ) ;
}
public void setPermittedRelations ( FPerm perm , Rel . . . rels )
{
Set < Rel > temp = new HashSet < Rel > ( ) ;
temp . addAll ( Arrays . asList ( rels ) ) ;
this . setPermittedRelations ( perm , temp ) ;
}
public void setRelationPermitted ( FPerm perm , Rel rel , boolean permitted )
{
Map < FPerm , Set < Rel > > perms = this . getPerms ( ) ;
2013-04-29 16:29:10 +02:00
2013-05-03 09:58:43 +02:00
//System.out.println("setRelationPermitted before:");
//System.out.println(Factions.get().gson.toJson(perms, new TypeToken<Map<FPerm, Set<Rel>>>(){}.getType()));
2013-04-29 16:29:10 +02:00
2013-04-17 13:16:22 +02:00
Set < Rel > rels = perms . get ( perm ) ;
if ( permitted )
{
rels . add ( rel ) ;
}
else
{
rels . remove ( rel ) ;
}
2013-05-03 09:58:43 +02:00
//System.out.println("setRelationPermitted after:");
//System.out.println(Factions.get().gson.toJson(perms, new TypeToken<Map<FPerm, Set<Rel>>>(){}.getType()));
2013-04-29 16:29:10 +02:00
2013-04-17 13:16:22 +02:00
this . setPerms ( perms ) ;
}
// -------------------------------------------- //
// OVERRIDE: RelationParticipator
2013-04-17 10:22:51 +02:00
// -------------------------------------------- //
@Override
public String describeTo ( RelationParticipator observer , boolean ucfirst )
{
return RelationUtil . describeThatToMe ( this , observer , ucfirst ) ;
}
@Override
public String describeTo ( RelationParticipator observer )
{
return RelationUtil . describeThatToMe ( this , observer ) ;
}
@Override
public Rel getRelationTo ( RelationParticipator observer )
{
return RelationUtil . getRelationOfThatToMe ( this , observer ) ;
}
@Override
public Rel getRelationTo ( RelationParticipator observer , boolean ignorePeaceful )
{
return RelationUtil . getRelationOfThatToMe ( this , observer , ignorePeaceful ) ;
}
@Override
public ChatColor getColorTo ( RelationParticipator observer )
{
return RelationUtil . getColorOfThatToMe ( this , observer ) ;
}
2013-04-10 09:40:39 +02:00
// -------------------------------------------- //
2013-04-17 08:49:43 +02:00
// POWER
2013-04-10 09:40:39 +02:00
// -------------------------------------------- //
2013-04-17 14:44:08 +02:00
// TODO: Implement a has enough feature.
2013-04-17 08:49:43 +02:00
2011-10-08 22:03:44 +02:00
public double getPower ( )
{
2013-04-23 12:14:36 +02:00
if ( this . getFlag ( FFlag . INFPOWER ) ) return 999999 ;
2011-10-22 18:12:15 +02:00
2011-02-07 21:42:14 +01:00
double ret = 0 ;
2013-04-22 17:59:51 +02:00
for ( UPlayer uplayer : this . getUPlayers ( ) )
2011-10-21 20:08:54 +02:00
{
2013-04-22 17:59:51 +02:00
ret + = uplayer . getPower ( ) ;
2011-02-06 13:36:11 +01:00
}
2013-04-22 17:20:34 +02:00
2013-04-25 07:53:21 +02:00
double factionPowerMax = UConf . get ( this ) . factionPowerMax ;
if ( factionPowerMax > 0 & & ret > factionPowerMax )
{
ret = factionPowerMax ;
}
ret + = this . getPowerBoost ( ) ;
2013-04-22 17:20:34 +02:00
2013-04-23 12:14:36 +02:00
return ret ;
2011-02-06 13:36:11 +01:00
}
2011-10-21 20:08:54 +02:00
public double getPowerMax ( )
{
2013-04-23 12:14:36 +02:00
if ( this . getFlag ( FFlag . INFPOWER ) ) return 999999 ;
2013-04-25 07:53:21 +02:00
double ret = 0 ;
for ( UPlayer uplayer : this . getUPlayers ( ) )
{
ret + = uplayer . getPowerMax ( ) ;
}
double factionPowerMax = UConf . get ( this ) . factionPowerMax ;
if ( factionPowerMax > 0 & & ret > factionPowerMax )
{
ret = factionPowerMax ;
}
ret + = this . getPowerBoost ( ) ;
return ret ;
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 ( ) ) ;
}
2013-04-17 08:49:43 +02:00
public int getLandCount ( )
2013-04-11 11:11:31 +02:00
{
2013-04-24 13:26:59 +02:00
return BoardColls . get ( ) . get ( this ) . getCount ( this ) ;
2011-02-06 13:36:11 +01:00
}
2013-04-17 08:49:43 +02:00
public int getLandCountInWorld ( String worldName )
2011-10-21 20:08:54 +02:00
{
2013-05-29 14:31:09 +02:00
return Board . get ( worldName ) . getCount ( this ) ;
2011-06-30 13:13:47 +02:00
}
2011-10-21 20:08:54 +02:00
public boolean hasLandInflation ( )
{
2013-04-17 08:49:43 +02:00
return this . getLandCount ( ) > this . getPowerRounded ( ) ;
2011-02-06 13:36:11 +01:00
}
2013-04-10 09:40:39 +02:00
// -------------------------------------------- //
2013-04-22 17:59:51 +02:00
// FOREIGN KEY: UPLAYER
2013-04-10 09:40:39 +02:00
// -------------------------------------------- //
2013-04-17 14:44:08 +02:00
2013-04-25 11:00:17 +02:00
protected transient List < UPlayer > uplayers = new ArrayList < UPlayer > ( ) ;
2013-04-22 17:59:51 +02:00
public void reindexUPlayers ( )
2011-10-08 22:03:44 +02:00
{
2013-04-25 11:00:17 +02:00
this . uplayers . clear ( ) ;
2013-04-17 14:44:08 +02:00
String factionId = this . getId ( ) ;
if ( factionId = = null ) return ;
2013-04-22 17:59:51 +02:00
for ( UPlayer uplayer : UPlayerColls . get ( ) . get ( this ) . getAll ( ) )
2011-10-08 22:03:44 +02:00
{
2013-04-22 17:59:51 +02:00
if ( ! MUtil . equals ( factionId , uplayer . getFactionId ( ) ) ) continue ;
this . uplayers . add ( uplayer ) ;
2011-02-06 13:36:11 +01:00
}
2013-04-17 14:44:08 +02:00
}
2013-06-18 09:07:05 +02:00
// TODO: Even though this check method removeds the invalid entries it's not a true solution.
// TODO: Find the bug causing non-attached UPlayers to be present in the index.
private void checkUPlayerIndex ( )
{
Iterator < UPlayer > iter = this . uplayers . iterator ( ) ;
while ( iter . hasNext ( ) )
{
UPlayer uplayer = iter . next ( ) ;
if ( ! uplayer . attached ( ) )
{
String msg = Txt . parse ( " <rose>WARN: <i>Faction <h>%s <i>aka <h>%s <i>had unattached uplayer in index: " , this . getName ( ) , this . getId ( ) ) ;
Factions . get ( ) . log ( msg ) ;
Factions . get ( ) . log ( Factions . get ( ) . gson . toJson ( uplayer ) ) ;
iter . remove ( ) ;
}
}
}
2013-04-22 17:59:51 +02:00
public List < UPlayer > getUPlayers ( )
2013-04-17 14:44:08 +02:00
{
2013-06-18 09:07:05 +02:00
this . checkUPlayerIndex ( ) ;
2013-04-22 17:59:51 +02:00
return new ArrayList < UPlayer > ( this . uplayers ) ;
2012-01-13 10:46:31 +01:00
}
2013-04-17 08:49:43 +02:00
2013-04-22 17:59:51 +02:00
public List < UPlayer > getUPlayersWhereOnline ( boolean online )
2012-01-13 10:46:31 +01:00
{
2013-04-22 17:59:51 +02:00
List < UPlayer > ret = this . getUPlayers ( ) ;
Iterator < UPlayer > iter = ret . iterator ( ) ;
2013-04-17 14:44:08 +02:00
while ( iter . hasNext ( ) )
2013-04-17 08:49:43 +02:00
{
2013-04-22 17:59:51 +02:00
UPlayer uplayer = iter . next ( ) ;
if ( uplayer . isOnline ( ) ! = online )
2013-04-17 14:44:08 +02:00
{
iter . remove ( ) ;
}
2013-04-17 08:49:43 +02:00
}
2011-02-06 13:36:11 +01:00
return ret ;
2013-08-23 10:45:27 +02:00
}
2011-02-06 13:36:11 +01:00
2013-04-22 17:59:51 +02:00
public List < UPlayer > getUPlayersWhereRole ( Rel role )
2011-10-08 22:03:44 +02:00
{
2013-04-22 17:59:51 +02:00
List < UPlayer > ret = this . getUPlayers ( ) ;
Iterator < UPlayer > iter = ret . iterator ( ) ;
2013-04-17 14:44:08 +02:00
while ( iter . hasNext ( ) )
2011-10-08 22:03:44 +02:00
{
2013-04-22 17:59:51 +02:00
UPlayer uplayer = iter . next ( ) ;
if ( uplayer . getRole ( ) ! = role )
2013-04-17 14:44:08 +02:00
{
iter . remove ( ) ;
}
2011-02-06 13:36:11 +01:00
}
return ret ;
}
2013-04-22 17:59:51 +02:00
public UPlayer getLeader ( )
2011-10-08 22:03:44 +02:00
{
2013-04-22 17:59:51 +02:00
List < UPlayer > ret = this . getUPlayers ( ) ;
Iterator < UPlayer > iter = ret . iterator ( ) ;
2013-04-17 14:44:08 +02:00
while ( iter . hasNext ( ) )
2011-10-08 22:03:44 +02:00
{
2013-04-22 17:59:51 +02:00
UPlayer uplayer = iter . next ( ) ;
if ( uplayer . getRole ( ) = = Rel . LEADER )
2013-04-17 14:44:08 +02:00
{
2013-04-22 17:59:51 +02:00
return uplayer ;
2013-04-17 14:44:08 +02:00
}
2011-08-02 00:54:05 +02:00
}
return null ;
}
2013-04-17 08:49:43 +02:00
public List < CommandSender > getOnlineCommandSenders ( )
2011-10-22 17:42:13 +02:00
{
2013-04-17 08:49:43 +02:00
List < CommandSender > ret = new ArrayList < CommandSender > ( ) ;
for ( CommandSender player : SenderUtil . getOnlineSenders ( ) )
2011-10-22 17:42:13 +02:00
{
2013-04-22 17:59:51 +02:00
UPlayer uplayer = UPlayer . get ( player ) ;
if ( ! MUtil . equals ( uplayer . getUniverse ( ) , this . getUniverse ( ) ) ) continue ;
if ( uplayer . getFaction ( ) ! = this ) continue ;
2013-04-17 08:49:43 +02:00
ret . add ( player ) ;
2011-02-06 13:36:11 +01:00
}
return ret ;
}
2013-04-17 08:49:43 +02:00
public List < Player > getOnlinePlayers ( )
2011-10-08 22:03:44 +02:00
{
2013-04-17 08:49:43 +02:00
List < Player > ret = new ArrayList < Player > ( ) ;
for ( Player player : Bukkit . getOnlinePlayers ( ) )
2011-10-08 22:03:44 +02:00
{
2013-04-22 17:59:51 +02:00
UPlayer uplayer = UPlayer . get ( player ) ;
if ( ! MUtil . equals ( uplayer . getUniverse ( ) , this . getUniverse ( ) ) ) continue ;
if ( uplayer . getFaction ( ) ! = this ) continue ;
2013-04-17 08:49:43 +02:00
ret . add ( player ) ;
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 ( )
{
2013-04-17 08:49:43 +02:00
if ( ! this . isNormal ( ) ) return ;
2013-04-24 07:51:48 +02:00
if ( this . getFlag ( FFlag . PERMANENT ) & & UConf . get ( this ) . permanentFactionsDisableLeaderPromotion ) return ;
2011-12-18 14:50:41 +01:00
2013-04-22 17:59:51 +02:00
UPlayer oldLeader = this . getLeader ( ) ;
2011-12-18 14:50:41 +01:00
// get list of officers, or list of normal members if there are no officers
2013-04-22 17:59:51 +02:00
List < UPlayer > replacements = this . getUPlayersWhereRole ( Rel . OFFICER ) ;
2011-12-18 14:50:41 +01:00
if ( replacements = = null | | replacements . isEmpty ( ) )
2013-04-17 08:49:43 +02:00
{
2013-04-22 17:59:51 +02:00
replacements = this . getUPlayersWhereRole ( Rel . MEMBER ) ;
2013-04-17 08:49:43 +02:00
}
2011-12-18 14:50:41 +01:00
if ( replacements = = null | | replacements . isEmpty ( ) )
2013-04-25 20:21:23 +02:00
{
// faction leader is the only member; one-man faction
2011-12-18 14:50:41 +01:00
if ( this . getFlag ( FFlag . PERMANENT ) )
{
2012-01-18 13:01:50 +01:00
if ( oldLeader ! = null )
2013-04-17 08:49:43 +02:00
{
2013-04-25 20:21:23 +02:00
// TODO: Where is the logic in this? Why MEMBER? Why not LEADER again? And why not OFFICER or RECRUIT?
2012-01-18 13:01:50 +01:00
oldLeader . setRole ( Rel . MEMBER ) ;
2013-04-17 08:49:43 +02:00
}
2011-12-18 14:50:41 +01:00
return ;
}
// no members left and faction isn't permanent, so disband it
2013-04-22 10:05:03 +02:00
if ( MConf . get ( ) . logFactionDisband )
2013-04-17 08:49:43 +02:00
{
2013-04-24 19:01:17 +02:00
Factions . get ( ) . log ( " The faction " + this . getName ( ) + " ( " + this . getId ( ) + " ) has been disbanded since it has no members left. " ) ;
2013-04-17 08:49:43 +02:00
}
2011-12-18 14:50:41 +01:00
2013-04-22 17:59:51 +02:00
for ( UPlayer uplayer : UPlayerColls . get ( ) . get ( this ) . getAllOnline ( ) )
2011-12-18 14:50:41 +01:00
{
2013-04-24 19:01:17 +02:00
uplayer . msg ( " The faction %s<i> was disbanded. " , this . getName ( uplayer ) ) ;
2011-12-18 14:50:41 +01:00
}
this . detach ( ) ;
}
else
{ // promote new faction leader
2012-01-18 13:01:50 +01:00
if ( oldLeader ! = null )
2013-04-17 08:49:43 +02:00
{
2012-01-18 13:01:50 +01:00
oldLeader . setRole ( Rel . MEMBER ) ;
2013-04-17 08:49:43 +02:00
}
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 ( ) ) ;
2013-04-24 19:01:17 +02:00
Factions . get ( ) . log ( " Faction " + this . getName ( ) + " ( " + this . getId ( ) + " ) leader was removed. Replacement leader: " + replacements . get ( 0 ) . getName ( ) ) ;
2011-12-18 14:50:41 +01:00
}
}
2013-08-23 10:45:27 +02:00
// -------------------------------------------- //
// FACTION ONLINE STATE
// -------------------------------------------- //
2011-12-18 14:50:41 +01:00
2013-08-23 10:45:27 +02:00
public boolean isAllUPlayersOffline ( )
{
return this . getUPlayersWhereOnline ( true ) . size ( ) = = 0 ;
}
public boolean isAnyUPlayersOnline ( )
{
return ! this . isAllUPlayersOffline ( ) ;
}
public boolean isFactionConsideredOffline ( )
{
return this . isAllUPlayersOffline ( ) ;
}
public boolean isFactionConsideredOnline ( )
{
return ! this . isFactionConsideredOffline ( ) ;
}
public boolean isExplosionsAllowed ( )
{
boolean explosions = this . getFlag ( FFlag . EXPLOSIONS ) ;
boolean offlineexplosions = this . getFlag ( FFlag . OFFLINE_EXPLOSIONS ) ;
boolean online = this . isFactionConsideredOnline ( ) ;
return ( online & & explosions ) | | ( ! online & & offlineexplosions ) ;
}
2013-04-10 09:40:39 +02:00
// -------------------------------------------- //
2013-04-17 08:49:43 +02:00
// MESSAGES
2013-04-10 09:40:39 +02:00
// -------------------------------------------- //
2013-04-17 13:16:22 +02:00
// These methods are simply proxied in from the Mixin.
2013-04-10 10:32:04 +02:00
2013-04-17 08:49:43 +02:00
// CONVENIENCE SEND MESSAGE
public boolean sendMessage ( String message )
2011-10-09 14:53:38 +02:00
{
2013-04-17 13:16:22 +02:00
return Mixin . message ( new FactionEqualsPredictate ( this ) , message ) ;
2011-10-09 14:53:38 +02:00
}
2013-04-17 08:49:43 +02:00
public boolean sendMessage ( String . . . messages )
2011-10-08 22:03:44 +02:00
{
2013-04-17 13:16:22 +02:00
return Mixin . message ( new FactionEqualsPredictate ( this ) , messages ) ;
2011-02-06 13:36:11 +01:00
}
2013-04-17 08:49:43 +02:00
public boolean sendMessage ( Collection < String > messages )
2011-10-08 22:03:44 +02:00
{
2013-04-17 13:16:22 +02:00
return Mixin . message ( new FactionEqualsPredictate ( this ) , messages ) ;
2013-04-17 08:49:43 +02:00
}
// CONVENIENCE MSG
public boolean msg ( String msg )
{
2013-04-17 13:16:22 +02:00
return Mixin . msg ( new FactionEqualsPredictate ( this ) , msg ) ;
2011-02-06 13:36:11 +01:00
}
2013-04-17 08:49:43 +02:00
public boolean msg ( String msg , Object . . . args )
{
2013-04-17 13:16:22 +02:00
return Mixin . msg ( new FactionEqualsPredictate ( this ) , msg , args ) ;
2013-04-17 08:49:43 +02:00
}
public boolean msg ( Collection < String > msgs )
{
2013-04-17 13:16:22 +02:00
return Mixin . msg ( new FactionEqualsPredictate ( this ) , msgs ) ;
2013-04-17 08:49:43 +02:00
}
2011-03-18 17:33:23 +01:00
2011-02-06 13:36:11 +01:00
}