001package com.ericlam.mc.minigames.core.manager;
002
003import com.ericlam.mc.minigames.core.character.GamePlayer;
004import com.ericlam.mc.minigames.core.game.GameState;
005import com.ericlam.mc.minigames.core.game.GameTeam;
006import com.ericlam.mc.minigames.core.game.InGameState;
007
008import javax.annotation.Nullable;
009import java.util.List;
010
011/**
012 * 遊戲主體管理器
013 */
014public interface GameManager {
015
016    /**
017     * 獲取目前遊戲狀態
018     *
019     * @return 遊戲狀態
020     */
021    GameState getGameState();
022
023    /**
024     * 直接結束遊戲
025     *
026     * @param winner     勝利者
027     * @param winnerTeam 勝利隊伍
028     * @param cancel     取消原定程序, 若果為 false 則會強制完成程序
029     */
030    void endGame(List<GamePlayer> winner, GameTeam winnerTeam, boolean cancel);
031
032    /**
033     * 設置遊戲狀態
034     * <p>
035     * 注意你無法設置為 {@link GameState#PREEND}, 你只能使用 {@link #endGame(List, GameTeam, boolean)} 來設置。
036     * </p>
037     *
038     * @param state 遊戲狀態
039     */
040    void setState(GameState state);
041
042    /**
043     * 獲取場地狀態
044     *
045     * @return 場地狀態
046     */
047    @Nullable
048    InGameState getInGameState();
049
050    /**
051     * 獲取遊戲前綴
052     *
053     * @return 遊戲前綴
054     */
055    String getGamePrefix();
056}