12
1

Changed Fight Scoreboard to SWScoreboard #194

Manuell gemergt
Lixfel hat 7 Commits von scoreboard-reimplement nach master 2020-11-17 09:29:41 +01:00 zusammengeführt
3 geänderte Dateien mit 69 neuen und 75 gelöschten Zeilen
Nur Änderungen aus Commit e460b04a67 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -102,6 +102,7 @@ public class FightSystem extends JavaPlugin {
new RankedJoinListener(); new RankedJoinListener();
new GameplayListener(); new GameplayListener();
new PersonalKitCreator(); new PersonalKitCreator();
new ScoreboardListener();
if(Core.getVersion() > 8) if(Core.getVersion() > 8)
new VersionDependentListener(); new VersionDependentListener();

Datei anzeigen

@ -0,0 +1,26 @@
package de.steamwar.fightsystem.listener;
import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.utils.FightScoreboard;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.EnumSet;
public class ScoreboardListener extends BasicListener {
public ScoreboardListener() {
super(EnumSet.allOf(FightState.class));
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
FightScoreboard.showScoreboard(event.getPlayer());
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
FightScoreboard.removeScoreboard(event.getPlayer());
}
}

Datei anzeigen

@ -30,24 +30,21 @@ import de.steamwar.fightsystem.winconditions.*;
import de.steamwar.scoreboard.SWScoreboard; import de.steamwar.scoreboard.SWScoreboard;
import de.steamwar.scoreboard.ScoreboardCallback; import de.steamwar.scoreboard.ScoreboardCallback;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler; import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Scoreboard;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.Set; import java.util.Set;
public class FightScoreboard implements Listener { public class FightScoreboard {
private static final Set<FightState> fullScoreboard = EnumSet.of(FightState.RUNNING, FightState.SPECTATE); private static final Set<FightState> fullScoreboard = EnumSet.of(FightState.RUNNING, FightState.SPECTATE);
private static int index = 0; private static int index = 0;
private static ScoreBoardObjective objective; private static String title = "";
private static HashMap<String, Integer> scores;
Veraltet
Review

Man sollte das Scoreboard nicht regelmäßig bei jedem Spieler neu setzen, das macht das SWScoreboard schon von selbst.

Man sollte das Scoreboard nicht regelmäßig bei jedem Spieler neu setzen, das macht das SWScoreboard schon von selbst.
public static void init(){ public static void init(){
Review

Fände es besser, direkt titel und scores zu speichern (siehe unten)

Fände es besser, direkt titel und scores zu speichern (siehe unten)
Bukkit.getPluginManager().registerEvents(new FightScoreboard(), FightSystem.getPlugin());
Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), FightScoreboard::nextIndexDisplay, 0, 200); Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), FightScoreboard::nextIndexDisplay, 0, 200);
} }
Review

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.
@ -55,116 +52,86 @@ public class FightScoreboard implements Listener {
return Bukkit.getScoreboardManager().getMainScoreboard(); return Bukkit.getScoreboardManager().getMainScoreboard();
} }
@EventHandler() public static void showScoreboard(Player p) {
Review

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.
Review

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.
public void onPlayerJoin(PlayerJoinEvent event) { SWScoreboard.createScoreboard(p, new ScoreboardCallback() {
SWScoreboard.createScoreboard(event.getPlayer(), new ScoreboardCallback() {
@Override @Override
public HashMap<String, Integer> getData() { public HashMap<String, Integer> getData() {
return scores;
return objective.getScores();
} }
@Override @Override
public String getTitle() { public String getTitle() {
return objective.getTitle(); return title;
} }
}); });
} }
@EventHandler public static void removeScoreboard(Player p) {
public void onPlayerQuit(PlayerQuitEvent event) { SWScoreboard.removeScoreboard(p);
SWScoreboard.removeScoreboard(event.getPlayer());
} }
private static ScoreBoardObjective teamScoreboard(FightTeam fightTeam){ private static void teamScoreboard(FightTeam fightTeam){
final ScoreBoardObjective objective = new ScoreBoardObjective(fightTeam.getColoredName()); title = fightTeam.getColoredName();
if(Config.recording())
RecordSystem.scoreboardTitle(title);
fightTeam.getPlayers().forEach(fp -> { fightTeam.getPlayers().forEach(fp -> {
if(fp.isLiving()) if(fp.isLiving())
objective.addScore(fightTeam.getPrefix() + fp.getPlayer().getName(), (int) Math.ceil(fp.getPlayer().getHealth())); addScore(fightTeam.getPrefix() + fp.getPlayer().getName(), (int) Math.ceil(fp.getPlayer().getHealth()));
}); });
return objective;
} }
private static ScoreBoardObjective generalScoreboard(){ private static void generalScoreboard(){
final ScoreBoardObjective objective = new ScoreBoardObjective("§6Kampf"); title = "§6Kampf";
if(Config.recording()) if(Config.recording())
RecordSystem.scoreboardTitle(objective.getTitle()); RecordSystem.scoreboardTitle(title);
if (Config.Timeout || Config.Points || Config.HeartRatioTimeout) { if (Config.Timeout || Config.Points || Config.HeartRatioTimeout) {
int fightTime = FightSystem.getFightTime(); int fightTime = FightSystem.getFightTime();
if (fightTime >= 60) if (fightTime >= 60)
objective.addScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s", 4); addScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s", 4);
else else
objective.addScore("§7Zeit: §a" + fightTime + "s", 4); addScore("§7Zeit: §a" + fightTime + "s", 4);
} }
objective.addScore("§7TPS: §e" + TPSWatcher.getTPS(), 3); addScore("§7TPS: §e" + TPSWatcher.getTPS(), 3);
if(fullScoreboard.contains(FightSystem.getFightState())){ if(fullScoreboard.contains(FightSystem.getFightState())){
if (Config.PercentSystem){ if (Config.PercentSystem){
objective.addScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%", 1); 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); addScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%", 0);
}else if(Config.WaterTechKO){ }else if(Config.WaterTechKO){
objective.addScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater(), 1); addScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater(), 1);
objective.addScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater(), 0); addScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater(), 0);
}else if(Config.RelativePercent){ }else if(Config.RelativePercent){
objective.addScore(Fight.getRedTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getRed().getPrintablePercent() + "%", 1); addScore(Fight.getRedTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getRed().getPrintablePercent() + "%", 1);
objective.addScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getBlue().getPrintablePercent() + "%", 0); addScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getBlue().getPrintablePercent() + "%", 0);
}else if(Config.Points){ }else if(Config.Points){
objective.addScore(Fight.getRedTeam().getPrefix() + "Punkte: " + WinconditionPoints.getRed().getPoints(), 1); addScore(Fight.getRedTeam().getPrefix() + "Punkte: " + WinconditionPoints.getRed().getPoints(), 1);
objective.addScore(Fight.getBlueTeam().getPrefix() + "Punkte: " + WinconditionPoints.getBlue().getPoints(), 0); addScore(Fight.getBlueTeam().getPrefix() + "Punkte: " + WinconditionPoints.getBlue().getPoints(), 0);
}else if(Config.PumpkinTechKO){ }else if(Config.PumpkinTechKO){
objective.addScore(Fight.getRedTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamRedPumpkins(), 1); addScore(Fight.getRedTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamRedPumpkins(), 1);
objective.addScore(Fight.getBlueTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamBluePumpkins(), 0); addScore(Fight.getBlueTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamBluePumpkins(), 0);
} }
} }
if(Config.recording())
objective.scores.forEach(RecordSystem::scoreboardData);
return objective;
}
private static FightTeam getIndexDisplay() {
if(index == 1)
return Fight.redTeam;
if(index == 2)
return Fight.blueTeam;
return null;
} }
private static void nextIndexDisplay() { private static void nextIndexDisplay() {
index++; index++;
if(index > 2) if(index > 2)
index = 0; index = 0;
final FightTeam team = getIndexDisplay(); FightTeam team = null;
if(index == 1)
Review

Du sendest jeden Score doppelt raus.

Du sendest jeden Score doppelt raus.
team = Fight.redTeam;
if(index == 2)
team = Fight.blueTeam;
if(team != null) if(team != null)
objective = teamScoreboard(team); teamScoreboard(team);
else else
Veraltet
Review

Das schaut mir katastrophal verbuggt aus, da dürfte nie das korrekte Scoreboard angezeigt werden!

Das schaut mir katastrophal verbuggt aus, da dürfte nie das korrekte Scoreboard angezeigt werden!
Veraltet
Review

Es wird wohl immer einmal kein Scoreboard angezeigt werden weil Index = 0 bedeutet die getIndexDisplay() Methode gibt null zurück. Dies sollte behoben werden.

Es wird wohl immer einmal kein Scoreboard angezeigt werden weil `Index = 0` bedeutet die `getIndexDisplay()` Methode gibt `null` zurück. Dies sollte behoben werden.
Veraltet
Review

Der Fehler ist nun behoben, bzw um 13:00 am gleichen Tag wurde dieser Fehler noch behoben, deswegen habe ich den Pull-Request jetzt nach einer guten Zeit drauf gucken genehmigt

Der Fehler ist nun behoben, bzw um 13:00 am gleichen Tag wurde dieser Fehler noch behoben, deswegen habe ich den Pull-Request jetzt nach einer guten Zeit drauf gucken genehmigt
objective = generalScoreboard(); generalScoreboard();
} }
private static class ScoreBoardObjective { private static void addScore(String string, int i) {
if(Config.recording())
private final String title; RecordSystem.scoreboardData(string, i);
Review

Die Funktion nextIndexDisplay sollte sich mit der Funktion getIndexDisplay zusammenführen lassen.

Die Funktion nextIndexDisplay sollte sich mit der Funktion getIndexDisplay zusammenführen lassen.
private final HashMap<String, Integer> scores = new HashMap<>(); scores.put(string, i);
public ScoreBoardObjective(String title) {
if(Config.recording())
RecordSystem.scoreboardTitle(title);
this.title = title;
}
public String getTitle() {
return title;
}
public void addScore(String string, int i) {
if(Config.recording())
RecordSystem.scoreboardData(string, i);
scores.put(string, i);
}
public HashMap<String, Integer> getScores() {
return scores;
}
} }
} }