Merge pull request 'refactored packages fixed bug that prevent scoreboard from updating properly' (#11) from bugfix-scoreboard into main

Reviewed-on: #11
This commit is contained in:
Steev 2025-01-30 11:50:33 +01:00
commit d22ac3d22a
26 changed files with 175 additions and 104 deletions

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;

View File

@ -1,14 +1,21 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
public class Active {
private final GameManager gameManager;
private final ScoreboardManager manager;
private boolean isInitialized = false;
public Active(GameManager gameManager) {
this.manager = Bukkit.getScoreboardManager();
this.gameManager = gameManager;
}
@ -18,9 +25,26 @@ public class Active {
this.gameManager.getPlayerManager().setPlayersHealth(20F);
this.gameManager.getPlayerManager().setAlive(Bukkit.getOnlinePlayers().size());
this.gameManager.getPlayerManager().giveKits();
Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective("Tridentwar", "dummy", "SLPNetwork");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
for (Player p : Bukkit.getOnlinePlayers()) {
if (!isInitialized) {
this.gameManager.getPlayerManager().setKills(p, 0);
this.gameManager.getScoreBoardManager().updateScoreBoard(p, this.gameManager.getPlayerManager().getAlive(), this.gameManager.getPlayerManager().getKills(p));
}
obj.getScore("=-=-=-=-=-=-=-=-=-=-=").setScore(5);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.player") + " " + p.getDisplayName()).setScore(4);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.alive") + " " + this.gameManager.getPlayerManager().getAlive()).setScore(3);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.kills") + " " + this.gameManager.getPlayerManager().getKills(p)).setScore(2);
obj.getScore("").setScore(1);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.server")).setScore(0);
p.setScoreboard(board);
}
}
}

View File

@ -1,6 +1,6 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;

View File

@ -1,8 +1,8 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.Tasks.GameStartCountdownTask;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import de.steev.Tridentwar.tasks.GameStartCountdownTask;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Tasks.LobbyWaitingTask;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.tasks.LobbyWaitingTask;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;

View File

@ -1,8 +1,8 @@
package de.steev.Tridentwar;
import de.steev.Tridentwar.Commands.TridentwarCommand;
import de.steev.Tridentwar.Listeners.*;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.commands.TridentwarCommand;
import de.steev.Tridentwar.listeners.*;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.Commands;
package de.steev.Tridentwar.commands;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;

View File

@ -1,6 +1,6 @@
package de.steev.Tridentwar.Handlers;
package de.steev.Tridentwar.handlers;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.Listeners;
package de.steev.Tridentwar.listeners;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Sound;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.Listeners;
package de.steev.Tridentwar.listeners;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Effect;
import org.bukkit.GameMode;
import org.bukkit.Material;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.Listeners;
package de.steev.Tridentwar.listeners;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.GameMode;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.Listeners;
package de.steev.Tridentwar.listeners;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Sound;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.Listeners;
package de.steev.Tridentwar.listeners;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;

View File

@ -1,9 +1,9 @@
package de.steev.Tridentwar.Listeners;
package de.steev.Tridentwar.listeners;
import de.steev.Tridentwar.Tridentwar;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.Tasks.TridentResetTask;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import de.steev.Tridentwar.tasks.TridentResetTask;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

View File

