From b7cfa5e391f252df7cb5d150ef44a4e2576a8150 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 21 Jun 2025 13:45:02 +0200 Subject: [PATCH] fancynpcs: Include minecraft usercache.json to custom UUID cache --- plugins/fancynpcs/VERSION | 2 +- .../uuidcache/MinecraftUsercacheData.java | 8 ++++ .../skins/uuidcache/UUIDFileCache.java | 43 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/uuidcache/MinecraftUsercacheData.java diff --git a/plugins/fancynpcs/VERSION b/plugins/fancynpcs/VERSION index 95500583..902b5cde 100644 --- a/plugins/fancynpcs/VERSION +++ b/plugins/fancynpcs/VERSION @@ -1 +1 @@ -2.5.2.274 \ No newline at end of file +2.5.2.275 \ No newline at end of file diff --git a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/uuidcache/MinecraftUsercacheData.java b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/uuidcache/MinecraftUsercacheData.java new file mode 100644 index 00000000..fdba1e98 --- /dev/null +++ b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/uuidcache/MinecraftUsercacheData.java @@ -0,0 +1,8 @@ +package de.oliver.fancynpcs.skins.uuidcache; + +public record MinecraftUsercacheData( + String name, + String uuid, + String expiresOn +) { +} diff --git a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/uuidcache/UUIDFileCache.java b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/uuidcache/UUIDFileCache.java index 6cbb6fde..6a93b54a 100644 --- a/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/uuidcache/UUIDFileCache.java +++ b/plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/uuidcache/UUIDFileCache.java @@ -1,8 +1,12 @@ package de.oliver.fancynpcs.skins.uuidcache; +import com.google.gson.Gson; import de.oliver.fancynpcs.FancyNpcs; import de.oliver.jdb.JDB; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; import java.io.IOException; import java.util.Map; import java.util.UUID; @@ -10,12 +14,19 @@ import java.util.concurrent.ConcurrentHashMap; public class UUIDFileCache implements UUIDCache { + private final static File usercacheFile = new File("usercache.json"); + private final static Gson gson = new Gson(); private final JDB storage; private final Map cache; + private final Map minecraftUsercache; public UUIDFileCache() { this.storage = new JDB("plugins/FancyNpcs/.data"); this.cache = new ConcurrentHashMap<>(); + this.minecraftUsercache = new ConcurrentHashMap<>(); + + loadMinecraftUsercache(); + load(); } private void load() { @@ -39,6 +50,33 @@ public class UUIDFileCache implements UUIDCache { cache.put(data.username(), data); } } + + FancyNpcs.getInstance().getFancyLogger().debug("Loaded " + cache.size() + " UUIDs from file cache"); + } + + private void loadMinecraftUsercache() { + if (!usercacheFile.exists()) { + FancyNpcs.getInstance().getFancyLogger().debug("Minecraft usercache file does not exist, skipping load."); + return; + } + + MinecraftUsercacheData[] data; + try { + data = gson.fromJson(new FileReader(usercacheFile), MinecraftUsercacheData[].class); + } catch (FileNotFoundException e) { + FancyNpcs.getInstance().getFancyLogger().error("Failed to load Minecraft usercache file"); + return; + } + + if (data == null) { + return; + } + + for (MinecraftUsercacheData d : data) { + minecraftUsercache.put(d.name(), UUID.fromString(d.uuid())); + } + + FancyNpcs.getInstance().getFancyLogger().debug("Loaded " + minecraftUsercache.size() + " UUIDs from Minecraft usercache"); } private void save() { @@ -52,6 +90,11 @@ public class UUIDFileCache implements UUIDCache { @Override public UUID getUUID(String username) { + if (minecraftUsercache.containsKey(username)) { + FancyNpcs.getInstance().getFancyLogger().debug("Found UUID for " + username + ": " + minecraftUsercache.get(username) + " in Minecraft usercache"); + return minecraftUsercache.get(username); + } + if (cache.isEmpty()) { load(); // Load from storage if not present in cache }