package tc.oc.commons.bukkit.util;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.Plugin;
import java.util.Map;
import javax.inject.Inject;
/**
* Uses {@link ListeningMapAdapter} to guarantee that the map only contains online players.
*/
public class OnlinePlayerMapAdapter<V> extends ListeningMapAdapter<Player, V> implements Listener {
@Inject public OnlinePlayerMapAdapter(Plugin plugin) {
super(plugin);
}
public OnlinePlayerMapAdapter(Map<Player, V> map, Plugin plugin) {
super(map, plugin);
}
@Override
public boolean isValid(Player key) {
return key.willBeOnline();
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerQuit(PlayerQuitEvent event) {
this.remove(event.getPlayer());
}
@Override
protected Map<Player, V> delegate() {
return this.map;
}
}