package de.fanta.challenges.guis.eventgui;
import de.fanta.challenges.Challenges;
import de.fanta.challenges.teams.ChallengeTeam;
import de.fanta.challenges.teams.TeamUtils;
import de.fanta.challenges.utils.ChatUtil;
import de.fanta.challenges.utils.ItemUtils;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class TeamSelectGUI implements Listener {
private static final Challenges plugin = Challenges.getPlugin();
private static final Map<Integer, ChallengeTeam> teamperSlot = new HashMap<>();
private static final Map<ChallengeTeam, Integer> slotbyTeam = new HashMap<>();
private static int CLOSE_IDEX;
private static Inventory TEAM_SELECT_UI;
public static void buildTeamSelectInventory() {
TEAM_SELECT_UI = Bukkit.createInventory(null, 9 * (TeamUtils.getTeams().length / 7 + ((TeamUtils.getTeams().length % 7 > 0) ? 1 : 0)) + 18, plugin.getGuiPrefix().append(Component.text(" >> Select Team...")));
CLOSE_IDEX = TEAM_SELECT_UI.getSize() - 9;
int row = 0;
int cat = 0;
if (TeamUtils.getTeams().length == 0) {
return;
}
for (ChallengeTeam team : TeamUtils.getTeams()) {
int slot = row * 9 + cat + 10;
TEAM_SELECT_UI.setItem(slot, team.getDisplayItem());
teamperSlot.put(slot, team);
slotbyTeam.put(team, slot);
if (cat < 6) {
cat++;
continue;
}
row++;
cat = 0;
}
TEAM_SELECT_UI.setItem(CLOSE_IDEX, ItemUtils.createGuiItem(Material.BARRIER, Component.text("MenĂ¼ verlassen!", ChatUtil.RED)));
for (int i = 0; i < TEAM_SELECT_UI.getSize(); i++) {
if (TEAM_SELECT_UI.getItem(i) == null || TEAM_SELECT_UI.getItem(i).getType() == Material.AIR) {
TEAM_SELECT_UI.setItem(i, ItemUtils.EMPTY_ICON);
}
}
}
public static void openTeamSelectGui(Player p) {
p.openInventory(TEAM_SELECT_UI);
}
public static void updateTeamSelectGui() {
for (ChallengeTeam challengeTeam : TeamUtils.getTeams()) {
ArrayList<Component> lore = new ArrayList<>();
if (challengeTeam == null) {
lore.add(Component.empty());
} else {
int slot = slotbyTeam.get(challengeTeam);
ItemStack stack = TEAM_SELECT_UI.getItem(slot);
ItemMeta meta = stack.getItemMeta();
for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(challengeTeam)) {
lore.add(Component.text(pp.getName(), ChatUtil.BLUE));
}
meta.lore(lore);
stack.setItemMeta(meta);
TEAM_SELECT_UI.setItem(slot, stack);
}
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent e) {
if (e.getInventory() == TEAM_SELECT_UI) {
int slot = e.getRawSlot();
Player p = (Player) e.getWhoClicked();
ChallengeTeam team = teamperSlot.get(slot);
if (team != null) {
if (e.isLeftClick()) {
TeamUtils.selectTeam(p, team);
p.closeInventory();
}
}
if (slot == CLOSE_IDEX) {
p.closeInventory();
}
e.setCancelled(true);
}
}
}