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}