001package fr.aumgn.bukkitutils.playerref.map;
002
003import java.util.HashMap;
004import java.util.HashSet;
005import java.util.Map;
006import java.util.Set;
007
008import org.bukkit.OfflinePlayer;
009import org.bukkit.entity.Player;
010
011import fr.aumgn.bukkitutils.playerref.PlayerRef;
012
013public class PlayersRefHashMap<T>
014            extends HashMap<PlayerRef, T> implements PlayersRefMap<T> {
015
016    private static final long serialVersionUID = -2270069935511356836L;
017
018    public PlayersRefHashMap() {
019        super();
020    }
021
022    @Override
023    public boolean containsKey(OfflinePlayer player) {
024        return containsKey(PlayerRef.get(player));
025    }
026
027    @Override
028    public T get(OfflinePlayer player) {
029        return get(PlayerRef.get(player));
030    }
031
032    @Override
033    public T put(OfflinePlayer player, T value) {
034        return put(PlayerRef.get(player), value);
035    }
036
037    @Override
038    public T remove(OfflinePlayer player) {
039        return remove(PlayerRef.get(player));
040    }
041
042    @Override
043    public Set<OfflinePlayer> offlinePlayersSet() {
044        HashSet<OfflinePlayer> set = new HashSet<OfflinePlayer>();
045        for (PlayerRef ref : keySet()) {
046            set.add(ref.getOfflinePlayer());
047        }
048
049        return set;
050    }
051
052    public Set<Player> playersSet() {
053        HashSet<Player> set = new HashSet<Player>();
054        for (PlayerRef ref : keySet()) {
055            Player player = ref.getPlayer();
056            if (player != null) {
057                set.add(player);
058            }
059        }
060
061        return set;
062    }
063
064    @Override
065    public Set<Entry<OfflinePlayer, T>> offlinePlayersEntrySet() {
066        HashSet<Entry<OfflinePlayer, T>> set =
067                new HashSet<Map.Entry<OfflinePlayer, T>>();
068        for (Map.Entry<PlayerRef, T> entry : entrySet()) {
069            set.add(new OfflinePlayerMapEntry<T>(entry));
070        }
071        return set;
072    }
073
074    @Override
075    public Set<Entry<Player, T>> playersEntrySet() {
076        HashSet<Entry<Player, T>> set =
077                new HashSet<Entry<Player, T>>();
078        for (Entry<PlayerRef, T> entry : entrySet()) {
079            set.add(new PlayerMapEntry<T>(entry));
080        }
081        return set;
082    }
083}