package de.fanta.challengesjoinentities.adventure.ui;
import de.fanta.challengesjoinentities.ChallengesJoinEntities;
import de.fanta.challengesjoinentities.ChatUtil;
import de.fanta.challengesjoinentities.Server;
import de.fanta.challengesjoinentities.adventure.AdventureMap;
import de.fanta.challengesjoinentities.adventure.Category;
import de.fanta.challengesjoinentities.utils.ui.AbstractWindow;
import de.fanta.challengesjoinentities.utils.ui.ItemUtil;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.TextColor;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public class AdventureMapsUI extends AbstractWindow {
private final ChallengesJoinEntities plugin;
private final Category category;
private final Map<Integer, AdventureMap> mapsPerSlot = new HashMap<>();
private final int BACK_INDEX = getInventory().getSize() - 9;
public AdventureMapsUI(ChallengesJoinEntities plugin, Category category, Player player) {
super(player, Bukkit.createInventory(player, 9 * (category.getMaps().size() / 7 + ((category.getMaps().size() % 7 > 0) ? 1 : 0)) + 18, ChatUtil.RED + category.getName() + "Map's "));
this.category = category;
this.plugin = plugin;
}
protected void rebuildInventory() {
List<AdventureMap> maps = this.category.getMaps().stream().sorted(Comparator.comparing(AdventureMap::getName)).toList();
int row = 0;
int cat = 0;
for (AdventureMap category : maps) {
int slot = row * 9 + cat + 10;
getInventory().setItem(slot, category.getItem());
this.mapsPerSlot.put(slot, category);
if (cat < 6) {
cat++;
continue;
}
row++;
cat = 0;
}
ItemStack backButtton = new ItemStack(Material.PAPER);
ItemMeta meta = backButtton.getItemMeta();
meta.setDisplayName("" + ChatColor.GREEN + "Zurück");
backButtton.setItemMeta(meta);
getInventory().setItem(this.BACK_INDEX, backButtton);
for (int i1 = 0; i1 < getInventory().getSize(); i1++) {
ItemStack item = getInventory().getItem(i1);
if (item == null)
getInventory().setItem(i1, ItemUtil.EMPTY_ICON);
}
}
public void onItemClicked(InventoryClickEvent event) {
super.onItemClicked(event);
int slot = event.getSlot();
AdventureMap map = this.mapsPerSlot.get(slot);
Player p = getPlayer();
if (map != null) {
if (event.isRightClick()) {
getPlayer().sendMessage(ChallengesJoinEntities.PREFIX_COMPONENT.append(Component.text("MapLink: klick mich :)", TextColor.color(Color.YELLOW.asRGB())).clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, map.getWebLink()))));
} else if (!Server.serverPlayers.containsValue(p.getUniqueId())) {
this.plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadNewAdventure(p, category.getName(), map.getName()), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!"));
} else {
ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!");
}
getPlayer().closeInventory();
}
if (slot == this.BACK_INDEX)
(new CategoryUI(this.plugin, this.plugin.getCategoriesConfig(), p)).open();
}
}