package eu.thog.uhcrun.game.team;
import eu.thog.uhcrun.compatibility.Status;
import eu.thog.uhcrun.game.TeamGame;
import eu.thog.uhcrun.gui.Gui;
import eu.thog.uhcrun.gui.GuiSelectTeam;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import java.util.Collection;
import java.util.Map;
import java.util.TreeMap;
import java.util.UUID;
/**
* This file is a part of the UHCRun Project CodeBase
* Created by Thog
* (C) Copyright Thomas Guillemard 2016
* All rights reserved.
*/
public class TeamSelector implements Listener
{
private static TeamSelector instance;
private final TeamGame game;
private Map<UUID, Gui> playersGui;
public TeamSelector(TeamGame game) throws IllegalAccessException
{
if (instance != null)
{
throw new IllegalAccessException("Instance already defined!");
}
instance = this;
this.game = game;
this.playersGui = new TreeMap<>();
}
public static TeamSelector getInstance()
{
return instance;
}
@EventHandler
public void playerInteractEvent(PlayerInteractEvent event)
{
if (game.getStatus().equals(Status.IN_GAME))
{
event.getHandlers().unregister(this);
} else if (event.getItem() != null && event.getItem().getType() == Material.NETHER_STAR)
{
this.openGui(event.getPlayer(), new GuiSelectTeam());
}
}
@EventHandler
public void clickEvent(InventoryClickEvent event)
{
if (game.getStatus().equals(Status.IN_GAME))
{
event.getHandlers().unregister(this);
} else if (event.getCurrentItem() != null && event.getCurrentItem().getItemMeta() != null && event.getView().getType() != InventoryType.PLAYER)
{
Gui gui = this.playersGui.get(event.getWhoClicked().getUniqueId());
if (gui != null)
{
String action = gui.getAction(event.getSlot());
if (action != null)
{
gui.onClick((Player) event.getWhoClicked(), event.getCurrentItem(), action, event.getClick());
}
event.setCancelled(true);
}
}
}
@EventHandler
public void onSignChange(SignChangeEvent event)
{
if (game.getStatus().equals(Status.IN_GAME))
{
event.getHandlers().unregister(this);
return;
}
if (!game.getStatus().equals(Status.IN_GAME))
{
event.getBlock().setType(Material.AIR);
Team team = game.getPlayerTeam(event.getPlayer().getUniqueId());
String name = event.getLine(0);
name = name.trim();
if (!name.isEmpty())
{
team.setTeamName(name);
event.getPlayer().sendMessage(game.getTag() + " " + ChatColor.GREEN + "Le nom de votre équipe est désormais : " + team.getChatColor() + team.getTeamName());
this.openGui(event.getPlayer(), new GuiSelectTeam());
} else
{
event.getPlayer().sendMessage(game.getTag() + " " + ChatColor.RED + "Le nom de l'équipe ne peut être vide.");
this.openGui(event.getPlayer(), new GuiSelectTeam());
}
}
}
public void openGui(Player player, Gui gui)
{
if (this.playersGui.containsKey(player.getUniqueId()))
{
player.closeInventory();
this.playersGui.remove(player.getUniqueId());
}
this.playersGui.put(player.getUniqueId(), gui);
gui.display(player);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onChat(AsyncPlayerChatEvent event)
{
if (!game.getStatus().equals(Status.IN_GAME))
{
return;
}
if (event.getMessage().startsWith("!"))
{
event.setCancelled(true);
String message = event.getMessage().substring(1);
Team team = game.getPlayerTeam(event.getPlayer().getUniqueId());
if (team != null)
{
event.setCancelled(true);
Collection<? extends Player> players = game.getPlugin().getServer().getOnlinePlayers();
for (Player player : players)
{
player.sendMessage(team.getChatColor() + "[" + team.getTeamName() + "] " + event.getPlayer().getName() + " : " + ChatColor.WHITE + message);
}
}
} else
{
Team team = game.getPlayerTeam(event.getPlayer().getUniqueId());
if (team != null)
{
event.setCancelled(true);
String message = team.getChatColor() + "(Equipe) " + event.getPlayer().getName() + " : " + ChatColor.GOLD + ChatColor.ITALIC + event.getMessage();
for (UUID id : team.getPlayersUUID())
{
Player player = game.getPlugin().getServer().getPlayer(id);
if (player != null)
{
player.sendMessage(message);
}
}
}
}
}
}