49 lines
1.5 KiB
Java
49 lines
1.5 KiB
Java
package net.minecraft.server.level;
|
|
|
|
import net.minecraft.world.level.TicketStorage;
|
|
|
|
class LoadingChunkTracker extends ChunkTracker {
|
|
private static final int MAX_LEVEL = ChunkLevel.MAX_LEVEL + 1;
|
|
private final DistanceManager distanceManager;
|
|
private final TicketStorage ticketStorage;
|
|
|
|
public LoadingChunkTracker(DistanceManager distanceManager, TicketStorage ticketStorage) {
|
|
super(MAX_LEVEL + 1, 16, 256);
|
|
this.distanceManager = distanceManager;
|
|
this.ticketStorage = ticketStorage;
|
|
ticketStorage.setLoadingChunkUpdatedListener(this::update);
|
|
}
|
|
|
|
@Override
|
|
protected int getLevelFromSource(long pos) {
|
|
return this.ticketStorage.getTicketLevelAt(pos, false);
|
|
}
|
|
|
|
@Override
|
|
protected int getLevel(long chunkPos) {
|
|
if (!this.distanceManager.isChunkToRemove(chunkPos)) {
|
|
ChunkHolder chunkHolder = this.distanceManager.getChunk(chunkPos);
|
|
if (chunkHolder != null) {
|
|
return chunkHolder.getTicketLevel();
|
|
}
|
|
}
|
|
|
|
return MAX_LEVEL;
|
|
}
|
|
|
|
@Override
|
|
protected void setLevel(long chunkPos, int level) {
|
|
ChunkHolder chunkHolder = this.distanceManager.getChunk(chunkPos);
|
|
int i = chunkHolder == null ? MAX_LEVEL : chunkHolder.getTicketLevel();
|
|
if (i != level) {
|
|
chunkHolder = this.distanceManager.updateChunkScheduling(chunkPos, level, chunkHolder, i);
|
|
if (chunkHolder != null) {
|
|
this.distanceManager.chunksToUpdateFutures.add(chunkHolder);
|
|
}
|
|
}
|
|
}
|
|
|
|
public int runDistanceUpdates(int toUpdateCount) {
|
|
return this.runUpdates(toUpdateCount);
|
|
}
|
|
}
|