package com.alttd.playerutils.config; import com.alttd.playerutils.util.Logger; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.bukkit.configuration.ConfigurationSection; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.UUID; public class KeyStorage extends AbstractConfig { static KeyStorage config; private final Logger logger; public KeyStorage(Logger logger) { super( new File(File.separator + "mnt" + File.separator + "configs" + File.separator + "PlayerUtils"), "key_storage.yml", logger); this.logger = logger; } public static void reload(Logger logger) { logger.info("Reloading key storage"); config = new KeyStorage(logger); config.readConfig(KeyStorage.class, null); } public static class STORAGE { private static final String prefix = "storage."; public static HashMap> KEYS = new HashMap<>(); @SuppressWarnings("unused") private static void load() { save(); KEYS.clear(); for (String crate : Config.KEY.CRATES.keySet()) { Object2IntOpenHashMap count = new Object2IntOpenHashMap<>(); ConfigurationSection configurationSection = config.getConfigurationSection(prefix + crate); if (configurationSection == null) { config.logger.info(String.format("No section yet for crate %s", crate)); KEYS.put(crate, count); continue; } List uuids = configurationSection.getKeys(false).stream().map(UUID::fromString).toList(); if (uuids.isEmpty()) { config.logger.info(String.format("No keys yet for crate %s", crate)); KEYS.put(crate, count); continue; } for (UUID uuid : uuids) { int keys = config.getInt(prefix + crate + ".", uuid.toString(), 0); count.put(uuid, keys); } KEYS.put(crate, count); } } public synchronized static void save() { config.logger.info("Saving KeyStorage"); KEYS.keySet() .forEach(crate -> KEYS.get(crate) .forEach((uuid, keys) -> config.set(prefix + crate + ".", uuid.toString(), keys))); } } }