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 @EventHandler
public void onPlayerJoin(PlayerJoinEvent event){ public void onPlayerJoin(PlayerJoinEvent event){
if(this.gameManager.getPlugin().config.getBoolean("force-on-spawn")) { this.gameManager.getScoreBoardManager().createScoreBoard(event.getPlayer(), 0, 0);
this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SURVIVAL);
this.gameManager.getPlayerManager().setPlayerHealth(event.getPlayer(), 20);
}
if(this.gameManager.gameState == GameState.ACTIVE) { if(this.gameManager.gameState == GameState.ACTIVE) {
this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SPECTATOR); this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SPECTATOR);
this.gameManager.getPlayerManager().teleportPlayer(event.getPlayer(), this.gameManager.getPlugin().config.getLocation("arena")); 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")) { if(this.gameManager.getPlugin().config.getBoolean("force-on-spawn")) {
this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SURVIVAL); this.gameManager.getPlayerManager().setGameMode(event.getPlayer(), GameMode.SURVIVAL);
this.gameManager.getPlayerManager().setPlayerHealth(event.getPlayer(), 20); this.gameManager.getPlayerManager().setPlayerHealth(event.getPlayer(), 20);
this.gameManager.getPlayerManager().teleportPlayer(event.getPlayer(), this.gameManager.getPlugin().config.getLocation("lobby"));
} }
this.gameManager.setGameState(GameState.WAITING); 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.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
public class GameManager { public class GameManager {
private final Tridentwar plugin; private final Tridentwar plugin;
private TridentManager tridentManager; private TridentManager tridentManager;
private GameStartCountdownTask gameStartCountdownTask; private GameStartCountdownTask gameStartCountdownTask;
public GameState gameState = GameState.LOBBY;
private PlayerManager playerManager; private PlayerManager playerManager;
private MessageManager messageManager; private MessageManager messageManager;
private FileHandler fileHandler; private FileHandler fileHandler;
private LobbyWaitingTask lobbyWaitingTask; private LobbyWaitingTask lobbyWaitingTask;
private boolean isWaiting = false; private boolean isWaiting = false;
private Effect record; private Effect record;
private ScoreBoardManager scoreBoardManager;
public GameState gameState = GameState.LOBBY;
/** /**
* Handles the entire Game * Handles the entire Game
@ -30,6 +33,7 @@ public class GameManager {
this.playerManager = new PlayerManager(this); this.playerManager = new PlayerManager(this);
this.messageManager = new MessageManager(this); this.messageManager = new MessageManager(this);
this.fileHandler = new FileHandler(this); this.fileHandler = new FileHandler(this);
this.scoreBoardManager = new ScoreBoardManager(this);
this.lobbyWaitingTask = null; this.lobbyWaitingTask = null;
} }
@ -48,6 +52,10 @@ public class GameManager {
this.playerManager.setPlayersHealth(20F); this.playerManager.setPlayersHealth(20F);
this.playerManager.setAlive(Bukkit.getOnlinePlayers().size()); this.playerManager.setAlive(Bukkit.getOnlinePlayers().size());
this.playerManager.giveKits(); 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; break;
case STARTING: case STARTING:
@ -118,12 +126,20 @@ public class GameManager {
public void run() { public void run() {
// Move players to Hub // Move players to Hub
Bukkit.getOnlinePlayers().forEach(player -> playerManager.moveFromServer(plugin.config.getString("lobby-server"), player)); 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); }.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); this.setGameState(GameState.LOBBY);
break; break;
@ -139,16 +155,32 @@ public class GameManager {
Bukkit.getOnlinePlayers().forEach(player -> playerManager.moveFromServer(this.plugin.config.getString("lobby-server"), player)); Bukkit.getOnlinePlayers().forEach(player -> playerManager.moveFromServer(this.plugin.config.getString("lobby-server"), player));
if (plugin.config.getBoolean("autorestart")) { 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); this.setGameState(GameState.LOBBY);
break; 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 * Returns the current lobby wayiting task
@ -207,4 +239,10 @@ public class GameManager {
plugin.config.set(path, loc); plugin.config.set(path, loc);
plugin.saveConfig(); 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 * @param p the player
*/ */
public void addKill(Player p){ public void setKills(Player p, int kill){
if(this.kills.containsKey(p)){ if(this.kills.containsKey(p)){
this.kills.replace(p, this.kills.get(p)+1); this.kills.replace(p, kill);
} else { } 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 { public class TridentResetTask extends BukkitRunnable {
private GameManager gameManager; private GameManager gameManager;
private Player thrower;
private Entity projectile;
public TridentResetTask (GameManager gameManager, Player thrower, Entity projektile) { public TridentResetTask (GameManager gameManager, Player thrower, Entity projektile) {
this.gameManager = gameManager; this.gameManager = gameManager;
this.thrower = thrower;
this.projectile = projektile;
} }
private int timeLeft = 30; private int timeLeft = 10;
@Override @Override
public void run() { public void run() {
timeLeft--; timeLeft--;
if(timeLeft >= 10) { if (timeLeft <= 0) {
switch (timeLeft) { projectile.remove();
case 30: Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("game.countdown"))); break; thrower.getInventory().addItem(new ItemStack(Material.TRIDENT));
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;
}
}
} }
} }
} }