Newer
Older
ChallengeSystem / src / main / java / de / fanta / challenges / guis / BackpackGui.java
@fanta fanta on 7 Nov 2022 4 KB ehh ja
package de.fanta.challenges.guis;

import de.fanta.challenges.Challenges;
import de.fanta.challenges.utils.ChatUtil;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.MemorySection;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

import java.io.IOException;
import java.util.Map;
import java.util.logging.Level;

public class BackpackGui {

    public static final String TITLE = Challenges.getPlugin().getGUIPREFIX() + " >> Backpack";
    private Inventory backpack;

    public BackpackGui(int size) {
        this.backpack = Bukkit.createInventory(null, size, TITLE);
    }

    public void resize(int newSize) {
        if (newSize == backpack.getSize()) {
            return;
        }

        Inventory newBackpack = Bukkit.createInventory(backpack.getHolder(), newSize, TITLE);
        if (newSize > backpack.getSize()) {
            for (int i = 0; i < backpack.getSize(); i++) {
                newBackpack.setItem(i, backpack.getItem(i));
            }
        } else if (newSize < backpack.getSize()) {
            for (int i = 0; i < newSize; i++) {
                newBackpack.setItem(i, backpack.getItem(i));
            }

            for (int i = newSize; i < backpack.getSize(); i++) {
                ItemStack item = backpack.getItem(i);
                if (item != null && item.getType() != Material.AIR) {
                    if (!newBackpack.addItem(item).isEmpty()) {
                        ChatUtil.sendBrodcastMessage(ChatUtil.RED + "Backpack kann nicht verkleinert werden. Zu wenig Platz!");
                        return;
                    }
                }
            }
        }
        for (HumanEntity player : backpack.getViewers()) {
            player.closeInventory();
        }
        this.backpack = newBackpack;
    }

    public void open(Player player) {
        player.openInventory(this.backpack);
    }

    public int getSize() {
        return this.backpack.getSize();
    }

    public void clearConfig() {
        for (String section : Challenges.getPlugin().getBackpackConfig().getKeys(false)) {
            if (section != null) {
                Challenges.getPlugin().getBackpackConfig().set(section, null);
            }
            try {
                Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile());
            } catch (IOException e) {
                Bukkit.getLogger().log(Level.SEVERE, "Could not save backpack config", e);
            }
        }
    }

    public void saveInventoryToConfig() {
        clearConfig();
        for (int slot = 0; slot < backpack.getSize(); slot++) {
            ItemStack stack = backpack.getItem(slot);
            if (stack != null && stack.getType() != Material.AIR) {
                Challenges.getPlugin().getBackpackConfig().set(String.valueOf(slot), stack.serialize());
            }
        }
        try {
            Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile());
        } catch (IOException e) {
            Bukkit.getLogger().log(Level.SEVERE, "Could not save backpack config", e);
        }
    }

    public void loadInventoryFromConfig() {
        for (Map.Entry<String, Object> stringObjectEntry : Challenges.getPlugin().getBackpackConfig().getValues(false).entrySet()) {
            int slot;
            try {
                slot = Integer.parseInt(stringObjectEntry.getKey());
            } catch (NumberFormatException e) {
                Bukkit.getLogger().log(Level.SEVERE, "Fehler! Slot: " + stringObjectEntry.getKey(), e);
                continue;
            }
            if (slot >= backpack.getSize()) {
                Bukkit.getLogger().log(Level.SEVERE, "Slot " + slot + " befindet sich außerhalb des Inventars!");
                continue;
            }
            MemorySection memorySection = (MemorySection) stringObjectEntry.getValue();
            ItemStack deserialized = ItemStack.deserialize(memorySection.getValues(false));
            backpack.setItem(slot, deserialized);
        }
    }
}