001package com.ericlam.mc.minigames.core.manager;
002
003import com.ericlam.mc.minigames.core.character.GamePlayer;
004import com.ericlam.mc.minigames.core.exception.gamestats.PlayerNotExistException;
005import com.ericlam.mc.minigames.core.gamestats.GameStatsEditor;
006import org.bukkit.OfflinePlayer;
007import org.bukkit.entity.Player;
008
009import java.util.concurrent.CompletableFuture;
010
011/**
012 * 遊戲玩家資料管理器
013 */
014public interface GameStatsManager {
015
016    /**
017     * 獲取遊戲玩家資訊
018     *
019     * @param player 遊戲玩家
020     * @return 遊戲玩家資訊
021     * @throws PlayerNotExistException 遊戲玩家不存在時
022     */
023    String[] getStatsInfo(GamePlayer player) throws PlayerNotExistException;
024
025    /**
026     * 獲取遊戲玩家資訊
027     *
028     * @param player 玩家
029     * @return 遊戲玩家資訊
030     * @throws PlayerNotExistException 遊戲玩家不存在時
031     */
032    String[] getStatsInfo(Player player) throws PlayerNotExistException;
033
034    /**
035     * 增加殺數
036     *
037     * @param player 玩家
038     * @param kills  增加
039     */
040    void addKills(GamePlayer player, int kills);
041
042    /**
043     * 減少玩家殺數
044     *
045     * @param player 玩家
046     * @param kills  減少
047     */
048    void minusKills(GamePlayer player, int kills);
049
050    /**
051     * 增加玩家死數
052     *
053     * @param player 玩家
054     * @param deaths 增加
055     */
056    void addDeaths(GamePlayer player, int deaths);
057
058    /**
059     * 減少玩家死數
060     *
061     * @param player 玩家
062     * @param deaths 減少
063     */
064    void minusDeaths(GamePlayer player, int deaths);
065
066    /**
067     * 增加玩家勝數
068     *
069     * @param player 玩家
070     * @param wins   增加
071     */
072    void addWins(GamePlayer player, int wins);
073
074    /**
075     * 減少玩家勝數
076     *
077     * @param player 玩家
078     * @param wins   減少
079     */
080    void minusWins(GamePlayer player, int wins);
081
082    /**
083     * 增加玩家遊玩次數
084     *
085     * @param player 玩家
086     * @param played 增加
087     */
088    void addPlayed(GamePlayer player, int played);
089
090    /**
091     * 減少玩家遊玩次數
092     *
093     * @param player 玩家
094     * @param played 減少
095     */
096    void minusPlayed(GamePlayer player, int played);
097
098    /**
099     * 新增分數
100     *
101     * @param player 玩家
102     * @param scores 分數
103     */
104    void addScores(GamePlayer player, double scores);
105
106    /**
107     * 減少分數
108     *
109     * @param player 玩家
110     * @param scores 分數
111     */
112    void minusScores(GamePlayer player, double scores);
113
114    /**
115     * 獲取 遊戲玩家資訊的 可編輯容器
116     *
117     * @param player 玩家
118     * @return 遊戲玩家資訊
119     * @throws PlayerNotExistException 玩家不存在時
120     */
121    GameStatsEditor getGameStats(GamePlayer player) throws PlayerNotExistException;
122
123    /**
124     * 加載該玩家的遊戲資料
125     *
126     * @param player 玩家
127     * @return 異步運行
128     */
129    CompletableFuture<Boolean> loadGameStats(GamePlayer player);
130
131    /**
132     * 儲存所有玩家的遊戲資料
133     *
134     * @return 異步運行
135     */
136    CompletableFuture<Void> saveAll();
137
138    /**
139     * 保存單獨玩家的遊戲資料
140     *
141     * @param player 玩家
142     * @return 異步運行
143     * @throws PlayerNotExistException 玩家不存在時
144     */
145    CompletableFuture<Void> savePlayer(OfflinePlayer player) throws PlayerNotExistException;
146
147}