force spectator flight

This commit is contained in:
Tyler Murphy 2022-05-12 17:14:05 -04:00
parent 853ca07431
commit 66f9ad1011
3 changed files with 95 additions and 91 deletions

View file

@ -23,8 +23,6 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.*;
import net.tylermurphy.hideAndSeek.game.Game;
import net.tylermurphy.hideAndSeek.util.Status;
import net.tylermurphy.hideAndSeek.util.WinType;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import static net.tylermurphy.hideAndSeek.configuration.Localization.*;
@ -38,7 +36,7 @@ public class Stop implements ICommand {
}
if(Game.status == Status.STARTING || Game.status == Status.PLAYING) {
Game.broadcastMessage(abortPrefix + message("STOP"));
Game.stop();
Game.end();
} else {
sender.sendMessage(errorPrefix + message("GAME_NOT_INPROGRESS"));
}

View file

@ -348,4 +348,5 @@ public class EventListener implements Listener {
event.setCancelled(true);
}
}
}

View file

@ -152,7 +152,7 @@ public class Game {
}, 20 * 30);
}
public static void end(WinType type){
public static void stop(WinType type){
if(status == Status.STANDBY || status == Status.ENDING) return;
status = Status.ENDING;
for(Player player : Board.getPlayers()) {
@ -176,10 +176,10 @@ public class Game {
winners.add(Board.getFirstSeeker().getUniqueId());
Database.playerInfo.addWins(players, winners, Board.getHiderKills(), Board.getHiderDeaths(), Board.getSeekerKills(), Board.getSeekerDeaths(), type);
}
Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, Game::stop, 5*20);
Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, Game::end, 5*20);
}
public static void stop(){
public static void end(){
if(status == Status.STANDBY) return;
tick = 0;
countdownTime = -1;
@ -235,64 +235,6 @@ public class Game {
Board.reloadLobbyBoards();
}
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;
if(mapSaveEnabled) {
File destenation = new File(Main.root + File.separator + getGameWorld());
if (!destenation.exists()) return true;
}
return saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0;
}
public static String getGameWorld(){
if(mapSaveEnabled) return "hideandseek_"+spawnWorld;
else return spawnWorld;
}
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 static void resetWorldborder(String worldName){
worldBorder = new Border();
worldBorder.resetWorldborder(worldName);
}
public static void broadcastMessage(String message) {
for(Player player : Board.getPlayers()) {
player.sendMessage(message);
}
}
public static void resetPlayer(Player player) {
player.getInventory().clear();
for (PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
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) {
player.getInventory().addItem(glowPowerupItem);
}
}
}
public static void join(Player player){
if(Game.status == Status.STANDBY || Game.status == Status.ENDING) {
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
@ -369,17 +311,16 @@ public class Game {
}
}
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 static void onTick() {
if(isNotSetup()) return;
if(status == Status.STANDBY) whileWaiting();
else if(status == Status.STARTING) whileStarting();
else if(status == Status.PLAYING) whilePlaying();
tick++;
}
private static void whileWaiting() {
if(lobbyCountdownEnabled){
if(!lobbyCountdownEnabled) return;
if(lobbyMin <= Board.size()){
if(countdownTime == -1)
countdownTime = countdown;
@ -396,9 +337,11 @@ public class Game {
countdownTime = -1;
}
}
}
private static void whileStarting(){
for(Player spectator : Board.getSpectators()){
spectator.setFlying(spectator.getAllowFlight());
}
checkWinConditions();
}
@ -432,6 +375,9 @@ public class Game {
break;
}
}
for(Player spectator : Board.getSpectators()){
spectator.setFlying(spectator.getAllowFlight());
}
if(tick%20 == 0) {
if(gameLength > 0) {
Board.reloadGameBoards();
@ -444,25 +390,84 @@ public class Game {
checkWinConditions();
}
public static void resetWorldborder(String worldName){
worldBorder = new Border();
worldBorder.resetWorldborder(worldName);
}
public static void broadcastMessage(String message) {
for(Player player : Board.getPlayers()) {
player.sendMessage(message);
}
}
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;
if(mapSaveEnabled) {
File destenation = new File(Main.root + File.separator + getGameWorld());
if (!destenation.exists()) return true;
}
return saveMinX == 0 || saveMinZ == 0 || saveMaxX == 0 || saveMaxZ == 0;
}
public static String getGameWorld(){
if(mapSaveEnabled) return "hideandseek_"+spawnWorld;
else return spawnWorld;
}
public static void resetPlayer(Player player) {
player.getInventory().clear();
for (PotionEffect effect : player.getActivePotionEffects()) {
player.removePotionEffect(effect.getType());
}
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) {
player.getInventory().addItem(glowPowerupItem);
}
}
}
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);
}
private static void checkWinConditions(){
if(Board.sizeHider() < 1) {
if(hiderLeave){
if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_QUIT"));
else broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_QUIT"));
end(WinType.NONE);
stop(WinType.NONE);
} else {
if (announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_FOUND"));
else broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_HIDERS_FOUND"));
end(WinType.SEEKER_WIN);
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"));
end(WinType.NONE);
stop(WinType.NONE);
} else if(timeLeft < 1) {
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_TIME"));
else broadcastMessage(gameoverPrefix + message("GAME_GAMEOVER_TIME"));
end(WinType.HIDER_WIN);
stop(WinType.HIDER_WIN);
}
hiderLeave = false;
}