Compare commits

...

6 Commits

18 changed files with 450 additions and 161 deletions

View File

@ -15,9 +15,9 @@ The plugin is opensource, so you are always free to just add your Ideas to the p
I developed the plugin with IntelliJ so for now I will only explain how to build it from IntelliJ.
Make an artifact `file/artifact/new` you want to create an `empty jar`.
Once you created the artifact, drag the folder named Tridentwar (it is in the same menu on the right side) into your jar (the section on the left).
Save the artifact and return to the editor itself.
Now navigate to the menu point `build` and select `build artifact` you will get another little menu where IntelliJ askes what exactly to do you want to click `build` there.
The finished jar then will be in your `project's root` inside the newly generated `out` folder.
Save the artifact and return to the editor.
Now navigate to the menu point `build` and select `build artifact` you will get another little menu where IntelliJ asks what exactly to do you want to click `build` there.
The finished jar will be in your `project's root` inside the newly generated `out` folder.
## Supported version
I am using the most recent stable Minecraft Paper versions.

View File

@ -1,6 +1,7 @@
# general
prefix: null
minplayers: 2
maxplayers: 4
# The language selected here can only be changed by reloading the plugin
# the language must equal the language file in ../lang
# by default avaiable are: de-ger, en-us
@ -10,6 +11,19 @@ lobby-auto-queue: true
force-on-spawn: true
lobby-server: "lobby"
# scoreboard
scoreboard:
lobby:
player: "Player:"
timeleft: "Starting in:"
server: "your.server.ip"
ingame:
timeleft: "Time:"
player: "Player:"
alive: "Alive:"
kills: "kills:"
server: "your.server.ip"
# spawn points
lobby: null
arena: null

View File

@ -0,0 +1,42 @@
package de.steev.Tridentwar.States;
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;
import java.util.Objects;
public class Aborting {
private final GameManager gameManager;
public Aborting(GameManager gameManager) {
this.gameManager = gameManager;
}
public void run(){
if(this.gameManager.isWaiting) this.gameManager.isWaiting = false;
this.gameManager.getMessageManager().broadCastTitle(ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(this.gameManager.getPlugin().languageDataConfig.getString("titles.aborted.top"))),
ChatColor.translateAlternateColorCodes('&',this.gameManager.getFileHandler().replaceVars(this.gameManager.getPlugin().languageDataConfig.getString("titles.aborted.bottom"), null, "Hub")));
this.gameManager.getPlayerManager().removeKits();
this.gameManager.getTridentManager().clearTasks();
// Move players to Hub
Bukkit.getOnlinePlayers().forEach(player -> this.gameManager.getPlayerManager().moveFromServer(this.gameManager.getPlugin().config.getString("lobby-server"), player));
if (this.gameManager.getPlugin().config.getBoolean("autorestart")) {
new BukkitRunnable() {
private GameManager gameManager = Aborting.this.gameManager;
@Override
public void run() {
Bukkit.getServer().dispatchCommand(this.gameManager.getPlugin().getServer().getConsoleSender(), "restart");
}
}.runTaskLater(this.gameManager.getPlugin(), 120);
}
Bukkit.getOnlinePlayers().forEach(player -> this.gameManager.getScoreBoardManager().removeScoreBoard(player));
this.gameManager.setGameState(GameState.LOBBY);
}
}

View File

@ -0,0 +1,50 @@
package de.steev.Tridentwar.States;
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;
}
public void run(){
this.gameManager.isWaiting = false;
this.gameManager.getPlayerManager().setGameModes(GameMode.SURVIVAL);
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);
}
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

@ -0,0 +1,23 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
public class Lobby {
private final GameManager gameManager;
public Lobby(GameManager gameManager) {
this.gameManager = gameManager;
}
public void run(){
this.gameManager.getPlayerManager().setGameModes(GameMode.SURVIVAL);
if(this.gameManager.getPlugin().config.getLocation("arena") == null) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getFileHandler().replaceVars(this.gameManager.getPlugin().languageDataConfig.getString("error.location-not-found"), null, null)));
} else {
this.gameManager.getPlayerManager().teleportPlayers(this.gameManager.getPlugin().config.getLocation("lobby"));
}
}
}

