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 989cf44a97e046ff5204184a5ae42504814aebd8..d0e1f73ef1b543c3ad32874dbda0aedf47f51b91 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,6 +24,10 @@ dependencies { } // Leaf end - Legacy config + // Leaf start - Libraries + implementation("com.github.ben-manes.caffeine:caffeine:3.1.8") + // Leaf end + // Paper start implementation("org.jline:jline-terminal-jansi:3.26.1") // 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 00d8b8d4d2d1c73c4eeeaa9483cca2999df65a54..db5d35143ae97bd9e040b3c893b582c03dd18d77 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; @@ -313,7 +318,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..e6e0a193adb5465a24b40bda30c2b180bd93bc6e --- /dev/null +++ b/src/main/java/org/dreeam/leaf/config/modules/misc/Cache.java @@ -0,0 +1,29 @@ +package org.dreeam.leaf.config.modules.misc; + +import org.dreeam.leaf.config.ConfigInfo; +import org.dreeam.leaf.config.EnumConfigCategory; +import org.dreeam.leaf.config.IConfigModule; + +public class Cache implements IConfigModule { + + @Override + public EnumConfigCategory getCategory() { + return EnumConfigCategory.MISC; + } + + @Override + public String getBaseName() { + return "cache"; + } + + @ConfigInfo(baseName = "cache-player-profile-result", comments = """ + Cache the player profile result on they first join. + It's useful if Mojang's verification server is down. + """) + public static boolean cachePlayerProfileResult = true; + + @ConfigInfo(baseName = "cache-player-profile-result-timeout", comments = """ + The timeout of the cache. Unit: Minutes. + """) + public static int cachePlayerProfileResultTimeout = 1440; +}