Paper/Spigot-Server-Patches/0122-Cache-user-authenticator-threads.patch
Shane Freeder bd0337b7a9
Updated Upstream (Bukkit/CraftBukkit/Spigot)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
7dd1cfcd PortalEvent additions

CraftBukkit Changes:
e8cb2f51 SPIGOT-5252: Nether portal fixes and additions
fde78ef3 SPIGOT-5477: Server not shutting down

Spigot Changes:
037559e7 Rebuild patches
2020-01-13 22:36:41 +00:00

72 lines
3.3 KiB
Diff

From 1ec4298e0b8623b4f2771f75916053b23a0d225c Mon Sep 17 00:00:00 2001
From: vemacs <d@nkmem.es>
Date: Wed, 23 Nov 2016 08:31:45 -0500
Subject: [PATCH] Cache user authenticator threads
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
index 12156b6e5..47978174e 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -4,7 +4,9 @@ import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import com.mojang.datafixers.util.Either;
import io.netty.util.concurrent.Future;
+import java.util.ArrayDeque; // Paper
import java.util.Collection;
+import java.util.Deque; // Paper
import java.util.Iterator;
import java.util.List;
import java.util.OptionalInt;
@@ -41,7 +43,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
public PlayerConnection playerConnection;
public final MinecraftServer server;
public final PlayerInteractManager playerInteractManager;
- public final List<Integer> removeQueue = Lists.newLinkedList();
+ public final Deque<Integer> removeQueue = new ArrayDeque<>(); // Paper
private final AdvancementDataPlayer advancementDataPlayer;
private final ServerStatisticManager serverStatisticManager;
private float lastHealthScored = Float.MIN_VALUE;
@@ -367,13 +369,20 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
while (!this.removeQueue.isEmpty()) {
int i = Math.min(this.removeQueue.size(), Integer.MAX_VALUE);
int[] aint = new int[i];
- Iterator<Integer> iterator = this.removeQueue.iterator();
+ //Iterator<Integer> iterator = this.removeQueue.iterator(); // Paper
int j = 0;
- while (iterator.hasNext() && j < i) {
+ // Paper start
+ /* while (iterator.hasNext() && j < i) {
aint[j++] = (Integer) iterator.next();
iterator.remove();
+ } */
+
+ Integer integer;
+ while (j < i && (integer = this.removeQueue.poll()) != null) {
+ aint[j++] = integer.intValue();
}
+ // Paper end
this.playerConnection.sendPacket(new PacketPlayOutEntityDestroy(aint));
}
@@ -1326,7 +1335,14 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
this.lastHealthSent = -1.0F;
this.lastFoodSent = -1;
// this.recipeBook.a((RecipeBook) entityplayer.recipeBook); // CraftBukkit
- this.removeQueue.addAll(entityplayer.removeQueue);
+ // Paper start - Optimize remove queue - vanilla copies player objects, but CB doesn't. This method currently only
+ // Applies to the same player, so we need to not duplicate our removal queue. The rest of this method does "resetting"
+ // type logic so it does need to be called, maybe? This is silly.
+ //this.removeQueue.addAll(entityplayer.removeQueue);
+ if (this.removeQueue != entityplayer.removeQueue) {
+ this.removeQueue.addAll(entityplayer.removeQueue);
+ }
+ // Paper end
this.cm = entityplayer.cm;
this.cr = entityplayer.cr;
this.setShoulderEntityLeft(entityplayer.getShoulderEntityLeft());
--
2.24.1