From 95d14ed73f77b328607d73f20149b5ee4f0d0a28 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 2 Feb 2019 10:41:58 +0200 Subject: [PATCH] Rename DataCache to NicknameCache: - Some errors were encountered with removal of DataCache, turns out if a dependency that has dagger modules that use some class, a compile error occurs. Thus the DataCache class was left in place until the uses are removed from the PluginBridge. --- .../djrapitops/plan/PlanBukkitComponent.java | 6 +- .../bukkit/PlayerOnlineListener.java | 10 +- .../djrapitops/plan/PlanBungeeComponent.java | 6 +- .../db/access/queries/PlayerFetchQueries.java | 39 +++++- .../modules/ProxySuperClassBindingModule.java | 6 +- .../plan/modules/SuperClassBindingModule.java | 35 ------ .../plan/system/cache/CacheSystem.java | 12 +- .../plan/system/cache/DataCache.java | 81 +----------- .../plan/system/cache/NicknameCache.java | 118 ++++++++++++++++++ ...yDataCache.java => ProxySessionCache.java} | 9 +- .../plan/system/cache/SessionCache.java | 20 +-- .../processors/player/NameProcessor.java | 12 +- .../processors/player/PlayerProcessors.java | 16 ++- .../plan/system/cache/SessionCacheTest.java | 2 +- .../utilities/dagger/PlanPluginComponent.java | 6 +- .../djrapitops/plan/PlanSpongeComponent.java | 6 +- .../sponge/SpongePlayerListener.java | 10 +- .../plan/PlanVelocityComponent.java | 6 +- 18 files changed, 233 insertions(+), 167 deletions(-) delete mode 100644 Plan/common/src/main/java/com/djrapitops/plan/modules/SuperClassBindingModule.java create mode 100644 Plan/common/src/main/java/com/djrapitops/plan/system/cache/NicknameCache.java rename Plan/common/src/main/java/com/djrapitops/plan/system/cache/{ProxyDataCache.java => ProxySessionCache.java} (84%) diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/PlanBukkitComponent.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/PlanBukkitComponent.java index 14515334e..98ccaaa71 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/PlanBukkitComponent.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/PlanBukkitComponent.java @@ -17,7 +17,10 @@ package com.djrapitops.plan; import com.djrapitops.plan.command.PlanCommand; -import com.djrapitops.plan.modules.*; +import com.djrapitops.plan.modules.APFModule; +import com.djrapitops.plan.modules.FilesModule; +import com.djrapitops.plan.modules.ServerSuperClassBindingModule; +import com.djrapitops.plan.modules.SystemObjectProvidingModule; import com.djrapitops.plan.modules.bukkit.BukkitPlanModule; import com.djrapitops.plan.modules.bukkit.BukkitServerPropertiesModule; import com.djrapitops.plan.modules.bukkit.BukkitSuperClassBindingModule; @@ -36,7 +39,6 @@ import javax.inject.Singleton; @Singleton @Component(modules = { BukkitPlanModule.class, - SuperClassBindingModule.class, SystemObjectProvidingModule.class, APFModule.class, FilesModule.class, diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java index 4ff22cbb8..31a8abda9 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/listeners/bukkit/PlayerOnlineListener.java @@ -22,6 +22,7 @@ import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction import com.djrapitops.plan.db.access.transactions.events.PlayerServerRegisterTransaction; import com.djrapitops.plan.db.access.transactions.events.WorldNameStoreTransaction; import com.djrapitops.plan.system.cache.GeolocationCache; +import com.djrapitops.plan.system.cache.NicknameCache; import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.info.server.ServerInfo; @@ -32,7 +33,6 @@ import com.djrapitops.plan.system.settings.paths.DataGatheringSettings; import com.djrapitops.plan.system.status.Status; import com.djrapitops.plugin.logging.L; import com.djrapitops.plugin.logging.error.ErrorHandler; -import com.djrapitops.plugin.task.RunnableFactory; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -59,10 +59,10 @@ public class PlayerOnlineListener implements Listener { private final ServerInfo serverInfo; private final DBSystem dbSystem; private final GeolocationCache geolocationCache; + private final NicknameCache nicknameCache; private final SessionCache sessionCache; private final ErrorHandler errorHandler; private final Status status; - private final RunnableFactory runnableFactory; @Inject public PlayerOnlineListener( @@ -72,9 +72,9 @@ public class PlayerOnlineListener implements Listener { ServerInfo serverInfo, DBSystem dbSystem, GeolocationCache geolocationCache, + NicknameCache nicknameCache, SessionCache sessionCache, Status status, - RunnableFactory runnableFactory, ErrorHandler errorHandler ) { this.config = config; @@ -83,9 +83,9 @@ public class PlayerOnlineListener implements Listener { this.serverInfo = serverInfo; this.dbSystem = dbSystem; this.geolocationCache = geolocationCache; + this.nicknameCache = nicknameCache; this.sessionCache = sessionCache; this.status = status; - this.runnableFactory = runnableFactory; this.errorHandler = errorHandler; } @@ -185,6 +185,8 @@ public class PlayerOnlineListener implements Listener { AFKListener.AFK_TRACKER.loggedOut(uuid, time); + nicknameCache.removeDisplayName(uuid); + processing.submit(processors.player().banAndOpProcessor(uuid, player::isBanned, player.isOp())); processing.submit(processors.player().endSessionProcessor(uuid, time)); processing.submit(processors.info().playerPageUpdateProcessor(uuid)); diff --git a/Plan/bungeecord/src/main/java/com/djrapitops/plan/PlanBungeeComponent.java b/Plan/bungeecord/src/main/java/com/djrapitops/plan/PlanBungeeComponent.java index 5062b01a2..9fba65e39 100644 --- a/Plan/bungeecord/src/main/java/com/djrapitops/plan/PlanBungeeComponent.java +++ b/Plan/bungeecord/src/main/java/com/djrapitops/plan/PlanBungeeComponent.java @@ -17,7 +17,10 @@ package com.djrapitops.plan; import com.djrapitops.plan.command.PlanProxyCommand; -import com.djrapitops.plan.modules.*; +import com.djrapitops.plan.modules.APFModule; +import com.djrapitops.plan.modules.FilesModule; +import com.djrapitops.plan.modules.ProxySuperClassBindingModule; +import com.djrapitops.plan.modules.SystemObjectProvidingModule; import com.djrapitops.plan.modules.bungee.BungeeCommandModule; import com.djrapitops.plan.modules.bungee.BungeePlanModule; import com.djrapitops.plan.modules.bungee.BungeeServerPropertiesModule; @@ -38,7 +41,6 @@ import javax.inject.Singleton; @Component(modules = { BungeePlanModule.class, BungeeCommandModule.class, - SuperClassBindingModule.class, SystemObjectProvidingModule.class, APFModule.class, FilesModule.class, diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java index 73454ffe2..f22c5f09b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/PlayerFetchQueries.java @@ -19,13 +19,11 @@ package com.djrapitops.plan.db.access.queries; import com.djrapitops.plan.data.container.GeoInfo; import com.djrapitops.plan.data.container.Ping; import com.djrapitops.plan.data.container.UserInfo; +import com.djrapitops.plan.data.store.objects.Nickname; import com.djrapitops.plan.db.access.HasMoreThanZeroQueryStatement; import com.djrapitops.plan.db.access.Query; import com.djrapitops.plan.db.access.QueryStatement; -import com.djrapitops.plan.db.sql.tables.GeoInfoTable; -import com.djrapitops.plan.db.sql.tables.PingTable; -import com.djrapitops.plan.db.sql.tables.UserInfoTable; -import com.djrapitops.plan.db.sql.tables.UsersTable; +import com.djrapitops.plan.db.sql.tables.*; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -199,4 +197,37 @@ public class PlayerFetchQueries { } }; } + + public static Query> playersLastSeenNickname(UUID playerUUID, UUID serverUUID) { + String subQuery = "SELECT MAX(" + NicknamesTable.LAST_USED + ") FROM " + NicknamesTable.TABLE_NAME + + " WHERE " + NicknamesTable.USER_UUID + "=?" + + " AND " + NicknamesTable.SERVER_UUID + "=?" + + " GROUP BY " + NicknamesTable.USER_UUID; + String sql = "SELECT " + NicknamesTable.LAST_USED + ", " + + NicknamesTable.NICKNAME + " FROM " + NicknamesTable.TABLE_NAME + + " WHERE " + NicknamesTable.USER_UUID + "=?" + + " AND " + NicknamesTable.SERVER_UUID + "=?" + + " AND " + NicknamesTable.LAST_USED + "=(" + subQuery + ")"; + return new QueryStatement>(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, playerUUID.toString()); + statement.setString(2, serverUUID.toString()); + statement.setString(3, playerUUID.toString()); + statement.setString(4, serverUUID.toString()); + } + + @Override + public Optional processResults(ResultSet set) throws SQLException { + if (set.next()) { + return Optional.of(new Nickname( + set.getString(NicknamesTable.NICKNAME), + set.getLong(NicknamesTable.LAST_USED), + serverUUID + )); + } + return Optional.empty(); + } + }; + } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/modules/ProxySuperClassBindingModule.java b/Plan/common/src/main/java/com/djrapitops/plan/modules/ProxySuperClassBindingModule.java index 900a5b30a..6a0fa289a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/modules/ProxySuperClassBindingModule.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/modules/ProxySuperClassBindingModule.java @@ -18,8 +18,8 @@ package com.djrapitops.plan.modules; import com.djrapitops.plan.api.PlanAPI; import com.djrapitops.plan.api.ProxyAPI; -import com.djrapitops.plan.system.cache.DataCache; -import com.djrapitops.plan.system.cache.ProxyDataCache; +import com.djrapitops.plan.system.cache.ProxySessionCache; +import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.database.ProxyDBSystem; import com.djrapitops.plan.system.importing.EmptyImportSystem; @@ -57,7 +57,7 @@ public interface ProxySuperClassBindingModule { ConnectionSystem bindProxyConnectionSystem(ProxyConnectionSystem proxyConnectionSystem); @Binds - DataCache bindProxyDataCache(ProxyDataCache proxyDataCache); + SessionCache bindProxySessionCache(ProxySessionCache proxySessionCache); @Binds ImportSystem bindImportSystem(EmptyImportSystem emptyImportSystem); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/modules/SuperClassBindingModule.java b/Plan/common/src/main/java/com/djrapitops/plan/modules/SuperClassBindingModule.java deleted file mode 100644 index 25f622f3e..000000000 --- a/Plan/common/src/main/java/com/djrapitops/plan/modules/SuperClassBindingModule.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of Player Analytics (Plan). - * - * Plan is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License v3 as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Plan is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Plan. If not, see . - */ -package com.djrapitops.plan.modules; - -import com.djrapitops.plan.system.cache.DataCache; -import com.djrapitops.plan.system.cache.SessionCache; -import dagger.Binds; -import dagger.Module; - -/** - * Module for binding instances of implementations to super classes. - * - * @author Rsl1122 - */ -@Module -public interface SuperClassBindingModule { - - @Binds - SessionCache bindSessionCache(DataCache cache); - -} \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/CacheSystem.java b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/CacheSystem.java index 25d5a806b..87c5d0d89 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/CacheSystem.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/CacheSystem.java @@ -30,18 +30,18 @@ import javax.inject.Singleton; @Singleton public class CacheSystem implements SubSystem { - private final DataCache dataCache; + private final NicknameCache nicknameCache; private final GeolocationCache geolocationCache; @Inject - public CacheSystem(DataCache dataCache, GeolocationCache geolocationCache) { - this.dataCache = dataCache; + public CacheSystem(NicknameCache nicknameCache, GeolocationCache geolocationCache) { + this.nicknameCache = nicknameCache; this.geolocationCache = geolocationCache; } @Override public void enable() throws EnableException { - dataCache.enable(); + nicknameCache.enable(); geolocationCache.enable(); } @@ -50,8 +50,8 @@ public class CacheSystem implements SubSystem { geolocationCache.clearCache(); } - public DataCache getDataCache() { - return dataCache; + public NicknameCache getNicknameCache() { + return nicknameCache; } public GeolocationCache getGeolocationCache() { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/DataCache.java b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/DataCache.java index f90f0d975..408f02e87 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/DataCache.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/DataCache.java @@ -16,90 +16,21 @@ */ package com.djrapitops.plan.system.cache; -import com.djrapitops.plan.api.exceptions.database.DBOpException; -import com.djrapitops.plan.system.SubSystem; -import com.djrapitops.plan.system.database.DBSystem; -import com.djrapitops.plugin.logging.L; -import com.djrapitops.plugin.logging.error.ErrorHandler; - import javax.inject.Inject; import javax.inject.Singleton; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; /** - * This Class contains the Cache. - *

- * Contains: - *

    - *
  • PlayerName cache, used for reducing database calls on chat events
  • - *
  • DisplayName cache, used for reducing database calls on chat events
  • - *
+ * This class is present to not break compiling as some PlanPluginBridge dagger components inject DataCache. * * @author Rsl1122 */ @Singleton -public class DataCache extends SessionCache implements SubSystem { - - private final ErrorHandler errorHandler; - - private final Map displayNames; +@Deprecated +public class DataCache { @Inject - public DataCache( - DBSystem dbSystem, - ErrorHandler errorHandler - ) { - super(dbSystem); - this.errorHandler = errorHandler; - displayNames = new HashMap<>(); + public DataCache() { + } - @Override - public void enable() { - // Nothing to enable - } - - @Override - public void disable() { - displayNames.clear(); - } - - /** - * Used to update PlayerName and DisplayName caches. - * - * @param uuid UUID of the player. - * @param displayName DisplayName of the player. - */ - public void updateDisplayName(UUID uuid, String displayName) { - if (displayName != null) { - displayNames.put(uuid, displayName); - } - } - - /** - * Used to get the player display name in the cache. - *

- * If not cached, one from the database will be cached. - * - * @param uuid UUID of the player. - * @return latest displayName or null if none are saved. - */ - public String getDisplayName(UUID uuid) { - String cached = displayNames.get(uuid); - if (cached == null) { - List nicknames; - try { - nicknames = dbSystem.getDatabase().fetch().getNicknames(uuid); - if (!nicknames.isEmpty()) { - return nicknames.get(nicknames.size() - 1); - } - } catch (DBOpException e) { - errorHandler.log(L.ERROR, this.getClass(), e); - } - } - return cached; - } -} +} \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/NicknameCache.java b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/NicknameCache.java new file mode 100644 index 000000000..676709344 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/NicknameCache.java @@ -0,0 +1,118 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.system.cache; + +import com.djrapitops.plan.api.exceptions.database.DBOpException; +import com.djrapitops.plan.data.store.objects.Nickname; +import com.djrapitops.plan.db.access.queries.PlayerFetchQueries; +import com.djrapitops.plan.system.SubSystem; +import com.djrapitops.plan.system.database.DBSystem; +import com.djrapitops.plan.system.info.server.ServerInfo; +import com.djrapitops.plugin.logging.L; +import com.djrapitops.plugin.logging.error.ErrorHandler; + +import javax.inject.Inject; +import javax.inject.Singleton; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +/** + * Used for caching nicknames when the player is online. + * + * @author Rsl1122 + */ +@Singleton +public class NicknameCache implements SubSystem { + + private final DBSystem dbSystem; + private final ServerInfo serverInfo; + private final ErrorHandler errorHandler; + + private final Map displayNames; + + @Inject + public NicknameCache( + DBSystem dbSystem, + ServerInfo serverInfo, + ErrorHandler errorHandler + ) { + this.dbSystem = dbSystem; + this.serverInfo = serverInfo; + this.errorHandler = errorHandler; + displayNames = new HashMap<>(); + } + + @Override + public void enable() { + // Nothing to enable + } + + @Override + public void disable() { + displayNames.clear(); + } + + /** + * Used to update PlayerName and DisplayName caches. + * + * @param uuid UUID of the player. + * @param displayName DisplayName of the player. + */ + public void updateDisplayName(UUID uuid, String displayName) { + if (displayName != null) { + displayNames.put(uuid, displayName); + } + } + + public void removeDisplayName(UUID uuid) { + displayNames.remove(uuid); + } + + /** + * Used to get the player display name in the cache. + *

+ * If not cached, one from the database will be cached. + * + * @param uuid UUID of the player. + * @return latest displayName or null if none are saved. + */ + public String getDisplayName(UUID uuid) { + String cached = displayNames.get(uuid); + + if (cached == null) { + cached = updateFromDatabase(uuid, cached); + } + return cached; + } + + private String updateFromDatabase(UUID uuid, String cached) { + try { + Optional latest = dbSystem.getDatabase().query( + PlayerFetchQueries.playersLastSeenNickname(uuid, serverInfo.getServerUUID()) + ); + if (latest.isPresent()) { + cached = latest.get().getName(); + displayNames.put(uuid, cached); + } + } catch (DBOpException e) { + errorHandler.log(L.ERROR, this.getClass(), e); + } + return cached; + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxyDataCache.java b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxySessionCache.java similarity index 84% rename from Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxyDataCache.java rename to Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxySessionCache.java index 8e4a7d0f1..de0d94815 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxyDataCache.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/ProxySessionCache.java @@ -18,7 +18,6 @@ package com.djrapitops.plan.system.cache; import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.system.database.DBSystem; -import com.djrapitops.plugin.logging.error.ErrorHandler; import javax.inject.Inject; import javax.inject.Singleton; @@ -26,18 +25,18 @@ import java.util.Optional; import java.util.UUID; /** - * Proxy server specific DataCache. + * Proxy server specific SessionCache. *

* Used for overriding {@link SessionCache#endSession(UUID, long)}. * * @author Rsl1122 */ @Singleton -public class ProxyDataCache extends DataCache { +public class ProxySessionCache extends SessionCache { @Inject - public ProxyDataCache(DBSystem dbSystem, ErrorHandler errorHandler) { - super(dbSystem, errorHandler); + public ProxySessionCache(DBSystem dbSystem) { + super(dbSystem); } @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/SessionCache.java b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/SessionCache.java index 97b34c38d..ec7d130e1 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/cache/SessionCache.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/cache/SessionCache.java @@ -20,6 +20,8 @@ import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.system.database.DBSystem; +import javax.inject.Inject; +import javax.inject.Singleton; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -30,26 +32,28 @@ import java.util.UUID; * * @author Rsl1122 */ +@Singleton public class SessionCache { - private static final Map activeSessions = new HashMap<>(); + private static final Map ACTIVE_SESSIONS = new HashMap<>(); protected final DBSystem dbSystem; + @Inject public SessionCache(DBSystem dbSystem) { this.dbSystem = dbSystem; } public static Map getActiveSessions() { - return activeSessions; + return ACTIVE_SESSIONS; } public static void clear() { - activeSessions.clear(); + ACTIVE_SESSIONS.clear(); } public static void refreshActiveSessionsState() { - for (Session session : activeSessions.values()) { + for (Session session : ACTIVE_SESSIONS.values()) { session.getUnsafe(SessionKeys.WORLD_TIMES).updateState(System.currentTimeMillis()); } } @@ -61,14 +65,14 @@ public class SessionCache { * @return Optional with the session inside it if found. */ public static Optional getCachedSession(UUID uuid) { - return Optional.ofNullable(activeSessions.get(uuid)); + return Optional.ofNullable(ACTIVE_SESSIONS.get(uuid)); } public void cacheSession(UUID uuid, Session session) { if (getCachedSession(uuid).isPresent()) { endSession(uuid, System.currentTimeMillis()); } - activeSessions.put(uuid, session); + ACTIVE_SESSIONS.put(uuid, session); } /** @@ -79,7 +83,7 @@ public class SessionCache { * @throws com.djrapitops.plan.api.exceptions.database.DBOpException If saving failed. */ public Optional endSession(UUID uuid, long time) { - Session session = activeSessions.get(uuid); + Session session = ACTIVE_SESSIONS.get(uuid); if (session == null || session.getUnsafe(SessionKeys.START) > time) { return Optional.empty(); } @@ -95,6 +99,6 @@ public class SessionCache { } protected void removeSessionFromCache(UUID uuid) { - activeSessions.remove(uuid); + ACTIVE_SESSIONS.remove(uuid); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/NameProcessor.java b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/NameProcessor.java index ba8c40836..59e22ae7a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/NameProcessor.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/NameProcessor.java @@ -18,7 +18,7 @@ package com.djrapitops.plan.system.processing.processors.player; import com.djrapitops.plan.data.store.objects.Nickname; import com.djrapitops.plan.db.Database; -import com.djrapitops.plan.system.cache.DataCache; +import com.djrapitops.plan.system.cache.NicknameCache; import com.djrapitops.plan.system.processing.CriticalRunnable; import java.util.UUID; @@ -34,29 +34,29 @@ public class NameProcessor implements CriticalRunnable { private final Nickname nickname; private final Database database; - private final DataCache dataCache; + private final NicknameCache nicknameCache; NameProcessor( UUID uuid, Nickname nickname, Database database, - DataCache dataCache + NicknameCache nicknameCache ) { this.uuid = uuid; this.nickname = nickname; this.database = database; - this.dataCache = dataCache; + this.nicknameCache = nicknameCache; } @Override public void run() { - String cachedDisplayName = dataCache.getDisplayName(uuid); + String cachedDisplayName = nicknameCache.getDisplayName(uuid); boolean sameAsCached = nickname.getName().equals(cachedDisplayName); if (sameAsCached) { return; } - dataCache.updateDisplayName(uuid, nickname.getName()); + nicknameCache.updateDisplayName(uuid, nickname.getName()); database.save().playerDisplayName(uuid, nickname); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java index bbb9f28cf..a2651e314 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/processing/processors/player/PlayerProcessors.java @@ -17,7 +17,8 @@ package com.djrapitops.plan.system.processing.processors.player; import com.djrapitops.plan.data.store.objects.Nickname; -import com.djrapitops.plan.system.cache.DataCache; +import com.djrapitops.plan.system.cache.NicknameCache; +import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.info.server.ServerInfo; import dagger.Lazy; @@ -37,17 +38,20 @@ public class PlayerProcessors { private final Lazy serverInfo; private final Lazy dbSystem; - private final Lazy dataCache; + private final Lazy sessionCache; + private final Lazy nicknameCache; @Inject public PlayerProcessors( Lazy serverInfo, Lazy dbSystem, - Lazy dataCache + Lazy sessionCache, + Lazy nicknameCache ) { this.serverInfo = serverInfo; this.dbSystem = dbSystem; - this.dataCache = dataCache; + this.sessionCache = sessionCache; + this.nicknameCache = nicknameCache; } public BanAndOpProcessor banAndOpProcessor(UUID uuid, BooleanSupplier banned, boolean op) { @@ -55,7 +59,7 @@ public class PlayerProcessors { } public EndSessionProcessor endSessionProcessor(UUID uuid, long time) { - return new EndSessionProcessor(uuid, time, dataCache.get()); + return new EndSessionProcessor(uuid, time, sessionCache.get()); } public KickProcessor kickProcessor(UUID uuid) { @@ -64,6 +68,6 @@ public class PlayerProcessors { public NameProcessor nameProcessor(UUID uuid, String displayName) { Nickname nickname = new Nickname(displayName, System.currentTimeMillis(), serverInfo.get().getServerUUID()); - return new NameProcessor(uuid, nickname, dbSystem.get().getDatabase(), dataCache.get()); + return new NameProcessor(uuid, nickname, dbSystem.get().getDatabase(), nicknameCache.get()); } } \ No newline at end of file diff --git a/Plan/common/src/test/java/com/djrapitops/plan/system/cache/SessionCacheTest.java b/Plan/common/src/test/java/com/djrapitops/plan/system/cache/SessionCacheTest.java index 169fbb1ba..cca57e011 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/system/cache/SessionCacheTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/system/cache/SessionCacheTest.java @@ -56,7 +56,7 @@ public class SessionCacheTest { @Test public void testBungeeReCaching() { - SessionCache cache = new ProxyDataCache(null, null); + SessionCache cache = new ProxySessionCache(null); cache.cacheSession(uuid, session); Session expected = new Session(uuid, serverUUID, 0, "", ""); cache.cacheSession(uuid, expected); diff --git a/Plan/common/src/test/java/utilities/dagger/PlanPluginComponent.java b/Plan/common/src/test/java/utilities/dagger/PlanPluginComponent.java index 4d4877b24..81a0aad70 100644 --- a/Plan/common/src/test/java/utilities/dagger/PlanPluginComponent.java +++ b/Plan/common/src/test/java/utilities/dagger/PlanPluginComponent.java @@ -18,7 +18,10 @@ package utilities.dagger; import com.djrapitops.plan.PlanPlugin; import com.djrapitops.plan.command.PlanCommand; -import com.djrapitops.plan.modules.*; +import com.djrapitops.plan.modules.APFModule; +import com.djrapitops.plan.modules.FilesModule; +import com.djrapitops.plan.modules.ServerSuperClassBindingModule; +import com.djrapitops.plan.modules.SystemObjectProvidingModule; import com.djrapitops.plan.system.PlanSystem; import dagger.BindsInstance; import dagger.Component; @@ -33,7 +36,6 @@ import javax.inject.Singleton; @Singleton @Component(modules = { PlanPluginModule.class, - SuperClassBindingModule.class, SystemObjectProvidingModule.class, APFModule.class, FilesModule.class, diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/PlanSpongeComponent.java b/Plan/sponge/src/main/java/com/djrapitops/plan/PlanSpongeComponent.java index dfbb4ead6..db8c01d30 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/PlanSpongeComponent.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/PlanSpongeComponent.java @@ -17,7 +17,10 @@ package com.djrapitops.plan; import com.djrapitops.plan.command.PlanCommand; -import com.djrapitops.plan.modules.*; +import com.djrapitops.plan.modules.APFModule; +import com.djrapitops.plan.modules.FilesModule; +import com.djrapitops.plan.modules.ServerSuperClassBindingModule; +import com.djrapitops.plan.modules.SystemObjectProvidingModule; import com.djrapitops.plan.modules.sponge.SpongePlanModule; import com.djrapitops.plan.modules.sponge.SpongeServerPropertiesModule; import com.djrapitops.plan.modules.sponge.SpongeSuperClassBindingModule; @@ -36,7 +39,6 @@ import javax.inject.Singleton; @Singleton @Component(modules = { SpongePlanModule.class, - SuperClassBindingModule.class, SystemObjectProvidingModule.class, APFModule.class, FilesModule.class, diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java b/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java index 52699ac19..05b74e4a2 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/system/listeners/sponge/SpongePlayerListener.java @@ -22,6 +22,7 @@ import com.djrapitops.plan.db.access.transactions.events.GeoInfoStoreTransaction import com.djrapitops.plan.db.access.transactions.events.PlayerServerRegisterTransaction; import com.djrapitops.plan.db.access.transactions.events.WorldNameStoreTransaction; import com.djrapitops.plan.system.cache.GeolocationCache; +import com.djrapitops.plan.system.cache.NicknameCache; import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.info.server.ServerInfo; @@ -32,7 +33,6 @@ import com.djrapitops.plan.system.settings.paths.DataGatheringSettings; import com.djrapitops.plan.system.status.Status; import com.djrapitops.plugin.logging.L; import com.djrapitops.plugin.logging.error.ErrorHandler; -import com.djrapitops.plugin.task.RunnableFactory; import org.spongepowered.api.Sponge; import org.spongepowered.api.data.key.Keys; import org.spongepowered.api.entity.living.player.Player; @@ -63,9 +63,9 @@ public class SpongePlayerListener { private final ServerInfo serverInfo; private final DBSystem dbSystem; private final GeolocationCache geolocationCache; + private final NicknameCache nicknameCache; private final SessionCache sessionCache; private final Status status; - private final RunnableFactory runnableFactory; private final ErrorHandler errorHandler; @Inject @@ -76,9 +76,9 @@ public class SpongePlayerListener { ServerInfo serverInfo, DBSystem dbSystem, GeolocationCache geolocationCache, + NicknameCache nicknameCache, SessionCache sessionCache, Status status, - RunnableFactory runnableFactory, ErrorHandler errorHandler ) { this.config = config; @@ -87,9 +87,9 @@ public class SpongePlayerListener { this.serverInfo = serverInfo; this.dbSystem = dbSystem; this.geolocationCache = geolocationCache; + this.nicknameCache = nicknameCache; this.sessionCache = sessionCache; this.status = status; - this.runnableFactory = runnableFactory; this.errorHandler = errorHandler; } @@ -190,6 +190,8 @@ public class SpongePlayerListener { SpongeAFKListener.AFK_TRACKER.loggedOut(uuid, time); + nicknameCache.removeDisplayName(uuid); + boolean banned = isBanned(player.getProfile()); processing.submit(processors.player().banAndOpProcessor(uuid, () -> banned, false)); processing.submit(processors.player().endSessionProcessor(uuid, time)); diff --git a/Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java b/Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java index 8dad18fd6..d6f6ef95d 100644 --- a/Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java +++ b/Plan/velocity/src/main/java/com/djrapitops/plan/PlanVelocityComponent.java @@ -17,7 +17,10 @@ package com.djrapitops.plan; import com.djrapitops.plan.command.PlanProxyCommand; -import com.djrapitops.plan.modules.*; +import com.djrapitops.plan.modules.APFModule; +import com.djrapitops.plan.modules.FilesModule; +import com.djrapitops.plan.modules.ProxySuperClassBindingModule; +import com.djrapitops.plan.modules.SystemObjectProvidingModule; import com.djrapitops.plan.modules.velocity.VelocityCommandModule; import com.djrapitops.plan.modules.velocity.VelocityPlanModule; import com.djrapitops.plan.modules.velocity.VelocityServerPropertiesModule; @@ -38,7 +41,6 @@ import javax.inject.Singleton; @Component(modules = { VelocityPlanModule.class, VelocityCommandModule.class, - SuperClassBindingModule.class, SystemObjectProvidingModule.class, APFModule.class, FilesModule.class,