From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Sat, 26 Oct 2024 18:09:08 +0900 Subject: [PATCH] Load player data asynchronously diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java index 19d3423644a6a394743c09eb6935bb7633a329a2..7c9edbe4073bb63c680c9839aa38d92139a90b81 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -76,7 +76,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, // CraftBukkit end private static final AtomicInteger UNIQUE_THREAD_ID = new AtomicInteger(0); static final Logger LOGGER = LogUtils.getLogger(); - private static final java.util.concurrent.ExecutorService authenticatorPool = java.util.concurrent.Executors.newCachedThreadPool(new com.google.common.util.concurrent.ThreadFactoryBuilder().setNameFormat("User Authenticator #%d").setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(LOGGER)).build()); // Paper - Cache authenticator threads + public static final java.util.concurrent.ExecutorService authenticatorPool = java.util.concurrent.Executors.newCachedThreadPool(new com.google.common.util.concurrent.ThreadFactoryBuilder().setNameFormat("User Authenticator #%d").setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(LOGGER)).build()); // Paper - Cache authenticator threads // Plazma - private -> public private static final int MAX_TICKS_BEFORE_LOGIN = 600; private final byte[] challenge; final MinecraftServer server; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java index 69ff5380eedb3e0b214324dec50bb5c0eb65001b..a044b9393e54bb46794ec477cb11bdacf62e0181 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -183,6 +183,16 @@ public abstract class PlayerList { abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie clientData) { + // Plazma start - load player information asynchronously + if (!org.plazmamc.plazma.configurations.GlobalConfiguration.get().player.loadAsynchronously) + this.placeNewPlayer(connection, player, clientData, this.load(player)); + else java.util.concurrent.CompletableFuture + .supplyAsync(() -> this.load(player), net.minecraft.server.network.ServerLoginPacketListenerImpl.authenticatorPool) + .thenAcceptAsync(nbt -> this.placeNewPlayer(connection, player, clientData, nbt), this.server); + } + + private void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie clientData, Optional optional) { + // Plazma end - load player information asynchronously player.isRealPlayer = true; // Paper player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed GameProfile gameprofile = player.getGameProfile(); @@ -191,14 +201,13 @@ public abstract class PlayerList { String s; if (usercache != null) { - Optional optional = usercache.get(gameprofile.getId()); // CraftBukkit - decompile error - s = (String) optional.map(GameProfile::getName).orElse(gameprofile.getName()); + s = usercache.get(gameprofile.getId()).map(GameProfile::getName).orElse(gameprofile.getName()); // CraftBukkit - decompile error // Plazma - varname conflict usercache.add(gameprofile); } else { s = gameprofile.getName(); } - Optional optional = this.load(player); // CraftBukkit - decompile error + // Optional optional = this.load(player); // CraftBukkit - decompile error // Plazma - extract ResourceKey resourcekey = null; // Paper // CraftBukkit start - Better rename detection if (optional.isPresent()) { diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java index 7ef541c5d8306ef66214e7150aca0fa53c14d12a..9de9b3f2148216df41258d503fa1de896cca4771 100644 --- a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java +++ b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java @@ -28,6 +28,7 @@ public class GlobalConfiguration extends ConfigurationPart { public class Player extends ConfigurationPart { public boolean checkSpectatorMovedToQuickly = !OPTIMIZE; + public boolean loadAsynchronously = OPTIMIZE; public FreedomChat freedomChat; public class FreedomChat extends ConfigurationPart {