Newer
Older
ChallengeSystem / src / main / java / de / fanta / challenges / guis / eventgui / EventItemsGui.java
@fantahund fantahund on 17 Sep 2020 2 KB :>
package de.fanta.challenges.guis.eventgui;

import de.fanta.challenges.Bingo;
import de.fanta.challenges.Challenges;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;

public class EventItemsGui implements Listener {

    private static Challenges plugin = Challenges.getPlugin();

    public static final String TITLE = Challenges.CHALLENGEGUIPREFIX + " >> Event Items";
    private static final Inventory event_items = Bukkit.createInventory(null, InventoryType.DISPENSER, TITLE);

    private static Map<UUID, Inventory> playerInvs = new HashMap<>();

    public static void openEventGUI(Player p) {
        p.openInventory(event_items);
    }

    public static List<Material> getEventItems() {
         return Arrays.stream(event_items.getContents()).filter(itemStack -> itemStack != null && !itemStack.getType().equals(Material.AIR)).map(ItemStack::getType).collect(Collectors.toList());
    }

    public static Map<UUID, Inventory> getPlayerInvs() {
        return playerInvs;
    }

    public static void openPlayerInv(Player player) {
        Inventory inventory = Bukkit.createInventory(player, InventoryType.DISPENSER, Challenges.CHALLENGEGUIPREFIX + " >> Bingo");
        Bingo bingo = plugin.getBingo();
        List<Material> playerMaterials = bingo.getPlayerMaterials().getOrDefault(player.getUniqueId(), new ArrayList<>());
        bingo.getMaterials().forEach(material -> {
            ItemStack itemStack = new ItemStack(material);
            if (playerMaterials.contains(material)) {
                ItemMeta itemMeta = itemStack.getItemMeta();
                itemMeta.addEnchant(Enchantment.MENDING, 1, false);
                itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
                itemStack.setItemMeta(itemMeta);
            }
            inventory.addItem(itemStack);
        });
        playerInvs.put(player.getUniqueId(), inventory);
        player.openInventory(inventory);
    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent e) {
        if (e.getClickedInventory() == null)
            return;
        Player player = (Player) e.getWhoClicked();
        UUID uuid = player.getUniqueId();
        if (playerInvs.get(uuid) == null)
            return;
        if (playerInvs.get(uuid).equals(e.getClickedInventory())) {
            e.setCancelled(true);
        }
    }

}