geforkt von Mirrors/Paper
89a1469d3f
Their chunk is set to null before removal, so we kept them around.
73 Zeilen
3.0 KiB
Diff
73 Zeilen
3.0 KiB
Diff
From 0418b980eb03e413cbefe1533d029549047dff03 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Sun, 31 Mar 2019 22:02:24 -0700
|
|
Subject: [PATCH] Allow login events to fire only after the server plugins are
|
|
enabled
|
|
|
|
Event threads will simply block until they're ready to accept.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
|
|
index 9e4bc24058..028c23dbe6 100644
|
|
--- a/src/main/java/net/minecraft/server/LoginListener.java
|
|
+++ b/src/main/java/net/minecraft/server/LoginListener.java
|
|
@@ -285,6 +285,36 @@ public class LoginListener implements PacketLoginInListener {
|
|
}
|
|
}
|
|
|
|
+ // Paper start - Delay async prelogin until plugins are ready
|
|
+ private static volatile Object blockingLogins = new Object();
|
|
+
|
|
+ public static void checkStartupAndBlock() {
|
|
+ final Object lock = LoginListener.blockingLogins;
|
|
+ if (lock != null) {
|
|
+ synchronized (lock) {
|
|
+ for (;;) {
|
|
+ if (LoginListener.blockingLogins == null) {
|
|
+ return;
|
|
+ }
|
|
+ try {
|
|
+ lock.wait();
|
|
+ } catch (final InterruptedException ignore) {// handled by the if statement above
|
|
+ Thread.currentThread().interrupt();
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ public static void allowLogins() {
|
|
+ final Object lock = LoginListener.blockingLogins;
|
|
+ synchronized (lock) {
|
|
+ LoginListener.blockingLogins = null;
|
|
+ lock.notifyAll();
|
|
+ }
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
// Spigot start
|
|
public class LoginHandler {
|
|
|
|
@@ -295,6 +325,7 @@ public class LoginListener implements PacketLoginInListener {
|
|
return;
|
|
}
|
|
// Paper end
|
|
+ LoginListener.checkStartupAndBlock(); // Paper - Delay async login events until plugins are ready
|
|
String playerName = i.getName();
|
|
java.net.InetAddress address = ((java.net.InetSocketAddress) networkManager.getSocketAddress()).getAddress();
|
|
java.util.UUID uniqueId = i.getId();
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 6e77fa35b4..70f730996c 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -462,6 +462,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
// Paper end
|
|
|
|
this.server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.POSTWORLD);
|
|
+ LoginListener.allowLogins(); // Paper - Allow logins once postworld
|
|
this.server.getPluginManager().callEvent(new ServerLoadEvent(ServerLoadEvent.LoadType.STARTUP));
|
|
// CraftBukkit end
|
|
|
|
--
|
|
2.21.0
|
|
|