/* * This file is part of aion-unique <aion-unique.org>. * * aion-unique is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * aion-unique is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with aion-unique. If not, see <http://www.gnu.org/licenses/>. */ package com.aionemu.gameserver.model.gameobjects.player; import java.util.Collection; import java.util.Comparator; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import com.aionemu.gameserver.model.gameobjects.Letter; /** * @author kosyachok * @modified Atracer */ public class Mailbox { private Map<Integer, Letter> mails = new ConcurrentHashMap<Integer, Letter>(); /** * * @param letter */ public void putLetterToMailbox(Letter letter) { mails.put(letter.getObjectId(), letter); } /** * Get all letters in mailbox (sorted according to time received) * * @return */ public Collection<Letter> getLetters() { SortedSet<Letter> letters = new TreeSet<Letter>(new Comparator<Letter>(){ @Override public int compare(Letter o1, Letter o2) { if(o1.getTimeStamp().getTime() > o2.getTimeStamp().getTime()) return 1; if(o1.getTimeStamp().getTime() < o2.getTimeStamp().getTime()) return -1; return o1.getObjectId() > o2.getObjectId() ? 1 : -1; } }); for(Letter letter : mails.values()) { letters.add(letter); } return letters; } /** * Get letter with specified letter id * * @param letterObjId * @return */ public Letter getLetterFromMailbox(int letterObjId) { return mails.get(letterObjId); } /** * Check whether mailbox contains empty letters * * @return */ public boolean haveUnread() { for(Letter letter : mails.values()) { if(letter.isUnread()) return true; } return false; } /** * * @return */ public int getFreeSlots() { return 65536 - mails.size(); } /** * * @return */ public boolean haveFreeSlots() { return mails.size() < 100; } /** * @param letterId */ public void removeLetter(int letterId) { mails.remove(letterId); } /** * Current size of mailbox * * @return */ public int size() { return mails.size(); } }