package tv.mineinthebox.essentials.events.players;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import tv.mineinthebox.essentials.xEssentials;
import tv.mineinthebox.essentials.interfaces.EventTemplate;
import tv.mineinthebox.essentials.interfaces.XPlayer;
public class StaffSafeTeleportEvent extends EventTemplate implements Listener {
private HashMap<String, Integer> staff = new HashMap<String, Integer>();
public StaffSafeTeleportEvent(xEssentials pl) {
super(pl, "SafeTeleport");
}
@EventHandler
public void onStaffTeleport(PlayerTeleportEvent e) {
if(e.getCause() == TeleportCause.PLUGIN) {
XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(e.getPlayer().getName());
if(xp.isStaff()) {
if(xp.isVanished()) {
return;
} else if(xp.getBukkitPlayer().getGameMode() == GameMode.CREATIVE) {
return;
} else {
if(staff.containsKey(e.getPlayer().getName())) {
Bukkit.getScheduler().cancelTask(staff.get(e.getPlayer().getName()));
staff.remove(e.getPlayer().getName());
staff.put(e.getPlayer().getName(), staffScheduler(e.getPlayer()));
sendMessage(e.getPlayer(), ChatColor.GRAY + "teleportation safety against damage has been " + ChatColor.GREEN + "enabled!");
} else {
staff.put(e.getPlayer().getName(), staffScheduler(e.getPlayer()));
sendMessage(e.getPlayer(), ChatColor.GRAY + "teleportation safety against damage has been " + ChatColor.GREEN + "enabled!");
}
}
}
}
}
@EventHandler
public void onStaffDamage(EntityDamageEvent e) {
if(e.getEntity() instanceof Player) {
Player p = (Player) e.getEntity();
if(staff.containsKey(p.getName())) {
e.setCancelled(true);
}
}
}
@EventHandler
public void onGameMode(PlayerGameModeChangeEvent e) {
if(e.getNewGameMode() == GameMode.CREATIVE) {
if(staff.containsKey(e.getPlayer().getName())) {
Bukkit.getScheduler().cancelTask(staff.get(e.getPlayer().getName()));
staff.remove(e.getPlayer().getName());
sendMessage(e.getPlayer(), ChatColor.GRAY + "teleportation safety against damage has been " + ChatColor.RED + "worn off");
}
}
}
@EventHandler
public void onStaffQuit(PlayerQuitEvent e) {
if(staff.containsKey(e.getPlayer().getName())) {
Bukkit.getScheduler().cancelTask(staff.get(e.getPlayer().getName()));
staff.remove(e.getPlayer().getName());
}
}
@EventHandler
public void onStaffQuit(PlayerKickEvent e) {
if(staff.containsKey(e.getPlayer().getName())) {
Bukkit.getScheduler().cancelTask(staff.get(e.getPlayer().getName()));
staff.remove(e.getPlayer().getName());
}
}
private int staffScheduler(final Player p) {
int a = Bukkit.getScheduler().scheduleSyncDelayedTask(pl, new Runnable() {
@Override
public void run() {
if(p instanceof Player) {
if(staff.containsKey(p.getName())) {
sendMessage(p, ChatColor.GRAY + "teleportation safety against damage has been " + ChatColor.RED + "worn off");
staff.remove(p.getName());
}
}
}
}, 400);
return a;
}
}