9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 23:19:18 +00:00

fix incorrect entity size in async tracker

This commit is contained in:
hayanesuru
2025-07-05 17:07:35 +09:00
parent 7e5b4707ef
commit ebfb4e17d2

View File

@@ -5,11 +5,9 @@ import ca.spottedleaf.moonrise.common.misc.NearbyPlayers;
import ca.spottedleaf.moonrise.patches.chunk_system.level.entity.server.ServerEntityLookup; import ca.spottedleaf.moonrise.patches.chunk_system.level.entity.server.ServerEntityLookup;
import ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity; import ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity;
import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.common.util.concurrent.ThreadFactoryBuilder;
import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ChunkMap;
import net.minecraft.server.level.FullChunkStatus; import net.minecraft.server.level.FullChunkStatus;
import net.minecraft.server.level.ServerEntity;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
@@ -68,11 +66,13 @@ public class MultithreadedTracker {
final ServerEntityLookup entityLookup = (ServerEntityLookup) level.moonrise$getEntityLookup(); final ServerEntityLookup entityLookup = (ServerEntityLookup) level.moonrise$getEntityLookup();
final ReferenceList<Entity> trackerEntities = entityLookup.trackerEntities; final ReferenceList<Entity> trackerEntities = entityLookup.trackerEntities;
final int trackerEntitiesSize = trackerEntities.size();
final Entity[] trackerEntitiesRaw = trackerEntities.getRawDataUnchecked(); final Entity[] trackerEntitiesRaw = trackerEntities.getRawDataUnchecked();
// Move tracking to off-main // Move tracking to off-main
TRACKER_EXECUTOR.execute(() -> { TRACKER_EXECUTOR.execute(() -> {
for (final Entity entity : trackerEntitiesRaw) { for (int i = 0; i < trackerEntitiesSize; i++) {
Entity entity = trackerEntitiesRaw[i];
if (entity == null) continue; if (entity == null) continue;
final ChunkMap.TrackedEntity tracker = ((EntityTrackerEntity) entity).moonrise$getTrackedEntity(); final ChunkMap.TrackedEntity tracker = ((EntityTrackerEntity) entity).moonrise$getTrackedEntity();
@@ -80,7 +80,7 @@ public class MultithreadedTracker {
if (tracker == null) continue; if (tracker == null) continue;
synchronized (tracker) { synchronized (tracker) {
var trackedChunk = nearbyPlayers.getChunk(entity.chunkPosition()); NearbyPlayers.TrackedChunk trackedChunk = nearbyPlayers.getChunk(entity.chunkPosition());
tracker.moonrise$tick(trackedChunk); tracker.moonrise$tick(trackedChunk);
tracker.serverEntity.sendChanges(); tracker.serverEntity.sendChanges();
} }
@@ -94,11 +94,13 @@ public class MultithreadedTracker {
final ReferenceList<Entity> trackerEntities = entityLookup.trackerEntities; final ReferenceList<Entity> trackerEntities = entityLookup.trackerEntities;
final Entity[] trackerEntitiesRaw = trackerEntities.getRawDataUnchecked(); final Entity[] trackerEntitiesRaw = trackerEntities.getRawDataUnchecked();
final Runnable[] sendChangesTasks = new Runnable[trackerEntitiesRaw.length]; final int trackerEntitiesSize = trackerEntities.size();
final Runnable[] tickTask = new Runnable[trackerEntitiesRaw.length]; final Runnable[] sendChangesTasks = new Runnable[trackerEntitiesSize];
final Runnable[] tickTask = new Runnable[trackerEntitiesSize];
int index = 0; int index = 0;
for (final Entity entity : trackerEntitiesRaw) { for (int i = 0; i < trackerEntitiesSize; i++) {
Entity entity = trackerEntitiesRaw[i];
if (entity == null) continue; if (entity == null) continue;
final ChunkMap.TrackedEntity tracker = ((EntityTrackerEntity) entity).moonrise$getTrackedEntity(); final ChunkMap.TrackedEntity tracker = ((EntityTrackerEntity) entity).moonrise$getTrackedEntity();
@@ -107,7 +109,7 @@ public class MultithreadedTracker {
synchronized (tracker) { synchronized (tracker) {
tickTask[index] = tracker.leafTickCompact(nearbyPlayers.getChunk(entity.chunkPosition())); tickTask[index] = tracker.leafTickCompact(nearbyPlayers.getChunk(entity.chunkPosition()));
sendChangesTasks[index] = () -> tracker.serverEntity.sendChanges(); // Collect send changes to task array sendChangesTasks[index] = tracker.serverEntity::sendChanges; // Collect send changes to task array
} }
index++; index++;
} }