diff options
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/commands')
5 files changed, 146 insertions, 12 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SaveMap.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/SaveMap.java new file mode 100644 index 0000000..c5b753f --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/SaveMap.java @@ -0,0 +1,59 @@ +package net.tylermurphy.hideAndSeek.commands; + +import static net.tylermurphy.hideAndSeek.Store.*; + +import java.io.File; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; + +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.util.Functions; +import net.tylermurphy.hideAndSeek.util.ICommand; + +public class SaveMap implements ICommand { + + public void execute(CommandSender sender, String[] args) { + if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) { + sender.sendMessage(errorPrefix + "Please set spawn location first"); + return; + } + sender.sendMessage(warningPrefix + "This command may lag the server"); + Bukkit.getServer().getWorld(spawnWorld).save(); + File current = new File(Main.root+File.separator+spawnWorld); + if(current.exists()) { + File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld); + if(destenation.exists()) { + deleteDirectory(destenation); + destenation.mkdir(); + } + Functions.copyFileStructure(current, destenation); + sender.sendMessage(messagePrefix + "Map save complete"); + } else { + sender.sendMessage(errorPrefix + "Coudnt find current map"); + } + } + + boolean deleteDirectory(File directoryToBeDeleted) { + File[] allContents = directoryToBeDeleted.listFiles(); + if (allContents != null) { + for (File file : allContents) { + deleteDirectory(file); + } + } + return directoryToBeDeleted.delete(); + } + + public String getLabel() { + return "saveMap"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Saves current map for the game. May lag server."; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java index e94c781..ae99c7a 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java @@ -15,7 +15,7 @@ import net.tylermurphy.hideAndSeek.util.ICommand; public class SetBorder implements ICommand { public void execute(CommandSender sender, String[] args) { - if(!status.equals("Standby") && !status.equals("Setup")) { + if(!status.equals("Standby")) { sender.sendMessage(errorPrefix + "Game is currently in session"); return; } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java index 89b6baf..18e3703 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java @@ -19,12 +19,15 @@ public class SetSpawnLocation implements ICommand { newSpawnPosition.setX(player.getLocation().getBlockX()); newSpawnPosition.setY(player.getLocation().getBlockY()); newSpawnPosition.setZ(player.getLocation().getBlockZ()); + if(!status.equals("Standby")) { + sender.sendMessage(errorPrefix + "Game is currently in session"); + return; + } if(worldborderEnabled && spawnPosition.distance(worldborderPosition) > 100) { sender.sendMessage(errorPrefix + "Spawn position must be 100 from worldborder center"); return; } spawnPosition = newSpawnPosition; - status = "Standby"; sender.sendMessage(messagePrefix + "Set spawn position to current location"); Map<String, Object> temp = new HashMap<String,Object>(); temp.put("x", spawnPosition.getX()); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java index 063ba35..a8eec85 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java @@ -1,7 +1,7 @@ package net.tylermurphy.hideAndSeek.commands; import org.bukkit.Bukkit; - +import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.command.CommandSender; @@ -15,24 +15,35 @@ import net.tylermurphy.hideAndSeek.util.ICommand; import static net.tylermurphy.hideAndSeek.Store.*; +import java.io.File; import java.util.Random; public class Start implements ICommand { public void execute(CommandSender sender, String[] args) { - if(status.equals("Setup")) { + if(!status.equals("Standby")) { + sender.sendMessage(errorPrefix + "Game is already in session"); + return; + } + if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) { sender.sendMessage(errorPrefix + "Please set spawn location first"); return; } - if(!status.equals("Standby")) { - sender.sendMessage(errorPrefix + "Game is already in session"); + File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld); + if(!destenation.exists()) { + sender.sendMessage(errorPrefix + "Please set map save first"); return; + } else { + if(Bukkit.getServer().getWorld("hideandseek_"+spawnWorld) != null) { + Functions.rollback("hideandseek_"+spawnWorld); + } else { + Functions.loadMap("hideandseek_"+spawnWorld); + } } if(playerList.size() < minPlayers) { sender.sendMessage(errorPrefix + "You must have at least "+minPlayers+" players to start"); return; } - String seekerName; if(args.length < 1) { seekerName = playerList.values().stream().skip(new Random().nextInt(playerList.values().size())).findFirst().get().getName(); @@ -52,7 +63,7 @@ public class Start implements ICommand { for(Player player : playerList.values()) { player.getInventory().clear(); player.setGameMode(GameMode.ADVENTURE); - player.teleport(new Location(Bukkit.getWorld(spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); for(PotionEffect effect : player.getActivePotionEffects()){ player.removePotionEffect(effect.getType()); } @@ -130,9 +141,69 @@ public class Start implements ICommand { }, 20 * 30); if(worldborderEnabled) { - Functions.scheduleWorldborder(); + scheduleWorldborder(); } - Functions.scheduleTaunt(); + scheduleTaunt(); + + } + + private static void scheduleTaunt() { + Bukkit.getServer().getScheduler().runTaskAsynchronously(Main.plugin, new Runnable(){ + + public void run() { + int temp = gameId; + while(true) { + if(tauntPlayer != null && !tauntPlayer.equals("")) { + try { Thread.sleep(1000); } catch (InterruptedException e) {} + if(gameId != temp) break; + continue; + } + try { Thread.sleep(1000*60); } catch (InterruptedException e) {} + if(gameId != temp) break; + if(Math.random() > .8) { + Player taunted = null; + int rand = (int) (Math.random()*Hider.getEntries().size()); + for(Player player : playerList.values()) { + if(Hider.hasEntry(player.getName())) { + rand--; + if(rand==0) { + taunted = player; + break; + } + } + } + if(taunted != null) { + taunted.sendMessage(ChatColor.RED + "" + ChatColor.ITALIC + "Oh no! You have been chosed to be taunted."); + Bukkit.getServer().broadcastMessage(tauntPrefix + " A random hider will be taunted in the next 30s"); + try { Thread.sleep(1000*30); } catch (InterruptedException e) {} + if(gameId != temp) break; + tauntPlayer = taunted.getName(); + } + } + } + } + }); + } + + private static void scheduleWorldborder() { + + Bukkit.getServer().getScheduler().runTaskAsynchronously(Main.plugin, new Runnable(){ + + public void run() { + int temp = gameId; + while(true) { + try { Thread.sleep(1000*60*worldborderDelay); } catch (InterruptedException e) {} + if(gameId != temp) break; + if(currentWorldborderSize-100 > 100) { + Bukkit.getServer().broadcastMessage(worldborderPrefix + "Worldborder decreacing by 100 blocks over the next 30s"); + currentWorldborderSize -= 100; + decreaseBorder = true; + } else { + break; + } + } + } + }); } public String getLabel() { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java index e55675e..b709120 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java @@ -12,6 +12,7 @@ import org.bukkit.potion.PotionEffectType; import net.tylermurphy.hideAndSeek.util.Functions; import net.tylermurphy.hideAndSeek.util.ICommand; +import net.tylermurphy.hideAndSeek.util.Packet; public class Stop implements ICommand { @@ -31,7 +32,7 @@ public class Stop implements ICommand { } public static void onStop() { - if(status.equals("Standby") || status.equals("Setup")) return; + if(status.equals("Standby")) return; status = "Standby"; gameId++; for(Player player : playerList.values()) { @@ -44,7 +45,7 @@ public class Stop implements ICommand { } player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100)); for(Player temp : playerList.values()) { - Functions.setGlow(player, temp, false); + Packet.setGlow(player, temp, false); } } Functions.resetWorldborder(); |