use of au.com.mineauz.minigames.stats.StoredGameStats in project Minigames by AddstarMC.
the class PlayerData method endMinigame.
public void endMinigame(Minigame minigame, List<MinigamePlayer> winners, List<MinigamePlayer> losers) {
EndMinigameEvent event = new EndMinigameEvent(winners, losers, minigame);
Bukkit.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
winners = event.getWinners();
losers = event.getLosers();
//Call Mechanics End
minigame.getMechanic().endMinigame(minigame, winners, losers);
//Prepare split money
double bets = 0;
if (minigame.getMpBets() != null) {
if (minigame.getMpBets().hasMoneyBets()) {
List<MinigamePlayer> plys = new ArrayList<MinigamePlayer>();
plys.addAll(event.getWinners());
if (!plys.isEmpty()) {
bets = minigame.getMpBets().claimMoneyBets() / (double) plys.size();
BigDecimal roundBets = new BigDecimal(bets);
roundBets = roundBets.setScale(2, BigDecimal.ROUND_HALF_UP);
bets = roundBets.doubleValue();
}
minigame.setMpBets(null);
}
}
//Broadcast Message
if (plugin.getConfig().getBoolean("broadcastCompletion") && minigame.isEnabled()) {
if (minigame.isTeamGame()) {
if (winners.size() > 0 || ((TeamsModule) minigame.getModule("Teams")).getDefaultWinner() != null) {
Team team;
if (winners.size() > 0)
team = winners.get(0).getTeam();
else
team = ((TeamsModule) minigame.getModule("Teams")).getTeam(((TeamsModule) minigame.getModule("Teams")).getDefaultWinner());
String score = "";
List<Team> teams = TeamsModule.getMinigameModule(minigame).getTeams();
for (Team t : teams) {
score += t.getColor().getColor().toString() + t.getScore();
if (t != teams.get(teams.size() - 1)) {
score += ChatColor.WHITE + " : ";
}
}
String nscore = ", " + MinigameUtils.formStr("player.end.team.score", score);
if (team.getScore() > 0) {
MinigameUtils.broadcast(MinigameUtils.formStr("player.end.team.win", team.getChatColor() + team.getDisplayName() + ChatColor.WHITE, minigame.getName(true)) + nscore, minigame, ChatColor.GREEN);
} else {
MinigameUtils.broadcast(MinigameUtils.formStr("player.end.team.win", team.getChatColor() + team.getDisplayName() + ChatColor.WHITE, minigame.getName(true)), minigame, ChatColor.GREEN);
}
} else {
MinigameUtils.broadcast(MinigameUtils.formStr("player.end.broadcastNobodyWon", minigame.getName(true)), minigame, ChatColor.RED);
}
} else {
if (winners.size() == 1) {
String score = "";
if (winners.get(0).getScore() != 0)
score = MinigameUtils.formStr("player.end.broadcastScore", winners.get(0).getScore());
MinigameUtils.broadcast(MinigameUtils.formStr("player.end.broadcastMsg", winners.get(0).getDisplayName(minigame.usePlayerDisplayNames()), minigame.getName(true)) + ". " + score, minigame, ChatColor.GREEN);
} else if (winners.size() > 1) {
String win = "";
Collections.sort(winners, new Comparator<MinigamePlayer>() {
@Override
public int compare(MinigamePlayer o1, MinigamePlayer o2) {
return Integer.valueOf(o1.getScore()).compareTo(o2.getScore());
}
});
for (MinigamePlayer pl : winners) {
if (winners.indexOf(pl) < 2) {
win += pl.getDisplayName(minigame.usePlayerDisplayNames());
if (winners.indexOf(pl) + 2 >= winners.size()) {
win += " and ";
} else {
win += ", ";
}
} else {
win += String.valueOf(winners.size() - 3) + " others";
}
}
MinigameUtils.broadcast(MinigameUtils.formStr("player.end.broadcastMsg", win, minigame.getName(true)) + ". ", minigame, ChatColor.GREEN);
} else {
MinigameUtils.broadcast(MinigameUtils.formStr("player.end.broadcastNobodyWon", minigame.getName(true)), minigame, ChatColor.RED);
}
}
}
GameOverModule gom = GameOverModule.getMinigameModule(minigame);
boolean usedTimer = false;
gom.setWinners(winners);
gom.setLosers(losers);
if (gom.getTimer() > 0 && minigame.getType() == MinigameType.MULTIPLAYER) {
gom.startEndGameTimer();
usedTimer = true;
}
for (MinigamePlayer player : losers) {
player.setEndTime(System.currentTimeMillis());
if (!usedTimer)
quitMinigame(player, true);
PlayMGSound.playSound(player, MGSounds.getSound("lose"));
}
for (MinigamePlayer player : winners) {
player.setEndTime(System.currentTimeMillis());
StoredGameStats saveData = new StoredGameStats(minigame, player);
saveData.addStat(MinigameStats.Attempts, 1);
saveData.addStat(MinigameStats.Wins, 1);
saveData.addStat(MinigameStats.Kills, player.getKills());
saveData.addStat(MinigameStats.Deaths, player.getDeaths());
saveData.addStat(MinigameStats.Score, player.getScore());
saveData.addStat(MinigameStats.Reverts, player.getReverts());
saveData.addStat(MinigameStats.CompletionTime, player.getEndTime() - player.getStartTime() + player.getStoredTime());
for (DynamicMinigameStat stat : MinigameStats.getDynamicStats()) {
if (stat.doesApply(minigame, player, true)) {
saveData.addStat(stat, stat.getValue(minigame, player, true));
}
}
saveData.applySettings(minigame.getStatSettings(saveData));
if (!usedTimer)
quitMinigame(player, true);
//Group money bets
if (bets != 0) {
plugin.getEconomy().depositPlayer(player.getPlayer().getPlayer(), bets);
player.sendMessage(MinigameUtils.formStr("player.bet.winMoney", Minigames.plugin.getEconomy().format(bets)), null);
}
// Record player completion and give rewards
if (minigame.isEnabled()) {
plugin.queueStatSave(saveData, true);
} else {
MinigameUtils.debugMessage("Skipping SQL data save for " + saveData + "; minigame is disabled");
}
//Item Bets (for non groups)
if (minigame.getMpBets() != null) {
if (minigame.getMpBets().hasBets()) {
if (!player.isInMinigame())
player.getPlayer().getInventory().addItem(minigame.getMpBets().claimBets());
else {
for (ItemStack i : minigame.getMpBets().claimBets()) {
player.addTempRewardItem(i);
}
}
minigame.setMpBets(null);
}
}
PlayMGSound.playSound(player, MGSounds.getSound("win"));
}
if (!usedTimer) {
gom.clearLosers();
gom.clearWinners();
}
mdata.clearClaimedScore(minigame);
//Call Types End.
mdata.minigameType(minigame.getType()).endMinigame(winners, losers, minigame);
minigame.getScoreboardData().reload();
}
}
use of au.com.mineauz.minigames.stats.StoredGameStats in project Minigames by AddstarMC.
the class PlayerData method quitMinigame.
public void quitMinigame(MinigamePlayer player, boolean forced) {
Minigame minigame = player.getMinigame();
boolean isWinner = false;
if (GameOverModule.getMinigameModule(minigame).getWinners().contains(player))
isWinner = true;
QuitMinigameEvent event = new QuitMinigameEvent(player, minigame, forced, isWinner);
Bukkit.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
if (!minigame.isSpectator(player)) {
if (player.getEndTime() == 0)
player.setEndTime(System.currentTimeMillis());
if (isWinner)
GameOverModule.getMinigameModule(minigame).getWinners().remove(player);
else
GameOverModule.getMinigameModule(minigame).getLosers().remove(player);
if (!isWinner) {
if (!minigame.canSaveCheckpoint() && minigame.isEnabled()) {
StoredGameStats saveData = new StoredGameStats(minigame, player);
saveData.addStat(MinigameStats.Attempts, 1);
for (DynamicMinigameStat stat : MinigameStats.getDynamicStats()) {
if (stat.doesApply(minigame, player, false)) {
saveData.addStat(stat, stat.getValue(minigame, player, false));
}
}
saveData.applySettings(minigame.getStatSettings(saveData));
plugin.queueStatSave(saveData, false);
}
}
//Call Types quit.
mdata.minigameType(minigame.getType()).quitMinigame(player, minigame, forced);
//Call Mechanic quit.
minigame.getMechanic().quitMinigame(minigame, player, forced);
//Prepare player for quit
if (player.getPlayer().getVehicle() != null) {
Vehicle vehicle = (Vehicle) player.getPlayer().getVehicle();
vehicle.eject();
}
player.getPlayer().closeInventory();
if (player.getLoadout() != null) {
player.getLoadout().removeLoadout(player);
}
player.removeMinigame();
minigame.removePlayer(player);
for (PotionEffect potion : player.getPlayer().getActivePotionEffects()) {
player.getPlayer().removePotionEffect(potion.getType());
}
player.getPlayer().setFallDistance(0);
player.getPlayer().setNoDamageTicks(60);
final MinigamePlayer fplayer = player;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
fplayer.getPlayer().setFireTicks(0);
}
});
player.resetAllStats();
if (!player.isDead()) {
player.restorePlayerData();
if (!isWinner)
player.teleport(minigame.getQuitPosition());
else
player.teleport(minigame.getEndPosition());
} else {
if (!isWinner)
player.setQuitPos(minigame.getQuitPosition());
else
player.setQuitPos(minigame.getEndPosition());
player.setRequiredQuit(true);
}
//Reward Player
if (isWinner) {
player.claimTempRewardItems();
}
player.claimRewards();
//Reset Minigame
if (minigame.getPlayers().size() == 0) {
if (minigame.getMinigameTimer() != null) {
minigame.getMinigameTimer().stopTimer();
minigame.setMinigameTimer(null);
}
if (minigame.getFloorDegenerator() != null) {
minigame.getFloorDegenerator().stopDegenerator();
}
minigame.setState(MinigameState.IDLE);
if (minigame.getBlockRecorder().hasData()) {
minigame.getBlockRecorder().restoreBlocks();
minigame.getBlockRecorder().restoreEntities();
minigame.getBlockRecorder().setCreatedRegenBlocks(false);
}
if (minigame.getMpTimer() != null) {
minigame.getMpTimer().pauseTimer();
minigame.getMpTimer().removeTimer();
minigame.setMpTimer(null);
}
if (minigame.getMpBets() != null) {
minigame.setMpBets(null);
}
mdata.clearClaimedScore(minigame);
WeatherTimeModule.getMinigameModule(minigame).stopTimeLoop();
GameOverModule.getMinigameModule(minigame).stopEndGameTimer();
for (Team team : TeamsModule.getMinigameModule(minigame).getTeams()) {
team.setScore(0);
}
}
minigame.getScoreboardManager().resetScores(player.getName());
for (MinigamePlayer pl : minigame.getSpectators()) {
player.getPlayer().showPlayer(pl.getPlayer());
}
if (minigame.getPlayers().size() == 0 && !minigame.isRegenerating()) {
HandlerList.unregisterAll(minigame.getBlockRecorder());
}
//Send out messages
if (!forced) {
mdata.sendMinigameMessage(minigame, MinigameUtils.formStr("player.quit.plyMsg", player.getName(), minigame.getName(true)), "error", player);
}
plugin.getLogger().info(player.getName() + " quit " + minigame);
player.updateInventory();
} else {
if (player.getPlayer().getVehicle() != null) {
Vehicle vehicle = (Vehicle) player.getPlayer().getVehicle();
vehicle.eject();
}
player.getPlayer().setFallDistance(0);
player.getPlayer().setNoDamageTicks(60);
final Player fplayer = player.getPlayer();
for (PotionEffect potion : player.getPlayer().getActivePotionEffects()) {
player.getPlayer().removePotionEffect(potion.getType());
}
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
fplayer.setFireTicks(0);
}
});
player.getPlayer().closeInventory();
if (!player.isDead()) {
player.restorePlayerData();
}
player.teleport(minigame.getQuitPosition());
player.removeMinigame();
minigame.removeSpectator(player);
for (MinigamePlayer pl : minigame.getPlayers()) {
pl.getPlayer().showPlayer(player.getPlayer());
}
player.sendMessage(MinigameUtils.formStr("player.spectate.quit.plyMsg", minigame.getName(true)), "error");
mdata.sendMinigameMessage(minigame, MinigameUtils.formStr("player.spectate.quit.minigameMsg", player.getName(), minigame.getName(true)), "error", player);
}
if (player.getPlayer().getGameMode() != GameMode.CREATIVE)
player.setCanFly(false);
if (!forced) {
minigame.getScoreboardData().reload();
}
}
}
Aggregations