Merge pull request #7 from tylermurphy534/1.3.0beta6

1.3.0beta6
This commit is contained in:
Tyler Murphy 2021-10-17 22:53:32 -04:00 committed by GitHub
commit 3ad77301c9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 515 additions and 266 deletions

View file

@ -1,7 +1,5 @@
package net.tylermurphy.hideAndSeek; package net.tylermurphy.hideAndSeek;
import static net.tylermurphy.hideAndSeek.Store.*;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
@ -9,7 +7,6 @@ import org.bukkit.Bukkit;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
@ -39,9 +36,6 @@ public class Main extends JavaPlugin implements Listener {
// Setup Initial Player Count // Setup Initial Player Count
getServer().getPluginManager().registerEvents(new EventListener(), this); getServer().getPluginManager().registerEvents(new EventListener(), this);
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
playerList.put(player.getName(), player);
}
// Init Configuration // Init Configuration
Store.loadConfig(); Store.loadConfig();

View file

@ -1,6 +1,6 @@
package net.tylermurphy.hideAndSeek; package net.tylermurphy.hideAndSeek;
import java.util.Arrays; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -16,12 +16,13 @@ import org.bukkit.util.Vector;
public class Store { public class Store {
public static Map<String,Player> public static Map<String,Player>
playerList = new HashMap<String,Player>(); playerList = new HashMap<String,Player>();
public static List<String> public static List<String>
Hider, Hider = new ArrayList<String>(),
Seeker, Seeker = new ArrayList<String>(),
Spectator; Spectator = new ArrayList<String>(),
Deaths = new ArrayList<String>();
public static Scoreboard public static Scoreboard
board; board;
@ -40,26 +41,21 @@ public class Store {
gameoverPrefix, gameoverPrefix,
warningPrefix, warningPrefix,
spawnWorld, spawnWorld,
exitWorld,
lobbyWorld,
status = "Standby"; status = "Standby";
public static Vector public static Vector
spawnPosition, spawnPosition,
lobbyPosition,
exitPosition,
worldborderPosition; worldborderPosition;
public static List<String>
blockedCommands;
public static boolean public static boolean
nametagsVisible, nametagsVisible,
permissionsRequired, permissionsRequired,
unbreakableArmorstands, announceMessagesToNonPlayers,
unbreakablePaintings, lobbyStarted = false,
unbreakableItemframes,
interactableArmorstands,
interactableItemframes,
interactableDoors,
interactableTrapdoors,
interactableFencegate,
worldborderEnabled = false, worldborderEnabled = false,
runningBackup = false; runningBackup = false;
@ -68,7 +64,9 @@ public class Store {
gameId = 0, gameId = 0,
worldborderSize, worldborderSize,
worldborderDelay, worldborderDelay,
currentWorldborderSize; currentWorldborderSize,
gameLength,
timeLeft = 0;
public static FileConfiguration getConfig() { public static FileConfiguration getConfig() {
return Main.plugin.getConfig(); return Main.plugin.getConfig();
@ -83,16 +81,11 @@ public class Store {
Main.plugin.reloadConfig(); Main.plugin.reloadConfig();
//Default //Default
getConfig().addDefault("spawn.x", 0);
getConfig().addDefault("spawn.y", 0);
getConfig().addDefault("spawn.z", 0);
getConfig().addDefault("spawn.world", "world");
getConfig().addDefault("worldBorder.x", 0); getConfig().addDefault("worldBorder.x", 0);
getConfig().addDefault("worldBorder.z", 0); getConfig().addDefault("worldBorder.z", 0);
getConfig().addDefault("worldBorder.delay", 10); getConfig().addDefault("worldBorder.delay", 10);
getConfig().addDefault("worldBorder.size", 500); getConfig().addDefault("worldBorder.size", 500);
getConfig().addDefault("worldBorder.enabled", false); getConfig().addDefault("worldBorder.enabled", false);
getConfig().addDefault("blockedCommands", Arrays.asList("whisper","msg"));
getConfig().addDefault("prefix.default", "&9Hide and Seek > &f"); getConfig().addDefault("prefix.default", "&9Hide and Seek > &f");
getConfig().addDefault("prefix.error", "&cError > &f"); getConfig().addDefault("prefix.error", "&cError > &f");
getConfig().addDefault("prefix.taunt", "&eTaunt > &f"); getConfig().addDefault("prefix.taunt", "&eTaunt > &f");
@ -102,23 +95,46 @@ public class Store {
getConfig().addDefault("prefix.warning", "&cWarning > &f"); getConfig().addDefault("prefix.warning", "&cWarning > &f");
getConfig().addDefault("nametagsVisible", false); getConfig().addDefault("nametagsVisible", false);
getConfig().addDefault("permissionsRequired", true); getConfig().addDefault("permissionsRequired", true);
getConfig().addDefault("blockSettings.unbreakable.painting", false); getConfig().addDefault("announceMessagesToNonPlayers", false);
getConfig().addDefault("blockSettings.unbreakable.armorstand", false); getConfig().addDefault("spawns.lobby.x", 0);
getConfig().addDefault("blockSettings.unbreakable.itemframe", false); getConfig().addDefault("spawns.lobby.y", 0);
getConfig().addDefault("blockSettings.interactable.armorstand", true); getConfig().addDefault("spawns.lobby.z", 0);
getConfig().addDefault("blockSettings.interactable.itemframe", true); getConfig().addDefault("spawns.lobby.world", "world");
getConfig().addDefault("blockSettings.interactable.door", true); getConfig().addDefault("spawns.exit.x", 0);
getConfig().addDefault("blockSettings.interactable.trapdoor", true); getConfig().addDefault("spawns.exit.y", 0);
getConfig().addDefault("blockSettings.interactable.fence", true); getConfig().addDefault("spawns.exit.z", 0);
getConfig().addDefault("spawns.exit.world", "world");
getConfig().addDefault("spawns.game.x", 0);
getConfig().addDefault("spawns.game.y", 0);
getConfig().addDefault("spawns.game.z", 0);
getConfig().addDefault("spawns.game.world", "world");
getConfig().addDefault("minPlayers", 2); getConfig().addDefault("minPlayers", 2);
getConfig().addDefault("gameLength", 600);
//Spawn //Spawn
spawnPosition = new Vector( spawnPosition = new Vector(
getConfig().getDouble("spawn.x"), getConfig().getDouble("spawns.game.x"),
Math.max(0,Math.min(255,getConfig().getDouble("spawn.y"))), Math.max(0,Math.min(255,getConfig().getDouble("spawns.game.y"))),
getConfig().getDouble("spawn.z") getConfig().getDouble("spawns.game.z")
); );
spawnWorld = getConfig().getString("spawn.world"); spawnWorld = getConfig().getString("spawns.game.world");
///Lobby
lobbyPosition = new Vector(
getConfig().getDouble("spawns.lobby.x"),
Math.max(0,Math.min(255,getConfig().getDouble("spawns.lobby.y"))),
getConfig().getDouble("spawns.lobby.z")
);
lobbyWorld = getConfig().getString("spawns.lobby.world");
announceMessagesToNonPlayers = getConfig().getBoolean("announceMessagesToNonPlayers");
exitPosition = new Vector(
getConfig().getDouble("spawns.exit.x"),
Math.max(0,Math.min(255,getConfig().getDouble("spawns.exit.y"))),
getConfig().getDouble("spawns.exit.z")
);
exitWorld = getConfig().getString("spawns.exit.world");
//World border //World border
worldborderPosition = new Vector( worldborderPosition = new Vector(
@ -129,8 +145,6 @@ public class Store {
worldborderSize = Math.max(100,getConfig().getInt("worldBorder.size")); worldborderSize = Math.max(100,getConfig().getInt("worldBorder.size"));
worldborderDelay = Math.max(1,getConfig().getInt("worldBorder.delay")); worldborderDelay = Math.max(1,getConfig().getInt("worldBorder.delay"));
worldborderEnabled = getConfig().getBoolean("worldBorder.enabled"); worldborderEnabled = getConfig().getBoolean("worldBorder.enabled");
blockedCommands = getConfig().getStringList("blockedCommands");
blockedCommands.add("team");
//Prefix //Prefix
char SYMBOLE = '\u00A7'; char SYMBOLE = '\u00A7';
@ -147,15 +161,8 @@ public class Store {
//Other //Other
nametagsVisible = getConfig().getBoolean("nametagsVisible"); nametagsVisible = getConfig().getBoolean("nametagsVisible");
permissionsRequired = getConfig().getBoolean("permissionsRequired"); permissionsRequired = getConfig().getBoolean("permissionsRequired");
unbreakablePaintings = getConfig().getBoolean("blockSettings.unbreakable.painting");
unbreakableArmorstands = getConfig().getBoolean("blockSettings.unbreakable.armorstand");
unbreakableItemframes = getConfig().getBoolean("blockSettings.unbreakable.itemframe");
interactableArmorstands = getConfig().getBoolean("blockSettings.interactable.armorstand");
interactableItemframes = getConfig().getBoolean("blockSettings.interactable.itemframe");
interactableDoors = getConfig().getBoolean("blockSettings.interactable.door");
interactableTrapdoors = getConfig().getBoolean("blockSettings.interactable.trapdoor");
interactableFencegate = getConfig().getBoolean("blockSettings.interactable.fence");
minPlayers = Math.max(2,getConfig().getInt("minPlayers")); minPlayers = Math.max(2,getConfig().getInt("minPlayers"));
gameLength = getConfig().getInt("gameLength");
getConfig().options().copyDefaults(true); getConfig().options().copyDefaults(true);
saveConfig(); saveConfig();

View file

@ -26,12 +26,17 @@ public class CommandHandler {
public static void registerCommands() { public static void registerCommands() {
registerCommand(new About()); registerCommand(new About());
registerCommand(new Help()); registerCommand(new Help());
registerCommand(new Setup());
registerCommand(new Start()); registerCommand(new Start());
registerCommand(new Stop()); registerCommand(new Stop());
registerCommand(new SetSpawnLocation()); registerCommand(new SetSpawnLocation());
registerCommand(new SetLobbyLocation());
registerCommand(new SetExitLocation());
registerCommand(new SetBorder()); registerCommand(new SetBorder());
registerCommand(new Reload()); registerCommand(new Reload());
registerCommand(new SaveMap()); registerCommand(new SaveMap());
registerCommand(new Join());
registerCommand(new Leave());
} }
public static boolean handleCommand(CommandSender sender, Command cmd, String label, String[] args) { public static boolean handleCommand(CommandSender sender, Command cmd, String label, String[] args) {

View file

@ -8,9 +8,7 @@ import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.attribute.Attribute; import org.bukkit.attribute.Attribute;
import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Painting;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball; import org.bukkit.entity.Snowball;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -21,10 +19,6 @@ import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
@ -39,23 +33,33 @@ public class EventListener implements Listener {
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
event.getPlayer().setLevel(0);
if(!Functions.setup()) return;
HiderTeam.removeEntry(event.getPlayer().getName());
SeekerTeam.removeEntry(event.getPlayer().getName());
SpectatorTeam.removeEntry(event.getPlayer().getName());
if(status.equals("Playing") || status.equals("Starting")) { if(status.equals("Playing") || status.equals("Starting")) {
Spectator.add(event.getPlayer().getName()); if(event.getPlayer().getWorld().getName().equals("hideandseek_"+spawnWorld)) {
SpectatorTeam.addEntry(event.getPlayer().getName()); Spectator.add(event.getPlayer().getName());
event.getPlayer().sendMessage(messagePrefix + "You have joined mid game, and thus have been placed on the spectator team."); SpectatorTeam.addEntry(event.getPlayer().getName());
event.getPlayer().setGameMode(GameMode.SPECTATOR); event.getPlayer().sendMessage(messagePrefix + "You have joined mid game, and thus have been placed on the spectator team.");
event.getPlayer().getInventory().clear(); event.getPlayer().setGameMode(GameMode.SPECTATOR);
for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){ event.getPlayer().getInventory().clear();
event.getPlayer().removePotionEffect(effect.getType()); for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){
event.getPlayer().removePotionEffect(effect.getType());
}
event.getPlayer().teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
}
if(event.getPlayer().getWorld().getName().equals(spawnWorld)) {
event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
event.getPlayer().setGameMode(GameMode.ADVENTURE);
} }
event.getPlayer().teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
} else if(status.equals("Setup") || status.equals("Standby")) { } else if(status.equals("Setup") || status.equals("Standby")) {
Hider.add(event.getPlayer().getName()); if(Functions.playerInProtectedWorld(event.getPlayer())){
HiderTeam.addEntry(event.getPlayer().getName()); event.getPlayer().teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
event.getPlayer().setGameMode(GameMode.ADVENTURE); event.getPlayer().setGameMode(GameMode.ADVENTURE);
event.getPlayer().teleport(new Location(Bukkit.getWorld(spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); }
} }
playerList.put(event.getPlayer().getName(), event.getPlayer());
} }
@EventHandler @EventHandler
@ -85,10 +89,22 @@ public class EventListener implements Listener {
@EventHandler @EventHandler
public void onEntityDamage(EntityDamageEvent event) { public void onEntityDamage(EntityDamageEvent event) {
if(event.getEntity() instanceof Player) { if(event.getEntity() instanceof Player) {
Player p = (Player) event.getEntity();
if(!playerList.containsKey(p.getName())) return;
if(!status.equals("Playing")) { if(!status.equals("Playing")) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
Player attacker = null;
if(event instanceof EntityDamageByEntityEvent) {
Entity damager = ((EntityDamageByEntityEvent)event).getDamager();
if(damager instanceof Player) {
attacker = (Player) damager;
if(Hider.contains(attacker.getName()) && Hider.contains(p.getName())) event.setCancelled(true);
if(Seeker.contains(attacker.getName()) && Seeker.contains(p.getName())) event.setCancelled(true);
if(Spectator.contains(attacker.getName())) event.setCancelled(true);
}
}
Player player = (Player) event.getEntity(); Player player = (Player) event.getEntity();
if(player.getHealth()-event.getDamage() < 0) { if(player.getHealth()-event.getDamage() < 0) {
if(spawnPosition == null) return; if(spawnPosition == null) return;
@ -96,138 +112,20 @@ public class EventListener implements Listener {
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ()));
Packet.playSound(player, Sound.ENTITY_PLAYER_DEATH, 1, 1); Packet.playSound(player, Sound.ENTITY_PLAYER_DEATH, 1, 1);
if(Hider.contains(event.getEntity().getName())) {
Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s was found and became a seeker", ChatColor.GOLD, event.getEntity().getName(), ChatColor.WHITE));
}
if(Seeker.contains(event.getEntity().getName())) { if(Seeker.contains(event.getEntity().getName())) {
Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s was killed", ChatColor.RED, event.getEntity().getName(), ChatColor.WHITE)); Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s was killed", ChatColor.RED, event.getEntity().getName(), ChatColor.WHITE));
} }
Seeker.add(player.getName()); if(Hider.contains(event.getEntity().getName())) {
Hider.remove(player.getName()); if(attacker == null) {
SeekerTeam.addEntry(player.getName()); Functions.broadcastMessage(String.format(messagePrefix + "%s%s%s was found and became a seeker", ChatColor.GOLD, event.getEntity().getName(), ChatColor.WHITE));
} else {
Functions.broadcastMessage(String.format(messagePrefix + "%s%s%s was found by %s%s%s and became a seeker", ChatColor.GOLD, event.getEntity().getName(), ChatColor.WHITE, ChatColor.RED, attacker.getName(), ChatColor.WHITE));
}
Hider.remove(player.getName());
Seeker.add(player.getName());
SeekerTeam.addEntry(player.getName());
}
Functions.resetPlayer(player); Functions.resetPlayer(player);
for(Player temp : playerList.values()) {
Packet.setGlow(player, temp, false);
}
}
}
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if(event.getEntity() instanceof ArmorStand) {
if(unbreakableArmorstands) {
if(event.getDamager() instanceof Player) {
Player player = (Player) event.getDamager();
if(status.equals("Playing") || status.equals("Starting") || !player.hasPermission("hideandseek.blockbypass")) {
System.out.println('t');
event.setCancelled(true);
}
} else {
event.setCancelled(true);
}
}
}
}
@EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
if(!interactableArmorstands) {
if(event.getRightClicked() instanceof ArmorStand) {
if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) {
event.setCancelled(true);
}
}
}
if(!interactableItemframes) {
if(event.getRightClicked() instanceof ItemFrame) {
if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) {
event.setCancelled(true);
}
}
}
}
@EventHandler
public void onPlayerInteractBlock(PlayerInteractEvent event) {
if(!interactableDoors) {
if(
event.getClickedBlock().getType() == Material.ACACIA_DOOR ||
event.getClickedBlock().getType() == Material.BIRCH_DOOR ||
event.getClickedBlock().getType() == Material.CRIMSON_DOOR ||
event.getClickedBlock().getType() == Material.DARK_OAK_DOOR ||
event.getClickedBlock().getType() == Material.IRON_DOOR ||
event.getClickedBlock().getType() == Material.JUNGLE_DOOR ||
event.getClickedBlock().getType() == Material.OAK_DOOR ||
event.getClickedBlock().getType() == Material.SPRUCE_DOOR ||
event.getClickedBlock().getType() == Material.WARPED_DOOR
) {
if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) {
event.setCancelled(true);
}
}
}
if(!interactableTrapdoors) {
if(
event.getClickedBlock().getType() == Material.ACACIA_TRAPDOOR ||
event.getClickedBlock().getType() == Material.BIRCH_TRAPDOOR ||
event.getClickedBlock().getType() == Material.CRIMSON_TRAPDOOR ||
event.getClickedBlock().getType() == Material.DARK_OAK_TRAPDOOR ||
event.getClickedBlock().getType() == Material.IRON_TRAPDOOR ||
event.getClickedBlock().getType() == Material.JUNGLE_TRAPDOOR ||
event.getClickedBlock().getType() == Material.OAK_TRAPDOOR ||
event.getClickedBlock().getType() == Material.SPRUCE_TRAPDOOR ||
event.getClickedBlock().getType() == Material.WARPED_TRAPDOOR
) {
if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) {
event.setCancelled(true);
}
}
}
if(!interactableFencegate) {
if(
event.getClickedBlock().getType() == Material.ACACIA_FENCE_GATE ||
event.getClickedBlock().getType() == Material.BIRCH_FENCE_GATE ||
event.getClickedBlock().getType() == Material.CRIMSON_FENCE_GATE ||
event.getClickedBlock().getType() == Material.DARK_OAK_FENCE_GATE ||
event.getClickedBlock().getType() == Material.JUNGLE_FENCE_GATE ||
event.getClickedBlock().getType() == Material.OAK_FENCE_GATE ||
event.getClickedBlock().getType() == Material.SPRUCE_FENCE_GATE ||
event.getClickedBlock().getType() == Material.WARPED_FENCE_GATE
) {
if(status.equals("Playing") || status.equals("Starting") || !event.getPlayer().hasPermission("hideandseek.blockbypass")) {
event.setCancelled(true);
}
}
}
}
@EventHandler
public void onHangingBreakByEntity(HangingBreakByEntityEvent event) {
if(event.getEntity() instanceof ItemFrame) {
if(unbreakableItemframes) {
if(event.getRemover() instanceof Player) {
Player player = (Player) event.getRemover();
if(status.equals("Playing") || status.equals("Starting") || !player.hasPermission("hideandseek.blockbypass")) {
event.setCancelled(true);
}
} else {
event.setCancelled(true);
}
}
}
if(event.getEntity() instanceof Painting) {
if(unbreakableArmorstands) {
if(event.getRemover() instanceof Player) {
Player player = (Player) event.getRemover();
if(status.equals("Playing") || status.equals("Starting") || !player.hasPermission("hideandseek.blockbypass")) {
event.setCancelled(true);
}
} else {
event.setCancelled(true);
}
} }
} }
} }
@ -238,6 +136,7 @@ public class EventListener implements Listener {
if(event.getEntity() instanceof Snowball) { if(event.getEntity() instanceof Snowball) {
Snowball snowball = (Snowball) event.getEntity(); Snowball snowball = (Snowball) event.getEntity();
if(snowball.getShooter() instanceof Player) { if(snowball.getShooter() instanceof Player) {
if(!Functions.playerInProtectedWorld((Player) snowball.getShooter())) return;
Player player = (Player) snowball.getShooter(); Player player = (Player) snowball.getShooter();
if(Hider.contains(player.getName())) { if(Hider.contains(player.getName())) {
Main.glow.onProjectilve(); Main.glow.onProjectilve();
@ -250,25 +149,19 @@ public class EventListener implements Listener {
@EventHandler @EventHandler
public void onFoodLevelChange(FoodLevelChangeEvent event) { public void onFoodLevelChange(FoodLevelChangeEvent event) {
event.setCancelled(true); if(event.getEntity() instanceof Player) {
if(!playerList.containsKey(event.getEntity().getName())) return;
event.setCancelled(true);
}
} }
@EventHandler @EventHandler
public void onPlayerRegainHealth(EntityRegainHealthEvent event) { public void onPlayerRegainHealth(EntityRegainHealthEvent event) {
if(event.getRegainReason() == RegainReason.SATIATED || event.getRegainReason() == RegainReason.REGEN) if(event.getRegainReason() == RegainReason.SATIATED || event.getRegainReason() == RegainReason.REGEN) {
event.setCancelled(true); if(event.getEntity() instanceof Player) {
if(!playerList.containsKey(event.getEntity().getName())) return;
event.setCancelled(true);
}
}
} }
@EventHandler
public void onPlayerCommandPreProccess(PlayerCommandPreprocessEvent event) {
if(status.equals("Setup") || status.equals("Standby")) return;
String handle = event.getMessage().split(" ")[0].substring(1);
for(String blocked : blockedCommands) {
if(handle.equalsIgnoreCase(blocked) || handle.equalsIgnoreCase("minecraft:"+blocked)) {
event.setCancelled(true);
event.getPlayer().sendMessage(errorPrefix + "This command is blocked during gameplay!");
break;
}
}
}
} }

View file

@ -2,9 +2,7 @@ package net.tylermurphy.hideAndSeek.bukkit;
import static net.tylermurphy.hideAndSeek.Store.*; import static net.tylermurphy.hideAndSeek.Store.*;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -22,34 +20,31 @@ public class Tick {
Functions.loadScoreboard(); Functions.loadScoreboard();
} }
if(status.equals("Starting")) { if(status.equals("Standby")) {
onStarting(); tick = 0;
} else if(status.equals("Playing")) { }
if(status.equals("Playing")) {
onPlaying(); onPlaying();
} }
tick ++;
if(( status.equals("Starting") || status.equals("Playing") ) && Hider.size() < 1) { if(( status.equals("Starting") || status.equals("Playing") ) && Hider.size() < 1) {
Bukkit.broadcastMessage(gameoverPrefix + "All hiders have been found."); if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + "All hiders have been found.");
else Functions.broadcastMessage(gameoverPrefix + "All hiders have been found.");
Stop.onStop(); Stop.onStop();
} }
if(( status.equals("Starting") || status.equals("Playing") ) && Seeker.size() < 1) { if(( status.equals("Starting") || status.equals("Playing") ) && Seeker.size() < 1) {
Bukkit.broadcastMessage(abortPrefix + "All seekers have quit."); if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(abortPrefix + "All seekers have quit.");
else Functions.broadcastMessage(abortPrefix + "All seekers have quit.");
Stop.onStop(); Stop.onStop();
} }
}
private static void onStarting() {
for(String playerName : Seeker) {
Player player = playerList.get(playerName);
if(player != null) {
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
}
}
} }
private static void onPlaying() { private static void onPlaying() {
tick ++;
for(String playerName : Hider) { for(String playerName : Hider) {
Player player = playerList.get(playerName); Player player = playerList.get(playerName);
int distance = 100; int distance = 100;
@ -76,6 +71,21 @@ public class Tick {
if(distance < 20) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); if(distance < 20) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f);
break; break;
} }
}
if(tick%20 == 0) {
if(gameLength > 0) {
timeLeft--;
for(Player player : playerList.values()) {
player.setLevel(timeLeft);
}
if(timeLeft < 1) {
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(gameoverPrefix + "Seekers ran out of time. Hiders win!");
else Functions.broadcastMessage(gameoverPrefix + "Seekers ran out of time. Hiders win!");
Stop.onStop();
}
}
} }
} }
} }

View file

@ -0,0 +1,63 @@
package net.tylermurphy.hideAndSeek.command;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.attribute.Attribute;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import net.tylermurphy.hideAndSeek.util.Functions;
import net.tylermurphy.hideAndSeek.util.ICommand;
import static net.tylermurphy.hideAndSeek.Store.*;
public class Join implements ICommand {
public void execute(CommandSender sender, String[] args) {
if(!Functions.setup()) {
sender.sendMessage(errorPrefix + "Game is not setup. Run /hs setup to see what you needed to do");
return;
}
Player player = Bukkit.getServer().getPlayer(sender.getName());
if(player == null) {
sender.sendMessage(errorPrefix + "An internal error has occured");
return;
}
if(playerList.containsKey(player.getName())){
sender.sendMessage(errorPrefix + "You are already in the lobby/game");
return;
}
playerList.put(player.getName(), player);
if(status.equals("Standby")) {
Hider.add(player.getName());
HiderTeam.addEntry(player.getName());
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + sender.getName() + " has joined the HideAndSeek lobby");
else Functions.broadcastMessage(messagePrefix + sender.getName() + " has joined the HideAndSeek lobby");
player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
player.setGameMode(GameMode.ADVENTURE);
} else {
Spectator.add(player.getName());
SpectatorTeam.addEntry(player.getName());
player.sendMessage(messagePrefix + "You have joined mid game and became a spectator");
player.setGameMode(GameMode.SPECTATOR);
player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ()));
}
player.setFoodLevel(20);
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue());
}
public String getLabel() {
return "join";
}
public String getUsage() {
return "";
}
public String getDescription() {
return "Joins the lobby if game is set to manual join/leave";
}
}

View file

@ -0,0 +1,53 @@
package net.tylermurphy.hideAndSeek.command;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import net.tylermurphy.hideAndSeek.util.Functions;
import net.tylermurphy.hideAndSeek.util.ICommand;
import static net.tylermurphy.hideAndSeek.Store.*;
public class Leave implements ICommand {
public void execute(CommandSender sender, String[] args) {
if(!Functions.setup()) {
sender.sendMessage(errorPrefix + "Game is not setup. Run /hs setup to see what you needed to do");
return;
}
Player player = Bukkit.getServer().getPlayer(sender.getName());
if(player == null) {
sender.sendMessage(errorPrefix + "An internal error has occured");
return;
}
if(!playerList.containsKey(player.getName())) {
sender.sendMessage(errorPrefix + "You are currently not in the lobby");
return;
}
if(!Seeker.contains(player.getName())) {
if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + sender.getName() + " has left the HideAndSeek lobby");
else Functions.broadcastMessage(messagePrefix + sender.getName() + " has left the HideAndSeek lobby");
}
playerList.remove(player.getName());
Hider.remove(player.getName());
Seeker.remove(player.getName());
HiderTeam.removeEntry(player.getName());
SeekerTeam.removeEntry(player.getName());
player.teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ()));
}
public String getLabel() {
return "leave";
}
public String getUsage() {
return "";
}
public String getDescription() {
return "Leaves the lobby if game is set to manual join/leave";
}
}

