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}