diff --git a/api/src/main/java/de/oliver/fancynpcs/api/utils/SkinFetcher.java b/api/src/main/java/de/oliver/fancynpcs/api/utils/SkinFetcher.java index 73c28f7a..9a745236 100644 --- a/api/src/main/java/de/oliver/fancynpcs/api/utils/SkinFetcher.java +++ b/api/src/main/java/de/oliver/fancynpcs/api/utils/SkinFetcher.java @@ -54,6 +54,10 @@ public static CompletableFuture fetchSkin(String identifier) { // assume it's a username UUID uuid = UUIDFetcher.getUUID(parsedIdentifier); if (uuid != null) { + if (skinCache.containsKey(uuid.toString())) { + return skinCache.get(uuid.toString()); + } + return fetchSkinByUUID(uuid.toString()).join(); } diff --git a/src/main/java/de/oliver/fancynpcs/FancyNpcs.java b/src/main/java/de/oliver/fancynpcs/FancyNpcs.java index fa287c28..c54dba56 100644 --- a/src/main/java/de/oliver/fancynpcs/FancyNpcs.java +++ b/src/main/java/de/oliver/fancynpcs/FancyNpcs.java @@ -146,6 +146,7 @@ public void onEnable() { attributeManager = new AttributeManagerImpl(); skinCache = new SkinCacheYaml(); + skinCache.loadAndInsertToSkinFetcher(); textConfig = new TextConfig("#E33239", "#AD1D23", "#81E366", "#E3CA66", "#E36666", ""); translator = new Translator(textConfig); diff --git a/src/main/java/de/oliver/fancynpcs/utils/SkinCacheYaml.java b/src/main/java/de/oliver/fancynpcs/utils/SkinCacheYaml.java index 23a5823a..a4420c92 100644 --- a/src/main/java/de/oliver/fancynpcs/utils/SkinCacheYaml.java +++ b/src/main/java/de/oliver/fancynpcs/utils/SkinCacheYaml.java @@ -8,6 +8,7 @@ import java.io.File; import java.util.ArrayList; +import java.util.Base64; import java.util.List; public class SkinCacheYaml implements SkinCache { @@ -37,12 +38,14 @@ public List load() { List cache = new ArrayList<>(); - for (String identifier : skinsSection.getKeys(false)) { - ConfigurationSection skinSection = skinsSection.getConfigurationSection(identifier); + for (String identifierBase64 : skinsSection.getKeys(false)) { + ConfigurationSection skinSection = skinsSection.getConfigurationSection(identifierBase64); if (skinSection == null) { continue; } + String identifier = new String(Base64.getDecoder().decode(identifierBase64)); + String value = skinSection.getString("value"); String signature = skinSection.getString("signature"); if (value == null || signature == null) { @@ -79,11 +82,14 @@ public void upsert(SkinFetcher.SkinCacheData skinCacheData) { skinsSection = yaml.createSection("skins"); } - ConfigurationSection skinSection = skinsSection.getConfigurationSection(skinCacheData.skinData().identifier()); + String identifier = Base64.getEncoder().encodeToString(skinCacheData.skinData().identifier().getBytes()); + + ConfigurationSection skinSection = skinsSection.getConfigurationSection(identifier); if (skinSection == null) { - skinSection = skinsSection.createSection(skinCacheData.skinData().identifier()); + skinSection = skinsSection.createSection(identifier); } + skinSection.set("identifier", skinCacheData.skinData().identifier()); skinSection.set("value", skinCacheData.skinData().value()); skinSection.set("signature", skinCacheData.skinData().signature()); skinSection.set("lastUpdated", System.currentTimeMillis()); @@ -109,4 +115,11 @@ public void delete(String identifier) { skinsSection.set(identifier, null); } + + public void loadAndInsertToSkinFetcher() { + List cache = load(); + for (SkinFetcher.SkinCacheData skinCacheData : cache) { + SkinFetcher.skinCache.put(skinCacheData.skinData().identifier(), skinCacheData.skinData()); + } + } }