View file

@ -1,6 +1,7 @@
package net.tylermurphy.hideAndSeek.command; package net.tylermurphy.hideAndSeek.command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import net.tylermurphy.hideAndSeek.Store; import net.tylermurphy.hideAndSeek.Store;
import net.tylermurphy.hideAndSeek.util.Functions; import net.tylermurphy.hideAndSeek.util.Functions;
@ -8,14 +9,21 @@ import net.tylermurphy.hideAndSeek.util.ICommand;
import static net.tylermurphy.hideAndSeek.Store.*; import static net.tylermurphy.hideAndSeek.Store.*;
import java.util.HashMap;
public class Reload implements ICommand { public class Reload implements ICommand {
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
if(!status.equals("Standby")) {
sender.sendMessage(errorPrefix + "Game is currently in session");
return;
}
Store.loadConfig(); Store.loadConfig();
try { try {
Functions.loadScoreboard(); Functions.loadScoreboard();
} catch(Exception e) {} } catch(Exception e) {}
sender.sendMessage(messagePrefix + "Reloaded the config"); sender.sendMessage(messagePrefix + "Reloaded the config");
playerList = new HashMap<String,Player>();
} }
public String getLabel() { public String getLabel() {

View file

@ -21,6 +21,10 @@ import net.tylermurphy.hideAndSeek.util.ICommand;
public class SaveMap implements ICommand { public class SaveMap implements ICommand {
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
if(!status.equals("Standby")) {
sender.sendMessage(errorPrefix + "Game is currently in session");
return;
}
if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) { if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) {
sender.sendMessage(errorPrefix + "Please set spawn location first"); sender.sendMessage(errorPrefix + "Please set spawn location first");
return; return;

View file

@ -0,0 +1,49 @@
package net.tylermurphy.hideAndSeek.command;
import static net.tylermurphy.hideAndSeek.Store.*;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import net.tylermurphy.hideAndSeek.util.ICommand;
public class SetExitLocation implements ICommand {
public void execute(CommandSender sender, String[] args) {
Vector newExitPosition = new Vector();
Player player = (Player) sender;
newExitPosition.setX(player.getLocation().getBlockX());
newExitPosition.setY(player.getLocation().getBlockY());
newExitPosition.setZ(player.getLocation().getBlockZ());
if(!status.equals("Standby")) {
sender.sendMessage(errorPrefix + "Game is currently in session");
return;
}
exitPosition = newExitPosition;
sender.sendMessage(messagePrefix + "Set exit position to current location");
Map<String, Object> temp = new HashMap<String,Object>();
temp.put("x", exitPosition.getX());
temp.put("y", exitPosition.getY());
temp.put("z", exitPosition.getZ());
temp.put("world", player.getLocation().getWorld().getName());
addToSection("spawns.exit",temp);
saveConfig();
}
public String getLabel() {
return "setexit";
}
public String getUsage() {
return "";
}
public String getDescription() {
return "Sets hide and seeks exit location to current position and world";
}
}

View file

@ -0,0 +1,49 @@
package net.tylermurphy.hideAndSeek.command;
import static net.tylermurphy.hideAndSeek.Store.*;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import net.tylermurphy.hideAndSeek.util.ICommand;
public class SetLobbyLocation implements ICommand {
public void execute(CommandSender sender, String[] args) {
Vector newLobbyPosition = new Vector();
Player player = (Player) sender;
newLobbyPosition.setX(player.getLocation().getBlockX());
newLobbyPosition.setY(player.getLocation().getBlockY());
newLobbyPosition.setZ(player.getLocation().getBlockZ());
if(!status.equals("Standby")) {
sender.sendMessage(errorPrefix + "Game is currently in session");
return;
}
lobbyPosition = newLobbyPosition;
sender.sendMessage(messagePrefix + "Set lobby position to current location");
Map<String, Object> temp = new HashMap<String,Object>();
temp.put("x", lobbyPosition.getX());
temp.put("y", lobbyPosition.getY());
temp.put("z", lobbyPosition.getZ());
temp.put("world", player.getLocation().getWorld().getName());
addToSection("spawns.lobby",temp);
saveConfig();
}
public String getLabel() {
return "setlobby";
}
public String getUsage() {
return "";
}
public String getDescription() {
return "Sets hide and seeks lobby location to current position";
}
}

View file

@ -34,7 +34,7 @@ public class SetSpawnLocation implements ICommand {
temp.put("y", spawnPosition.getY()); temp.put("y", spawnPosition.getY());
temp.put("z", spawnPosition.getZ()); temp.put("z", spawnPosition.getZ());
temp.put("world", player.getLocation().getWorld().getName()); temp.put("world", player.getLocation().getWorld().getName());
addToSection("spawn",temp); addToSection("spawns.game",temp);
saveConfig(); saveConfig();
} }

View file

@ -0,0 +1,57 @@
package net.tylermurphy.hideAndSeek.command;
import org.bukkit.command.CommandSender;
import net.md_5.bungee.api.ChatColor;
import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.util.ICommand;
import static net.tylermurphy.hideAndSeek.Store.*;
import java.io.File;
public class Setup implements ICommand {
public void execute(CommandSender sender, String[] args) {
String message = String.format("%s%sThe following is needed for setup...", ChatColor.WHITE, ChatColor.BOLD);
int count = 0;
if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) {
message = String.format("%s\n%s%s-%s%s", message, ChatColor.RED, ChatColor.BOLD, ChatColor.WHITE, "Game spawn isnt set, /hs setspawn");
count++;
}
if(lobbyPosition.getBlockX() == 0 && lobbyPosition.getBlockY() == 0 && lobbyPosition.getBlockZ() == 0) {
message = String.format("%s\n%s%s-%s%s", message, ChatColor.RED, ChatColor.BOLD, ChatColor.WHITE, "Lobby spawn isnt set, /hs setlobby");
sender.sendMessage(errorPrefix + "Please set lobby location first");
count++;
}
if(exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) {
message = String.format("%s\n%s%s-%s%s", message, ChatColor.RED, ChatColor.BOLD, ChatColor.WHITE, "Quit/exit teleport location isnt set, /hs setexit");
count++;
}
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
if(!destenation.exists()) {
message = String.format("%s\n%s%s-%s%s", message, ChatColor.RED, ChatColor.BOLD, ChatColor.WHITE, "Hide and seek map isnt saved, /hs savemap (after /hs setspawn)");
count++;
}
if(count < 1) {
sender.sendMessage(messagePrefix + "Everything is setup and ready to go!");
} else {
sender.sendMessage(message);
}
}
public String getLabel() {
return "setup";
}
public String getUsage() {
return "";
}
public String getDescription() {
return "Shows what needs to be setup";
}
}

View file

@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import net.md_5.bungee.api.ChatColor;
import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.events.Glow; import net.tylermurphy.hideAndSeek.events.Glow;
import net.tylermurphy.hideAndSeek.events.Taunt; import net.tylermurphy.hideAndSeek.events.Taunt;
@ -17,36 +18,33 @@ import net.tylermurphy.hideAndSeek.util.ICommand;
import static net.tylermurphy.hideAndSeek.Store.*; import static net.tylermurphy.hideAndSeek.Store.*;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Random; import java.util.Random;
public class Start implements ICommand { public class Start implements ICommand {
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
if(!Functions.setup()) {
sender.sendMessage(errorPrefix + "Game is not setup. Run /hs setup to see what you needed to do");
return;
}
if(!status.equals("Standby")) { if(!status.equals("Standby")) {
sender.sendMessage(errorPrefix + "Game is already in session"); sender.sendMessage(errorPrefix + "Game is already in session");
return; return;
} }
if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) { if(!playerList.containsKey(sender.getName())) {
sender.sendMessage(errorPrefix + "Please set spawn location first"); sender.sendMessage(errorPrefix + "You are not in the lobby");
return; return;
} }
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) { if(playerList.size() < minPlayers) {
sender.sendMessage(errorPrefix + "You must have at least "+minPlayers+" players to start"); sender.sendMessage(errorPrefix + "You must have at least "+minPlayers+" players to start");
return; return;
} }
if(Bukkit.getServer().getWorld("hideandseek_"+spawnWorld) != null) {
Functions.rollback("hideandseek_"+spawnWorld);
} else {
Functions.loadMap("hideandseek_"+spawnWorld);
}
String seekerName; String seekerName;
if(args.length < 1) { if(args.length < 1) {
seekerName = playerList.values().stream().skip(new Random().nextInt(playerList.values().size())).findFirst().get().getName(); seekerName = playerList.values().stream().skip(new Random().nextInt(playerList.values().size())).findFirst().get().getName();
@ -61,6 +59,7 @@ public class Start implements ICommand {
Hider = new ArrayList<String>(); Hider = new ArrayList<String>();
Seeker = new ArrayList<String>(); Seeker = new ArrayList<String>();
Spectator = new ArrayList<String>(); Spectator = new ArrayList<String>();
Deaths = new ArrayList<String>();
for(Player temp : playerList.values()) { for(Player temp : playerList.values()) {
if(temp.getName().equals(seeker.getName())) if(temp.getName().equals(seeker.getName()))
continue; continue;
@ -69,7 +68,7 @@ public class Start implements ICommand {
} }
Seeker.add(seeker.getName()); Seeker.add(seeker.getName());
SeekerTeam.addEntry(seeker.getName()); SeekerTeam.addEntry(seeker.getName());
currentWorldborderSize = worldborderSize;
for(Player player : playerList.values()) { for(Player player : playerList.values()) {
player.getInventory().clear(); player.getInventory().clear();
player.setGameMode(GameMode.ADVENTURE); player.setGameMode(GameMode.ADVENTURE);
@ -83,65 +82,67 @@ public class Start implements ICommand {
if(player != null) { if(player != null) {
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS,1000000,127,false,false)); 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.SLOW,1000000,127,false,false));
player.sendTitle(ChatColor.RED + "" + ChatColor.BOLD + "SEEKER", ChatColor.WHITE + "Eliminate all hiders", 10, 70, 20);
} }
} }
for(String playerName : Hider) { for(String playerName : Hider) {
Player player = playerList.get(playerName); Player player = playerList.get(playerName);
if(player != null) { if(player != null) {
player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false)); player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false));
player.sendTitle(ChatColor.GOLD + "" + ChatColor.BOLD + "HIDER", ChatColor.WHITE + "Hide away from the seekers", 10, 70, 20);
} }
} }
Functions.resetWorldborder("hideandseek_"+spawnWorld); Functions.resetWorldborder("hideandseek_"+spawnWorld);
status = "Starting"; status = "Starting";
int temp = gameId; int temp = gameId;
Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 30 seconds to hide!"); Functions.broadcastMessage(messagePrefix + "Hiders have 30 seconds to hide!");
Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() {
public void run() { public void run() {
if(temp != gameId) return; if(temp != gameId) return;
Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 20 seconds to hide!"); Functions.broadcastMessage(messagePrefix + "Hiders have 20 seconds to hide!");
} }
}, 20 * 10); }, 20 * 10);
Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() {
public void run() { public void run() {
if(temp != gameId) return; if(temp != gameId) return;
Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 10 seconds to hide!"); Functions.broadcastMessage(messagePrefix + "Hiders have 10 seconds to hide!");
} }
}, 20 * 20); }, 20 * 20);
Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() {
public void run() { public void run() {
if(temp != gameId) return; if(temp != gameId) return;
Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 5 seconds to hide!"); Functions.broadcastMessage(messagePrefix + "Hiders have 5 seconds to hide!");
} }
}, 20 * 25); }, 20 * 25);
Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() {
public void run() { public void run() {
if(temp != gameId) return; if(temp != gameId) return;
Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 3 seconds to hide!"); Functions.broadcastMessage(messagePrefix + "Hiders have 3 seconds to hide!");
} }
}, 20 * 27); }, 20 * 27);
Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() {
public void run() { public void run() {
if(temp != gameId) return; if(temp != gameId) return;
Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 2 seconds to hide!"); Functions.broadcastMessage(messagePrefix + "Hiders have 2 seconds to hide!");
} }
}, 20 * 28); }, 20 * 28);
Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() {
public void run() { public void run() {
if(temp != gameId) return; if(temp != gameId) return;
Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 1 seconds to hide!"); Functions.broadcastMessage(messagePrefix + "Hiders have 1 seconds to hide!");
} }
}, 20 * 29); }, 20 * 29);
Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() {
public void run() { public void run() {
if(temp != gameId) return; if(temp != gameId) return;
Bukkit.getServer().broadcastMessage(messagePrefix + "Attetion SEEKERS, its time to find the hiders!"); Functions.broadcastMessage(messagePrefix + "Attetion SEEKERS, its time to find the hiders!");
status = "Playing"; status = "Playing";
for(Player player : playerList.values()) { for(Player player : playerList.values()) {
Functions.resetPlayer(player); Functions.resetPlayer(player);
@ -159,6 +160,13 @@ public class Start implements ICommand {
Main.taunt.schedule(); Main.taunt.schedule();
Main.glow = new Glow(gameId); Main.glow = new Glow(gameId);
if(gameLength > 0) {
timeLeft = gameLength;
for(Player player : playerList.values()) {
player.setLevel(timeLeft);
}
}
} }
}, 20 * 30); }, 20 * 30);