View File

@ -0,0 +1,32 @@
package de.steev.Tridentwar.States;
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;
public class Starting {
private final GameManager gameManager;
public Starting(GameManager gameManager) {
this.gameManager = gameManager;
}
public void run(){
if(Bukkit.getOnlinePlayers().size() < this.gameManager.getPlugin().config.getInt("minplayers")) {
// Message about minimal player count not beeing reached
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getFileHandler().replaceVars(this.gameManager.getPlugin().languageDataConfig.getString("error.not-enough-players"), null, null)));
this.gameManager.setGameState(GameState.LOBBY);
return;
}
this.gameManager.setLobbyWaitingTask(null);
this.gameManager.setGameStartCountdownTask(new GameStartCountdownTask(this.gameManager));
this.gameManager.getGameStartCountdownTask().runTaskTimer(this.gameManager.getPlugin(), 0 , 20);
if(this.gameManager.getPlugin().config.getLocation("arena") == null) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getFileHandler().replaceVars(this.gameManager.getPlugin().languageDataConfig.getString("error.location-not-found"), null, null)));
} else {
this.gameManager.getPlayerManager().teleportPlayers(this.gameManager.getPlugin().config.getLocation("arena"));
}
}
}

View File

@ -0,0 +1,48 @@
package de.steev.Tridentwar.States;
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;
public class Stopping {
private final GameManager gameManager;
public Stopping(GameManager gameManager) {
this.gameManager = gameManager;
}
public void run(){
if(this.gameManager.isWaiting) this.gameManager.isWaiting = false;
this.gameManager.getMessageManager().broadCastTitle(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("titles.stopping.top")),
ChatColor.translateAlternateColorCodes('&', this.gameManager.getFileHandler().replaceVars(this.gameManager.getPlugin().languageDataConfig.getString("titles.stopping.bottom"), null, "Hub")));
this.gameManager.getPlayerManager().removeKits();
new BukkitRunnable() {
private GameManager gameManager = Stopping.this.gameManager;
@Override
public void run() {
// Move players to Hub
Bukkit.getOnlinePlayers().forEach(player -> this.gameManager.getPlayerManager().moveFromServer(this.gameManager.getPlugin().config.getString("lobby-server"), player));
if (this.gameManager.getPlugin().config.getBoolean("autorestart")) {
new BukkitRunnable() {
private GameManager gameManager = Stopping.this.gameManager;
@Override
public void run() {
Bukkit.getServer().dispatchCommand(this.gameManager.getPlugin().getServer().getConsoleSender(), "restart");
}
}.runTaskLater(this.gameManager.getPlugin(), 120);
}
}
}.runTaskLater(this.gameManager.getPlugin(), 100);
Bukkit.getOnlinePlayers().forEach(player -> this.gameManager.getScoreBoardManager().removeScoreBoard(player));
this.gameManager.setGameState(GameState.LOBBY);
}
}

View File

@ -0,0 +1,24 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.tasks.LobbyWaitingTask;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
public class Waiting {
private final GameManager gameManager;
public Waiting(GameManager gameManager) {
this.gameManager = gameManager;
}
public void run(){
if(!this.gameManager.isWaiting) {
this.gameManager.setLobbyWaitingTask(new LobbyWaitingTask(this.gameManager));
this.gameManager.getLobbyWaitingTask().runTaskTimer(this.gameManager.getPlugin(), 0, 20);
this.gameManager.isWaiting = true;
} else {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("error.is-already-waiting")));
}
}
}

View File