@ -1,17 +1,13 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
import de.steev.Tridentwar.Handlers.FileHandler;
import de.steev.Tridentwar.handlers.FileHandler;
import de.steev.Tridentwar.States.*;
import de.steev.Tridentwar.Tridentwar;
import de.steev.Tridentwar.Tasks.GameStartCountdownTask;
import de.steev.Tridentwar.Tasks.LobbyWaitingTask;
import de.steev.Tridentwar.tasks.GameStartCountdownTask;
import de.steev.Tridentwar.tasks.LobbyWaitingTask;
import org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.checkerframework.checker.units.qual.A;
import java.io.File;
import java.util.Objects;
public class GameManager {
private final Tridentwar plugin;

View File

@ -1,4 +1,4 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
public enum GameState {
LOBBY, WAITING, STARTING, ACTIVE, WON, RESTARTING, STOPPING, ABORTING;

View File

@ -1,4 +1,4 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;

View File

@ -1,4 +1,4 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;

View File

@ -1,9 +1,11 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.*;
// TODO: consider building a scoreboard builder
// TODO: reworking scoreboard logic to make it possible to replace the entire scoreboard
public class ScoreBoardManager {
private GameManager gameManager;
private final ScoreboardManager manager;
@ -12,7 +14,10 @@ public class ScoreBoardManager {
* Manages Scoreboards created by the plugin
* @param gameManager the local gamemanager instance
*/
public ScoreBoardManager(GameManager gameManager) { this.manager = Bukkit.getScoreboardManager(); }
public ScoreBoardManager(GameManager gameManager) {
this.gameManager = gameManager;
this.manager = Bukkit.getScoreboardManager();
}
/**
* Creates and sets a scoreboard for a player
@ -21,26 +26,18 @@ public class ScoreBoardManager {
* @param kills how many kills the player got
*/
public void createScoreBoard(Player player, int alive, int kills) {
// Create board instance
Scoreboard board = manager.getNewScoreboard();
// Create Board Objective
Objective obj = board.registerNewObjective("Tridentwar", "dummy", "SLPNetwork");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
// Create Scores
Score splitter = obj.getScore("=-=-=-=-=-=-=-=-=-=-=");
splitter.setScore(5);
Score playerName = obj.getScore("Player: " + player.getDisplayName());
playerName.setScore(4);
Score aliveScore = obj.getScore("Alive: " + alive);
aliveScore.setScore(3);
Score killsScore = obj.getScore("Kills: " + kills);
killsScore.setScore(2);
Score blankScore = obj.getScore("");
blankScore.setScore(1);
Score hostScore = obj.getScore("play.slpnetwork.de");
hostScore.setScore(0);
obj.getScore("=-=-=-=-=-=-=-=-=-=-=").setScore(5);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.player") + " " + player.getDisplayName()).setScore(4);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.alive") + " " + alive).setScore(3);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.kills") + " " + kills).setScore(2);
obj.getScore("").setScore(1);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.server")).setScore(0);
player.setScoreboard(board); // **Scoreboard setzen**
}
/**
@ -50,32 +47,32 @@ public class ScoreBoardManager {
* @param kills how many kills the player got
* TODO: add time
*/
public void updateScoreBoard(Player player, int alive, int kills){
// Grab Scoreboard from Player
public void updateScoreBoard(Player player, int alive, int kills) {
Scoreboard board = player.getScoreboard();
// Detect if a Scoreboard has been created
if(board == null) {
// If there is none, create one
// Falls der Spieler kein eigenes Scoreboard hat, erstelle eins
if (board == null || board.getObjective(DisplaySlot.SIDEBAR) == null) {
createScoreBoard(player, alive, kills);
} else {
// Fetch objective from existing scoreboard
player.setScoreboard(board);
return;
}
Objective obj = board.getObjective(DisplaySlot.SIDEBAR);
// Replace Scores present on the Screen
Score splitter = obj.getScore("=-=-=-=-=-=-=-=-=-=-=");
splitter.setScore(5);
Score playerName = obj.getScore("Player: " + player.getDisplayName());
playerName.setScore(4);
Score aliveScore = obj.getScore("Alive: " + alive);
aliveScore.setScore(3);
Score killsScore = obj.getScore("Kills: " + kills);
killsScore.setScore(2);
Score blankScore = obj.getScore("");
blankScore.setScore(1);
Score hostScore = obj.getScore("play.slpnetwork.de");
hostScore.setScore(0);
if (obj == null) { // Falls das Objective aus irgendeinem Grund null ist
obj = board.registerNewObjective("Tridentwar", "dummy", "SLPNetwork");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
}
// Scores aktualisieren
obj.getScore("=-=-=-=-=-=-=-=-=-=-=").setScore(5);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.player") + " " + player.getDisplayName()).setScore(4);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.alive") + " " + alive).setScore(3);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.kills") + " " + kills).setScore(2);
obj.getScore("").setScore(1);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.server")).setScore(0);
player.setScoreboard(board);
}
/**

View File

@ -1,4 +1,4 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
import org.bukkit.Bukkit;
import org.bukkit.Sound;

View File

@ -1,6 +1,6 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
import de.steev.Tridentwar.Tasks.TridentResetTask;
import de.steev.Tridentwar.tasks.TridentResetTask;
import org.bukkit.entity.Player;
import java.util.HashMap;

View File

@ -1,13 +1,21 @@
package de.steev.Tridentwar.Tasks;
package de.steev.Tridentwar.tasks;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
public class GameStartCountdownTask extends BukkitRunnable {
private GameManager gameManager;
private final ScoreboardManager manager;
public GameStartCountdownTask (GameManager gameManager) {
this.manager = Bukkit.getScoreboardManager();
this.gameManager = gameManager;
}
@ -15,6 +23,22 @@ public class GameStartCountdownTask extends BukkitRunnable {
@Override
public void run() {
Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective("Tridentwar", "dummy", "SLPNetwork");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
for (Player player : Bukkit.getOnlinePlayers()){
obj.getScore("=-=-=-=-=-=-=-=-=-=-=").setScore(4);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.lobby.player") + " " + player.getDisplayName()).setScore(3);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.lobby.timeleft") + " " + timeLeft).setScore(2);
obj.getScore("").setScore(1);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.server")).setScore(0);
player.setScoreboard(board);
}
timeLeft--;
if(timeLeft <= 0) {
cancel();

View File

@ -1,15 +1,23 @@
package de.steev.Tridentwar.Tasks;
package de.steev.Tridentwar.tasks;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;
public class LobbyWaitingTask extends BukkitRunnable {
private GameManager gameManager;
private final ScoreboardManager manager;
public LobbyWaitingTask(GameManager gameManager) {
this.gameManager = gameManager;
this.manager = Bukkit.getScoreboardManager();
System.out.println("DEBUG: Lobby is Waiting");
}
@ -17,6 +25,21 @@ public class LobbyWaitingTask extends BukkitRunnable {
@Override
public void run() {
Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective("Tridentwar", "dummy", "SLPNetwork");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
for (Player player : Bukkit.getOnlinePlayers()){
obj.getScore("=-=-=-=-=-=-=-=-=-=-=").setScore(4);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.lobby.player") + " " + player.getDisplayName()).setScore(3);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.lobby.timeleft") + " " + timeLeft).setScore(2);
obj.getScore("").setScore(1);
obj.getScore(this.gameManager.getPlugin().config.getString("scoreboard.ingame.server")).setScore(0);
player.setScoreboard(board);
}
timeLeft--;
this.gameManager.getMessageManager().broadCastXPBar(ChatColor.translateAlternateColorCodes('&', this.gameManager.getPlugin().languageDataConfig.getString("game.countdown") + timeLeft));
if (timeLeft > 10) {
@ -48,4 +71,11 @@ public class LobbyWaitingTask extends BukkitRunnable {
}
}
}
/**
* calls cancel to stop task
*/
public void stopTask() {
cancel();
}
}

View File

@ -1,6 +1,6 @@
package de.steev.Tridentwar.Tasks;
package de.steev.Tridentwar.tasks;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;