Changed Fight Scoreboard to SWScoreboard #194
@ -25,13 +25,13 @@ import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.states.FightState;
|
||||
import de.steamwar.fightsystem.winconditions.*;
|
||||
import de.steamwar.scoreboard.SWScoreboard;
|
||||
import de.steamwar.scoreboard.ScoreboardCallback;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scoreboard.DisplaySlot;
|
||||
import org.bukkit.scoreboard.Objective;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.Objects;
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
|
||||
public class FightScoreboard {
|
||||
@ -39,85 +39,111 @@ public class FightScoreboard {
|
||||
private FightScoreboard(){}
|
||||
|
||||
private static final Set<FightState> fullScoreboard = EnumSet.of(FightState.RUNNING, FightState.SPECTATE);
|
||||
private static final Scoreboard scoreboard = Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard();
|
||||
private static final Objective objective;
|
||||
private static int index = 0;
|
||||
|
||||
static{
|
||||
if(scoreboard.getObjective("AAA") == null)
|
||||
//noinspection deprecation
|
||||
objective = scoreboard.registerNewObjective("AAA", "BBB");
|
||||
else
|
||||
objective = scoreboard.getObjective("AAA");
|
||||
}
|
||||
|
||||
public static void init(){
|
||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), () -> {
|
||||
objective.unregister();
|
||||
//noinspection deprecation
|
||||
scoreboard.registerNewObjective("AAA", "BBB");
|
||||
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
Bukkit.getOnlinePlayers().forEach(player -> SWScoreboard.removeScoreboard(player));
|
||||
|
||||
|
||||
FightTeam fightTeam = getIndexDisplay();
|
||||
ScoreBoardObjective objective;
|
||||
if(fightTeam != null)
|
||||
Lixfel
hat
Listener sollen im Ordner Listener sein, in diesem Fall solltest du wsl. einfach im ConnectionListener im JonListener einen Aufruf hierher machen. Listener sollen im Ordner Listener sein, in diesem Fall solltest du wsl. einfach im ConnectionListener im JonListener einen Aufruf hierher machen.
|
||||
teamScoreboard(fightTeam);
|
||||
objective = teamScoreboard(fightTeam);
|
||||
else
|
||||
generalScoreboard();
|
||||
objective = generalScoreboard();
|
||||
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.setScoreboard(scoreboard));
|
||||
Bukkit.getOnlinePlayers().forEach(player -> SWScoreboard.createScoreboard(player, new ScoreboardCallback() {
|
||||
Lixfel
hat
Hast du darauf geachtet, dass die Teammitglieder immer noch keinen Nametag über sich haben & in der passenden Farbe rechts angezeigt werden? Aufgrund der derzeitigen SWScoreboard-Implementierung (welche ich überarbeiten möchte) habe ich da nämlich so meine Befürchtungen. Hast du darauf geachtet, dass die Teammitglieder immer noch keinen Nametag über sich haben & in der passenden Farbe rechts angezeigt werden? Aufgrund der derzeitigen SWScoreboard-Implementierung (welche ich überarbeiten möchte) habe ich da nämlich so meine Befürchtungen.
Chaoscaot
hat
Die Nametags werden gehided und der Name hat auch die richtige Farbe in der Sidebar. Die Nametags werden gehided und der Name hat auch die richtige Farbe in der Sidebar.
|
||||
@Override
|
||||
public HashMap<String, Integer> getData() {
|
||||
return objective.getScores();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTitle() {
|
||||
return objective.getTitle();
|
||||
}
|
||||
}));
|
||||
}, 0, 200);
|
||||
}
|
||||
|
||||
public static Scoreboard getScoreboard() {
|
||||
return scoreboard;
|
||||
return Bukkit.getScoreboardManager().getMainScoreboard();
|
||||
}
|
||||
|
||||
private static void teamScoreboard(FightTeam fightTeam){
|
||||
objective.setDisplayName(fightTeam.getColoredName());
|
||||
private static ScoreBoardObjective teamScoreboard(FightTeam fightTeam){
|
||||
ScoreBoardObjective objective = new ScoreBoardObjective(fightTeam.getColoredName());
|
||||
fightTeam.getPlayers().forEach(fp -> {
|
||||
if(fp.isLiving())
|
||||
objective.getScore(fightTeam.getPrefix() + fp.getPlayer().getName()).setScore((int) Math.ceil(fp.getPlayer().getHealth()));
|
||||
objective.addScore(fightTeam.getPrefix() + fp.getPlayer().getName(), (int) Math.ceil(fp.getPlayer().getHealth()));
|
||||
});
|
||||
return objective;
|
||||
}
|
||||
|
||||
private static void generalScoreboard(){
|
||||
objective.setDisplayName("§6Kampf");
|
||||
private static ScoreBoardObjective generalScoreboard(){
|
||||
ScoreBoardObjective objective = new ScoreBoardObjective("§6Kampf");
|
||||
if (Config.Timeout || Config.Points || Config.HeartRatioTimeout) {
|
||||
int fightTime = FightSystem.getFightTime();
|
||||
if (fightTime >= 60)
|
||||
objective.getScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s").setScore(3);
|
||||
objective.addScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s", 3);
|
||||
else
|
||||
objective.getScore("§7Zeit: §a" + fightTime + "s").setScore(3);
|
||||
objective.addScore("§7Zeit: §a" + fightTime + "s", 3);
|
||||
}
|
||||
|
||||
if(fullScoreboard.contains(FightSystem.getFightState())){
|
||||
if (Config.PercentSystem){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%").setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%").setScore(0);
|
||||
objective.addScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%", 1);
|
||||
objective.addScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%", 0);
|
||||
}else if(Config.WaterTechKO){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater()).setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater()).setScore(0);
|
||||
objective.addScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater(), 1);
|
||||
objective.addScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater(), 0);
|
||||
}else if(Config.RelativePercent){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getRed().getPrintablePercent() + "%").setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getBlue().getPrintablePercent() + "%").setScore(0);
|
||||
objective.addScore(Fight.getRedTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getRed().getPrintablePercent() + "%", 1);
|
||||
objective.addScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getBlue().getPrintablePercent() + "%", 0);
|
||||
}else if(Config.Points){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Punkte: " + WinconditionPoints.getRed().getPoints()).setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Punkte: " + WinconditionPoints.getBlue().getPoints()).setScore(0);
|
||||
objective.addScore(Fight.getRedTeam().getPrefix() + "Punkte: " + WinconditionPoints.getRed().getPoints(), 1);
|
||||
objective.addScore(Fight.getBlueTeam().getPrefix() + "Punkte: " + WinconditionPoints.getBlue().getPoints(), 0);
|
||||
}else if(Config.PumpkinTechKO){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamRedPumpkins()).setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamBluePumpkins()).setScore(0);
|
||||
objective.addScore(Fight.getRedTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamRedPumpkins(), 1);
|
||||
objective.addScore(Fight.getBlueTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamBluePumpkins(), 0);
|
||||
}
|
||||
}
|
||||
return objective;
|
||||
}
|
||||
|
||||
private static FightTeam getIndexDisplay() {
|
||||
index++;
|
||||
if(index == 1)
|
||||
return Fight.redTeam;
|
||||
if(index == 2)
|
||||
return Fight.blueTeam;
|
||||
index = 0;
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void nextIndexDisplay() {
|
||||
index++;
|
||||
Lixfel
hat
Du sendest jeden Score doppelt raus. Du sendest jeden Score doppelt raus.
|
||||
if(index > 2)
|
||||
return;
|
||||
index = 0;
|
||||
}
|
||||
|
||||
private static class ScoreBoardObjective {
|
||||
|
||||
private final String title;
|
||||
private HashMap<String, Integer> scores = new HashMap<>();
|
||||
|
||||
public ScoreBoardObjective(String title) {
|
||||
this.title = title;
|
||||
Lixfel
hat
Die Funktion nextIndexDisplay sollte sich mit der Funktion getIndexDisplay zusammenführen lassen. Die Funktion nextIndexDisplay sollte sich mit der Funktion getIndexDisplay zusammenführen lassen.
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void addScore(String string, int i) {
|
||||
scores.put(string, i);
|
||||
}
|
||||
|
||||
public HashMap<String, Integer> getScores() {
|
||||
Lixfel
hat
Die Extraklasse als Container für Titel und Scores finde ich nicht wirklich nötig & fügt nur unnötig Komplexität hinzu Die Extraklasse als Container für Titel und Scores finde ich nicht wirklich nötig & fügt nur unnötig Komplexität hinzu
|
||||
return scores;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Fände es besser, direkt titel und scores zu speichern (siehe unten)