package javastory.channel.server;
import java.util.List;
import com.google.common.collect.Lists;
import javastory.channel.ChannelCharacter;
import javastory.channel.ChannelServer;
import javastory.server.TimerManager;
public class Squad {
private ChannelCharacter leader;
private final List<ChannelCharacter> members = Lists.newLinkedList();
private final List<ChannelCharacter> bannedMembers = Lists.newLinkedList();
private final String type;
private byte status = 0;
public Squad(final String type, final ChannelCharacter leader, final int expiration) {
this.leader = leader;
this.members.add(leader);
this.type = type;
this.status = 1;
this.scheduleRemoval(expiration);
}
private void scheduleRemoval(final int time) {
TimerManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
Squad.this.members.clear();
Squad.this.bannedMembers.clear();
Squad.this.leader = null;
ChannelServer.getInstance().removeMapleSquad(Squad.this.type);
}
}, time);
}
public ChannelCharacter getLeader() {
return this.leader;
}
public boolean containsMember(final ChannelCharacter member) {
final int id = member.getId();
for (final ChannelCharacter mmbr : this.members) {
if (id == mmbr.getId()) {
return true;
}
}
return false;
}
public List<ChannelCharacter> getMembers() {
return this.members;
}
public int getSquadSize() {
return this.members.size();
}
public boolean isBanned(final ChannelCharacter member) {
return this.bannedMembers.contains(member);
}
public int addMember(final ChannelCharacter member, final boolean join) {
if (join) {
if (!this.members.contains(member)) {
if (this.members.size() <= 30) {
this.members.add(member);
this.getLeader().sendNotice(5, member.getName() + " has joined the fight!");
return 1;
}
return 2;
}
return -1;
} else {
if (this.members.contains(member)) {
this.members.remove(member);
this.getLeader().sendNotice(5, member.getName() + " have withdrawed from the fight.");
return 1;
}
return -1;
}
}
public void acceptMember(final int pos) {
final ChannelCharacter toadd = this.bannedMembers.get(pos);
if (toadd != null) {
this.members.add(toadd);
this.bannedMembers.remove(toadd);
toadd.sendNotice(5, this.leader.getName() + " has decided to add you back to the squad.");
}
}
public void banMember(final int pos) {
final ChannelCharacter toban = this.members.get(pos);
if (toban == this.leader) {
return;
}
if (toban != null) {
this.members.remove(toban);
this.bannedMembers.add(toban);
toban.sendNotice(5, this.leader.getName() + " has removed you from the squad.");
}
}
public void setStatus(final byte status) {
this.status = status;
}
public int getStatus() {
return this.status;
}
public int getBannedMemberSize() {
return this.bannedMembers.size();
}
public String getSquadMemberString(final byte type) {
switch (type) {
case 0: {
final StringBuilder sb = new StringBuilder("Squad members : ");
sb.append("#b").append(this.members.size()).append(" #k ").append("List of participants : \n\r ");
int i = 0;
for (final ChannelCharacter chr : this.members) {
i++;
sb.append(i).append(" : ").append(chr.getName()).append(" ");
if (chr == this.leader) {
sb.append("(Leader of the squad)");
}
sb.append(" \n\r ");
}
while (i < 30) {
i++;
sb.append(i).append(" : ").append(" \n\r ");
}
return sb.toString();
}
case 1: {
final StringBuilder sb = new StringBuilder("Squad members : ");
sb.append("#b").append(this.members.size()).append(" #n ").append("List of participants : \n\r ");
int i = 0, selection = 0;
for (final ChannelCharacter chr : this.members) {
i++;
sb.append("#b#L").append(selection).append("#");
selection++;
sb.append(i).append(" : ").append(chr.getName()).append(" ");
if (chr == this.leader) {
sb.append("(Leader of the squad)");
}
sb.append("#l").append(" \n\r ");
}
while (i < 30) {
i++;
sb.append(i).append(" : ").append(" \n\r ");
}
return sb.toString();
}
case 2: {
final StringBuilder sb = new StringBuilder("Squad members : ");
sb.append("#b").append(this.members.size()).append(" #n ").append("List of participants : \n\r ");
int i = 0, selection = 0;
for (final ChannelCharacter chr : this.bannedMembers) {
i++;
sb.append("#b#L").append(selection).append("#");
selection++;
sb.append(i).append(" : ").append(chr.getName()).append(" ");
if (chr == this.leader) {
sb.append("(Leader of the squad)");
}
sb.append("#l").append(" \n\r ");
}
while (i < 30) {
i++;
sb.append(i).append(" : ").append(" \n\r ");
}
return sb.toString();
}
}
return null;
}
}