001package com.ericlam.mc.minigames.core.manager;
002
003import com.ericlam.mc.minigames.core.character.GamePlayer;
004import com.google.common.collect.ImmutableList;
005import org.bukkit.entity.Player;
006
007import java.util.Optional;
008
009/**
010 * 遊戲玩家管理器
011 */
012public interface PlayerManager {
013
014    /**
015     * 獲取所有遊戲玩家
016     *
017     * @return 所有遊戲玩家
018     */
019    ImmutableList<GamePlayer> getTotalPlayers();
020
021    /**
022     * 獲取所有觀戰者
023     *
024     * @return 所有觀戰者
025     */
026    ImmutableList<GamePlayer> getSpectators();
027
028    /**
029     * 獲取所有遊戲中的玩家
030     *
031     * @return 所有遊戲中的玩家
032     */
033    ImmutableList<GamePlayer> getGamePlayer();
034
035    /**
036     * 設置為遊戲中的玩家
037     *
038     * @param player 玩家
039     */
040    void setGamePlayer(GamePlayer player);
041
042    /**
043     * 獲取所有等待投票的玩家
044     *
045     * @return 所有等待投票的玩家
046     */
047    ImmutableList<GamePlayer> getWaitingPlayer();
048
049    /**
050     * 設置為等待中的玩家
051     *
052     * @param player 玩家
053     */
054    void setWaitingPlayer(GamePlayer player);
055
056    /**
057     * 尋找遊戲玩家
058     *
059     * @param player 玩家
060     * @return 可能為 null 的遊戲玩家
061     */
062    Optional<GamePlayer> findPlayer(Player player);
063
064    /**
065     * 創建遊戲玩家
066     *
067     * @param player 玩家
068     * @return 遊戲玩家
069     */
070    GamePlayer buildGamePlayer(Player player);
071
072    /**
073     * 設置為觀戰者
074     *
075     * @param player 玩家
076     */
077    void setSpectator(GamePlayer player);
078
079    /**
080     * 是否可以開始進行倒數
081     *
082     * @return 可以開始進行倒數
083     */
084    boolean shouldStart();
085
086    /**
087     * 刪除遊戲玩家
088     *
089     * @param player 遊戲玩家
090     */
091    void removePlayer(GamePlayer player);
092
093}