From 6c4b150e96f61a57440005c32c6b8c25d5a7b0d4 Mon Sep 17 00:00:00 2001 From: Steev Date: Mon, 10 Jan 2022 07:05:24 +0100 Subject: [PATCH] added scoreboard --- .../Tridentwar/listeners/JoinListener.java | 12 ++-- .../steev/Tridentwar/manager/GameManager.java | 50 +++++++++++++-- .../Tridentwar/manager/PlayerManager.java | 17 +++-- .../Tridentwar/manager/ScoreBoardManager.java | 63 +++++++++++++++++++ .../Tridentwar/tasks/TridentResetTask.java | 34 +++------- 5 files changed, 136 insertions(+), 40 deletions(-) create mode 100644 src/main/java/de/steev/Tridentwar/manager/ScoreBoardManager.java diff --git a/src/main/java/de/steev/Tridentwar/listeners/JoinListener.java b/src/main/java/de/steev/Tridentwar/listeners/JoinListener.java index 549b4ae..c0ba28c 100644 --- a/src/main/java/de/steev/Tridentwar/listeners/JoinListener.java +++ b/src/main/java/de/steev/Tridentwar/listeners/JoinListener.java @@ -16,10 +16,7 @@ public class JoinListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event){ - if(this.gameManager.getPlugin().config.getBoolean("force-on-spawn")) { - this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SURVIVAL); - this.gameManager.getPlayerManager().setPlayerHealth(event.getPlayer(), 20); - } + this.gameManager.getScoreBoardManager().createScoreBoard(event.getPlayer(), 0, 0); if(this.gameManager.gameState == GameState.ACTIVE) { this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SPECTATOR); this.gameManager.getPlayerManager().teleportPlayer(event.getPlayer(), this.gameManager.getPlugin().config.getLocation("arena")); @@ -28,8 +25,15 @@ public class JoinListener implements Listener { if(this.gameManager.getPlugin().config.getBoolean("force-on-spawn")) { this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SURVIVAL); this.gameManager.getPlayerManager().setPlayerHealth(event.getPlayer(), 20); + this.gameManager.getPlayerManager().teleportPlayer(event.getPlayer(), this.gameManager.getPlugin().config.getLocation("lobby")); } this.gameManager.setGameState(GameState.WAITING); + } else if (this.gameManager.gameState == GameState.WAITING) { + if(this.gameManager.getPlugin().config.getBoolean("force-on-spawn")) { + this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SURVIVAL); + this.gameManager.getPlayerManager().setPlayerHealth(event.getPlayer(), 20); + this.gameManager.getPlayerManager().teleportPlayer(event.getPlayer(), this.gameManager.getPlugin().config.getLocation("lobby")); + } } } } diff --git a/src/main/java/de/steev/Tridentwar/manager/GameManager.java b/src/main/java/de/steev/Tridentwar/manager/GameManager.java index a301f1a..ef36a23 100644 --- a/src/main/java/de/steev/Tridentwar/manager/GameManager.java +++ b/src/main/java/de/steev/Tridentwar/manager/GameManager.java @@ -8,17 +8,20 @@ import org.bukkit.*; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; +import java.io.File; + public class GameManager { private final Tridentwar plugin; private TridentManager tridentManager; private GameStartCountdownTask gameStartCountdownTask; - public GameState gameState = GameState.LOBBY; private PlayerManager playerManager; private MessageManager messageManager; private FileHandler fileHandler; private LobbyWaitingTask lobbyWaitingTask; private boolean isWaiting = false; private Effect record; + private ScoreBoardManager scoreBoardManager; + public GameState gameState = GameState.LOBBY; /** * Handles the entire Game @@ -30,6 +33,7 @@ public class GameManager { this.playerManager = new PlayerManager(this); this.messageManager = new MessageManager(this); this.fileHandler = new FileHandler(this); + this.scoreBoardManager = new ScoreBoardManager(this); this.lobbyWaitingTask = null; } @@ -48,6 +52,10 @@ public class GameManager { this.playerManager.setPlayersHealth(20F); this.playerManager.setAlive(Bukkit.getOnlinePlayers().size()); this.playerManager.giveKits(); + for (Player p : Bukkit.getOnlinePlayers()) { + this.playerManager.setKills(p, 0); + this.scoreBoardManager.updateScoreBoard(p, this.getPlayerManager().getAlive(), this.playerManager.getKills(p)); + } break; case STARTING: @@ -118,12 +126,20 @@ public class GameManager { public void run() { // Move players to Hub Bukkit.getOnlinePlayers().forEach(player -> playerManager.moveFromServer(plugin.config.getString("lobby-server"), player)); + + if (plugin.config.getBoolean("autorestart")) { + new BukkitRunnable() { + @Override + public void run() { + Bukkit.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), "restart"); + } + }.runTaskLater(plugin, 120); + } } }.runTaskLater(plugin, 100); - if (plugin.config.getBoolean("autorestart")) { - Bukkit.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), "restart"); - } + + Bukkit.getOnlinePlayers().forEach(player -> this.scoreBoardManager.removeScoreBoard(player)); this.setGameState(GameState.LOBBY); break; @@ -139,16 +155,32 @@ public class GameManager { Bukkit.getOnlinePlayers().forEach(player -> playerManager.moveFromServer(this.plugin.config.getString("lobby-server"), player)); if (plugin.config.getBoolean("autorestart")) { - Bukkit.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), "restart"); + new BukkitRunnable() { + @Override + public void run() { + Bukkit.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), "restart"); + } + }.runTaskLater(plugin, 120); } + Bukkit.getOnlinePlayers().forEach(player -> this.scoreBoardManager.removeScoreBoard(player)); this.setGameState(GameState.LOBBY); break; } } - public void cleanup(){} + public void cleanup(){ + String worldName = "world"; + File playerFilesDir = new File(worldName + "/playerdata"); + if(playerFilesDir.isDirectory()){ + String[] playerDats = playerFilesDir.list(); + for (int i = 0; i < playerDats.length; i++) { + File datFile = new File(playerFilesDir, playerDats[i]); + datFile.delete(); + } + } + } /** * Returns the current lobby wayiting task @@ -207,4 +239,10 @@ public class GameManager { plugin.config.set(path, loc); plugin.saveConfig(); } + + /** + * gives back the active scoreboard manager + * @return the scorboard manager + */ + public ScoreBoardManager getScoreBoardManager() { return scoreBoardManager; } } diff --git a/src/main/java/de/steev/Tridentwar/manager/PlayerManager.java b/src/main/java/de/steev/Tridentwar/manager/PlayerManager.java index 42d5c66..2917189 100644 --- a/src/main/java/de/steev/Tridentwar/manager/PlayerManager.java +++ b/src/main/java/de/steev/Tridentwar/manager/PlayerManager.java @@ -77,14 +77,23 @@ public class PlayerManager { } /** - * Updates or sets a players kills + * sets a players kills * @param p the player */ - public void addKill(Player p){ + public void setKills(Player p, int kill){ if(this.kills.containsKey(p)){ - this.kills.replace(p, this.kills.get(p)+1); + this.kills.replace(p, kill); } else { - this.kills.put(p, 1); + this.kills.put(p, kill); + } + this.gameManager.getScoreBoardManager().updateScoreBoard(p, this.alive, this.kills.get(p)); + } + + public void addKill(Player player){ + if(this.kills.containsKey(player)){ + setKills(player, getKills(player) + 1); + } else { + setKills(player, 1); } } diff --git a/src/main/java/de/steev/Tridentwar/manager/ScoreBoardManager.java b/src/main/java/de/steev/Tridentwar/manager/ScoreBoardManager.java new file mode 100644 index 0000000..350429a --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/manager/ScoreBoardManager.java @@ -0,0 +1,63 @@ +package de.steev.Tridentwar.manager; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.*; + +public class ScoreBoardManager { + private GameManager gameManager; + private ScoreboardManager manager; + + /** + * Manages Scoreboards created by the plugin + * @param gameManager the local gamemanager instance + */ + public ScoreBoardManager(GameManager gameManager) { this.manager = Bukkit.getScoreboardManager(); } + + /** + * Creates and sets a scoreboard for a player + * @param player the player + * @param alive how many players are alive + * @param kills how many kills the player got + */ + public void createScoreBoard(Player player, int alive, int kills) { + Scoreboard scoreboard = manager.getNewScoreboard(); + Objective objective = scoreboard.registerNewObjective("TridentWar","dummy", ChatColor.translateAlternateColorCodes('&',"&7&l<< &bTridentWar &7&l>>")); + objective.setDisplaySlot(DisplaySlot.SIDEBAR); + Score splitter = objective.getScore("=-=-=-=-=-=-=-=-=-=-="); + splitter.setScore(6); + Score playername = objective.getScore(ChatColor.translateAlternateColorCodes('&',"&ePlayer: " + ChatColor.WHITE + ChatColor.BOLD + player.getDisplayName())); + playername.setScore(5); + Score empty2 = objective.getScore(""); + empty2.setScore(4); + Score aliveScore = objective.getScore(ChatColor.translateAlternateColorCodes('&',"&eAlive: " + ChatColor.WHITE + ChatColor.BOLD + alive)); + aliveScore.setScore(3); + Score killScore = objective.getScore(ChatColor.translateAlternateColorCodes('&',"&eKills: " + ChatColor.WHITE + ChatColor.BOLD + kills)); + killScore.setScore(2); + Score empty = objective.getScore(""); + empty.setScore(1); + Score address = objective.getScore("play.slpnetwork.de"); + address.setScore(0); + player.setScoreboard(scoreboard); + } + + /** + * updates a players scoreboard or sets one + * @param player the player + * @param alive how many players are alive + * @param kills how many kills the player got + */ + public void updateScoreBoard(Player player, int alive, int kills){ + player.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); + createScoreBoard(player,alive,kills); + } + + /** + * clears a player specific scoreboard + * @param player the player + */ + public void removeScoreBoard(Player player) { + player.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); + } +} diff --git a/src/main/java/de/steev/Tridentwar/tasks/TridentResetTask.java b/src/main/java/de/steev/Tridentwar/tasks/TridentResetTask.java index 68db073..425f896 100644 --- a/src/main/java/de/steev/Tridentwar/tasks/TridentResetTask.java +++ b/src/main/java/de/steev/Tridentwar/tasks/TridentResetTask.java @@ -13,41 +13,23 @@ import org.bukkit.scheduler.BukkitRunnable; public class TridentResetTask extends BukkitRunnable { private GameManager gameManager; + private Player thrower; + private Entity projectile; public TridentResetTask (GameManager gameManager, Player thrower, Entity projektile) { this.gameManager = gameManager; + this.thrower = thrower; + this.projectile = projektile; } - private int timeLeft = 30; + private int timeLeft = 10; @Override public void run() { timeLeft--; - if(timeLeft >= 10) { - switch (timeLeft) { - case 30: Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("game.countdown"))); break; - case 25: Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("game.countdown"))); break; - case 20: Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("game.countdown"))); break; - case 15: Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("game.countdown"))); break; - } - } else { - Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("game.countdown"))); - - if(Bukkit.getOnlinePlayers().size() < this.gameManager.getPlugin().config.getInt("minplayers")) { - Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("error.not-enough-players"))); - } - - if(timeLeft <= 0) { - if(Bukkit.getOnlinePlayers().size() < this.gameManager.getPlugin().config.getInt("minplayers")) { - Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("error.not-enough-players"))); - cancel(); - this.gameManager.setGameState(GameState.ABORTING); - } else { - cancel(); - gameManager.setGameState(GameState.ACTIVE); - return; - } - } + if (timeLeft <= 0) { + projectile.remove(); + thrower.getInventory().addItem(new ItemStack(Material.TRIDENT)); } } }