diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java index 8b6b2d51f16..d6eb229dd59 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsPlayerListener.java @@ -6,6 +6,7 @@ import com.earth2me.essentials.textreader.KeywordReplacer; import com.earth2me.essentials.textreader.TextInput; import com.earth2me.essentials.textreader.TextPager; +import com.earth2me.essentials.userstorage.ModernUserMap; import com.earth2me.essentials.utils.AdventureUtil; import com.earth2me.essentials.utils.CommonPlaceholders; import com.earth2me.essentials.utils.DateUtil; @@ -345,6 +346,7 @@ public void delayedJoin(final Player player, final String message) { ess.getBackup().onPlayerJoin(); final User dUser = ess.getUser(player); + ((ModernUserMap) ess.getUsers()).getOnlineUserCache().put(player.getUniqueId(), dUser); dUser.update(player); dUser.startTransaction(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/UserData.java b/Essentials/src/main/java/com/earth2me/essentials/UserData.java index c5e8fc67ff9..6d2067d51a1 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/UserData.java +++ b/Essentials/src/main/java/com/earth2me/essentials/UserData.java @@ -74,6 +74,7 @@ public final void reset() { public final void cleanup() { config.blockingSave(); + ess.getUsers().invalidate(getConfigUUID()); } @Override 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 6c9351c0d06..31a2902881d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java +++ b/Essentials/src/main/java/com/earth2me/essentials/userstorage/ModernUserMap.java @@ -24,6 +24,7 @@ public class ModernUserMap extends CacheLoader implements IUserMap { private final transient IEssentials ess; private final transient ModernUUIDCache uuidCache; private final transient LoadingCache userCache; + private final transient ConcurrentMap onlineUserCache; private final boolean debugPrintStackWithWarn; private final long debugMaxWarnsPerType; @@ -50,6 +51,7 @@ public ModernUserMap(final IEssentials ess) { this.debugPrintStackWithWarn = Boolean.parseBoolean(printStackProperty); this.debugLogCache = Boolean.parseBoolean(logCacheProperty); this.debugNonPlayerWarnCounts = new ConcurrentHashMap<>(); + this.onlineUserCache = new ConcurrentHashMap<>(); } @Override @@ -91,6 +93,10 @@ public User getUser(final Player base) { return user; } + public ConcurrentMap getOnlineUserCache() { + return onlineUserCache; + } + @Override public User getUser(final String name) { if (name == null) { @@ -207,6 +213,7 @@ public void blockingSave() { public void invalidate(final UUID uuid) { userCache.invalidate(uuid); uuidCache.removeCache(uuid); + onlineUserCache.remove(uuid); } private File getUserFile(final UUID uuid) { @@ -215,6 +222,7 @@ private File getUserFile(final UUID uuid) { public void shutdown() { uuidCache.shutdown(); + onlineUserCache.clear(); } private void debugLogCache(final User user) {