From e91ce0c44c71769b8616a854f3c83d3ec9af454c Mon Sep 17 00:00:00 2001 From: Josh Roy <10731363+JRoy@users.noreply.github.com> Date: Mon, 10 Oct 2022 20:36:33 -0400 Subject: [PATCH] Fix Essentials#getUser not caching newly created NPC users (#5129) --- .../src/main/java/com/earth2me/essentials/Essentials.java | 5 +++++ .../com/earth2me/essentials/userstorage/ModernUserMap.java | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index c9369255d..75692e220 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -1074,6 +1074,11 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { LOGGER.log(Level.INFO, "Constructing new userfile from base player " + base.getName()); } user = userMap.loadUncachedUser(base); + + // The above method will end up creating a new user, but it will not be added to the cache. + // Since we already call UserMap#getUser() above, we are already okay with adding the user to the cache, + // so we need to manually add the user to the cache in order to avoid a memory leak and maintain behavior. + userMap.addCachedUser(user); } else { user.update(base); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java index 2ea21e487..56e4d5e32 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java +++ b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java @@ -149,6 +149,10 @@ public class ModernUserMap extends CacheLoader implements IUserMap { return null; } + public void addCachedUser(final User user) { + userCache.put(user.getUUID(), user); + } + @Override public Map getNameCache() { return uuidCache.getNameCache();