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 TreasureChestData {
private HashMap<String, TreasureChestItem> namedItems;
private HashMap<UUID, TreasureChestItem> activeItems;
private HashMap<UUID, PlayerTreasureChestContent> loadedChests;
private TreasureChest plugin;
private File chestContentFolder;
public TreasureChestData(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();
}
}
}
}