@ -0,0 +1,41 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public class Won {
private final GameManager gameManager;
public Won(GameManager gameManager) {
this.gameManager = gameManager;
}
public void run(){
for (Player p : Bukkit.getOnlinePlayers()) {
if(p.getGameMode() == GameMode.SURVIVAL) {
this.gameManager.getMessageManager().broadCastTitle(ChatColor.translateAlternateColorCodes('&',this.gameManager.getPlugin().languageDataConfig.getString("titles.won.top")),
ChatColor.translateAlternateColorCodes('&',this.gameManager.getFileHandler().replaceVars(this.gameManager.getPlugin().languageDataConfig.getString("titles.won.bottom"), p, null)));
}
}
this.gameManager.getTridentManager().clearTasks();
if(this.gameManager.getPlugin().config.getLocation("lobby") == null) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.gameManager.getFileHandler().replaceVars(this.gameManager.getPlugin().languageDataConfig.getString("error.location-not-found"), null, null)));
} else {
this.gameManager.getPlayerManager().teleportPlayers(this.gameManager.getPlugin().config.getLocation("lobby"));
}
new BukkitRunnable() {
private GameManager gameManager = Won.this.gameManager;
@Override
public void run() {
this.gameManager.setGameState(GameState.STOPPING);
}
}.runTaskLater(this.gameManager.getPlugin(), 120);
}
}

View File

