Newer
Older
ChallengeSystem / src / main / java / de / fanta / challenges / guis / eventgui / EventGui.java
@fanta fanta on 25 Mar 2024 14 KB ForceQuest
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();
        }
    }
}