Moved GameState Code to more maintainable Classes
This commit is contained in:
parent
3f607b14ab
commit
fa687f168f
25
config.yml
25
config.yml
@ -1,25 +0,0 @@
|
||||
# general
|
||||
prefix: null
|
||||
minplayers: 2
|
||||
# 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
|
||||
language: "en-us"
|
||||
autorestart: false
|
||||
lobby-auto-queue: true
|
||||
force-on-spawn: true
|
||||
lobby-server: "lobby"
|
||||
|
||||
# spawn points
|
||||
lobby: null
|
||||
arena: null
|
||||
|
||||
# Permissions
|
||||
admin:
|
||||
all: "tw.admin"
|
||||
setlocation:
|
||||
all: "tw.admin.setlocation"
|
||||
lobby: "tw.admin.setlocation.lobby"
|
||||
arena: "tw.admin.setlocation.arena"
|
||||
start: "tw.admin.start"
|
||||
stop: "tw.admin.stop"
|
@ -1,6 +1,6 @@
|
||||
package de.steev.Tridentwar.Handlers;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
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);
|
||||
}
|
||||
}
|
26
src/main/java/de/steev/Tridentwar/States/Active.java
Normal file
26
src/main/java/de/steev/Tridentwar/States/Active.java
Normal file
@ -0,0 +1,26 @@
|
||||
package de.steev.Tridentwar.States;
|
||||
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class Active {
|
||||
private final GameManager gameManager;
|
||||
|
||||
public Active(GameManager gameManager) {
|
||||
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();
|
||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||
this.gameManager.getPlayerManager().setKills(p, 0);
|
||||
this.gameManager.getScoreBoardManager().updateScoreBoard(p, this.gameManager.getPlayerManager().getAlive(), this.gameManager.getPlayerManager().getKills(p));
|
||||
}
|
||||
}
|
||||
}
|
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);
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package de.steev.Tridentwar;
|
||||
|
||||
import de.steev.Tridentwar.commands.TridentwarCommand;
|
||||
import de.steev.Tridentwar.listeners.*;
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.Commands.TridentwarCommand;
|
||||
import de.steev.Tridentwar.Listeners.*;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package de.steev.Tridentwar.commands;
|
||||
package de.steev.Tridentwar.Commands;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameState;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package de.steev.Tridentwar.listeners;
|
||||
package de.steev.Tridentwar.Listeners;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameState;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Sound;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package de.steev.Tridentwar.listeners;
|
||||
package de.steev.Tridentwar.Listeners;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameState;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package de.steev.Tridentwar.listeners;
|
||||
package de.steev.Tridentwar.Listeners;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameState;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package de.steev.Tridentwar.listeners;
|
||||
package de.steev.Tridentwar.Listeners;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameState;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Sound;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package de.steev.Tridentwar.listeners;
|
||||
package de.steev.Tridentwar.Listeners;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameState;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package de.steev.Tridentwar.listeners;
|
||||
package de.steev.Tridentwar.Listeners;
|
||||
|
||||
import de.steev.Tridentwar.Tridentwar;
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
import de.steev.Tridentwar.tasks.TridentResetTask;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameState;
|
||||
import de.steev.Tridentwar.Tasks.TridentResetTask;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
@ -1,14 +1,17 @@
|
||||
package de.steev.Tridentwar.manager;
|
||||
package de.steev.Tridentwar.Manager;
|
||||
|
||||
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 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 org.checkerframework.checker.units.qual.A;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Objects;
|
||||
|
||||
public class GameManager {
|
||||
private final Tridentwar plugin;
|
||||
@ -18,11 +21,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 +50,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 +69,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 +112,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
|
||||
|
@ -1,4 +1,4 @@
|
||||
package de.steev.Tridentwar.manager;
|
||||
package de.steev.Tridentwar.Manager;
|
||||
|
||||
public enum GameState {
|
||||
LOBBY, WAITING, STARTING, ACTIVE, WON, RESTARTING, STOPPING, ABORTING;
|
||||
|
@ -1,13 +1,10 @@
|
||||
package de.steev.Tridentwar.manager;
|
||||
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,4 +1,4 @@
|
||||
package de.steev.Tridentwar.manager;
|
||||
package de.steev.Tridentwar.Manager;
|
||||
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
|
@ -1,13 +1,12 @@
|
||||
package de.steev.Tridentwar.manager;
|
||||
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;
|
||||
private final ScoreboardManager manager;
|
||||
|
||||
/**
|
||||
* Manages Scoreboards created by the plugin
|
||||
@ -22,24 +21,26 @@ 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));
|
||||
// Create board instance
|
||||
Scoreboard board = manager.getNewScoreboard();
|
||||
|
||||
// Create Board Objective
|
||||
Objective obj = board.registerNewObjective("Tridentwar", "dummy", "SLPNetwork");
|
||||
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
|
||||
// Create Scores
|
||||
Score splitter = obj.getScore("=-=-=-=-=-=-=-=-=-=-=");
|
||||
splitter.setScore(5);
|
||||
Score playerName = obj.getScore("Player: " + player.getDisplayName());
|
||||
playerName.setScore(4);
|
||||
Score aliveScore = obj.getScore("Alive: " + 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);
|
||||
Score killsScore = obj.getScore("Kills: " + kills);
|
||||
killsScore.setScore(2);
|
||||
Score blankScore = obj.getScore("");
|
||||
blankScore.setScore(1);
|
||||
Score hostScore = obj.getScore("play.slpnetwork.de");
|
||||
hostScore.setScore(0);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -47,10 +48,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);
|
||||
// Grab Scoreboard from Player
|
||||
Scoreboard board = player.getScoreboard();
|
||||
|
||||
// Detect if a Scoreboard has been created
|
||||
if(board == null) {
|
||||
// If there is none, create one
|
||||
createScoreBoard(player, alive, kills);
|
||||
} else {
|
||||
// Fetch objective from existing scoreboard
|
||||
Objective obj = board.getObjective(DisplaySlot.SIDEBAR);
|
||||
|
||||
// Replace Scores present on the Screen
|
||||
Score splitter = obj.getScore("=-=-=-=-=-=-=-=-=-=-=");
|
||||
splitter.setScore(5);
|
||||
Score playerName = obj.getScore("Player: " + player.getDisplayName());
|
||||
playerName.setScore(4);
|
||||
Score aliveScore = obj.getScore("Alive: " + alive);
|
||||
aliveScore.setScore(3);
|
||||
Score killsScore = obj.getScore("Kills: " + kills);
|
||||
killsScore.setScore(2);
|
||||
Score blankScore = obj.getScore("");
|
||||
blankScore.setScore(1);
|
||||
Score hostScore = obj.getScore("play.slpnetwork.de");
|
||||
hostScore.setScore(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,4 +1,4 @@
|
||||
package de.steev.Tridentwar.manager;
|
||||
package de.steev.Tridentwar.Manager;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package de.steev.Tridentwar.manager;
|
||||
package de.steev.Tridentwar.Manager;
|
||||
|
||||
import de.steev.Tridentwar.tasks.TridentResetTask;
|
||||
import de.steev.Tridentwar.Tasks.TridentResetTask;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package de.steev.Tridentwar.tasks;
|
||||
package de.steev.Tridentwar.Tasks;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
import de.steev.Tridentwar.Manager.GameManager;
|
||||
import de.steev.Tridentwar.Manager.GameState;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package de.steev.Tridentwar.tasks;
|
||||
package de.steev.Tridentwar.Tasks;
|
||||
|
||||
import de.steev.Tridentwar.manager.GameManager;
|
||||
import de.steev.Tridentwar.manager.GameState;
|
||||
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;
|
||||
@ -29,6 +29,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('&',
|
||||
|
@ -1,9 +1,6 @@
|
||||
package de.steev.Tridentwar.tasks;
|
||||
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 de.steev.Tridentwar.Manager.GameManager;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
Loading…
x
Reference in New Issue
Block a user