package com.leontg77.uhc;
import java.util.HashMap;
import java.util.HashSet;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
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.player.PlayerInteractEvent;
import org.bukkit.scheduler.BukkitRunnable;
import com.leontg77.uhc.utils.DateUtils;
import com.leontg77.uhc.utils.PlayerUtils;
/**
* The parkour class.
*
* @author LeonTG77
*/
public class Parkour implements Listener {
private static Parkour manager = new Parkour();
public BukkitRunnable task;
private Location spawn = new Location(Bukkit.getWorld("lobby"), 29.5, 34, 0.5, -90, 0);
private Location point1 = new Location(Bukkit.getWorld("lobby"), 90.5, 36, 2.5, -90, 0);
private Location point2 = new Location(Bukkit.getWorld("lobby"), 134.5, 41, 12.5, 0, 0);
private Location point3 = new Location(Bukkit.getWorld("lobby"), 102.5, 54, 17.5, -180, 0);
private HashSet<Player> players = new HashSet<Player>();
private HashMap<Player, Integer> checkpoint = new HashMap<Player, Integer>();
private HashMap<Player, Integer> time = new HashMap<Player, Integer>();
/**
* Gets the instance of this class
*
* @return The instance.
*/
public static Parkour getInstance() {
return manager;
}
/**
* Set up the parkour system.
*/
public void setup() {
Bukkit.getServer().getPluginManager().registerEvents(this, Main.plugin);
task = new BukkitRunnable() {
public void run() {
for (Player parkourers : time.keySet()) {
time.put(parkourers, time.get(parkourers) + 1);
}
}
};
task.runTaskTimer(Main.plugin, 20, 20);
}
/**
* Reset the parkour data.
*/
public void reset() {
checkpoint.clear();
players.clear();
time.clear();
}
public Location getLocation(int checkpoint) {
if (checkpoint == 1) {
return point1;
}
else if (checkpoint == 2) {
return point2;
}
else if (checkpoint == 3) {
return point3;
}
else {
return spawn;
}
}
public boolean isParkouring(Player player) {
return players.contains(player);
}
public Integer getCheckpoint(Player player) {
return checkpoint.get(player);
}
public Integer getTime(Player player) {
return time.get(player);
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getAction() != Action.PHYSICAL) {
return;
}
Player player = event.getPlayer();
Entity point = PlayerUtils.getNearby(player.getLocation(), 2).get(0);
if (point instanceof ArmorStand) {
if (((ArmorStand) point).getCustomName() == null) {
return;
}
if (((ArmorStand) point).getCustomName().contains("Start")) {
if (players.contains(player)) {
player.sendMessage(Main.PREFIX + "The timer has been reset to �a0s�7.");
player.playSound(player.getLocation(), "random.pop", 1, 1);
time.put(player, 0);
return;
}
player.sendMessage(Main.PREFIX + "Parkour started.");
player.playSound(player.getLocation(), "random.pop", 1, 1);
players.add(player);
checkpoint.put(player, 0);
time.put(player, 0);
}
if (!players.contains(player)) {
return;
}
if (((ArmorStand) point).getCustomName().contains("#1")) {
if (checkpoint.containsKey(player) && checkpoint.get(player) == 1) {
return;
}
player.sendMessage(Main.PREFIX + "You reached checkpoint �c1�7.");
player.playSound(player.getLocation(), "random.pop", 1, 1);
players.add(player);
checkpoint.put(player, 1);
}
if (((ArmorStand) point).getCustomName().contains("#2")) {
if (checkpoint.containsKey(player) && checkpoint.get(player) == 2) {
return;
}
player.sendMessage(Main.PREFIX + "You reached checkpoint �c2�7.");
player.playSound(player.getLocation(), "random.pop", 1, 1);
players.add(player);
checkpoint.put(player, 2);
}
if (((ArmorStand) point).getCustomName().contains("#3")) {
if (checkpoint.containsKey(player) && checkpoint.get(player) == 3) {
return;
}
player.sendMessage(Main.PREFIX + "You reached checkpoint �c3�7.");
player.playSound(player.getLocation(), "random.pop", 1, 1);
players.add(player);
checkpoint.put(player, 3);
}
if (((ArmorStand) point).getCustomName().contains("finish")) {
player.sendMessage(Main.PREFIX + "You finished the parkour, time used: �a" + DateUtils.ticksToString(time.get(player)));
player.playSound(player.getLocation(), Sound.LEVEL_UP, 1, 1);
players.remove(player);
checkpoint.remove(player);
time.remove(player);
}
}
}
}