View file

@ -17,8 +17,13 @@ import net.tylermurphy.hideAndSeek.util.Packet;
public class Stop implements ICommand { public class Stop implements ICommand {
public void execute(CommandSender sender, String[] args) { public void execute(CommandSender sender, String[] args) {
if(!Functions.setup()) {
sender.sendMessage(errorPrefix + "Game is not setup. Run /hs setup to see what you needed to do");
return;
}
if(status.equals("Starting") || status.equals("Playing")) { if(status.equals("Starting") || status.equals("Playing")) {
Bukkit.broadcastMessage(abortPrefix + "Game has been force stopped."); if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(abortPrefix + "Game has been force stopped.");
else Functions.broadcastMessage(abortPrefix + "Game has been force stopped.");
onStop(); onStop();
} else { } else {
@ -38,10 +43,11 @@ public class Stop implements ICommand {
Functions.resetWorldborder("hideandseek_"+spawnWorld); Functions.resetWorldborder("hideandseek_"+spawnWorld);
for(Player player : playerList.values()) { for(Player player : playerList.values()) {
player.setGameMode(GameMode.ADVENTURE); player.setGameMode(GameMode.ADVENTURE);
player.setLevel(0);
Hider.add(player.getName()); Hider.add(player.getName());
HiderTeam.addEntry(player.getName()); HiderTeam.addEntry(player.getName());
player.getInventory().clear(); player.getInventory().clear();
player.teleport(new Location(Bukkit.getWorld(spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ()));
for(PotionEffect effect : player.getActivePotionEffects()){ for(PotionEffect effect : player.getActivePotionEffects()){
player.removePotionEffect(effect.getType()); player.removePotionEffect(effect.getType());
} }
@ -50,6 +56,7 @@ public class Stop implements ICommand {
Packet.setGlow(player, temp, false); Packet.setGlow(player, temp, false);
} }
} }
Functions.unloadMap("hideandseek_"+spawnWorld);
} }
public String getUsage() { public String getUsage() {

View file

@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.meta.FireworkMeta; import org.bukkit.inventory.meta.FireworkMeta;
import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.util.Functions;
public class Taunt { public class Taunt {
@ -65,7 +66,7 @@ public class Taunt {
} }
if(taunted != null) { if(taunted != null) {
taunted.sendMessage(ChatColor.RED + "" + ChatColor.ITALIC + "Oh no! You have been chosed to be taunted."); 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"); Functions.broadcastMessage(tauntPrefix + " A random hider will be taunted in the next 30s");
tauntPlayer = taunted.getName(); tauntPlayer = taunted.getName();
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() {
public void run() { public void run() {
@ -86,7 +87,7 @@ public class Taunt {
.withTrail() .withTrail()
.build()); .build());
fw.setFireworkMeta(fwm); fw.setFireworkMeta(fwm);
Bukkit.getServer().broadcastMessage(tauntPrefix + " Taunt has been activated"); Functions.broadcastMessage(tauntPrefix + " Taunt has been activated");
} }
tauntPlayer = ""; tauntPlayer = "";
waitTaunt(); waitTaunt();

View file

@ -5,6 +5,7 @@ import org.bukkit.World;
import org.bukkit.WorldBorder; import org.bukkit.WorldBorder;
import net.tylermurphy.hideAndSeek.Main; import net.tylermurphy.hideAndSeek.Main;
import net.tylermurphy.hideAndSeek.util.Functions;
import static net.tylermurphy.hideAndSeek.Store.*; import static net.tylermurphy.hideAndSeek.Store.*;
@ -27,7 +28,7 @@ public class Worldborder {
private void decreaceWorldborder() { private void decreaceWorldborder() {
if(temp != gameId) return; if(temp != gameId) return;
if(currentWorldborderSize-100 > 100) { if(currentWorldborderSize-100 > 100) {
Bukkit.getServer().broadcastMessage(worldborderPrefix + "Worldborder decreacing by 100 blocks over the next 30s"); Functions.broadcastMessage(worldborderPrefix + "Worldborder decreacing by 100 blocks over the next 30s");
currentWorldborderSize -= 100; currentWorldborderSize -= 100;
World world = Bukkit.getWorld("hideandseek_"+spawnWorld); World world = Bukkit.getWorld("hideandseek_"+spawnWorld);
WorldBorder border = world.getWorldBorder(); WorldBorder border = world.getWorldBorder();

View file

@ -2,6 +2,7 @@ package net.tylermurphy.hideAndSeek.util;
import static net.tylermurphy.hideAndSeek.Store.*; import static net.tylermurphy.hideAndSeek.Store.*;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -137,7 +138,6 @@ public class Functions {
SeekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OTHER_TEAMS); SeekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OTHER_TEAMS);
else else
SeekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); SeekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER);
SeekerTeam.setAllowFriendlyFire(false);
try { mainBoard.registerNewTeam("Hider");} catch(Exception e) {} try { mainBoard.registerNewTeam("Hider");} catch(Exception e) {}
HiderTeam = mainBoard.getTeam("Hider"); HiderTeam = mainBoard.getTeam("Hider");
@ -146,15 +146,43 @@ public class Functions {
HiderTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OWN_TEAM); HiderTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OWN_TEAM);
else else
HiderTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); HiderTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER);
HiderTeam.setAllowFriendlyFire(false);
try { mainBoard.registerNewTeam("Spectator");} catch(Exception e) {} try { mainBoard.registerNewTeam("Spectator");} catch(Exception e) {}
SpectatorTeam = mainBoard.getTeam("Spectator"); SpectatorTeam = mainBoard.getTeam("Spectator");
SpectatorTeam.setColor(ChatColor.GRAY); SpectatorTeam.setColor(ChatColor.GRAY);
SpectatorTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); SpectatorTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER);
SpectatorTeam.setAllowFriendlyFire(false);
board = mainBoard; board = mainBoard;
} }
public static boolean playerInProtectedWorld(Player p) {
return p.getWorld().getName().equals("hideandseek_"+spawnWorld) || p.getWorld().getName().equals(spawnWorld);
}
public static void broadcastMessage(String message) {
for(Player player : playerList.values()) {
player.sendMessage(message);
}
}
public static boolean setup() {
if(spawnPosition.getBlockX() == 0 && spawnPosition.getBlockY() == 0 && spawnPosition.getBlockZ() == 0) {
return false;
}
if(lobbyPosition.getBlockX() == 0 && lobbyPosition.getBlockY() == 0 && lobbyPosition.getBlockZ() == 0) {
return false;
}
if(exitPosition.getBlockX() == 0 && exitPosition.getBlockY() == 0 && exitPosition.getBlockZ() == 0) {
return false;
}
File destenation = new File(Main.root+File.separator+"hideandseek_"+spawnWorld);
if(!destenation.exists()) {
return false;
}
return true;
}
} }

View file

@ -19,10 +19,13 @@ permissions:
hideandseek.reload: true hideandseek.reload: true
hideandseek.setborder: true hideandseek.setborder: true
hideandseek.setspawn: true hideandseek.setspawn: true
hideandseek.setlobby: true
hideandseek.start: true hideandseek.start: true
hideandseek.stop: true hideandseek.stop: true
hideandseek.savemap: true hideandseek.savemap: true
hideandseek.blockbypass: true hideandseek.blockbypass: true
hideandseek.join: true
hideandseek.leave: true
hideandseek.about: hideandseek.about:
description: Allows you to run the about command description: Allows you to run the about command
default: true default: true
@ -38,6 +41,9 @@ permissions:
hideandseek.setspawn: hideandseek.setspawn:
description: Allows you to set the game spawn point description: Allows you to set the game spawn point
default: op default: op
hideandseek.setlobby:
description: Allows you to set the game lobby point
default: op
hideandseek.start: hideandseek.start:
description: Allows you to start the game description: Allows you to start the game
default: op default: op
@ -50,3 +56,9 @@ permissions:
hideandseek.blockbypass: hideandseek.blockbypass:
description: Allows you to bypass the block break prevention description: Allows you to bypass the block break prevention
default: op default: op
hideandseek.join:
description: Allows you to join the game manual lobby
default: true
hideandseek.leave:
description: Allows you to leave the game manual lobby
default: true