Newer
Older
ChallengeSystem / src / main / java / de / fanta / challenges / guis / eventgui / TeamSelectGUI.java
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);
        }
    }
}