001package com.ericlam.mc.minigames.core.event;
002
003import com.ericlam.mc.minigames.core.character.GamePlayer;
004import com.ericlam.mc.minigames.core.game.GameState;
005import com.ericlam.mc.minigames.core.game.InGameState;
006import com.ericlam.mc.minigames.core.manager.PlayerManager;
007import com.google.common.collect.ImmutableList;
008import org.bukkit.event.Event;
009import org.bukkit.event.HandlerList;
010
011import javax.annotation.Nonnull;
012import javax.annotation.Nullable;
013
014/**
015 * 遊戲事件
016 */
017public abstract class GameEvent extends Event {
018
019
020    private static final HandlerList handlerList = new HandlerList();
021    private InGameState inGameState;
022    private GameState gameState;
023    private PlayerManager playerManager;
024
025    public GameEvent(@Nullable InGameState inGameState, @Nonnull GameState gameState, @Nonnull PlayerManager playerManager) {
026        this.inGameState = inGameState;
027        this.gameState = gameState;
028        this.playerManager = playerManager;
029    }
030
031    public static HandlerList getHandlerList() {
032        return handlerList;
033    }
034
035    /**
036     * @return 場地狀態
037     */
038    public InGameState getInGameState() {
039        return inGameState;
040    }
041
042    /**
043     * @return 遊戲狀態
044     */
045    public GameState getGameState() {
046        return gameState;
047    }
048
049    /**
050     * @return 所有遊戲玩家
051     */
052    public ImmutableList<GamePlayer> getTotalPlayers() {
053        return playerManager.getTotalPlayers();
054    }
055
056    /**
057     * @return 所有遊戲中的玩家
058     */
059    public ImmutableList<GamePlayer> getGamingPlayer() {
060        return playerManager.getGamePlayer();
061    }
062
063    /**
064     * @return 所有投票等候的玩家
065     */
066    public ImmutableList<GamePlayer> getWaitingPlayer() {
067        return playerManager.getWaitingPlayer();
068    }
069
070    /**
071     * @return 所有觀戰的玩家
072     */
073    public ImmutableList<GamePlayer> getSpectators() {
074        return playerManager.getSpectators();
075    }
076
077
078    @Nonnull
079    @Override
080    public HandlerList getHandlers() {
081        return handlerList;
082    }
083}