From 750ce31fb10e21cbec0e1d7eaf46a4bd0d6f1607 Mon Sep 17 00:00:00 2001 From: Taiyou06 Date: Thu, 17 Jul 2025 21:10:15 +0200 Subject: [PATCH] cache chunk pos --- .../java/org/dreeam/leaf/async/tracker/TrackerTask.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/TrackerTask.java b/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/TrackerTask.java index 2e176243..3c698e96 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/TrackerTask.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/async/tracker/TrackerTask.java @@ -1,10 +1,13 @@ package org.dreeam.leaf.async.tracker; import ca.spottedleaf.moonrise.common.misc.NearbyPlayers; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.FullChunkStatus; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.ChunkPos; import org.dreeam.leaf.util.EntitySlice; import java.util.concurrent.Callable; @@ -23,9 +26,11 @@ public final class TrackerTask implements Callable { NearbyPlayers nearbyPlayers = world.moonrise$getNearbyPlayers(); TrackerCtx ctx = new TrackerCtx(this.world); final Entity[] raw = entities.array(); + Long2ObjectMap chunkCache = new Long2ObjectOpenHashMap<>(); for (int i = entities.start(); i < entities.end(); i++) { final Entity entity = raw[i]; final ChunkMap.TrackedEntity tracker = ((ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity)entity).moonrise$getTrackedEntity(); + long chunkPos = entity.chunkPosition().toLong(); if (tracker == null) { continue; } @@ -33,7 +38,7 @@ public final class TrackerTask implements Callable { ctx.citizensEntity(entity); continue; } - NearbyPlayers.TrackedChunk trackedChunk = nearbyPlayers.getChunk(entity.chunkPosition()); + NearbyPlayers.TrackedChunk trackedChunk = chunkCache.computeIfAbsent(chunkPos, k -> nearbyPlayers.getChunk(ChunkPos.getX(k), ChunkPos.getZ(k))); tracker.leafTick(ctx, trackedChunk); boolean flag = false;