package net.anvilcraft.anvillib.cosmetics; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; public class CosmeticsManager { private static List providers = new ArrayList<>(); private static Map> cosmeticCache = new HashMap<>(); private static Set activePlayers = new HashSet<>(); private static void refresh() { boolean doRefresh = false; for (ICosmeticProvider provider : providers) { doRefresh = doRefresh || provider.requestsRefresh(); } if (!doRefresh) return; cosmeticCache.clear(); for (UUID uuid : activePlayers) { loadPlayer(uuid); } } private static void loadPlayer(UUID player) { if (cosmeticCache.containsKey(player)) return; cosmeticCache.put(player, new ArrayList<>()); List cosmetics = cosmeticCache.get(player); for (ICosmeticProvider provider : providers) { provider.addCosmetics(player, (cosmetic) -> cosmetics.add(cosmetic)); } } public static void registerProvider(ICosmeticProvider provider) { providers.add(provider); } protected static List getCosmeticsForPlayer(UUID uuid) { if (!activePlayers.contains(uuid)) { activePlayers.add(uuid); loadPlayer(uuid); } refresh(); return cosmeticCache.get(uuid); } }