Newer
Older
ChallengeSystem / src / main / java / de / fanta / challenges / guis / TeleportGUI.java
package de.fanta.challenges.guis;

import de.fanta.challenges.Challenges;
import de.fanta.challenges.utils.ChatUtil;
import de.fanta.challenges.utils.guiutils.AbstractWindow;
import de.fanta.challenges.utils.guiutils.GUIUtils;
import de.iani.cubesideutils.bukkit.items.CustomHeads;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class TeleportGUI extends AbstractWindow {
    private static final Challenges plugin = Challenges.getPlugin();
    private static final Map<Integer, Player> playerPerSlot = new HashMap<>();
    private static final int INVENTORY_SIZE = 9 * (plugin.getVanish().getPlayerListWithoutVanishPlayers().size() / 7 + ((plugin.getVanish().getPlayerListWithoutVanishPlayers().size() % 7 > 0) ? 1 : 0)) + 18;
    private static final int CLOSE_IDEX = INVENTORY_SIZE - 9;

    public TeleportGUI(Player player) {
        super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGUIPREFIX() + " >> Event Settings"));
    }

    @Override
    protected void rebuildInventory() {
        int row = 0;
        int cat = 0;

        if (plugin.getVanish().getPlayerListWithoutVanishPlayers().isEmpty()) {
            ChatUtil.sendErrorMessage(getPlayer(), "Keine Spieler Online");
            return;
        }
        for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) {
            int slot = row * 9 + cat + 10;

            ArrayList<String> metalore = new ArrayList<>();

            ItemStack stack = new ItemStack(Material.PLAYER_HEAD);
            SkullMeta skullMeta = (SkullMeta) stack.getItemMeta();
            skullMeta.setOwner(pp.getName());
            skullMeta.setDisplayName(ChatUtil.BLUE + pp.getName());
            metalore.add(ChatUtil.GREEN + "Linksklick: " + getPlayer().getName() + " -> " + pp.getName());
            metalore.add(ChatUtil.GREEN + "Rechtsklick: " + pp.getName() + " -> " + getPlayer().getName());
            skullMeta.setLore(metalore);
            stack.setItemMeta(skullMeta);
            getInventory().setItem(slot, stack);
            playerPerSlot.put(slot, pp);
            if (cat < 6) {
                cat++;
                continue;
            }
            row++;
            cat = 0;
        }

        getInventory().setItem(CLOSE_IDEX, CustomHeads.RAINBOW_X.getHead(ChatUtil.RED + "MenĂ¼ verlassen"));

        for (int i = 0; i < getInventory().getSize(); i++) {
            if (getInventory().getItem(i) == null || getInventory().getItem(i).getType() == Material.AIR) {
                getInventory().setItem(i, GUIUtils.EMPTY_ICON);
            }
        }
    }

    @Override
    public void onItemClicked(InventoryClickEvent event) {
        Player player = getPlayer();
        if (!mayAffectThisInventory(event)) {
            return;
        }

        event.setCancelled(true);
        if (!getInventory().equals(event.getClickedInventory())) {
            return;
        }
        int slot = event.getSlot();
        Player pp = playerPerSlot.get(slot);
        if (pp != null && pp.isOnline()) {
            if (event.isLeftClick()) {
                player.teleport(pp.getLocation());
                ChatUtil.sendNormalMessage(player, "Du wurdest zu " + pp.getName() + " teleportiert!");
            } else if (event.isRightClick()) {
                pp.teleport(player.getLocation());
                ChatUtil.sendNormalMessage(player, pp.getName() + " wurde zu dir teleportiert!");
            }
            player.closeInventory();
        }


        if (slot == CLOSE_IDEX) {
            getPlayer().closeInventory();
        }
    }
}