mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-04 02:01:44 +01:00
a73ed9572e
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: b76ceb4f5 PR-1235: Move EntityType return to base Entity class e795d7490 SPIGOT-7458: Exception when Entity CommandSender executes Vanilla command 46c7fc3b1 SPIGOT-7452: Player#openSign cannot edit d91e5aa0b SPIGOT-7447: Rewrite --forceUpgrade to minimise diff and properly handle CraftBukkit world layout 921ae06d6 Revert "SPIGOT-7447: Fix --forceUpgrade" Spigot Changes: 94e187b5 Rebuild patches 3bce7935 SPIGOT-7091: Update bungeecord-chat
56 lines
2.5 KiB
Diff
56 lines
2.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: jellysquid3 <jellysquid3@users.noreply.github.com>
|
|
Date: Sat, 8 Jul 2023 21:38:05 +0200
|
|
Subject: [PATCH] Array backed synched entity data
|
|
|
|
Original code by jellysquid3 in Lithium, licensed under the GNU Lesser General Public License v3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
|
|
|
|
diff --git a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
|
|
index 15add3f4dfd718ec09bb1db4f22223466936879c..5dfb35117c285e0b202dc9c088ad5848beb8d054 100644
|
|
--- a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
|
|
+++ b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java
|
|
@@ -34,6 +34,11 @@ public class SynchedEntityData {
|
|
private final Int2ObjectMap<SynchedEntityData.DataItem<?>> itemsById = new Int2ObjectOpenHashMap();
|
|
// private final ReadWriteLock lock = new ReentrantReadWriteLock(); // Spigot - not required
|
|
private boolean isDirty;
|
|
+ // Paper start - array backed synched entity data
|
|
+ private static final int DEFAULT_ENTRY_COUNT = 10;
|
|
+ private static final int GROW_FACTOR = 8;
|
|
+ private SynchedEntityData.DataItem<?>[] itemsArray = new SynchedEntityData.DataItem<?>[DEFAULT_ENTRY_COUNT];
|
|
+ // Paper end
|
|
|
|
public SynchedEntityData(Entity trackedEntity) {
|
|
this.entity = trackedEntity;
|
|
@@ -103,6 +108,15 @@ public class SynchedEntityData {
|
|
// this.lock.writeLock().lock(); // Spigot - not required
|
|
this.itemsById.put(key.getId(), datawatcher_item);
|
|
// this.lock.writeLock().unlock(); // Spigot - not required
|
|
+ // Paper start - array backed synched entity data
|
|
+ if (this.itemsArray.length <= key.getId()) {
|
|
+ final int newSize = Math.min(key.getId() + GROW_FACTOR, MAX_ID_VALUE);
|
|
+
|
|
+ this.itemsArray = java.util.Arrays.copyOf(this.itemsArray, newSize);
|
|
+ }
|
|
+
|
|
+ this.itemsArray[key.getId()] = datawatcher_item;
|
|
+ // Paper end
|
|
}
|
|
|
|
public <T> boolean hasItem(EntityDataAccessor<T> key) {
|
|
@@ -130,7 +144,15 @@ public class SynchedEntityData {
|
|
|
|
return datawatcher_item;
|
|
*/
|
|
- return (SynchedEntityData.DataItem) this.itemsById.get(key.getId());
|
|
+ // Paper start - array backed synched entity data
|
|
+ final int id = key.getId();
|
|
+
|
|
+ if (id < 0 || id >= this.itemsArray.length) {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ return (DataItem<T>) this.itemsArray[id];
|
|
+ // Paper end
|
|
// Spigot end
|
|
}
|
|
|