From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Thu, 28 Mar 2024 13:36:09 -0400 Subject: [PATCH] Cache player profileResult diff --git a/build.gradle.kts b/build.gradle.kts index 57b524c602751e6b8be9052b15a7cee6e1447e7e..6e1c71f4073dc4b43787a3f6599453d9db7bf8bb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,6 +26,10 @@ dependencies { implementation("org.lz4:lz4-java:1.8.0") // LinearPaper end + // Leaf start - Libraries + implementation("com.github.ben-manes.caffeine:caffeine:3.1.8") + // Leaf end - Libraries + // Paper start implementation("org.jline:jline-terminal-jansi:3.26.3") // Leaf - Bump Dependencies implementation("net.minecrell:terminalconsoleappender:1.3.0") diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java index cccf95f68b40b5fc1ac533e9d0d7d2c1c6334df8..a6a1fe9ba187549d13fe1821bf4b8fc37fbe0a0a 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -88,6 +88,11 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, private ServerPlayer player; // CraftBukkit public boolean iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation = false; // Paper - username validation overriding private int velocityLoginMessageId = -1; // Paper - Add Velocity IP Forwarding Support + // Leaf start - Cache player profileResult + private final com.github.benmanes.caffeine.cache.Cache playerProfileResultCahce = com.github.benmanes.caffeine.cache.Caffeine.newBuilder() + .expireAfterWrite(org.dreeam.leaf.config.modules.misc.Cache.cachePlayerProfileResultTimeout, java.util.concurrent.TimeUnit.MINUTES) + .build(); + // Leaf end public ServerLoginPacketListenerImpl(MinecraftServer server, Connection connection, boolean transferred) { this.state = ServerLoginPacketListenerImpl.State.HELLO; @@ -315,7 +320,19 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, String s1 = (String) Objects.requireNonNull(ServerLoginPacketListenerImpl.this.requestedUsername, "Player name not initialized"); try { - ProfileResult profileresult = ServerLoginPacketListenerImpl.this.server.getSessionService().hasJoinedServer(s1, s, this.getAddress()); + // Leaf start - Cache player profileResult + ProfileResult profileresult; + if (org.dreeam.leaf.config.modules.misc.Cache.cachePlayerProfileResult) { + profileresult = playerProfileResultCahce.getIfPresent(s1); + + if (profileresult == null) { + profileresult = ServerLoginPacketListenerImpl.this.server.getSessionService().hasJoinedServer(s1, s, this.getAddress()); + playerProfileResultCahce.put(s1, profileresult); + } + } else { + profileresult = ServerLoginPacketListenerImpl.this.server.getSessionService().hasJoinedServer(s1, s, this.getAddress()); + } + // Leaf end if (profileresult != null) { GameProfile gameprofile = profileresult.profile(); diff --git a/src/main/java/org/dreeam/leaf/config/modules/misc/Cache.java b/src/main/java/org/dreeam/leaf/config/modules/misc/Cache.java new file mode 100644 index 0000000000000000000000000000000000000000..b0a5bfbebb3ad1598ba4164a8f2635862d3e424c --- /dev/null +++ b/src/main/java/org/dreeam/leaf/config/modules/misc/Cache.java @@ -0,0 +1,24 @@ +package org.dreeam.leaf.config.modules.misc; + +import org.dreeam.leaf.config.ConfigModules; +import org.dreeam.leaf.config.EnumConfigCategory; + +public class Cache extends ConfigModules { + + public String getBasePath() { + return EnumConfigCategory.MISC.getBaseKeyName() + ".cache"; + } + + public static boolean cachePlayerProfileResult = true; + public static int cachePlayerProfileResultTimeout = 1440; + + @Override + public void onLoaded() { + cachePlayerProfileResult = config.getBoolean(getBasePath() + ".cache-player-profile-result", cachePlayerProfileResult, """ + Cache the player profile result on they first join. + It's useful if Mojang's verification server is down. + """); + cachePlayerProfileResultTimeout = config.getInt(getBasePath() + ".cache-player-profile-result-timeout", cachePlayerProfileResultTimeout, + "The timeout of the cache. Unit: Minutes."); + } +}