/*
* This file is part of Libelula Minecraft Edition Project.
*
* Libelula Minecraft Edition is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Libelula Minecraft Edition is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Libelula Minecraft Edition.
* If not, see <http://www.gnu.org/licenses/>.
*
*/
package me.libelula.liderswag;
import java.util.TreeMap;
import java.util.TreeSet;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
/**
*
* @author Diego D'Onofrio <ddonofrio@member.fsf.org>
*/
public class ScoreManager {
private final Main plugin;
private final TreeMap<Player, Objective> scoreBoards;
private final TreeMap<String, Integer> scores;
private final TreeSet<String> modified;
public ScoreManager(Main plugin) {
this.plugin = plugin;
scoreBoards = new TreeMap<>(new Tools.PlayerComparator());
scores = plugin.dm.getScores();
modified = new TreeSet<>();
}
public void setScoreboard(Player player) {
if (scoreBoards.containsKey(player)) {
player.setScoreboard(scoreBoards.get(player).getScoreboard());
} else {
Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
Objective sideBar = board.registerNewObjective("player", "score");
sideBar.setDisplaySlot(DisplaySlot.SIDEBAR);
sideBar.setDisplayName(plugin.lm.getTranslatedText("scoreboard-title"));
Team team = board.registerNewTeam("dummy");
team.addPlayer(Bukkit.getOfflinePlayer(plugin.lm.getTranslatedText("scoreboard-score")));
team.addPlayer(Bukkit.getOfflinePlayer(plugin.lm.getTranslatedText("scoreboard-total-score")));
scoreBoards.put(player, sideBar);
final Score playerScore = scoreBoards.get(player).getScore(Bukkit.getOfflinePlayer(plugin.lm.getTranslatedText("scoreboard-score")));
final Score playerTotalScore = scoreBoards.get(player).getScore(Bukkit.getOfflinePlayer(plugin.lm.getTranslatedText("scoreboard-total-score")));
playerScore.setScore(0);
Integer total = scores.get(player.getName());
if (total != null) {
playerTotalScore.setScore(total);
} else {
playerTotalScore.setScore(0);
}
player.setScoreboard(board);
}
}
public void removeScoreboard(Player player) {
player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
}
public void playReminigHealthPointsEffect(final Player player) {
final double playerHealth = player.getHealth();
int ScheduleTime = 0;
for (double i = playerHealth; i > 0.2; i = i - 0.2) {
ScheduleTime++;
final double newHealth = i;
final Score playerScore = scoreBoards.get(player).getScore(Bukkit.getOfflinePlayer(plugin.lm.getTranslatedText("scoreboard-score")));
final Score playerTotalScore = scoreBoards.get(player).getScore(Bukkit.getOfflinePlayer(plugin.lm.getTranslatedText("scoreboard-total-score")));
Bukkit.getScheduler().runTaskLater(plugin, new Runnable() {
@Override
public void run() {
player.setHealth(newHealth);
player.playSound(player.getLocation(), Sound.ORB_PICKUP, 1, 1);
playerScore.setScore(playerScore.getScore() + 1);
playerTotalScore.setScore(playerTotalScore.getScore() + 1);
}
}, ScheduleTime);
}
Bukkit.getScheduler().runTaskLater(plugin, new Runnable() {
@Override
public void run() {
player.setHealth(player.getMaxHealth());
player.playSound(player.getLocation(), Sound.ORB_PICKUP, 1, 1);
modified.add(player.getName());
scores.put(player.getName(), scoreBoards.get(player).getScore(Bukkit.getOfflinePlayer(plugin.lm.getTranslatedText("scoreboard-total-score"))).getScore());
}
}, ScheduleTime + 20);
}
public void save() {
for (String playerName : modified) {
Integer score = scores.get(playerName);
if (score != null) {
plugin.dm.setScore(playerName, score);
}
}
}
}