3 Commits

27 changed files with 225 additions and 105 deletions

39
config.yml Normal file
View File

@ -0,0 +1,39 @@
# 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
language: "en-us"
autorestart: false
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
# 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"

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.States;
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;

View File

@ -1,14 +1,21 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
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;
}
@ -18,9 +25,26 @@ public class Active {
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);
this.gameManager.getScoreBoardManager().updateScoreBoard(p, this.gameManager.getPlayerManager().getAlive(), this.gameManager.getPlayerManager().getKills(p));
}
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

@ -1,6 +1,6 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;

View File

@ -1,8 +1,8 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Manager.GameState;
import de.steev.Tridentwar.Tasks.GameStartCountdownTask;
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;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.States;
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;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.States;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.Tasks.LobbyWaitingTask;
import de.steev.Tridentwar.manager.GameManager;
import de.steev.Tridentwar.tasks.LobbyWaitingTask;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;

View File

@ -1,7 +1,7 @@
package de.steev.Tridentwar.States;
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;

View File

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

View File

@ -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;
@ -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,6 +1,6 @@
package de.steev.Tridentwar.Handlers;
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;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,17 +1,13 @@
package de.steev.Tridentwar.Manager;
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 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;

View File

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

View File

@ -1,4 +1,4 @@
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;

View File

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

View File

@ -1,9 +1,11 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
import org.bukkit.Bukkit;
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 final ScoreboardManager manager;
@ -12,7 +14,10 @@ public class ScoreBoardManager {
* 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
@ -21,26 +26,18 @@ public class ScoreBoardManager {
* @param kills how many kills the player got
*/
public void createScoreBoard(Player player, int alive, int kills) {
// 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 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);
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**
}
/**
@ -51,31 +48,31 @@ public class ScoreBoardManager {
* TODO: add time
*/
public void updateScoreBoard(Player player, int alive, int 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
// Falls der Spieler kein eigenes Scoreboard hat, erstelle eins
if (board == null || board.getObjective(DisplaySlot.SIDEBAR) == null) {
createScoreBoard(player, alive, kills);
} else {
// Fetch objective from existing scoreboard
player.setScoreboard(board);
return;
}
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);
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

@ -1,4 +1,4 @@
package de.steev.Tridentwar.Manager;
package de.steev.Tridentwar.manager;
import org.bukkit.Bukkit;
import org.bukkit.Sound;

View File

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

View File

@ -1,13 +1,21 @@
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.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

@ -1,15 +1,24 @@
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.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) {
@ -41,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,6 +1,6 @@
package de.steev.Tridentwar.Tasks;
package de.steev.Tridentwar.tasks;
import de.steev.Tridentwar.Manager.GameManager;
import de.steev.Tridentwar.manager.GameManager;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;