From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> Date: Thu, 24 Jul 2025 14:07:47 +0300 Subject: [PATCH] Optimize collections diff --git a/net/minecraft/core/NonNullList.java b/net/minecraft/core/NonNullList.java index 7e31c5c8659d24948fd45a2d6ee7bdeca6027d27..95221434fd8eef388f0308b72af3f93407a6e09c 100644 --- a/net/minecraft/core/NonNullList.java +++ b/net/minecraft/core/NonNullList.java @@ -14,23 +14,23 @@ public class NonNullList extends AbstractList { private final E defaultValue; public static NonNullList create() { - return new NonNullList<>(Lists.newArrayList(), null); + return new NonNullList<>(new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(), null); // DivineMC - Optimize collections } public static NonNullList createWithCapacity(int initialCapacity) { - return new NonNullList<>(Lists.newArrayListWithCapacity(initialCapacity), null); + return new NonNullList<>(new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(initialCapacity), null); // DivineMC - Optimize collections } public static NonNullList withSize(int size, E defaultValue) { Validate.notNull(defaultValue); Object[] objects = new Object[size]; Arrays.fill(objects, defaultValue); - return new NonNullList<>(Arrays.asList((E[])objects), defaultValue); + return new NonNullList<>(new it.unimi.dsi.fastutil.objects.ObjectArrayList<>((E[])objects), defaultValue); // DivineMC - Optimize collections } @SafeVarargs public static NonNullList of(E defaultValue, E... elements) { - return new NonNullList<>(Arrays.asList(elements), defaultValue); + return new NonNullList<>(new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(elements), defaultValue); // DivineMC - Optimize collections } protected NonNullList(List list, @Nullable E defaultValue) { diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java index de7800b46f7e8c68f24de8476032f2179edc4797..3ca2f56cb31d41e88eb2a3e59c3749fbdef7c85e 100644 --- a/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java @@ -132,8 +132,10 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public final AtomicInteger tickingGenerated = new AtomicInteger(); // Paper - public private final String storageName; private final PlayerMap playerMap = new PlayerMap(); - public final Int2ObjectMap entityMap = new Int2ObjectOpenHashMap<>(); - private final Long2ByteMap chunkTypeCache = new Long2ByteOpenHashMap(); + // DivineMC start - Optimize collections + public final Int2ObjectMap entityMap = new org.bxteam.divinemc.util.map.Int2ObjectConcurrentHashMap<>(); + private final Long2ByteMap chunkTypeCache = it.unimi.dsi.fastutil.longs.Long2ByteMaps.synchronize(new Long2ByteOpenHashMap()); + // DivineMC end - Optimize collections // Paper - rewrite chunk system public int serverViewDistance; public final WorldGenContext worldGenContext; // Paper - public diff --git a/net/minecraft/stats/StatType.java b/net/minecraft/stats/StatType.java index e42b894f0bdecd9417c3d53bfc172cd0726340bc..0865554f79536dc324766346223413c670348600 100644 --- a/net/minecraft/stats/StatType.java +++ b/net/minecraft/stats/StatType.java @@ -11,7 +11,7 @@ import net.minecraft.network.codec.StreamCodec; public class StatType implements Iterable> { private final Registry registry; - private final Map> map = new IdentityHashMap<>(); + private final Map> map = new it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap<>(); // DivineMC - Optimize collections private final Component displayName; private final StreamCodec> streamCodec; diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java index 66ba223dacefb3531c46b144c4499b2b2285eafe..0b7f9af0c4e43115878769043ebd06a09ccdf059 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -253,7 +253,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Override public final List getEntitiesOfClass(final Class entityClass, final AABB boundingBox, final Predicate predicate) { - final List ret = new java.util.ArrayList<>(); + final List ret = new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(); // DivineMC - Optimize collections ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(entityClass, null, boundingBox, ret, predicate); @@ -262,7 +262,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Override public final List moonrise$getHardCollidingEntities(final Entity entity, final AABB box, final Predicate predicate) { - final List ret = new java.util.ArrayList<>(); + final List ret = new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(); // DivineMC - Optimize collections ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getHardCollidingEntities(entity, box, ret, predicate); diff --git a/net/minecraft/world/level/chunk/ProtoChunk.java b/net/minecraft/world/level/chunk/ProtoChunk.java index aa085d8a78a3fb40a214e4b152ab04d9a409f76f..5ed1a8b6ac025d03fdeb408a6eaa00320087f690 100644 --- a/net/minecraft/world/level/chunk/ProtoChunk.java +++ b/net/minecraft/world/level/chunk/ProtoChunk.java @@ -46,7 +46,7 @@ public class ProtoChunk extends ChunkAccess { @Nullable private volatile LevelLightEngine lightEngine; private volatile ChunkStatus status = ChunkStatus.EMPTY; - private final List entities = Lists.newArrayList(); + private final List entities = Collections.synchronizedList(Lists.newArrayList()); // DivineMC - Optimize collections @Nullable private CarvingMask carvingMask; @Nullable