Package net.sacredlabyrinth.phaed.simpleclans

Source Code of net.sacredlabyrinth.phaed.simpleclans.Clan

package net.sacredlabyrinth.phaed.simpleclans;

import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

import java.io.Serializable;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.util.*;
import net.sacredlabyrinth.phaed.simpleclans.api.UUIDMigration;
import net.sacredlabyrinth.phaed.simpleclans.events.AllyClanAddEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.AllyClanRemoveEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.DisbandClanEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerDemoteEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerJoinedClanEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerKickedClanEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerPromoteEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.RivalClanAddEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.RivalClanRemoveEvent;
import org.bukkit.Material;

/**
* @author phaed
*/
public class Clan implements Serializable, Comparable<Clan>
{

    private static final long serialVersionUID = 1L;
    private boolean verified;
    private String tag;
    private String colorTag;
    private String name;
    private double balance;
    private boolean friendlyFire;
    private long founded;
    private long lastUsed;
    private String capeUrl;
    private List<String> allies = new ArrayList<String>();
    private List<String> rivals = new ArrayList<String>();
    private List<String> bb = new ArrayList<String>();
    private List<String> members = new ArrayList<String>();
    private HashMap<String, Clan> warringClans = new HashMap<String, Clan>();
    private int homeX = 0;
    private int homeY = 0;
    private int homeZ = 0;
    private String homeWorld = "";
    private boolean allowWithdraw = false;
    private boolean allowDeposit = true;

    /**
     *
     */
    public Clan()
    {
        this.capeUrl = "";
        this.tag = "";
    }

    /**
     * @param tag
     * @param name
     * @param verified
     */
    public Clan(String tag, String name, boolean verified)
    {
        this.tag = Helper.cleanTag(tag);
        this.colorTag = Helper.parseColors(tag);
        this.name = name;
        this.founded = (new Date()).getTime();
        this.lastUsed = (new Date()).getTime();
        this.verified = verified;
        this.capeUrl = "";

        if (SimpleClans.getInstance().getSettingsManager().isClanFFOnByDefault())
        {
            friendlyFire = true;
        }
    }

    @Override
    public int hashCode()
    {
        return getTag().hashCode() >> 13;
    }

    @Override
    public boolean equals(Object obj)
    {
        if (!(obj instanceof Clan))
        {
            return false;
        }

        Clan other = (Clan) obj;
        return other.getTag().equals(this.getTag());
    }

    @Override
    public int compareTo(Clan other)
    {
        return this.getTag().compareToIgnoreCase(other.getTag());
    }

    @Override
    public String toString()
    {
        return tag;
    }

