package de.fanta.challenges.guis.eventgui;
import de.fanta.challenges.Challenges;
import de.fanta.challenges.challenges.ChallengeEvents.BridgeRaceChallengeEvent;
import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent;
import de.fanta.challenges.utils.ChatUtil;
import de.fanta.challenges.utils.Config;
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 java.util.Objects;
public class EventGui extends AbstractWindow {
private static final Challenges plugin = Challenges.getPlugin();
public static final int INVENTORY_SIZE = 54;
private static final int NULL_EVENT_INDEX = 0;
private static final int TEAM_INDEX = 8;
private static final int BINGO_EVENT_INDEX = 10;
private static final int DEATHRUN_EVENT_INDEX = 11;
private static final int FORCE_ITEM_INDEX = 12;
private static final int SAMMEL_FIEBER_INDEX = 13;
private static final int BRIDGE_RACE_INDEX = 14;
private static final int ORE_BATTLE_INDEX = 15;
private static final int DEATH_COUNTER_INDEX = 16;
private static final int BINGO_ITEMS_INDEX = 19;
private static final int FORCE_ITEM_SETTINGS_INDEX = 21;
private static final int SAMMEL_FIEBER_SETTINGS_INDEX = 22;
private static final int DIFFERENT_ITEMS_INDEX = 28;
private static final int TIME_EVENT_INDEX = 29;
private static final int EVENT_SETTINGS_INDEX = 45;
private static final int CLOSE_IDEX = 54;
public EventGui(Player player) {
super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGUIPREFIX() + " >> Event Settings"));
}
@Override
protected void rebuildInventory() {
for (int i = 0; i < INVENTORY_SIZE; i++) {
ItemStack item;
switch (i) {
case NULL_EVENT_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "nix")) {
item = CustomHeads.RAINBOW_X.getHead(ChatUtil.RED + "Event beenden");
} else {
item = GUIUtils.EMPTY_ICON;
}
}
case TEAM_INDEX -> item = GUIUtils.createGuiItem(Material.GRAY_BED, ChatUtil.BLUE + "Team Settings");
case BINGO_EVENT_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "bingo")) {
item = GUIUtils.createGuiItem(Material.GRAY_SHULKER_BOX, ChatUtil.GREEN + "Bingo Event", true, ChatUtil.GREEN + "Sammle Vorgegebene Items", ChatUtil.GREEN + "Items kann man mit /bingo sehen");
} else {
item = GUIUtils.createGuiItem(Material.GRAY_SHULKER_BOX, ChatUtil.RED + "Bingo Event", ChatUtil.GREEN + "Sammle Vorgegebene Items", ChatUtil.GREEN + "Items kann man mit /bingo sehen");
}
}
case DEATHRUN_EVENT_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "deathrun")) {
item = GUIUtils.createGuiItem(Material.LEATHER_BOOTS, ChatUtil.GREEN + "Deathrun Event", true, ChatUtil.GREEN + "Laufe so weit wie möglich ohne zu sterben");
} else {
item = GUIUtils.createGuiItem(Material.LEATHER_BOOTS, ChatUtil.RED + "Deathrun Event", ChatUtil.GREEN + "Laufe so weit wie möglich ohne zu sterben");
}
}
case FORCE_ITEM_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "forcequest")) {
item = GUIUtils.createGuiItem(Material.DIAMOND_PICKAXE, ChatUtil.GREEN + "Force Quest Event", true, ChatUtil.GREEN + "Erledige so viele Aufgaben wie möglich.");
} else {
item = GUIUtils.createGuiItem(Material.DIAMOND_PICKAXE, ChatUtil.RED + "Force Quest Event", ChatUtil.GREEN + "Erledige so viele Aufgaben wie möglich.");
}
}
case SAMMEL_FIEBER_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "sammelfieber")) {
item = GUIUtils.createGuiItem(Material.HOPPER, ChatUtil.GREEN + "Sammel Fieber Event", true, ChatUtil.GREEN + "Sammle so viel Items wie möglich!");
} else {
item = GUIUtils.createGuiItem(Material.HOPPER, ChatUtil.RED + "Sammel Fieber Event", ChatUtil.GREEN + "Sammle so viel Items wie möglich!");
}
}
case BRIDGE_RACE_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "bridgerace")) {
item = GUIUtils.createGuiItem(Material.SCAFFOLDING, ChatUtil.GREEN + "Bridge Race Event", true, ChatUtil.GREEN + "Komme so weit wie möglich.");
} else {
item = GUIUtils.createGuiItem(Material.SCAFFOLDING, ChatUtil.RED + "Bridge Race Event", ChatUtil.GREEN + "Komme so weit wie möglich.");
}
}
case ORE_BATTLE_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "orebattle")) {
item = GUIUtils.createGuiItem(Material.DEEPSLATE_IRON_ORE, ChatUtil.GREEN + "Ore Battle Event", true, ChatUtil.GREEN + "Baue so viele erze ab wie möglich.");
} else {
item = GUIUtils.createGuiItem(Material.DEEPSLATE_IRON_ORE, ChatUtil.RED + "Ore Battle Event", ChatUtil.GREEN + "Baue so viele erze ab wie möglich.");
}
}
case DEATH_COUNTER_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "deathcounter")) {
item = GUIUtils.createGuiItem(Material.DAMAGED_ANVIL, ChatUtil.GREEN + "Death Counter Event", true, ChatUtil.GREEN + "Zeigt Tode bei einem Event.", ChatUtil.GREEN + "Kann nicht mit anderen Events verbunden Werden.");
} else {
item = GUIUtils.createGuiItem(Material.DAMAGED_ANVIL, ChatUtil.RED + "Death Counter Event", ChatUtil.GREEN + "Zeigt Tode bei einem Event.", ChatUtil.GREEN + "Kann nicht mit anderen Events verbunden Werden.");
}
}
case BINGO_ITEMS_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "bingo")) {
item = GUIUtils.createGuiItem(Material.CHEST, ChatUtil.GREEN + "Items", ChatUtil.GREEN + "Anklicken um Items Hinzuzufügen");
} else {
item = GUIUtils.EMPTY_ICON;
}
}
case FORCE_ITEM_SETTINGS_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "forcequest")) {
item = GUIUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, ChatUtil.GREEN + "Force Item Event Settings");
} else {
item = GUIUtils.EMPTY_ICON;
}
}
case SAMMEL_FIEBER_SETTINGS_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "sammelfieber")) {
item = GUIUtils.createGuiItem(Material.NETHER_STAR, ChatUtil.GREEN + "Sammel Fieber Event Settings");
} else {
item = GUIUtils.EMPTY_ICON;
}
}
case DIFFERENT_ITEMS_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "differentitems")) {
item = GUIUtils.createGuiItem(Material.CRAFTING_TABLE, ChatUtil.GREEN + "DifferentItems", true, ChatUtil.GREEN + "Sammel so viele verschiedene Items wie möglich.");
} else {
item = GUIUtils.createGuiItem(Material.CRAFTING_TABLE, ChatUtil.RED + "DifferentItems", ChatUtil.GREEN + "Sammel so viele verschiedene Items wie möglich.");
}
}
case TIME_EVENT_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "time")) {
item = GUIUtils.createGuiItem(Material.CLOCK, ChatUtil.GREEN + "Time", true, ChatUtil.GREEN + "Zeigt wie lang ein Spieler mitgespielt hat.");
} else {
item = GUIUtils.createGuiItem(Material.CLOCK, ChatUtil.RED + "Time", ChatUtil.GREEN + "Zeigt wie lang ein Spieler mitgespielt hat.");
}
}
case EVENT_SETTINGS_INDEX ->
item = GUIUtils.createGuiItem(Material.CHAIN_COMMAND_BLOCK, ChatUtil.BLUE + "Event Settings");
case CLOSE_IDEX -> item = CustomHeads.RAINBOW_X.getHead(ChatUtil.RED + "Menü verlassen!");
default -> item = GUIUtils.EMPTY_ICON;
}
this.getInventory().setItem(i, item);
}
}
@Override
public void onItemClicked(InventoryClickEvent event) {
if (!mayAffectThisInventory(event)) {
return;
}
event.setCancelled(true);
if (!getInventory().equals(event.getClickedInventory())) {
return;
}
Player p = getPlayer();
int slot = event.getSlot();
switch (slot) {
case NULL_EVENT_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "nix")) {
plugin.getScoreManager().resetScores();
Config.setValue("event.type", "nix");
ChatUtil.sendTitleToAll("Event", "Event beendet", ChatUtil.RED);
}
}
case BINGO_EVENT_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "bingo")) {
Config.setValue("event.type", "bingo");
ChatUtil.sendTitleToAll("Event", "Sammle Vorgegebene Items! (/bingo)", ChatUtil.GREEN);
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
case DEATHRUN_EVENT_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "deathrun")) {
Config.setValue("event.type", "deathrun");
ChatUtil.sendTitleToAll("Event", "Laufe so weit wie möglich ohne zu sterben!", ChatUtil.GREEN);
DeathrunChallengeEvent.load();
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
case DEATH_COUNTER_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "deathcounter")) {
Config.setValue("event.type", "deathcounter");
ChatUtil.sendTitleToAll("Event", "Death Counter", ChatUtil.GREEN);
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
case SAMMEL_FIEBER_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "sammelfieber")) {
Config.setValue("event.type", "sammelfieber");
ChatUtil.sendTitleToAll("Event", "SammelFieber", ChatUtil.GREEN);
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
case ORE_BATTLE_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "orebattle")) {
Config.setValue("event.type", "orebattle");
ChatUtil.sendTitleToAll("Event", "Ore Battle", ChatUtil.GREEN);
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
case FORCE_ITEM_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "forcequest")) {
Config.setValue("event.type", "forcequest");
ChatUtil.sendTitleToAll("Event", "Force Item", ChatUtil.GREEN);
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
case BRIDGE_RACE_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "bridgerace")) {
if (BridgeRaceChallengeEvent.load(p)) {
Config.setValue("event.type", "bridgerace");
ChatUtil.sendTitleToAll("Event", "Bridge Race", ChatUtil.GREEN);
}
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
case DIFFERENT_ITEMS_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "differentitems")) {
Config.setValue("event.type", "differentitems");
ChatUtil.sendTitleToAll("Event", "Different Items", ChatUtil.GREEN);
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
case TIME_EVENT_INDEX -> {
if (!Objects.equals(Config.getString("event.type"), "time")) {
Config.setValue("event.type", "time");
ChatUtil.sendTitleToAll("Event", "Time", ChatUtil.GREEN);
} else {
ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits");
}
}
}
rebuildInventory();
switch (slot) {
case BINGO_ITEMS_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "bingo")) {
BingoItemsGui.openEventGUI(p);
}
}
case SAMMEL_FIEBER_SETTINGS_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "sammelfieber")) {
new SammelFieberSettingsGui(this, p).open();
}
}
case FORCE_ITEM_SETTINGS_INDEX -> {
if (Objects.equals(Config.getString("event.type"), "forcequest")) {
new ForceItemSettingsGui(p).open();
}
}
case TEAM_INDEX -> new TeamSettingsGUI(p).open();
case EVENT_SETTINGS_INDEX -> new EventSettingsGui(p).open();
case CLOSE_IDEX -> p.closeInventory();
}
}
}