Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
be945c688c | |||
c853f7a433 | |||
d22ac3d22a | |||
1c1d41ff10 | |||
fa687f168f | |||
3f607b14ab |
@ -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.
|
||||
|
14
config.yml
14
config.yml
@ -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
|
||||
|
42
src/main/java/de/steev/Tridentwar/States/Aborting.java
Normal file
42
src/main/java/de/steev/Tridentwar/States/Aborting.java
Normal 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);
|
||||
}
|
||||
}
|
50
src/main/java/de/steev/Tridentwar/States/Active.java
Normal file
50
src/main/java/de/steev/Tridentwar/States/Active.java
Normal 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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
23
src/main/java/de/steev/Tridentwar/States/Lobby.java
Normal file
23
src/main/java/de/steev/Tridentwar/States/Lobby.java
Normal 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"));
|
||||
}
|
||||
}
|
||||
}
|
32
src/main/java/de/steev/Tridentwar/States/Starting.java
Normal file
32
src/main/java/de/steev/Tridentwar/States/Starting.java
Normal 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"));
|
||||
}
|
||||
}
|
||||
}
|
48
src/main/java/de/steev/Tridentwar/States/Stopping.java
Normal file
48
src/main/java/de/steev/Tridentwar/States/Stopping.java
Normal 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);
|
||||
}
|
||||
}
|
24
src/main/java/de/steev/Tridentwar/States/Waiting.java
Normal file
24
src/main/java/de/steev/Tridentwar/States/Waiting.java
Normal 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")));
|
||||
}
|
||||
}
|
||||
}
|
41
src/main/java/de/steev/Tridentwar/States/Won.java
Normal file
41
src/main/java/de/steev/Tridentwar/States/Won.java
Normal 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);
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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;
|
@ -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,131 +65,25 @@ 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";
|
||||
File playerFilesDir = new File(worldName + "/playerdata");
|
||||
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user