mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-12 06:58:11 +02:00
This is a pretty tiny update with very little changed. Recommended to update from 1.16.2 ASAP as 1.16.2 is now no longer supported. Plugins should mostly remain working as the NMS revision did not change.
69 lines
3.3 KiB
Diff
69 lines
3.3 KiB
Diff
From 0000000000000000000000000000000000000000 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 40d35a7b04ae266214840da676a08f3967401fe2..9d0af9bcdc91996d09db9472fca6682368091efa 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 com.mojang.serialization.DataResult;
|
|
+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.Optional;
|
|
@@ -42,7 +44,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;
|
|
@@ -415,13 +417,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));
|
|
}
|
|
@@ -1407,7 +1416,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.cd = entityplayer.cd;
|
|
this.ci = entityplayer.ci;
|
|
this.setShoulderEntityLeft(entityplayer.getShoulderEntityLeft());
|