mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-23 23:57:43 +01:00
b8edb0e130
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 Bukkit Changes: 6b34da8f SPIGOT-7467: Add getAddress to RemoteConsoleCommandSender CraftBukkit Changes: db4ba2897 SPIGOT-7467: Add getAddress to RemoteConsoleCommandSender 4f7ff4dec PR-1246: Add missing AbstractTestingBase to tests which need them f70a7b68d SPIGOT-7465, MC-264979: Fresh installations print NoSuchFileException for server.properties 8ef7afef6 PR-1240: Call BlockGrowEvent for vines that are growing on additional sides of an existing vine block Spigot Changes: d2eba2c8 Rebuild patches
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
|
|
}
|
|
|