Skip to content

Commit

Permalink
Some attempt to fix some tracking issues
Browse files Browse the repository at this point in the history
  • Loading branch information
ishland committed Dec 21, 2022
1 parent 25221b5 commit 9b8c50d
Showing 1 changed file with 16 additions and 6 deletions.
Expand Up @@ -73,6 +73,15 @@ public void removePlayer(ServerPlayerEntity player) {
}
}

private final ReferenceLinkedOpenHashSet<ThreadedAnvilChunkStorage.EntityTracker> trackerTickList = new ReferenceLinkedOpenHashSet<>() {
@Override
protected void rehash(int newN) {
if (this.n < newN) {
super.rehash(newN);
}
}
};

public void tick() {
for (Reference2LongMap.Entry<ThreadedAnvilChunkStorage.EntityTracker> entry : this.tracker2ChunkPos.reference2LongEntrySet()) {
final ChunkPos pos = ((IThreadedAnvilChunkStorageEntityTracker) entry.getKey()).getEntity().getChunkPos();
Expand All @@ -82,7 +91,8 @@ public void tick() {
}
}

var trackerTickList = new ReferenceOpenHashSet<>(this.areaMap.uniqueObjects());
trackerTickList.clear();

for (var entry : this.playerTrackers.entrySet()) {
final Set<ThreadedAnvilChunkStorage.EntityTracker> currentTrackers = this.areaMap.getObjectsInRange(entry.getKey().getChunkPos().toLong());

Expand All @@ -94,11 +104,10 @@ public void tick() {
for (ObjectListIterator<ThreadedAnvilChunkStorage.EntityTracker> iterator = trackers.iterator(); iterator.hasNext(); ) {
ThreadedAnvilChunkStorage.EntityTracker entityTracker = iterator.next();
if (currentTrackers.contains(entityTracker)) {
final boolean shouldUpdate = isPlayerPositionUpdated || ((EntityTrackerExtension) entityTracker).isPositionUpdated();
if (trackerTickList.add(entityTracker)) {
tryTickTracker(entityTracker);
}
if (shouldUpdate) {
if (isPlayerPositionUpdated || ((EntityTrackerExtension) entityTracker).isPositionUpdated()) {
tryUpdateTracker(entityTracker, entry.getKey());
}
} else {
Expand All @@ -110,17 +119,19 @@ public void tick() {
// update new trackers
for (ThreadedAnvilChunkStorage.EntityTracker entityTracker : currentTrackers) {
if (!trackers.contains(entityTracker)) {
final boolean shouldUpdate = isPlayerPositionUpdated || ((EntityTrackerExtension) entityTracker).isPositionUpdated();
if (trackerTickList.add(entityTracker)) {
tryTickTracker(entityTracker);
}
if (shouldUpdate) {
if (isPlayerPositionUpdated || ((EntityTrackerExtension) entityTracker).isPositionUpdated()) {
tryUpdateTracker(entityTracker, entry.getKey());
}
trackers.add(entityTracker);
}
}
}
for (ThreadedAnvilChunkStorage.EntityTracker entityTracker : trackerTickList) {
((EntityTrackerExtension) entityTracker).updatePosition();
}
}

private static void tryUpdateTracker(ThreadedAnvilChunkStorage.EntityTracker entityTracker, ServerPlayerEntity player) {
Expand All @@ -129,7 +140,6 @@ private static void tryUpdateTracker(ThreadedAnvilChunkStorage.EntityTracker ent

private static void tryTickTracker(ThreadedAnvilChunkStorage.EntityTracker entityTracker) {
((EntityTrackerExtension) entityTracker).tryTick();
((EntityTrackerExtension) entityTracker).updatePosition();
}

private int getChunkViewDistance(ThreadedAnvilChunkStorage.EntityTracker tracker) {
Expand Down

0 comments on commit 9b8c50d

Please sign in to comment.