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(); } } } }