    /**
     * deposits money to the clan
     *
     * @param amount
     * @param player
     */
    public void deposit(double amount, Player player)
    {
        if (SimpleClans.getInstance().getPermissionsManager().playerHasMoney(player, amount))
        {
            if (SimpleClans.getInstance().getPermissionsManager().playerChargeMoney(player, amount) == true)
            {
                player.sendMessage(ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("player.clan.deposit"), amount));
                addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("bb.clan.deposit"), amount));
                setBalance(getBalance() + amount);
                SimpleClans.getInstance().getStorageManager().updateClan(this);
            }
            else
            {
                player.sendMessage(ChatColor.AQUA + SimpleClans.getInstance().getLang("not.sufficient.money"));
            }
        }
        else
        {
            player.sendMessage(ChatColor.AQUA + SimpleClans.getInstance().getLang("not.sufficient.money"));
        }
    }

    /**
     * withdraws money to the clan
     *
     * @param amount
     * @param player
     */
    public void withdraw(double amount, Player player)
    {
        if (getBalance() >= amount)
        {
            if (SimpleClans.getInstance().getPermissionsManager().playerGrantMoney(player, amount) == true)
            {
                player.sendMessage(ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("player.clan.withdraw"), amount));
                addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("bb.clan.withdraw"), amount));
                setBalance(0);
                SimpleClans.getInstance().getStorageManager().updateClan(this);
            }
        }
        else
        {
            player.sendMessage(ChatColor.AQUA + SimpleClans.getInstance().getLang("clan.bank.not.enough.money"));
        }
    }

    /**
     * Returns the clan's name
     *
     * @return the name
     */
    public String getName()
    {
        return name;
    }

    /**
     * (used internally)
     *
     * @param name the name to set
     */
    public void setName(String name)
    {
        this.name = name;
    }

    /**
     * Returns the clan's balance
     *
     * @return the balance
     */
    public double getBalance()
    {
        return balance;
    }

    /**
     * (used internally)
     *
     * @param balance the balance to set
     */
    public void setBalance(double balance)
    {
        this.balance = balance;
    }

    /**
     * Returns the clan's tag clean (no colors)
     *
     * @return the tag
     */
    public String getTag()
    {
        return tag;
    }

    /**
     * (used internally)
     *
     * @param tag the tag to set
     */
    public void setTag(String tag)
    {
        this.tag = tag;
    }

    /**
     * Returns the last used date in milliseconds
     *
     * @return the lastUsed
     */
    public long getLastUsed()
    {
        return lastUsed;
    }

    /**
     * Updates last used date to today (does not update clan on db)
     */
    public void updateLastUsed()
    {
        setLastUsed((new Date()).getTime());
    }

    /**
     * Returns the number of days the clan has been inactive
     *
     * @return
     */
    public int getInactiveDays()
    {
        Timestamp now = new Timestamp((new Date()).getTime());
        return (int) Math.floor(Dates.differenceInDays(new Timestamp(getLastUsed()), now));
    }

    /**
     * (used internally)
     *
     * @param lastUsed the lastUsed to set
     */
    public void setLastUsed(long lastUsed)
    {
        this.lastUsed = lastUsed;
    }

    /**
     * Check whether this clan allows friendly fire
     *
     * @return the friendlyFire
     */
    public boolean isFriendlyFire()
    {
        return friendlyFire;
    }

    /**
     * Sets the friendly fire status of this clan (does not update clan on db)
     *
     * @param friendlyFire the friendlyFire to set
     */
    public void setFriendlyFire(boolean friendlyFire)
    {
        this.friendlyFire = friendlyFire;
    }

    /**
     * Check if the player is a member of this clan
     *
     * @param player
     * @return confirmation
     */
    public boolean isMember(Player player)
    {
        if (SimpleClans.getInstance().hasUUID())
        {
            return this.members.contains(player.getUniqueId().toString());
        } else
        {
            return this.members.contains(player.getName().toLowerCase());
        }
    }

    /**
     * Check if the player is a member of this clan
     *
     * @param playerName
     * @return confirmation
     */
    @Deprecated
    public boolean isMember(String playerName)
    {
        if (SimpleClans.getInstance().hasUUID())
        {
            UUID PlayerUniqueId = UUIDMigration.getForcedPlayerUUID(playerName);
            if (PlayerUniqueId != null)
            {
                return this.members.contains(PlayerUniqueId.toString());
            } else
            {
                return false;
            }
        } else
        {
            return this.members.contains(playerName.toLowerCase());
        }
    }
   
    /**
     * Check if the player is a member of this clan
     *
     * @param playerUniqueId
     * @return confirmation
     */
    public boolean isMember(UUID playerUniqueId)
    {
        return this.members.contains(playerUniqueId.toString());
    }


    /**
     * Returns a list with the contents of the bulletin board
     *
     * @return the bb
     */
    public List<String> getBb()
    {
        return Collections.unmodifiableList(bb);
    }

    /**
     * Return a list of all the allies' tags clean (no colors)
     *
     * @return the allies
     */
    public List<String> getAllies()
    {
        return Collections.unmodifiableList(allies);
    }

    private void addAlly(String tag)
    {
        allies.add(tag);
    }

    private boolean removeAlly(String ally)
    {
        if (!allies.contains(ally))
        {
            return false;
        }

        allies.remove(ally);
        return true;
    }

    /**
     * The founded date in milliseconds
     *
     * @return the founded
     */
    public long getFounded()
    {
        return founded;
    }

    /**
     * The string representation of the founded date
     *
     * @return
     */
    public String getFoundedString()
    {
        return new java.text.SimpleDateFormat("MMM dd, ''yy h:mm a").format(new Date(this.founded));
    }

    /**
     * (used internally)
     *
     * @param founded the founded to set
     */
    public void setFounded(long founded)
    {
        this.founded = founded;
    }

    /**
     * Returns the color tag for this clan
     *
     * @return the colorTag
     */
    public String getColorTag()
    {
        return colorTag;
    }

    /**
     * (used internally)
     *
     * @param colorTag the colorTag to set
     */
    public void setColorTag(String colorTag)
    {
        this.colorTag = Helper.parseColors(colorTag);
    }

    /**
     * Adds a bulletin board message without announcer
     *
     * @param msg
     */
    public void addBb(String msg)
    {
        while (bb.size() > SimpleClans.getInstance().getSettingsManager().getBbSize())
        {
            bb.remove(0);
        }

        bb.add(msg);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
    }

    /**
     * Clears the bulletin board
     */
    public void clearBb()
    {
        bb.clear();
        SimpleClans.getInstance().getStorageManager().updateClan(this);
    }

    /**
     * (used internally)
     *
     * @param cp
     */
    public void importMember(ClanPlayer cp)
    {
        String NameOrUUID;
        if (SimpleClans.getInstance().hasUUID())
        {
            if (cp.getUniqueId() != null)
            {
                NameOrUUID = cp.getUniqueId().toString();
            } else
            {
                return;
            }
        } else
        {
            NameOrUUID = cp.getCleanName();
        }
        if (!this.members.contains(NameOrUUID))
        {
            this.members.add(NameOrUUID);
        }
    }

    /**
     * (used internally)
     *
     * @param playerName
     */
    @Deprecated
    public void removeMember(String playerName)
    {
        if (SimpleClans.getInstance().hasUUID())
        {
            UUID PlayerUniqueId = UUIDMigration.getForcedPlayerUUID(playerName);
            if (PlayerUniqueId != null)
            {
                this.members.remove(PlayerUniqueId.toString());
            }
        } else
        {
            this.members.remove(playerName.toLowerCase());
        }
    }
   
    /**
     * (used internally)
     *
     * @param playerUniqueId
     */
    public void removeMember(UUID playerUniqueId)
    {
        this.members.remove(playerUniqueId.toString());
    }

    /**
     * Get total clan size
     *
     * @return
     */
    public int getSize()
    {
        return this.members.size();
    }

    /**
     * Returns a list of all rival tags clean (no colors)
     *
     * @return the rivals
     */
    public List<String> getRivals()
    {
        return Collections.unmodifiableList(rivals);
    }

    private void addRival(String tag)
    {
        rivals.add(tag);
    }

    private boolean removeRival(String rival)
    {
        if (!rivals.contains(rival))
        {
            return false;
        }

        rivals.remove(rival);
        return true;
    }

    /**
     * Check if the tag is a rival
     *
     * @param tag
     * @return
     */
    public boolean isRival(String tag)
    {
        return rivals.contains(tag);
    }

    /**
     * Check if the tag is an ally
     *
     * @param tag
     * @return
     */
    public boolean isAlly(String tag)
    {
        return allies.contains(tag);
    }

    /**
     * Tells you if the clan is verified, always returns true if no verification
     * is required
     *
     * @return
     */
    public boolean isVerified()
    {
        return !SimpleClans.getInstance().getSettingsManager().isRequireVerification() || verified;

    }

    /**
     * (used internally)
     *
     * @param verified the verified to set
     */
    public void setVerified(boolean verified)
    {
        this.verified = verified;
    }

    /**
     * Returns the cape url for this clan
     *
     * @return the capeUrl
     */
    public String getCapeUrl()
    {
        return capeUrl;
    }

    /**
     * (used internally)
     *
     * @param capeUrl the capeUrl to set
     */
    public void setCapeUrl(String capeUrl)
    {
        this.capeUrl = capeUrl;
    }

    /**
     * (used internally)
     *
     * @return the packedBb
     */
    public String getPackedBb()
    {
        return Helper.toMessage(bb, "|");
    }

    /**
     * (used internally)
     *
     * @param packedBb the packedBb to set
     */
    public void setPackedBb(String packedBb)
    {
        this.bb = Helper.fromArray(packedBb.split("[|]"));
    }

    /**
     * (used internally)
     *
     * @return the packedAllies
     */
    public String getPackedAllies()
    {
        return Helper.toMessage(allies, "|");
    }

    /**
     * (used internally)
     *
     * @param packedAllies the packedAllies to set
     */
    public void setPackedAllies(String packedAllies)
    {
        this.allies = Helper.fromArray(packedAllies.split("[|]"));
    }

    /**
     * (used internally)
     *
     * @return the packedRivals
     */
    public String getPackedRivals()
    {
        return Helper.toMessage(rivals, "|");
    }

    /**
     * (used internally)
     *
     * @param packedRivals the packedRivals to set
     */
    public void setPackedRivals(String packedRivals)
    {
        this.rivals = Helper.fromArray(packedRivals.split("[|]"));
    }

    /**
     * Returns a separator delimited string with all the ally clan's colored
     * tags
     *
     * @param sep
     * @return
     */
    public String getAllyString(String sep)
    {
        String out = "";

        for (String allyTag : getAllies())
        {
            Clan ally = SimpleClans.getInstance().getClanManager().getClan(allyTag);

            if (ally != null)
            {
                out += ally.getColorTag() + sep;
            }
        }

        out = Helper.stripTrailing(out, sep);

        if (out.trim().isEmpty())
        {
            return ChatColor.BLACK + "None";
        }

        return Helper.parseColors(out);
    }

    /**
     * Returns a separator delimited string with all the rival clan's colored
     * tags
     *
     * @param sep
     * @return
     */
    public String getRivalString(String sep)
    {
        String out = "";

        for (String rivalTag : getRivals())
        {
            Clan rival = SimpleClans.getInstance().getClanManager().getClan(rivalTag);

            if (rival != null)
            {
                if (isWarring(rivalTag))
                {
                    out += ChatColor.DARK_RED + "[" + Helper.stripColors(rival.getColorTag()) + "]" + sep;
                }
                else
                {
                    out += rival.getColorTag() + sep;
                }

            }
        }

        out = Helper.stripTrailing(out, sep);

        if (out.trim().isEmpty())
        {
            return ChatColor.BLACK + "None";
        }

        return Helper.parseColors(out);
    }

    /**
     * Returns a separator delimited string with all the leaders
     *
     * @param prefix
     * @param sep
     * @return the formatted leaders string
     */
    public String getLeadersString(String prefix, String sep)
    {
        String out = "";

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
           
            if (cp.isLeader())
            {
                out += prefix + cp.getName() + sep;
            }
        }

        return Helper.stripTrailing(out, sep);
    }

    /**
     * Check if a player is a leader of a clan
     *
     * @param player
     * @return the leaders
     */
    public boolean isLeader(Player player)
    {
        if (SimpleClans.getInstance().hasUUID())
        {
            return isLeader(player.getUniqueId());
        } else
        {
            return isLeader(player.getName());
        }
    }

    /**
     * Check if a player is a leader of a clan
     *
     * @param playerName
     * @return the leaders
     */
    @Deprecated
    public boolean isLeader(String playerName)
    {
        if (isMember(playerName))
        {
            ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayerName(playerName.toLowerCase());

            if (cp.isLeader())
            {
                return true;
            }
        }

        return false;
    }
   
    /**
     * Check if a player is a leader of a clan
     *
     * @param playerUniqueId
     * @return the leaders
     */
    public boolean isLeader(UUID playerUniqueId)
    {
        if (isMember(playerUniqueId))
        {
            ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerUniqueId);

            if (cp.isLeader())
            {
                return true;
            }
        }

        return false;
    }

    /**
     * Get all members (leaders, and non-leaders) in the clan
     *
     * @return the members
     */
    public List<ClanPlayer> getMembers()
    {
        List<ClanPlayer> out = new ArrayList<ClanPlayer>();

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
            out.add(cp);
        }

        return out;
    }

    /**
     * Get all online members (leaders, and non-leaders) in the clan
     *
     * @return the members
     */
    public List<ClanPlayer> getOnlineMembers()
    {
        List<ClanPlayer> out = new ArrayList<ClanPlayer>();

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
            if (cp.toPlayer() != null)
            {
                if (cp.toPlayer().isOnline())
                {
                    out.add(cp);
                }
            }
        }

        return out;
    }

    /**
     * Get all leaders in the clan
     *
     * @return the leaders
     */
    public List<ClanPlayer> getLeaders()
    {
        List<ClanPlayer> out = new ArrayList<ClanPlayer>();

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }

            if (cp.isLeader())
            {
                out.add(cp);
            }
        }

        return out;
    }

    /**
     * Get all non-leader players in the clan
     *
     * @return non leaders
     */
    public List<ClanPlayer> getNonLeaders()
    {
        List<ClanPlayer> out = new ArrayList<ClanPlayer>();

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }

            if (!cp.isLeader())
            {
                out.add(cp);
            }
        }

        Collections.sort(out);

        return out;
    }

    /**
     * Get all clan's members
     *
     * @return
     */
    public List<ClanPlayer> getAllMembers()
    {
        List<ClanPlayer> out = new ArrayList<ClanPlayer>();

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
           
            out.add(cp);
        }

        Collections.sort(out);

        return out;
    }

    /**
     * Get all the ally clan's members
     *
     * @return
     */
    public Set<ClanPlayer> getAllAllyMembers()
    {
        Set<ClanPlayer> out = new HashSet<ClanPlayer>();

        for (String tag : allies)
        {
            Clan ally = SimpleClans.getInstance().getClanManager().getClan(tag);

            if (ally != null)
            {
                out.addAll(ally.getMembers());
            }
        }

        return out;
    }

    /**
     * Gets the clan's total KDR
     *
     * @return
     */
    public float getTotalKDR()
    {
        if (members.isEmpty())
        {
            return 0;
        }

        double totalWeightedKills = 0;
        int totalDeaths = 0;

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
           
            totalWeightedKills += cp.getWeightedKills();
            totalDeaths += cp.getDeaths();
        }

        if (totalDeaths == 0)
        {
            totalDeaths = 1;
        }

        return ((float) totalWeightedKills) / ((float) totalDeaths);
    }

    /**
     * Gets the clan's total KDR
     *
     * @return
     */
    public int getTotalDeaths()
    {
        int totalDeaths = 0;

        if (members.isEmpty())
        {
            return totalDeaths;
        }

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
           
            totalDeaths += cp.getDeaths();
        }

        return totalDeaths;
    }

    /**
     * Gets average weighted kills for the clan
     *
     * @return
     */
    public int getAverageWK()
    {
        int total = 0;

        if (members.isEmpty())
        {
            return total;
        }

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
           
            total += cp.getWeightedKills();
        }

        return total / getSize();
    }

    /**
     * Gets total rival kills for the clan
     *
     * @return
     */
    public int getTotalRival()
    {
        int total = 0;

        if (members.isEmpty())
        {
            return total;
        }

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
           
            total += cp.getRivalKills();
        }

        return total;
    }

    /**
     * Gets total neutral kills for the clan
     *
     * @return
     */
    public int getTotalNeutral()
    {
        int total = 0;

        if (members.isEmpty())
        {
            return total;
        }

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
           
            total += cp.getNeutralKills();
        }

        return total;
    }

    /**
     * Gets total civilian kills for the clan
     *
     * @return
     */
    public int getTotalCivilian()
    {
        int total = 0;

        if (members.isEmpty())
        {
            return total;
        }

        for (String member : members)
        {
            ClanPlayer cp;
            if (SimpleClans.getInstance().hasUUID())
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
            } else
            {
                cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
            }
            if (cp == null)
            {
                continue;
            }
           
            total += cp.getCivilianKills();
        }

        return total;
    }

    /**
     * Set a clan's cape url
     *
     * @param url
     */
    public void setClanCape(String url)
    {
        setCapeUrl(url);

        SimpleClans.getInstance().getStorageManager().updateClan(this);

        for (String member : members)
        {
            if (SimpleClans.getInstance().hasUUID())
            {
                SimpleClans.getInstance().getSpoutPluginManager().processPlayer(UUID.fromString(member));
            } else
            {
                SimpleClans.getInstance().getSpoutPluginManager().processPlayer(member);
            }
        }
    }

    /**
     * Check whether the clan has crossed the rival limit
     *
     * @return
     */
    public boolean reachedRivalLimit()
    {
        int rivalCount = rivals.size();
        int clanCount = SimpleClans.getInstance().getClanManager().getRivableClanCount() - 1;
        int rivalPercent = SimpleClans.getInstance().getSettingsManager().getRivalLimitPercent();

        double limit = ((double) clanCount) * (((double) rivalPercent) / ((double) 100));

        return rivalCount > limit;
    }

    /**
     * Add a new player to the clan
     *
     * @param cp
     */
    public void addPlayerToClan(ClanPlayer cp)
    {
        cp.removePastClan(getColorTag());
        cp.setClan(this);
        cp.setLeader(false);
        cp.setTrusted(SimpleClans.getInstance().getSettingsManager().isClanTrustByDefault());

        importMember(cp);

        SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
        if (SimpleClans.getInstance().hasUUID())
        {
            SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getUniqueId());
        } else
        {
            SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getName());
        }

        // add clan permission
        SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);

        Player player;
        if (SimpleClans.getInstance().hasUUID())
        {
            player = Helper.matchOnePlayer(cp.getUniqueId());
        } else
        {
            player = Helper.matchOnePlayer(cp.getName());
        }

        if (player != null)
        {
            SimpleClans.getInstance().getClanManager().updateDisplayName(player);
        }
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerJoinedClanEvent(this , cp));
    }

    /**
     * Remove a player from a clan
     *
     * @param playerName
     */
    @Deprecated
    public void removePlayerFromClan(String playerName)
    {
        ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerName);

        // remove clan group-permission
        SimpleClans.getInstance().getPermissionsManager().removeClanPermissions(cp);

        // remove permissions
        SimpleClans.getInstance().getPermissionsManager().removeClanPlayerPermissions(cp);

        cp.setClan(null);
        cp.addPastClan(getColorTag() + (cp.isLeader() ? ChatColor.DARK_RED + "*" : ""));
        cp.setLeader(false);
        cp.setTrusted(false);
        cp.setJoinDate(0);
        removeMember(playerName);

        SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
        if (SimpleClans.getInstance().hasUUID())
        {
            SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getUniqueId());
        } else
        {
            SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getName());
        }

        Player matched = cp.toPlayer();
       
        if (matched != null)
        {
            SimpleClans.getInstance().getClanManager().updateDisplayName(matched);
        }
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerKickedClanEvent(this , cp));
    }
   
    /**
     * Remove a player from a clan
     *
     * @param playerUniqueId
     */
    public void removePlayerFromClan(UUID playerUniqueId)
    {
        ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerUniqueId);

        // remove clan group-permission
        SimpleClans.getInstance().getPermissionsManager().removeClanPermissions(cp);

        // remove permissions
        SimpleClans.getInstance().getPermissionsManager().removeClanPlayerPermissions(cp);

        cp.setClan(null);
        cp.addPastClan(getColorTag() + (cp.isLeader() ? ChatColor.DARK_RED + "*" : ""));
        cp.setLeader(false);
        cp.setTrusted(false);
        cp.setJoinDate(0);
        removeMember(playerUniqueId);

        SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
        SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getUniqueId());

        Player matched = Helper.matchOnePlayer(playerUniqueId);

        if (matched != null)
        {
            SimpleClans.getInstance().getClanManager().updateDisplayName(matched);
        }
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerKickedClanEvent(this , cp));
    }


    /**
     * Promote a member to a leader of a clan
     *
     * @param playerName
     */
    @Deprecated
    public void promote(String playerName)
    {
        ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerName);

        cp.setLeader(true);
        cp.setTrusted(true);

        SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
        if (SimpleClans.getInstance().hasUUID())
        {
            SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getUniqueId());
        } else
        {
            SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getName());
        }

        // add clan permission
        SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerPromoteEvent(this , cp));
    }
   
    /**
     * Promote a member to a leader of a clan
     *
     * @param playerUniqueId
     */
    public void promote(UUID playerUniqueId)
    {
        ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerUniqueId);

        cp.setLeader(true);
        cp.setTrusted(true);

        SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
        SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getUniqueId());

        // add clan permission
        SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerPromoteEvent(this , cp));
    }

    /**
     * Demote a leader back to a member of a clan
     *
     * @param playerName
     */
    @Deprecated
    public void demote(String playerName)
    {
        ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerName);

        cp.setLeader(false);

        SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
        if (SimpleClans.getInstance().hasUUID())
        {
            SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getUniqueId());
        } else
        {
            SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getName());
        }

        // add clan permission
        SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerDemoteEvent(this , cp));
    }
   
    /**
     * Demote a leader back to a member of a clan
     *
     * @param playerUniqueId
     */
    public void demote(UUID playerUniqueId)
    {
        ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerUniqueId);

        cp.setLeader(false);

        SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
        SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getUniqueId());

        // add clan permission
        SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerDemoteEvent(this , cp));
    }

    /**
     * Add an ally to a clan, and the clan to the ally
     *
     * @param ally
     */
    public void addAlly(Clan ally)
    {
        removeRival(ally.getTag());
        addAlly(ally.getTag());

        ally.removeRival(getTag());
        ally.addAlly(getTag());

        SimpleClans.getInstance().getStorageManager().updateClan(this);
        SimpleClans.getInstance().getStorageManager().updateClan(ally);
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new AllyClanAddEvent(this , ally));
    }

    /**
     * Remove an ally form the clan, and the clan from the ally
     *
     * @param ally
     */
    public void removeAlly(Clan ally)
    {
        removeAlly(ally.getTag());
        ally.removeAlly(getTag());

        SimpleClans.getInstance().getStorageManager().updateClan(this);
        SimpleClans.getInstance().getStorageManager().updateClan(ally);
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new AllyClanRemoveEvent(this , ally));
    }

    /**
     * Add a rival to the clan, and the clan to the rival
     *
     * @param rival
     */
    public void addRival(Clan rival)
    {
        removeAlly(rival.getTag());
        addRival(rival.getTag());

        rival.removeAlly(getTag());
        rival.addRival(getTag());

        SimpleClans.getInstance().getStorageManager().updateClan(this);
        SimpleClans.getInstance().getStorageManager().updateClan(rival);
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new RivalClanAddEvent(this , rival));
    }

    /**
     * Removes a rival from the clan, the clan from the rival
     *
     * @param rival
     */
    public void removeRival(Clan rival)
    {
        removeRival(rival.getTag());
        rival.removeRival(getTag());

        SimpleClans.getInstance().getStorageManager().updateClan(this);
        SimpleClans.getInstance().getStorageManager().updateClan(rival);
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new RivalClanRemoveEvent(this , rival));
    }

    /**
     * Verify a clan
     */
    public void verifyClan()
    {
        setVerified(true);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
    }

    /**
     * Check whether any clan member is online
     *
     * @return
     */
    public boolean isAnyOnline()
    {
        for (String member : members)
        {
            if (SimpleClans.getInstance().hasUUID())
            {
                if (Helper.isOnline(UUID.fromString(member)))
                {
                    return true;
                }
            } else
            {
                if (Helper.isOnline(member))
                {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Check whether all leaders of a clan are online
     *
     * @return
     */
    public boolean allLeadersOnline()
    {
        List<ClanPlayer> leaders = getLeaders();

        for (ClanPlayer leader : leaders)
        {
            if (SimpleClans.getInstance().hasUUID())
            {
                if (!Helper.isOnline(leader.getUniqueId()))
                {
                    return false;
                }
            } else
            {
                if (!Helper.isOnline(leader.getName()))
                {
                    return false;
                }
            }
        }

        return true;
    }

    /**
     * Check whether all leaders, except for the one passed in, are online
     *
     * @param playerName
     * @return
     */
    @Deprecated
    public boolean allOtherLeadersOnline(String playerName)
    {
        List<ClanPlayer> leaders = getLeaders();

        for (ClanPlayer leader : leaders)
        {
            if (leader.getName().equalsIgnoreCase(playerName))
            {
                continue;
            }

            if (!Helper.isOnline(leader.getName()))
            {
                return false;
            }
        }

        return true;
    }
   
    /**
     * Check whether all leaders, except for the one passed in, are online
     *
     * @param playerUniqueId
     * @return
     */
    public boolean allOtherLeadersOnline(UUID playerUniqueId)
    {
        List<ClanPlayer> leaders = getLeaders();

        for (ClanPlayer leader : leaders)
        {
            if (leader.getUniqueId().equals(playerUniqueId))
            {
                continue;
            }

            if (!Helper.isOnline(leader.getUniqueId()))
            {
                return false;
            }
        }

        return true;
    }

    /**
     * Change a clan's tag
     *
     * @param tag
     */
    public void changeClanTag(String tag)
    {
        setColorTag(tag);
        SimpleClans.getInstance().getStorageManager().updateClan(this);
    }

    /**
     * Announce message to a whole clan
     *
     * @param playerName
     * @param msg
     */
    public void clanAnnounce(String playerName, String msg)
    {
        String message = SimpleClans.getInstance().getSettingsManager().getClanChatAnnouncementColor() + msg;

        for (ClanPlayer cp : getMembers())
        {
            Player pl = cp.toPlayer();

            if (pl != null)
            {
                ChatBlock.sendMessage(pl, message);
            }
        }

        SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[" + SimpleClans.getInstance().getLang("clan.announce") + ChatColor.AQUA + "] " + ChatColor.AQUA + "[" + Helper.getColorName(playerName) + ChatColor.WHITE + "] " + message);
    }

    /**
     * Announce message to a all the leaders of a clan
     *
     * @param msg
     */
    public void leaderAnnounce(String msg)
    {
        String message = SimpleClans.getInstance().getSettingsManager().getClanChatAnnouncementColor() + msg;
       
        List<ClanPlayer> leaders = getLeaders();

        for (ClanPlayer cp : leaders)
        {
            Player pl = cp.toPlayer();

            if (pl != null)
            {
                ChatBlock.sendMessage(pl, message);
            }
        }
        SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[" + SimpleClans.getInstance().getLang("leader.announce") + ChatColor.AQUA + "] " + ChatColor.WHITE + message);
    }

    /**
     * Announce message to a whole clan plus audio alert
     *
     * @param playerName
     * @param msg
     */
    public void audioAnnounce(String playerName, String msg)
    {
        clanAnnounce(playerName, msg);

        for (String member : members)
        {
            Player pl;
            if (SimpleClans.getInstance().hasUUID())
            {
                pl = Helper.matchOnePlayer(UUID.fromString(member));
            } else
            {
                pl = Helper.matchOnePlayer(member);
            }
            if (pl == null)
            {
                continue;
            }

            SimpleClans.getInstance().getSpoutPluginManager().playAlert(pl);
        }
    }

    /**
     * Add a new bb message and announce it to all online members of a clan
     *
     * @param announcerName
     * @param msg
     */
    public void addBb(String announcerName, String msg)
    {
        if (isVerified())
        {
            addBb(SimpleClans.getInstance().getSettingsManager().getBbColor() + msg);
            clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + Helper.parseColors(msg));
        }
    }

    /**
     * Displays bb to a player
     *
     * @param player
     */
    public void displayBb(Player player)
    {
        if (isVerified())
        {
            ChatBlock.sendBlank(player);
            ChatBlock.saySingle(player, MessageFormat.format(SimpleClans.getInstance().getLang("bulletin.board.header"), SimpleClans.getInstance().getSettingsManager().getBbAccentColor(), SimpleClans.getInstance().getSettingsManager().getPageHeadingsColor(), Helper.capitalize(getName())));

            int maxSize = SimpleClans.getInstance().getSettingsManager().getBbSize();

            while (bb.size() > maxSize)
            {
                bb.remove(0);
            }

            for (String msg : bb)
            {
                ChatBlock.sendMessage(player, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + Helper.parseColors(msg));
            }
            ChatBlock.sendBlank(player);
        }
    }

    /**
     * Disband a clan
     */
    public void disband()
    {
        SimpleClans.getInstance().getServer().getPluginManager().callEvent(new DisbandClanEvent(this));
        Collection<ClanPlayer> clanPlayers = SimpleClans.getInstance().getClanManager().getAllClanPlayers();
        List<Clan> clans = SimpleClans.getInstance().getClanManager().getClans();

        for (ClanPlayer cp : clanPlayers)
        {
            if (cp.getTag().equals(getTag()))
            {
                SimpleClans.getInstance().getPermissionsManager().removeClanPermissions(this);
                cp.setClan(null);

                if (isVerified())
                {
                    cp.addPastClan(getColorTag() + (cp.isLeader() ? ChatColor.DARK_RED + "*" : ""));
                }

                cp.setLeader(false);

                SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
                if (SimpleClans.getInstance().hasUUID())
                {
                    SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getUniqueId());
                } else
                {
                    SimpleClans.getInstance().getSpoutPluginManager().processPlayer(cp.getName());
                }
            }
        }

        clans.remove(this);

        for (Clan c : clans)
        {
            String disbanded = SimpleClans.getInstance().getLang("clan.disbanded");

            if (c.removeWarringClan(this))
            {
                c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("you.are.no.longer.at.war"), Helper.capitalize(c.getName()), getColorTag()));
            }

            if (c.removeRival(getTag()))
            {
                c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("has.been.disbanded.rivalry.ended"), Helper.capitalize(getName())));
            }

            if (c.removeAlly(getTag()))
            {
                c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("has.been.disbanded.alliance.ended"), Helper.capitalize(getName())));
            }
        }

        final Clan thisOne = this;

        SimpleClans.getInstance().getServer().getScheduler().scheduleSyncDelayedTask(SimpleClans.getInstance(), new Runnable()
        {

            @Override
            public void run()
            {
                SimpleClans.getInstance().getClanManager().removeClan(thisOne.getTag());
                SimpleClans.getInstance().getStorageManager().deleteClan(thisOne);
            }
        }, 1);
    }

    /**
     * Whether this clan can be rivaled
     *
     * @return
     */
    public boolean isUnrivable()
    {
        return SimpleClans.getInstance().getSettingsManager().isUnrivable(getTag());
    }

    /**
     * Returns whether this clan is warring with another clan
     *
     * @param tag the tag of the clan we are at war with
     * @return
     */
    public boolean isWarring(String tag)
    {
        return warringClans.containsKey(tag);
    }

    /**
     * Returns whether this clan is warring with another clan
     *
     * @param clan the clan we are testing against
     * @return
     */
    public boolean isWarring(Clan clan)
    {
        return warringClans.containsKey(clan.getTag());
    }

    /**
     * Add a clan to be at war with
     *
     * @param clan
     */
    public void addWarringClan(Clan clan)
    {
        if (!warringClans.containsKey(clan.getTag()))
        {
            warringClans.put(clan.getTag(), clan);
        }
        SimpleClans.getInstance().getStorageManager().updateClan(this);
    }

    /**
     * Remove a warring clan
     *
     * @param clan
     * @return
     */
    public boolean removeWarringClan(Clan clan)
    {
        Clan warring = warringClans.remove(clan.getTag());

        if (warring != null)
        {
            SimpleClans.getInstance().getStorageManager().updateClan(this);
            return true;
        }

        return false;
    }

    /**
     * Return a collection of all the warring clans
     *
     * @return the clan list
     */
    public List<Clan> getWarringClans()
    {
        return new ArrayList<Clan>(warringClans.values());
    }

    /**
     * Return the list of flags and their data as a json string
     *
     * @return the flags
     */
    public String getFlags()
    {
        JSONObject json = new JSONObject();

        // writing the list of flags to json

        JSONArray warring = new JSONArray();
        warring.addAll(warringClans.keySet());

        json.put("warring", warring);
        json.put("homeX", homeX);
        json.put("homeY", homeY);
        json.put("homeZ", homeZ);
        json.put("homeWorld", homeWorld == null ? "" : homeWorld);

        return json.toString();
    }

    /**
     * Read the list of flags in from a json string
     *
     * @param flagString the flags to set
     */
    public void setFlags(String flagString)
    {
        if (flagString != null && !flagString.isEmpty())
        {
            JSONObject flags = (JSONObject) JSONValue.parse(flagString);

            if (flags != null)
            {
                for (Object flag : flags.keySet())
                {
                    // reading the list of flags from json

                    try
                    {
                        if (flag.equals("warring"))
                        {
                            JSONArray clans = (JSONArray) flags.get(flag);

                            if (clans != null)
                            {
                                for (Object tag : clans)
                                {
                                    SimpleClans.debug("warring added: " + tag.toString());
                                    warringClans.put(tag.toString(), null);
                                }
                            }
                        }

                        if (flag.equals("homeX"))
                        {
                            homeX = ((Long) flags.get(flag)).intValue();
                        }

                        if (flag.equals("homeY"))
                        {
                            homeY = ((Long) flags.get(flag)).intValue();
                        }

                        if (flag.equals("homeZ"))
                        {
                            homeZ = ((Long) flags.get(flag)).intValue();
                        }

                        if (flag.equals("homeWorld"))
                        {
                            homeWorld = (String) flags.get(flag);
                        }
                    }
                    catch (Exception ex)
                    {
                        for (StackTraceElement el : ex.getStackTrace())
                        {
                            System.out.print("Failed reading flag: " + flag);
                            System.out.print("Value: " + flags.get(flag));
                            System.out.print(el.toString());
                        }
                    }
                }
            }
        }
    }

    public void validateWarring()
    {
        for (Iterator iter = warringClans.keySet().iterator(); iter.hasNext(); )
        {
            String clanName = (String) iter.next();

            Clan clan = SimpleClans.getInstance().getClanManager().getClan(clanName);

            if (clan == null)
            {
                iter.remove();
            }
            else
            {
                SimpleClans.debug("validated: " + clanName);
                warringClans.put(clanName, clan);
            }
        }
    }

    public void setHomeLocation(Location home)
    {
        if (home == null)
        {
            homeY = 0;
            homeX = 0;
            homeZ = 0;
            homeWorld = null;
        }
        else
        {
            home.setY(home.getBlockY() + 1);

            homeX = home.getBlockX();
            homeY = home.getBlockY();
            homeZ = home.getBlockZ();
            homeWorld = home.getWorld().getName();
        }
        SimpleClans.getInstance().getStorageManager().updateClan(this);
    }

    public Location getHomeLocation()
    {
        World world = SimpleClans.getInstance().getServer().getWorld(homeWorld);

        if (world != null)
        {
            if (!(world.getBlockAt(homeX, homeY, homeZ).getType().equals(Material.AIR)) || !(world.getBlockAt(homeX, homeY + 1, homeZ).getType().equals(Material.AIR)) || homeY == 0)
            {
                return new Location(world, homeX, world.getHighestBlockYAt(homeX, homeZ), homeZ);
            }
            else
            {
                return new Location(world, homeX, homeY, homeZ);
            }

        }

        return null;
    }

    public String getTagLabel()
    {
        SimpleClans plugin = SimpleClans.getInstance();
        return plugin.getSettingsManager().getTagBracketColor() + plugin.getSettingsManager().getTagBracketLeft() + plugin.getSettingsManager().getTagDefaultColor() + getColorTag() + plugin.getSettingsManager().getTagBracketColor() + plugin.getSettingsManager().getTagBracketRight() + plugin.getSettingsManager().getTagSeparatorColor() + plugin.getSettingsManager().getTagSeparator();
    }

    /**
     * @return the allowWithdraw
     */
    public boolean isAllowWithdraw()
    {
        return allowWithdraw;
    }

    /**
     * @param allowWithdraw the allowWithdraw to set
     */
    public void setAllowWithdraw(boolean allowWithdraw)
    {
        this.allowWithdraw = allowWithdraw;
    }

    /**
     * @return the allowDeposit
     */
    public boolean isAllowDeposit()
    {
        return allowDeposit;
    }

    /**
     * @param allowDeposit the allowDeposit to set
     */
    public void setAllowDeposit(boolean allowDeposit)
    {
        this.allowDeposit = allowDeposit;
    }
}
TOP

Related Classes of net.sacredlabyrinth.phaed.simpleclans.Clan

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.