diff options
Diffstat (limited to 'patches/server/0954-Array-backed-synched-entity-data.patch')
-rw-r--r-- | patches/server/0954-Array-backed-synched-entity-data.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/patches/server/0954-Array-backed-synched-entity-data.patch b/patches/server/0954-Array-backed-synched-entity-data.patch new file mode 100644 index 0000000000..84bf2095b4 --- /dev/null +++ b/patches/server/0954-Array-backed-synched-entity-data.patch @@ -0,0 +1,56 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: jellysquid3 <[email protected]> +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 ccb7d92b6c36b6225a2e640f8cea6c0da37464c8..a043c382c37058032548a5192e17f5f816abe5a6 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 + } + |