added scoreboard

This commit is contained in:
Steev 2022-01-10 07:05:24 +01:00
parent 017697914c
commit 6c4b150e96
5 changed files with 136 additions and 40 deletions

View File

@ -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"));
}
}
}
}

View File

@ -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; }
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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));
}
}
}