@ -38,6 +38,7 @@ public class TridentwarCommand implements CommandExecutor {
case "start":
if(commandSender.hasPermission(this.gameManager.getPlugin().config.getString("admin.start")) ||
commandSender.hasPermission(this.gameManager.getPlugin().config.getString("admin.all"))) {
gameManager.getLobbyWaitingTask().cancel();
gameManager.setGameState(GameState.STARTING);
} else {
// Get permission error message from config

View File

@ -1,4 +1,4 @@
package de.steev.Tridentwar.Handlers;
package de.steev.Tridentwar.handlers;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.configuration.file.FileConfiguration;

View File

@ -1,12 +1,11 @@
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 org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
@ -18,11 +17,23 @@ public class GameManager {
private MessageManager messageManager;
private FileHandler fileHandler;
private LobbyWaitingTask lobbyWaitingTask;
private boolean isWaiting = false;
public static boolean isWaiting = false;
private Effect record;
private ScoreBoardManager scoreBoardManager;
public GameState gameState = GameState.LOBBY;
/**
* Game States
*/
private Active activeState;
private Starting startingState;
private Waiting waitingState;
private Lobby lobbyState;
private Won wonState;
private Stopping stoppingState;
private Aborting abortingState;
/**
* Handles the entire Game
* @param plugin the local plugin insance
@ -35,6 +46,15 @@ public class GameManager {
this.fileHandler = new FileHandler(this);
this.scoreBoardManager = new ScoreBoardManager(this);
this.lobbyWaitingTask = null;
// Initialize Game States
this.activeState = new Active(this);
this.startingState = new Starting(this);
this.waitingState = new Waiting(this);
this.lobbyState = new Lobby(this);
this.wonState = new Won(this);
this.stoppingState = new Stopping(this);
this.abortingState = new Aborting(this);
}
/**
@ -45,133 +65,27 @@ public class GameManager {
if(this.gameState == GameState.ACTIVE && gameState == GameState.STARTING) return;
this.gameState = gameState;
/**
* Runs run method from state reference
* Add new case and call run method to expand on this
*/
switch (gameState){
case ACTIVE:
isWaiting = false;
this.playerManager.setGameModes(GameMode.SURVIVAL);
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:
if(Bukkit.getOnlinePlayers().size() < this.plugin.config.getInt("minplayers")) {
// Message about minimal player count not beeing reached
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.fileHandler.replaceVars(this.plugin.languageDataConfig.getString("error.not-enough-players"), null, null)));
this.setGameState(GameState.LOBBY);
return;
}
this.lobbyWaitingTask = null;
this.gameStartCountdownTask = new GameStartCountdownTask(this);
this.gameStartCountdownTask.runTaskTimer(plugin, 0 , 20);
if(this.plugin.config.getLocation("arena") == null) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.fileHandler.replaceVars(this.plugin.languageDataConfig.getString("error.location-not-found"), null, null)));
} else {
playerManager.teleportPlayers(this.plugin.config.getLocation("arena"));
}
break;
case WAITING:
if(!isWaiting) {
lobbyWaitingTask = new LobbyWaitingTask(this);
lobbyWaitingTask.runTaskTimer(plugin, 0, 20);
isWaiting = true;
} else {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',plugin.languageDataConfig.getString("error.is-already-waiting")));
}
break;
case LOBBY:
playerManager.setGameModes(GameMode.SURVIVAL);
if(this.plugin.config.getLocation("arena") == null) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.fileHandler.replaceVars(this.plugin.languageDataConfig.getString("error.location-not-found"), null, null)));
} else {
playerManager.teleportPlayers(this.plugin.config.getLocation("lobby"));
}
break;
case WON:
for (Player p : Bukkit.getOnlinePlayers()) {
if(p.getGameMode() == GameMode.SURVIVAL) {
this.messageManager.broadCastTitle(ChatColor.translateAlternateColorCodes('&',this.plugin.languageDataConfig.getString("titles.won.top")),
ChatColor.translateAlternateColorCodes('&',this.fileHandler.replaceVars(this.plugin.languageDataConfig.getString("titles.won.bottom"), p, null)));
}
}
tridentManager.clearTasks();
if(this.plugin.config.getLocation("lobby") == null) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',this.fileHandler.replaceVars(this.plugin.languageDataConfig.getString("error.location-not-found"), null, null)));
} else {
playerManager.teleportPlayers(this.plugin.config.getLocation("lobby"));
}
new BukkitRunnable() {
@Override
public void run() {
setGameState(GameState.STOPPING);
}
}.runTaskLater(plugin, 120);
break;
case STOPPING:
if(isWaiting) isWaiting = false;
this.messageManager.broadCastTitle(ChatColor.translateAlternateColorCodes('&',this.plugin.languageDataConfig.getString("titles.stopping.top")),
ChatColor.translateAlternateColorCodes('&', this.fileHandler.replaceVars(this.plugin.languageDataConfig.getString("titles.stopping.bottom"), null, "Hub")));
this.playerManager.removeKits();
new BukkitRunnable() {
@Override
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);
Bukkit.getOnlinePlayers().forEach(player -> this.scoreBoardManager.removeScoreBoard(player));
this.setGameState(GameState.LOBBY);
break;
case ABORTING:
if(isWaiting) isWaiting = false;
this.messageManager.broadCastTitle(ChatColor.translateAlternateColorCodes('&',this.plugin.languageDataConfig.getString("titles.aborted.top")),
ChatColor.translateAlternateColorCodes('&',this.fileHandler.replaceVars(this.plugin.languageDataConfig.getString("titles.aborted.bottom"), null, "Hub")));
this.playerManager.removeKits();
tridentManager.clearTasks();
// Move players to Hub
Bukkit.getOnlinePlayers().forEach(player -> playerManager.moveFromServer(this.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);
}
Bukkit.getOnlinePlayers().forEach(player -> this.scoreBoardManager.removeScoreBoard(player));
this.setGameState(GameState.LOBBY);
break;
case ACTIVE -> this.activeState.run();
case STARTING -> this.startingState.run();
case WAITING -> this.waitingState.run();
case LOBBY -> this.lobbyState.run();
case WON -> this.wonState.run();
case STOPPING -> this.stoppingState.run();
case ABORTING -> this.abortingState.run();
}
}
/**
* Clean up Routine, called when the games closes
*/
public void cleanup(){
String worldName = "world";
String worldName = "world";
File playerFilesDir = new File(worldName + "/playerdata");
if(playerFilesDir.isDirectory()){
String[] playerDats = playerFilesDir.list();
@ -194,6 +108,23 @@ public class GameManager {
*/
public MessageManager getMessageManager() { return messageManager; }
/**
* Assigns Game Countdown Task
* @param gameStartCountdownTask Gamecountdown Task
*/
public void setGameStartCountdownTask(GameStartCountdownTask gameStartCountdownTask) {
this.gameStartCountdownTask = gameStartCountdownTask;
}
/**
* returns game countdown task
* @return Gamecountdown Task
*/
public GameStartCountdownTask getGameStartCountdownTask() {
return gameStartCountdownTask;
}
/**
* sets the active lobbywaiting task
* @param lobbyWaitingTask the current task for waiting in the lobby

View File

@ -3,11 +3,8 @@ package de.steev.Tridentwar.manager;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.awt.*;
public class MessageManager {
private GameManager gameManager;

View File

@ -1,19 +1,23 @@
package de.steev.Tridentwar.manager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
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 ScoreboardManager manager;
private final ScoreboardManager manager;
/**
* 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
@ -22,24 +26,18 @@ public class ScoreBoardManager {
* @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);
Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective("Tridentwar", "dummy", "SLPNetwork");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
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**
}
/**
@ -47,10 +45,34 @@ public class ScoreBoardManager {
* @param player the player
* @param alive how many players are alive
* @param kills how many kills the player got
* TODO: add time
*/
public void updateScoreBoard(Player player, int alive, int kills){
player.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
createScoreBoard(player,alive,kills);
public void updateScoreBoard(Player player, int alive, int kills) {
Scoreboard board = player.getScoreboard();
// Falls der Spieler kein eigenes Scoreboard hat, erstelle eins
if (board == null || board.getObjective(DisplaySlot.SIDEBAR) == null) {
createScoreBoard(player, alive, kills);
player.setScoreboard(board);
return;
}
Objective obj = board.getObjective(DisplaySlot.SIDEBAR);
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

@ -3,11 +3,19 @@ package de.steev.Tridentwar.tasks;
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

@ -4,12 +4,21 @@ import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
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,7 +26,30 @@ public class LobbyWaitingTask extends BukkitRunnable {
@Override
public void run() {
if (Bukkit.getOnlinePlayers().size() >= this.gameManager.getPlugin().config.getInt("maxplayers")) {
timeLeft=10;
}
Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective("Tridentwar", "dummy", "SLPNetwork");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
timeLeft--;
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);
}
this.gameManager.getMessageManager().broadCastXPBar(ChatColor.translateAlternateColorCodes('&', this.gameManager.getPlugin().languageDataConfig.getString("game.countdown") + timeLeft));
if (timeLeft > 10) {
switch (timeLeft) {
@ -29,6 +61,10 @@ public class LobbyWaitingTask extends BukkitRunnable {
} else if(timeLeft <= 10) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', this.gameManager.getPlugin().languageDataConfig.getString("game.countdown") + timeLeft));
/**
* Checks if the time has run out and messages the Players about game beeing aborted
* proceeds then to abort the game and change gamestate accordingly
*/
if(timeLeft <= 0) {
if(Bukkit.getOnlinePlayers().size() < this.gameManager.getPlugin().config.getInt("minplayers")) {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',
@ -37,11 +73,18 @@ public class LobbyWaitingTask extends BukkitRunnable {
} else {
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',
this.gameManager.getFileHandler().replaceVars(this.gameManager.getPlugin().languageDataConfig.getString("game.starting"), null, null)));
gameManager.setGameState(GameState.STARTING);
this.gameManager.setGameState(GameState.ACTIVE);
}
cancel();
return;
}
}
}
/**
* calls cancel to stop task
*/
public void stopTask() {
cancel();
}
}

View File

@ -1,9 +1,6 @@
package de.steev.Tridentwar.tasks;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.manager.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;