package me.neekzorz.plugins.hideandseek; import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.plugin.java.JavaPlugin; public class HideAndSeek extends JavaPlugin implements Listener { String gameStatus = "Waiting"; private final int playersMax = 24; private final int playersMin = 1; private int playersCur = 0; public static Location lobbySpawn = new Location(Bukkit.getWorld("world"), 11150.0, 4.0, 36.0, 89, 0); public static Location gameSpawn = new Location(Bukkit.getWorld("world"), 1208.0, 4.0, 157.0, 0, 0); private TeamManager tm; private BlockDisguiser bd; public HideAndSeek(TeamManager tm, BlockDisguiser bd) { this.bd = bd; this.tm = tm; } @Override public void onEnable() { getServer().getPluginManager().registerEvents(this, this);Bukkit.getScheduler().runTaskTimer(this, new Runnable() { public void run() { bd.updateBlockDisguise(); } }, 0, 5); } @EventHandler public void onPlayerJoin(final PlayerJoinEvent event) { playersCur ++; int playersNeeded = playersMin - playersCur; if(playersNeeded >= 0) { event.setJoinMessage(ChatColor.DARK_AQUA + "" + ChatColor.AQUA + event.getPlayer().getName() + ChatColor.DARK_AQUA +" has joined. " + ChatColor.AQUA +playersNeeded + ChatColor.DARK_AQUA +" more player(s) needed."); } else { startGame(); } Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { event.getPlayer().teleport(lobbySpawn); } }, (2 * 20)); } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { playersCur --; bd.undisguisePlayer(event.getPlayer()); } @EventHandler public void onDeathEvent(PlayerDeathEvent event) { if(tm.isOnHidden(event.getEntity())) { bd.undisguisePlayer(event.getEntity()); event.setDeathMessage(ChatColor.DARK_AQUA + " " + ChatColor.AQUA +event.getEntity().getName() + ChatColor.DARK_AQUA +" has just been found and killed!"); } else { event.setDeathMessage(""); } } @EventHandler public void onRespawnEvent(PlayerRespawnEvent event) { tm.makeSeeker(event.getPlayer()); } @EventHandler public void onPlayerFound(PlayerInteractEvent event) { if(!tm.isOnHidden(event.getPlayer())) { if(event.getAction().equals(Action.LEFT_CLICK_BLOCK) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { for(String hideName : bd.hideLocation.keySet()) { if(bd.hideLocation.get(hideName).getBlock().getLocation().equals(event.getClickedBlock().getLocation())) { bd.undisguisePlayer(Bukkit.getPlayer(hideName)); } } } } } public void startGame() { if(gameStatus.equals("Waiting")) { gameStatus = "Running"; Bukkit.broadcastMessage(ChatColor.DARK_AQUA + " Enough players have joined, starting the game..."); Random randomGenerator = new Random(); int randomIndex = randomGenerator.nextInt(playersCur); int loopNumber = 0; for(final Player player : Bukkit.getOnlinePlayers()) { if(loopNumber == randomIndex) { tm.makeSeeker(player); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() { public void run() { player.teleport(gameSpawn); player.sendMessage(ChatColor.DARK_AQUA + " You have been teleported into the arena."); } }, (25 * 20)); } else { tm.makeHider(player); } loopNumber ++; } } } }