package handling.world.messenger; import client.MapleCharacter; import handling.channel.ChannelServer; import handling.world.WorldFindService; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; public class MapleMessenger implements Serializable { private static final long serialVersionUID = 9179541993413738569L; private final MapleMessengerCharacter[] members; private final String[] silentLink; private int id; private final MessengerType type; private final boolean hide; public MapleMessenger(int id, MapleMessengerCharacter chrfor, MessengerType type, boolean gm) { this.id = id; this.type = type; this.hide = gm; this.members = new MapleMessengerCharacter[type.maxMembers]; this.silentLink = new String[type.maxMembers]; this.members[0] = chrfor; } public MessengerType getType() { return this.type; } public boolean isHide() { return this.hide; } public void addMembers(int pos, MapleMessengerCharacter chrfor) { if (this.members[pos] != null) { return; } this.members[pos] = chrfor; } public boolean containsMembers(MapleMessengerCharacter member) { return getPositionByName(member.getName()) != -1; } public void addMember(MapleMessengerCharacter member) { int position = getLowestPosition(); if (position != -1) { addMembers(position, member); } } public void removeMember(MapleMessengerCharacter member) { int position = getPositionByName(member.getName()); if (position != -1) { this.members[position] = null; } } public void silentRemoveMember(MapleMessengerCharacter member) { int position = getPositionByName(member.getName()); if (position != -1) { this.members[position] = null; this.silentLink[position] = member.getName(); } } public void silentAddMember(MapleMessengerCharacter member) { for (int i = 0; i < this.silentLink.length; i++) { if ((this.silentLink[i] != null) && (this.silentLink[i].equalsIgnoreCase(member.getName()))) { addMembers(i, member); this.silentLink[i] = null; return; } } } public void updateMember(MapleMessengerCharacter member) { for (int i = 0; i < this.members.length; i++) { MapleMessengerCharacter chr = this.members[i]; if ((chr != null) && (chr.equals(member))) { this.members[i] = null; addMembers(i, member); return; } } } public int getMemberSize() { int ret = 0; for (MapleMessengerCharacter member : this.members) { if (member != null) { ret++; } } return ret; } public int getLowestPosition() { for (int i = 0; i < this.members.length; i++) { if (this.members[i] == null) { return i; } } return -1; } public int getPositionByName(String name) { for (int i = 0; i < this.members.length; i++) { MapleMessengerCharacter messengerchar = this.members[i]; if ((messengerchar != null) && (messengerchar.getName().equalsIgnoreCase(name))) { return i; } } return -1; } public MapleMessengerCharacter getMemberByPos(int pos) { return this.members[pos]; } public int getId() { return this.id; } public void setId(int id) { this.id = id; } @Override public int hashCode() { return 31 + this.id; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } MapleMessenger other = (MapleMessenger) obj; return this.id == other.id; } public Collection<MapleMessengerCharacter> getMembers() { return Arrays.asList(this.members); } public boolean isMonitored() { int ch = -1; for (MapleMessengerCharacter member : this.members) { if (member != null) { ch = WorldFindService.getInstance().findChannel(member.getName()); if (ch != -1) { MapleCharacter player = ChannelServer.getInstance(ch).getPlayerStorage().getCharacterByName(member.getName()); if ((player != null) && (player.getClient() != null) && (player.getClient().isMonitored())) { return true; } } } } return false; } public String getMemberNamesDEBUG() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < this.members.length; i++) { if (this.members[i] != null) { sb.append(this.members[i].getName()); if (i != this.members.length - 1) { sb.append(','); } } } return sb.toString(); } }