Newer
Older
TreasureChest / src / main / java / de / iani / treasurechest / PlayerTreasureChestContent.java
@Brokkonaut Brokkonaut on 4 Jul 2017 5 KB Transfer to git
package de.iani.treasurechest;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;

import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class PlayerTreasureChestContent {
    private TreasureChest plugin;

    private File file;

    private ArrayList<TreasureChestItem> items;

    private long online;

    public PlayerTreasureChestContent(TreasureChest plugin, File file) {
        this.plugin = plugin;
        this.file = file;
        try {
            if (file.exists()) {
                YamlConfiguration conf = YamlConfiguration.loadConfiguration(file);

                ConfigurationSection prices = conf.getConfigurationSection("prices");
                if (prices != null) {
                    for (String e : prices.getKeys(false)) {
                        ConfigurationSection price = prices.getConfigurationSection(e);
                        if (price != null) {
                            ItemStack display = price.getItemStack("displayItem");
                            if (display == null) {
                                display = new ItemStack(Material.BEDROCK);
                                ItemMeta meta = display.getItemMeta();
                                meta.setDisplayName("Unset displayitem");
                                display.setItemMeta(meta);
                            }
                            int priceMoney = price.getInt("priceMoney");
                            ArrayList<ItemStack> priceItems = new ArrayList<>();
                            ConfigurationSection itemPricesSection = price.getConfigurationSection("itemPrices");
                            if (itemPricesSection != null) {
                                for (String pricee : itemPricesSection.getKeys(false)) {
                                    ItemStack priceItem = itemPricesSection.getItemStack(pricee);
                                    if (priceItem != null) {
                                        priceItems.add(priceItem);
                                    }
                                }
                            }
                            if (items == null) {
                                items = new ArrayList<>();
                            }
                            items.add(new TreasureChestItem(display, priceItems.toArray(new ItemStack[priceItems.size()]), priceMoney));
                        }
                    }
                }
            }
        } catch (Exception e) {
            plugin.getLogger().log(Level.SEVERE, "Could not load user chest file: " + file.getName(), e);
        }
    }

    private void save() {
        file.getParentFile().mkdirs();
        YamlConfiguration conf = new YamlConfiguration();
        ConfigurationSection prices = conf.createSection("prices");
        if (items != null) {
            int nr = 0;
            for (TreasureChestItem i : items) {
                ConfigurationSection price = prices.createSection(Integer.toString(nr++));
                price.set("displayItem", i.getDisplayItem().clone());
                price.set("priceMoney", i.getPriceMoney());
                ConfigurationSection itemsSec = price.createSection("itemPrices");
                if (i.getPriceItems() != null) {
                    int nr2 = 0;
                    for (ItemStack st : i.getPriceItems()) {
                        itemsSec.set(Integer.toString(nr2++), st.clone());
                    }
                }
            }
        }
        try {
            conf.save(file);
        } catch (IOException e) {
            plugin.getLogger().log(Level.SEVERE, "Could not save user chest file: " + file.getName(), e);
        }
    }

    public void addItem(TreasureChestItem item) {
        item = item.clone();
        if (items == null) {
            items = new ArrayList<>();
        }
        items.add(item);
        save();
    }

    public boolean removeItem(int pos) {
        if (items == null || items.size() <= pos || pos < 0) {
            return false;
        }
        items.remove(pos);
        if (items.size() == 0) {
            items = null;
        }
        save();
        return true;
    }

    public boolean isEmpty() {
        return items == null || items.isEmpty();
    }

    public List<TreasureChestItem> getItems() {
        return items == null ? Collections.EMPTY_LIST : Collections.unmodifiableList(items);
    }

    public TreasureChestItem getItem(int pos) {
        if (items == null || items.size() <= pos || pos < 0) {
            return null;
        }
        return items.get(pos);
    }

    public void setOnline(long t) {
        online = t;
    }

    public boolean isOnline(long t) {
        return online == t;
    }
}