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

import de.fanta.challenges.Challenges;
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.Difficulty;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;

public class ServerSettingsGui extends AbstractWindow {

    private static final Challenges plugin = Challenges.getPlugin();

    public static final int INVENTORY_SIZE = 36;

    private static final int BACK_INDEX = 7;
    private static final int CLOSE_IDEX = 8;

    private static final int DIFFICULTY_INDEX = 19;
    private static final int KEEP_INVENTORY_INDEX = 20;
    private static final int NATURAL_REGENERATION_INDEX = 21;
    private static final int ULTRA_HARDCORE_INDEX = 22;
    private static final int ONE_LIFE_INDEX = 23;
    private static final int RESPAWN_INDEX = 24;
    private static final int PVP_INDEX = 25;

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

    @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();
        switch (slot) {
            case DIFFICULTY_INDEX -> {
                if (plugin.getDifficulty() == Difficulty.EASY) {
                    plugin.setDifficulty(Difficulty.NORMAL);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Schwierigkeitsgrad Mittel", ChatUtil.ORANGE);
                } else if (plugin.getDifficulty() == Difficulty.NORMAL) {
                    plugin.setDifficulty(Difficulty.HARD);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Schwierigkeitsgrad Schwer", ChatUtil.RED);
                } else if (plugin.getDifficulty() == Difficulty.HARD) {
                    plugin.setDifficulty(Difficulty.PEACEFUL);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Schwierigkeitsgrad Friedlich", ChatUtil.GREEN);
                } else if (plugin.getDifficulty() == Difficulty.PEACEFUL) {
                    plugin.setDifficulty(Difficulty.EASY);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Schwierigkeitsgrad Leicht", ChatUtil.BLUE);
                    Config.setValue("editsettings", true);
                }
            }
            case KEEP_INVENTORY_INDEX -> {
                if (plugin.getKeepInventory()) {
                    plugin.setKeepInventory(false);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Keep Inventory deaktiviert", ChatUtil.RED);
                } else {
                    plugin.setKeepInventory(true);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Keep Inventory aktiviert", ChatUtil.GREEN);
                }
                Config.setValue("editsettings", true);
            }
            case NATURAL_REGENERATION_INDEX -> {
                if (plugin.getNaturalRegeneration()) {
                    plugin.setNaturalRegeneration(false);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Natürliche Regeneration aktiviert", ChatUtil.GREEN);
                } else {
                    plugin.setNaturalRegeneration(true);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Natürliche Regeneration deaktiviert", ChatUtil.RED);
                }
                Config.setValue("editsettings", true);
            }
            case ULTRA_HARDCORE_INDEX -> {
                if (Config.getBoolean("ultrahardcore")) {
                    Config.setValue("ultrahardcore", false);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Ultra Hardcore deaktiviert", ChatUtil.RED);
                } else {
                    Config.setValue("ultrahardcore", true);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Ultra Hardcore aktiviert", ChatUtil.GREEN);
                }
            }
            case ONE_LIFE_INDEX -> {
                if (Config.getBoolean("onelife")) {
                    Config.setValue("onelife", false, false);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Ein Leben für alle deaktiviert", ChatUtil.RED);
                } else {
                    Config.setValue("onelife", true, false);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Ein Leben für alle aktiviert", ChatUtil.GREEN);
                }
            }
            case RESPAWN_INDEX -> {
                if (Config.getBoolean("respawn")) {
                    Config.setValue("respawn", false);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Wiederbeleben deaktiviert", ChatUtil.RED);
                } else {
                    Config.setValue("respawn", true);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "Wiederbeleben aktiviert", ChatUtil.GREEN);
                }
            }
            case PVP_INDEX -> {
                if (plugin.getPvP()) {
                    plugin.setPvP(false);
                    Config.setValue("pvp", false);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "PVP deaktiviert", ChatUtil.RED);
                } else {
                    plugin.setPvP(true);
                    Config.setValue("pvp", true);
                    ChatUtil.sendTitleToAll("Server Einstellungen", "PVP aktiviert", ChatUtil.GREEN);
                }
            }
            default -> {
            }
        }
        rebuildInventory();

        switch (slot) {
            case BACK_INDEX -> new MainGui(player).open();
            case CLOSE_IDEX -> player.closeInventory();
        }
    }

    @Override
    protected void rebuildInventory() {
        for (int i = 0; i < INVENTORY_SIZE; i++) {
            ItemStack item;
            switch (i) {
                case BACK_INDEX -> item = CustomHeads.RAINBOW_ARROW_BACKWARD_II.getHead(ChatUtil.RED + "Zurück");
                case CLOSE_IDEX -> item = CustomHeads.RAINBOW_X.getHead(ChatUtil.RED + "Menü verlassen");

                case DIFFICULTY_INDEX -> {
                    if (plugin.getDifficulty() == Difficulty.EASY) {
                        item = GUIUtils.createGuiItem(Material.IRON_SWORD, ChatUtil.BLUE + "Schwierigkeitsgrad Leicht");
                    } else if (plugin.getDifficulty() == Difficulty.NORMAL) {
                        item = GUIUtils.createGuiItem(Material.DIAMOND_SWORD, ChatUtil.ORANGE + "Schwierigkeitsgrad Mittel");
                    } else if (plugin.getDifficulty() == Difficulty.HARD) {
                        item = GUIUtils.createGuiItem(Material.NETHERITE_SWORD, ChatUtil.RED + "Schwierigkeitsgrad Schwer");
                    } else {
                        item = GUIUtils.createGuiItem(Material.POPPY, ChatUtil.GREEN + "Schwierigkeitsgrad Friedlich");
                    }
                }
                case KEEP_INVENTORY_INDEX -> {
                    if (plugin.getKeepInventory()) {
                        item = GUIUtils.createGuiItem(Material.CHEST_MINECART, ChatUtil.GREEN + "Keep Inventory aktiviert", true);
                    } else {
                        item = GUIUtils.createGuiItem(Material.CHEST_MINECART, ChatUtil.RED + "Keep Inventory deaktiviert");
                    }
                }
                case NATURAL_REGENERATION_INDEX -> {
                    if (plugin.getNaturalRegeneration()) {
                        item = GUIUtils.createGuiItem(Material.GOLDEN_APPLE, ChatUtil.GREEN + "Natürliche Regeneration aktiviert", true);
                    } else {
                        item = GUIUtils.createGuiItem(Material.GOLDEN_APPLE, ChatUtil.RED + "Natürliche Regeneration deaktiviert");
                    }
                }
                case ULTRA_HARDCORE_INDEX -> {
                    if (Config.getBoolean("ultrahardcore")) {
                        item = GUIUtils.createGuiItem(Material.SUSPICIOUS_STEW, ChatUtil.GREEN + "Ultra Hardcore aktiviert", true);
                    } else {
                        item = GUIUtils.createGuiItem(Material.SUSPICIOUS_STEW, ChatUtil.RED + "Ultra Hardcore deaktiviert");
                    }
                }
                case ONE_LIFE_INDEX -> {
                    if (Config.getBoolean("onelife")) {
                        item = GUIUtils.createGuiItem(Material.SUNFLOWER, ChatUtil.GREEN + "Ein Leben für alle aktiviert", true);
                    } else {
                        item = GUIUtils.createGuiItem(Material.SUNFLOWER, ChatUtil.RED + "Ein Leben für alle deaktiviert");
                    }
                }
                case RESPAWN_INDEX -> {
                    if (Config.getBoolean("respawn")) {
                        item = GUIUtils.createGuiItem(Material.TOTEM_OF_UNDYING, ChatUtil.GREEN + "Wiederbeleben aktiviert", true);
                    } else {
                        item = GUIUtils.createGuiItem(Material.TOTEM_OF_UNDYING, ChatUtil.RED + "Wiederbeleben deaktiviert");
                    }
                }
                case PVP_INDEX -> {
                    if (plugin.getServer().getWorld("world").getPVP()) {
                        item = GUIUtils.createGuiItem(Material.WOODEN_SWORD, ChatUtil.GREEN + "PVP aktiviert", true);
                    } else {
                        item = GUIUtils.createGuiItem(Material.WOODEN_SWORD, ChatUtil.RED + "PVP deaktiviert");
                    }
                }
                default -> item = GUIUtils.EMPTY_ICON;
            }
            this.getInventory().setItem(i, item);
        }
    }
}