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

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.UUID;

import org.bukkit.entity.Player;

public class PriceChestData {
    private HashMap<String, TreasureChestItem> namedItems;

    private HashMap<UUID, TreasureChestItem> activeItems;

    private HashMap<UUID, PlayerTreasureChestContent> loadedChests;

    private TreasureChest plugin;

    private File chestContentFolder;

    public PriceChestData(TreasureChest plugin) {
        namedItems = new HashMap<>();
        activeItems = new HashMap<>();
        loadedChests = new HashMap<>();

        this.plugin = plugin;
        chestContentFolder = new File(this.plugin.getDataFolder(), "content");
        chestContentFolder.mkdirs();
    }

    public TreasureChestItem getNamedItem(String name) {
        return namedItems.get(name.toLowerCase().trim());
    }

    public TreasureChestItem getActiveItem(UUID playerUUID) {
        return activeItems.get(playerUUID);
    }

    public TreasureChestItem setActiveItem(UUID playerUUID, TreasureChestItem item) {
        if (item == null) {
            return removeActiveItem(playerUUID);
        }
        return activeItems.put(playerUUID, item);
    }

    public TreasureChestItem removeActiveItem(UUID playerUUID) {
        return activeItems.remove(playerUUID);
    }

    public PlayerTreasureChestContent getChestContentIfLoaded(UUID playerUUID) {
        return loadedChests.get(playerUUID);
    }

    public PlayerTreasureChestContent getChestContent(UUID playerUUID) {
        PlayerTreasureChestContent loaded = getChestContentIfLoaded(playerUUID);
        if (loaded != null) {
            return loaded;
        }
        return loadOrCreateChestContent(playerUUID);
    }

    private PlayerTreasureChestContent loadOrCreateChestContent(UUID playerUUID) {
        File playerData = new File(chestContentFolder, playerUUID.toString() + ".yml");
        PlayerTreasureChestContent content = new PlayerTreasureChestContent(plugin, playerData);
        loadedChests.put(playerUUID, content);
        return content;
    }

    public void doGC() {
        long t = System.currentTimeMillis();
        for (Player player : plugin.getServer().getOnlinePlayers()) {
            PlayerTreasureChestContent content = loadedChests.get(player.getUniqueId());
            if (content != null) {
                content.setOnline(t);
            }
        }
        Iterator<PlayerTreasureChestContent> it = loadedChests.values().iterator();
        while (it.hasNext()) {
            if (!it.next().isOnline(t)) {
                it.remove();
            }
        }
    }
}