diff options
Diffstat (limited to 'src/main/java')
3 files changed, 26 insertions, 5 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java index 853b6a2..a71369f 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/configuration/Config.java @@ -93,7 +93,8 @@ public class Config { mapSaveEnabled, allowNaturalCauses, saveInventory, - blockhuntEnabled; + blockhuntEnabled, + delayedRespawn; public static int minPlayers, @@ -119,7 +120,8 @@ public class Config { lobbyItemStartPosition, flightToggleItemPosition, teleportItemPosition, - solidifyTime; + solidifyTime, + delayedRespawnDelay; public static float seekerPingLeadingVolume, @@ -365,6 +367,10 @@ public class Config { Main.getInstance().getLogger().warning("databaseType: "+databaseType+" is not a valid configuration option!"); databaseType = "SQLITE"; } + + delayedRespawn = config.getBoolean("delayedRespawn.enabled"); + delayedRespawnDelay = Math.max(0,config.getInt("delayedRespawn.delay")); + } public static void addToConfig(String path, Object value) { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java index 7c5eaf2..71c3e84 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java @@ -254,7 +254,12 @@ public class Game { if (startingTimer == 0) { message = message("START").toString(); status = Status.PLAYING; - board.getPlayers().forEach(player -> PlayerLoader.resetPlayer(player, board)); + board.getPlayers().forEach(player -> { + PlayerLoader.resetPlayer(player, board); + if(board.isSeeker(player)){ + player.teleport(new Location(Bukkit.getWorld(getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + } + }); } else if (startingTimer == 1){ message = message("START_COUNTDOWN_LAST").addAmount(startingTimer).toString(); } else { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java index cb4cba5..d03d5d6 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/DamageHandler.java @@ -80,7 +80,7 @@ public class DamageHandler implements Listener { return; } // Players cannot take damage while game is not in session - if (board.contains(player) && (game.getStatus() == Status.STANDBY || game.getStatus() == Status.STARTING)){ + if (board.contains(player) && game.getStatus() != Status.PLAYING){ event.setCancelled(true); return; } @@ -97,7 +97,17 @@ public class DamageHandler implements Listener { // Reveal player if they are disguised Main.getInstance().getDisguiser().reveal(player); // Teleport player to seeker spawn - player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + if(delayedRespawn){ + player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), seekerLobbyPosition.getX(), seekerLobbyPosition.getY(), seekerLobbyPosition.getZ())); + player.sendMessage(messagePrefix + message("RESPAWN_NOTICE").addAmount(delayedRespawnDelay)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.getInstance(), () -> { + if(game.getStatus() == Status.PLAYING){ + player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + } + }, delayedRespawnDelay * 20L); + } else { + player.teleport(new Location(Bukkit.getWorld(game.getGameWorld()), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + } // Add leaderboard stats board.addDeath(player.getUniqueId()); if (attacker != null) board.addKill(attacker.getUniqueId()); |