summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/game/Game.java')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Game.java728
1 files changed, 242 insertions, 486 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
index 6a6ccaa..78c5e01 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
@@ -19,586 +19,342 @@
package net.tylermurphy.hideAndSeek.game;
-import static net.tylermurphy.hideAndSeek.configuration.Config.*;
-
-import com.cryptomorin.xseries.XMaterial;
-import com.cryptomorin.xseries.XSound;
+import com.cryptomorin.xseries.messages.ActionBar;
import com.cryptomorin.xseries.messages.Titles;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
-import net.md_5.bungee.api.ChatColor;
-import net.tylermurphy.hideAndSeek.configuration.Items;
-import net.tylermurphy.hideAndSeek.database.Database;
-import net.tylermurphy.hideAndSeek.util.Status;
-import net.tylermurphy.hideAndSeek.util.Version;
-import net.tylermurphy.hideAndSeek.util.WinType;
+import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.game.events.Border;
+import net.tylermurphy.hideAndSeek.game.events.Glow;
+import net.tylermurphy.hideAndSeek.game.events.Taunt;
+import net.tylermurphy.hideAndSeek.game.listener.RespawnHandler;
+import net.tylermurphy.hideAndSeek.game.util.*;
import net.tylermurphy.hideAndSeek.world.WorldLoader;
import org.bukkit.*;
-import org.bukkit.attribute.Attribute;
-import org.bukkit.attribute.AttributeInstance;
import org.bukkit.entity.Entity;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
-import net.tylermurphy.hideAndSeek.Main;
-import net.tylermurphy.hideAndSeek.util.Packet;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.FireworkMeta;
-import org.bukkit.inventory.meta.ItemMeta;
-import org.bukkit.potion.PotionEffect;
-import org.bukkit.potion.PotionEffectType;
-
import java.io.File;
import java.util.*;
import java.util.stream.Collectors;
-import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
-import static net.tylermurphy.hideAndSeek.game.Game.broadcastMessage;
+import static net.tylermurphy.hideAndSeek.configuration.Config.*;
+import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
public class Game {
- public static Taunt taunt;
- public static Glow glow;
- public static Border worldBorder;
- public static WorldLoader worldLoader;
- public static int tick = 0;
- public static int countdownTime = -1;
- public static int gameId = 0;
- public static int timeLeft = 0;
- public static Status status = Status.STANDBY;
+ private final Taunt taunt;
+ private final Glow glow;
+ private final Border worldBorder;
+ private final WorldLoader worldLoader;
+
+ private final Board board;
+
+ private Status status;
- static {
- worldLoader = new WorldLoader(spawnWorld);
+ private int gameTick;
+ private int lobbyTimer;
+ private int startingTimer;
+ private int gameTimer;
+ private boolean hiderLeft;
+
+ public Game(Board board){
+ this.taunt = new Taunt();
+ this.glow = new Glow();
+ this.worldBorder = new Border();
+ this.worldLoader = new WorldLoader(spawnWorld);
+
+ this.status = Status.STANDBY;
+
+ this.board = board;
+
+ this.gameTick = 0;
+ this.lobbyTimer = -1;
+ this.startingTimer = -1;
+ this.gameTimer = 0;
+ this.hiderLeft = false;
}
- public static void start(){
- Optional<Player> rand = Board.getPlayers().stream().skip(new Random().nextInt(Board.size())).findFirst();
- if(!rand.isPresent()){
- Main.plugin.getLogger().warning("Failed to select random seeker.");
- return;
- }
- String seekerName = rand.get().getName();
- Player temp = Bukkit.getPlayer(seekerName);
- if(temp == null){
- Main.plugin.getLogger().warning("Failed to select random seeker.");
- return;
- }
- Player seeker = Board.getPlayer(temp.getUniqueId());
- if(seeker == null){
- Main.plugin.getLogger().warning("Failed to select random seeker.");
- return;
- }
- start(seeker);
+ public Status getStatus(){
+ return status;
}
- public static void start(Player seeker){
- if(status == Status.STARTING || status == Status.PLAYING) return;
- if(worldLoader.getWorld() != null) {
- worldLoader.rollback();
- } else {
- worldLoader.loadMap();
- }
- Board.reload();
- for(Player temp : Board.getPlayers()) {
- if(temp.getName().equals(seeker.getName()))
- continue;
- Board.addHider(temp);
- }
- Board.addSeeker(seeker);
- currentWorldborderSize = worldborderSize;
- for(Player player : Board.getPlayers()) {
- player.getInventory().clear();
- player.setGameMode(GameMode.ADVENTURE);
- player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
- for(PotionEffect effect : player.getActivePotionEffects()){
- player.removePotionEffect(effect.getType());
- }
- }
- for(Player player : Board.getSeekers()) {
- player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS,1000000,127,false,false));
- player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,1000000,127,false,false));
- player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP,1000000,128,false,false));
- Titles.sendTitle(player, 10, 70, 20, ChatColor.RED + "" + ChatColor.BOLD + "SEEKER", ChatColor.WHITE + message("SEEKERS_SUBTITLE").toString());
- }
- for(Player player : Board.getHiders()) {
- player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false));
- Titles.sendTitle(player, 10, 70, 20, ChatColor.GOLD + "" + ChatColor.BOLD + "HIDER", ChatColor.WHITE + message("HIDERS_SUBTITLE").toString());
- }
- if(tauntEnabled)
- taunt = new Taunt();
- if (glowEnabled)
- glow = new Glow();
- worldBorder = new Border();
- worldBorder.resetWorldborder("hideandseek_"+spawnWorld);
- if(gameLength > 0)
- timeLeft = gameLength;
- for(Player player : Board.getPlayers())
- Board.createGameBoard(player);
- Board.reloadGameBoards();
- status = Status.STARTING;
- int temp = gameId;
- broadcastMessage(messagePrefix + message("START_COUNTDOWN").addAmount(30));
- sendDelayedMessage(messagePrefix + message("START_COUNTDOWN").addAmount(20), gameId, 20 * 10);
- sendDelayedMessage(messagePrefix + message("START_COUNTDOWN").addAmount(10), gameId, 20 * 20);
- sendDelayedMessage(messagePrefix + message("START_COUNTDOWN").addAmount(5), gameId, 20 * 25);
- sendDelayedMessage(messagePrefix + message("START_COUNTDOWN").addAmount(3), gameId, 20 * 27);
- sendDelayedMessage(messagePrefix + message("START_COUNTDOWN").addAmount(2), gameId, 20 * 28);
- sendDelayedMessage(messagePrefix + message("START_COUNTDOWN").addAmount(1), gameId, 20 * 29);
- Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, () -> {
- if(temp != gameId) return;
- broadcastMessage(messagePrefix + message("START"));
- for(Player player : Board.getPlayers()) resetPlayer(player);
- status = Status.PLAYING;
- }, 20 * 30);
+ public int getTimeLeft(){
+ return gameTimer;
}
- public static void stop(WinType type){
- if(status == Status.STANDBY) return;
- tick = 0;
- countdownTime = -1;
- status = Status.STANDBY;
- gameId++;
- timeLeft = 0;
- List<UUID> players = Board.getPlayers().stream().map(Entity::getUniqueId).collect(Collectors.toList());
- if(type == WinType.HIDER_WIN){
- List<UUID> winners = Board.getHiders().stream().map(Entity::getUniqueId).collect(Collectors.toList());
- Database.playerInfo.addWins(players, winners, type);
- } else if(type == WinType.SEEKER_WIN){
- List<UUID> winners = new ArrayList<>();
- winners.add(Board.getFirstSeeker().getUniqueId());
- Database.playerInfo.addWins(players, winners, type);
- }
- worldBorder.resetWorldborder("hideandseek_"+spawnWorld);
- for(Player player : Board.getPlayers()) {
- Board.createLobbyBoard(player);
- player.setGameMode(GameMode.ADVENTURE);
- Board.addHider(player);
- player.getInventory().clear();
- if(lobbyStartItem != null && (!lobbyItemStartAdmin || player.isOp()))
- player.getInventory().setItem(lobbyItemStartPosition, lobbyStartItem);
- if(lobbyLeaveItem != null)
- player.getInventory().setItem(lobbyItemLeavePosition, lobbyLeaveItem);
- player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
- for(PotionEffect effect : player.getActivePotionEffects()){
- player.removePotionEffect(effect.getType());
- }
- player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100));
- if(Version.atLeast("1.9")){
- for(Player temp : Board.getPlayers()) {
- Packet.setGlow(player, temp, false);
- }
- }
- }
- EventListener.temp_loc.clear();
- worldLoader.unloadMap();
- Board.reloadLobbyBoards();
+ public int getLobbyTime(){
+ return lobbyTimer;
}
- public static boolean isNotSetup() {
- if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) return true;
- if(lobbyPosition.getBlockX() == 0 && lobbyPosition.getBlockY() == 0 && lobbyPosition.getBlockZ() == 0) return true;
- if(exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) return true;
- File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
- if(!destenation.exists()) return true;
- return saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0;
+ public Glow getGlow(){
+ return glow;
}
- public static void onTick() {
- if(isNotSetup()) return;
- if(status == Status.STANDBY) whileWaiting();
- else if(status == Status.STARTING) whileStarting();
- else if(status == Status.PLAYING) whilePlaying();
- tick++;
+ public Border getBorder(){
+ return worldBorder;
}
- public static void resetWorldborder(String worldName){
- worldBorder = new Border();
- worldBorder.resetWorldborder(worldName);
+ public Taunt getTaunt(){
+ return taunt;
}
- public static void broadcastMessage(String message) {
- for(Player player : Board.getPlayers()) {
- player.sendMessage(message);
+ public WorldLoader getWorldLoader(){
+ return worldLoader;
+ }
+
+ public void start() {
+ try {
+ Optional<Player> rand = board.getPlayers().stream().skip(new Random().nextInt(board.size())).findFirst();
+ String seekerName = rand.get().getName();
+ Player temp = Bukkit.getPlayer(seekerName);
+ Player seeker = board.getPlayer(temp.getUniqueId());
+ start(seeker);
+ } catch (Exception e){
+ Main.getInstance().getLogger().warning("Failed to select random seeker.");
}
}
- public static void resetPlayer(Player player) {
- player.getInventory().clear();
- for (PotionEffect effect : player.getActivePotionEffects()) {
- player.removePotionEffect(effect.getType());
+ public void start(Player seeker) {
+ if (mapSaveEnabled) worldLoader.rollback();
+ board.reload();
+ board.addSeeker(seeker);
+ PlayerLoader.loadSeeker(seeker, getGameWorld());
+ board.getPlayers().forEach(player -> {
+ if(board.isSeeker(player)) return;
+ board.addHider(player);
+ PlayerLoader.loadHider(player, getGameWorld());
+ });
+ board.getPlayers().forEach(board::createGameBoard);
+ worldBorder.resetWorldBorder(getGameWorld());
+ if (gameLength > 0) gameTimer = gameLength;
+ status = Status.STARTING;
+ startingTimer = 30;
+ }
+
+ private void stop(WinType type) {
+ status = Status.ENDING;
+ List<UUID> players = board.getPlayers().stream().map(Entity::getUniqueId).collect(Collectors.toList());
+ if (type == WinType.HIDER_WIN) {
+ List<UUID> winners = board.getHiders().stream().map(Entity::getUniqueId).collect(Collectors.toList());
+ Main.getInstance().getDatabase().getGameData().addWins(board, players, winners, board.getHiderKills(), board.getHiderDeaths(), board.getSeekerKills(), board.getSeekerDeaths(), type);
+ } else if (type == WinType.SEEKER_WIN) {
+ List<UUID> winners = new ArrayList<>();
+ winners.add(board.getFirstSeeker().getUniqueId());
+ Main.getInstance().getDatabase().getGameData().addWins(board, players, winners, board.getHiderKills(), board.getHiderDeaths(), board.getSeekerKills(), board.getSeekerDeaths(), type);
}
- if (Board.isSeeker(player)) {
- if(pvpEnabled)
- for(ItemStack item : Items.SEEKER_ITEMS)
- player.getInventory().addItem(item);
- for(PotionEffect effect : Items.SEEKER_EFFECTS)
- player.addPotionEffect(effect);
- } else if (Board.isHider(player)) {
- if(pvpEnabled)
- for(ItemStack item : Items.HIDER_ITEMS)
- player.getInventory().addItem(item);
- for(PotionEffect effect : Items.HIDER_EFFECTS)
- player.addPotionEffect(effect);
- if(glowEnabled) {
- assert XMaterial.SNOWBALL.parseMaterial() != null;
- ItemStack snowball = new ItemStack(XMaterial.SNOWBALL.parseMaterial(), 1);
- ItemMeta snowballMeta = snowball.getItemMeta();
- assert snowballMeta != null;
- snowballMeta.setDisplayName("Glow Powerup");
- List<String> snowballLore = new ArrayList<>();
- snowballLore.add("Throw to make all seekers glow");
- snowballLore.add("Last 30s, all hiders can see it");
- snowballLore.add("Time stacks on multi use");
- snowballMeta.setLore(snowballLore);
- snowball.setItemMeta(snowballMeta);
- player.getInventory().addItem(snowball);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getInstance(), this::end, 5*20);
+ }
+
+ public void end() {
+ board.getPlayers().forEach(PlayerLoader::unloadPlayer);
+ worldBorder.resetWorldBorder(getGameWorld());
+ board.getPlayers().forEach(player -> {
+ if (leaveOnEnd) {
+ board.removeBoard(player);
+ board.remove(player);
+ handleBungeeLeave(player);
+ } else {
+ player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
+ board.createLobbyBoard(player);
+ board.addHider(player);
+ PlayerLoader.joinPlayer(player);
}
- }
+ });
+ RespawnHandler.temp_loc.clear();
+ if (mapSaveEnabled) worldLoader.unloadMap();
+ board.reloadLobbyBoards();
+ status = Status.ENDED;
}
- public static void join(Player player){
- if(Game.status == Status.STANDBY) {
- player.getInventory().clear();
- if(lobbyStartItem != null && (!lobbyItemStartAdmin || player.hasPermission("hideandseek.start")))
- player.getInventory().setItem(lobbyItemStartPosition, lobbyStartItem);
- if(lobbyLeaveItem != null)
- player.getInventory().setItem(lobbyItemLeavePosition, lobbyLeaveItem);
- Board.addHider(player);
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
- else Game.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
- player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
- player.setGameMode(GameMode.ADVENTURE);
- Board.createLobbyBoard(player);
- Board.reloadLobbyBoards();
+ public void join(Player player) {
+ if (status != Status.STARTING && status != Status.PLAYING) {
+ PlayerLoader.joinPlayer(player);
+ board.addHider(player);
+ board.createLobbyBoard(player);
+ board.reloadLobbyBoards();
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
+ else broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player));
} else {
- Board.addSpectator(player);
+ PlayerLoader.loadSpectator(player, getGameWorld());
+ board.addSpectator(player);
+ board.createGameBoard(player);
player.sendMessage(messagePrefix + message("GAME_JOIN_SPECTATOR"));
- player.setGameMode(GameMode.SPECTATOR);
- Board.createGameBoard(player);
- player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
- Titles.sendTitle(player, 10, 70, 20, ChatColor.GRAY + "" + ChatColor.BOLD + "SPECTATING", ChatColor.WHITE + message("SPECTATOR_SUBTITLE").toString());
}
+ }
- player.setFoodLevel(20);
- if(Version.atLeast("1.9")) {
- AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
- if (attribute != null) player.setHealth(attribute.getValue());
+ public void leave(Player player) {
+ PlayerLoader.unloadPlayer(player);
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player));
+ else broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player));
+ if (board.isHider(player) && status != Status.ENDING && status != Status.STANDBY) {
+ hiderLeft = true;
+ }
+ board.removeBoard(player);
+ board.remove(player);
+ if (status == Status.STANDBY) {
+ board.reloadLobbyBoards();
} else {
- player.setHealth(player.getMaxHealth());
+ board.reloadGameBoards();
+ board.reloadBoardTeams();
}
+ handleBungeeLeave(player);
}
- public static void leave(Player player){
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player));
- else Game.broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player));
- Board.removeBoard(player);
- Board.remove(player);
- player.getInventory().clear();
- if(Game.status == Status.STANDBY) {
- Board.reloadLobbyBoards();
- } else {
- Board.reloadGameBoards();
- Board.reloadBoardTeams();
- }
- if(bungeeLeave) {
+ private void handleBungeeLeave(Player player) {
+ if (bungeeLeave) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("Connect");
out.writeUTF(leaveServer);
- player.sendPluginMessage(Main.plugin, "BungeeCord", out.toByteArray());
+ player.sendPluginMessage(Main.getInstance(), "BungeeCord", out.toByteArray());
} else {
player.teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
}
}
- public static void removeItems(Player player){
- for(ItemStack si : Items.SEEKER_ITEMS)
- for(ItemStack i : player.getInventory().getContents())
- if(si.isSimilar(i)) player.getInventory().remove(i);
- for(ItemStack hi : Items.HIDER_ITEMS)
- for(ItemStack i : player.getInventory().getContents())
- if(hi.isSimilar(i)) player.getInventory().remove(i);
+ public void onTick() {
+ if (isNotSetup()) return;
+ if (status == Status.STANDBY) whileWaiting();
+ else if (status == Status.STARTING) whileStarting();
+ else if (status == Status.PLAYING) whilePlaying();
+ gameTick++;
}
- private static void whileWaiting() {
- if(lobbyCountdownEnabled){
- if(lobbyMin <= Board.size()){
- if(countdownTime == -1)
- countdownTime = countdown;
- if(Board.size() >= changeCountdown)
- countdownTime = Math.min(countdownTime, 10);
- if(tick % 20 == 0) {
- countdownTime--;
- Board.reloadLobbyBoards();
- }
- if(countdownTime == 0){
- start();
- }
- } else {
- countdownTime = -1;
+ private void whileWaiting() {
+ if (!lobbyCountdownEnabled) return;
+ if (lobbyMin <= board.size()) {
+ if (lobbyTimer < 0)
+ lobbyTimer = countdown;
+ if (board.size() >= changeCountdown)
+ lobbyTimer = Math.min(lobbyTimer, 10);
+ if (gameTick % 20 == 0) {
+ lobbyTimer--;
+ board.reloadLobbyBoards();
}
+ if (lobbyTimer == 0) {
+ start();
+ }
+ } else {
+ lobbyTimer = -1;
}
}
- private static void whileStarting(){
+ private void whileStarting() {
+ if(gameTick % 20 == 0) {
+ if (startingTimer % 5 == 0 || startingTimer < 5) {
+ String message;
+ if (startingTimer == 0) {
+ message = message("START").toString();
+ status = Status.PLAYING;
+ board.getPlayers().forEach(player -> PlayerLoader.resetPlayer(player, board));
+ } else if (startingTimer == 1){
+ message = message("START_COUNTDOWN_LAST").addAmount(startingTimer).toString();
+ } else {
+ message = message("START_COUNTDOWN").addAmount(startingTimer).toString();
+ }
+ board.getPlayers().forEach(player -> {
+ if (countdownDisplay == CountdownDisplay.CHAT) {
+ player.sendMessage(messagePrefix + message);
+ } else if (countdownDisplay == CountdownDisplay.ACTIONBAR) {
+ ActionBar.clearActionBar(player);
+ ActionBar.sendActionBar(player, messagePrefix + message);
+ } else if (countdownDisplay == CountdownDisplay.TITLE && startingTimer != 30) {
+ Titles.clearTitle(player);
+ Titles.sendTitle(player, 10, 40, 10, " ", message);
+ }
+ });
+ }
+ startingTimer--;
+ }
checkWinConditions();
}
-
- private static void whilePlaying() {
- for(Player hider : Board.getHiders()) {
+
+ private void whilePlaying() {
+ for(Player hider : board.getHiders()) {
int distance = 100, temp = 100;
- for(Player seeker : Board.getSeekers()) {
+ for(Player seeker : board.getSeekers()) {
try {
temp = (int) hider.getLocation().distance(seeker.getLocation());
- } catch (Exception e){
+ } catch (Exception e) {
//Players in different worlds, NOT OK!!!
}
- if(distance > temp) {
+ if (distance > temp) {
distance = temp;
}
}
- if(seekerPing) switch(tick%10) {
+ if (seekerPing) switch(gameTick %10) {
case 0:
- if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .5f, 1f);
- if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
+ if (distance < seekerPingLevel1) heartbeatSound.play(hider, seekerPingLeadingVolume, seekerPingPitch);
+ if (distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
break;
case 3:
- if(distance < seekerPingLevel1) XSound.BLOCK_NOTE_BLOCK_BASEDRUM.play(hider, .3f, 1f);
- if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
+ if (distance < seekerPingLevel1) heartbeatSound.play(hider, seekerPingVolume, seekerPingPitch);
+ if (distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
break;
case 6:
- if(distance < seekerPingLevel3) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
+ if (distance < seekerPingLevel3) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
break;
case 9:
- if(distance < seekerPingLevel2) XSound.BLOCK_NOTE_BLOCK_PLING.play(hider, .3f, 1f);
+ if (distance < seekerPingLevel2) ringingSound.play(hider, seekerPingVolume, seekerPingPitch);
break;
}
}
- if(tick%20 == 0) {
- if(gameLength > 0) {
- Board.reloadGameBoards();
- timeLeft--;
+ if (gameTick %20 == 0) {
+ if (gameLength > 0) {
+ board.reloadGameBoards();
+ gameTimer--;
}
- if(worldborderEnabled) worldBorder.update();
- if(tauntEnabled) taunt.update();
- if (glowEnabled) glow.update();
+ if (worldBorderEnabled) worldBorder.update();
+ if (tauntEnabled) taunt.update();
+ if (glowEnabled || alwaysGlow) glow.update();
}
+ board.getSpectators().forEach(spectator -> spectator.setFlying(spectator.getAllowFlight()));
checkWinConditions();
}
- private static void checkWinConditions(){
- if(Board.sizeHider() < 1) {
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_FOUND"));
- else broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_FOUND"));
- stop(WinType.SEEKER_WIN);
- } else if(Board.sizeSeeker() < 1) {
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(abortPrefix + message("GAME_GAMEOVER_SEEKERS_QUIT"));
- else broadcastMessage(abortPrefix + message("GAME_GAMEOVER_SEEKERS_QUIT"));
- stop(WinType.NONE);
- } else if(timeLeft < 1) {
- if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_TIME"));
- else broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_TIME"));
- stop(WinType.HIDER_WIN);
- }
- }
-
- private static void sendDelayedMessage(String message, int gameId, int delay) {
- Bukkit.getScheduler().runTaskLaterAsynchronously(Main.plugin, () -> {
- if(gameId == Game.gameId)
- broadcastMessage(message);
- }, delay);
- }
-
-}
-
-class Glow {
-
- private int glowTime;
- private boolean running;
-
- public Glow() {
- this.glowTime = 0;
- }
-
- public void onProjectile() {
- if(glowStackable) glowTime += glowLength;
- else glowTime = glowLength;
- running = true;
- }
-
- private void sendPackets(){
- for(Player hider : Board.getHiders())
- for(Player seeker : Board.getSeekers())
- Packet.setGlow(hider, seeker, true);
- }
-
- protected void update() {
- if(running) {
- sendPackets();
- glowTime--;
- glowTime = Math.max(glowTime, 0);
- if (glowTime == 0) {
- stopGlow();
- }
- }
- }
-
- private void stopGlow() {
- running = false;
- for(Player hider : Board.getHiders()) {
- for (Player seeker : Board.getSeekers()) {
- Packet.setGlow(hider, seeker, false);
- }
- }
- }
-
- public boolean isRunning() {
- return running;
- }
-
-}
-
-class Taunt {
-
- private UUID tauntPlayer;
- private int delay;
- private boolean running;
-
- public Taunt() {
- this.delay = tauntDelay;
- }
-
- protected void update() {
- if(delay == 0) {
- if(running) launchTaunt();
- else if(tauntLast || Board.sizeHider() > 1) executeTaunt();
- } else {
- delay--;
- delay = Math.max(delay, 0);
- }
- }
-
- private void executeTaunt() {
- Optional<Player> rand = Board.getHiders().stream().skip(new Random().nextInt(Board.size())).findFirst();
- if(!rand.isPresent()){
- Main.plugin.getLogger().warning("Failed to select random seeker.");
- return;
+ public void broadcastMessage(String message) {
+ for(Player player : board.getPlayers()) {
+ player.sendMessage(message);
}
- Player taunted = rand.get();
- taunted.sendMessage(message("TAUNTED").toString());
- broadcastMessage(tauntPrefix + message("TAUNT"));
- tauntPlayer = taunted.getUniqueId();
- running = true;
- delay = 30;
}
- private void launchTaunt(){
- Player taunted = Board.getPlayer(tauntPlayer);
- if(taunted != null) {
- if(!Board.isHider(taunted)){
- Main.plugin.getLogger().info("Taunted played died and is now seeker. Skipping taunt.");
- tauntPlayer = null;
- running = false;
- delay = tauntDelay;
- return;
- }
- World world = taunted.getLocation().getWorld();
- if(world == null){
- Main.plugin.getLogger().severe("Game world is null while trying to launch taunt.");
- tauntPlayer = null;
- running = false;
- delay = tauntDelay;
- return;
- }
- Firework fw = (Firework) world.spawnEntity(taunted.getLocation(), EntityType.FIREWORK);
- FireworkMeta fwm = fw.getFireworkMeta();
- fwm.setPower(4);
- fwm.addEffect(FireworkEffect.builder()
- .withColor(Color.BLUE)
- .withColor(Color.RED)
- .withColor(Color.YELLOW)
- .with(FireworkEffect.Type.STAR)
- .with(FireworkEffect.Type.BALL)
- .with(FireworkEffect.Type.BALL_LARGE)
- .flicker(true)
- .withTrail()
- .build());
- fw.setFireworkMeta(fwm);
- broadcastMessage(tauntPrefix + message("TAUNT_ACTIVATE"));
+ public boolean isNotSetup() {
+ if (spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) return true;
+ if (lobbyPosition.getBlockX() == 0 && lobbyPosition.getBlockY() == 0 && lobbyPosition.getBlockZ() == 0) return true;
+ if (exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) return true;
+ if (mapSaveEnabled) {
+ File destination = new File(Main.getInstance().getWorldContainer() + File.separator + getGameWorld());
+ if (!destination.exists()) return true;
}
- tauntPlayer = null;
- running = false;
- delay = tauntDelay;
- }
-
- public int getDelay(){
- return delay;
+ return saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0;
}
- public boolean isRunning() {
- return running;
+ public String getGameWorld() {
+ if (mapSaveEnabled) return "hideandseek_"+spawnWorld;
+ else return spawnWorld;
}
-}
-
-class Border {
-
- private int delay;
- private boolean running;
-
- public Border() {
- delay = 60 * worldborderDelay;
- }
-
- void update(){
- if(delay == 30 && !running){
- broadcastMessage(worldborderPrefix + message("WORLDBORDER_WARN"));
- } else if(delay == 0){
- if(running){
- delay = 60 * worldborderDelay;
- running = false;
+ private void checkWinConditions() {
+ if (board.sizeHider() < 1) {
+ if (hiderLeft) {
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameOverPrefix + message("GAME_GAMEOVER_HIDERS_QUIT"));
+ else broadcastMessage(gameOverPrefix + message("GAME_GAMEOVER_HIDERS_QUIT"));
+ stop(WinType.NONE);
+ } else {
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameOverPrefix + message("GAME_GAMEOVER_HIDERS_FOUND"));
+ else broadcastMessage(gameOverPrefix + message("GAME_GAMEOVER_HIDERS_FOUND"));
+ stop(WinType.SEEKER_WIN);
}
- else decreaceWorldborder();
- }
- delay--;
- }
-
- private void decreaceWorldborder() {
- if(currentWorldborderSize == 100) return;
- int change = worldborderChange;
- if(currentWorldborderSize-worldborderChange < 100){
- change = currentWorldborderSize-100;
- }
- running = true;
- broadcastMessage(worldborderPrefix + message("WORLDBORDER_DECREASING").addAmount(change));
- currentWorldborderSize -= worldborderChange;
- World world = Bukkit.getWorld("hideandseek_"+spawnWorld);
- assert world != null;
- org.bukkit.WorldBorder border = world.getWorldBorder();
- border.setSize(border.getSize()-change,30);
- delay = 30;
- }
-
- public void resetWorldborder(String worldName) {
- World world = Bukkit.getWorld(worldName);
- assert world != null;
- org.bukkit.WorldBorder border = world.getWorldBorder();
- if(worldborderEnabled) {
- border.setSize(worldborderSize);
- border.setCenter(worldborderPosition.getX(), worldborderPosition.getZ());
- currentWorldborderSize = worldborderSize;
- } else {
- border.setSize(30000000);
- border.setCenter(0, 0);
+ } else if (board.sizeSeeker() < 1) {
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(abortPrefix + message("GAME_GAMEOVER_SEEKERS_QUIT"));
+ else broadcastMessage(abortPrefix + message("GAME_GAMEOVER_SEEKERS_QUIT"));
+ stop(WinType.NONE);
+ } else if (gameTimer < 1) {
+ if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameOverPrefix + message("GAME_GAMEOVER_TIME"));
+ else broadcastMessage(gameOverPrefix + message("GAME_GAMEOVER_TIME"));
+ stop(WinType.HIDER_WIN);
}
- }
-
- public int getDelay(){
- return delay;
- }
-
- public boolean isRunning() {
- return running;
+ hiderLeft = false;
}
} \ No newline at end of file