Skip to content

Commit ef75362

Browse files
committed
Fix #42 Delay LevelChunkRegion removals by 20 ticks since last access
1 parent 9ce7072 commit ef75362

2 files changed

Lines changed: 16 additions & 3 deletions

File tree

shreddedpaper-server/src/main/java/io/multipaper/shreddedpaper/region/LevelChunkRegion.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import ca.spottedleaf.concurrentutil.executor.queue.PrioritisedTaskQueue;
44
import ca.spottedleaf.moonrise.common.list.IteratorSafeOrderedReferenceSet;
5-
import ca.spottedleaf.moonrise.common.util.TickThread;
65
import it.unimi.dsi.fastutil.longs.LongLinkedOpenHashSet;
76
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
87
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
@@ -44,11 +43,18 @@ public class LevelChunkRegion {
4443
public final List<TickingBlockEntity> pendingBlockEntityTickers = new ReferenceArrayList<>();
4544
private final ObjectOpenHashSet<Mob> navigatingMobs = new ObjectOpenHashSet<>();
4645
private final ObjectLinkedOpenHashSet<BlockEventData> blockEvents = new ObjectLinkedOpenHashSet<>();
46+
private volatile long lastAccessTick;
4747
public ArrayDeque<RedstoneTorchBlock.Toggle> redstoneUpdateInfos;
4848

4949
public LevelChunkRegion(ServerLevel level, RegionPos regionPos) {
5050
this.level = level;
5151
this.regionPos = regionPos;
52+
53+
this.bumpLastAccess();
54+
}
55+
56+
public void bumpLastAccess() {
57+
this.lastAccessTick = this.level.levelData.getGameTime();
5258
}
5359

5460
public synchronized void add(LevelChunk levelChunk) {
@@ -210,7 +216,8 @@ public synchronized void removeBlockEventsIf(Predicate<BlockEventData> predicate
210216
}
211217

212218
public boolean isEmpty() {
213-
return levelChunks.isEmpty()
219+
return this.lastAccessTick < this.level.levelData.getGameTime() - 20
220+
&& levelChunks.isEmpty()
214221
&& playerTickingChunkRequests.isEmpty()
215222
&& tickingEntities.size() == 0
216223
&& scheduledTasks.isEmpty()

shreddedpaper-server/src/main/java/io/multipaper/shreddedpaper/region/LevelChunkRegionMap.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,13 @@ public LevelChunkRegion getOrCreate(RegionPos regionPos) {
4343
}
4444

4545
public LevelChunkRegion get(RegionPos regionPos) {
46-
return regionsLock.optimisticRead(() -> regions.get(regionPos.longKey));
46+
return regionsLock.optimisticRead(() -> {
47+
LevelChunkRegion levelChunkRegion = regions.get(regionPos.longKey);
48+
if (levelChunkRegion != null) {
49+
levelChunkRegion.bumpLastAccess();
50+
}
51+
return levelChunkRegion;
52+
});
4753
}
4854

4955
public void remove(RegionPos regionPos) {

0 commit comments

Comments
 (0)