ChunkLoadCounter.java
net.minecraft.server.level.ChunkLoadCounter
信息
- 全限定名:net.minecraft.server.level.ChunkLoadCounter
- 类型:public class
- 包:net.minecraft.server.level
- 源码路径:src/main/java/net/minecraft/server/level/ChunkLoadCounter.java
- 起始行号:L9
- 职责:
TODO
字段/常量
-
pendingChunks- 类型:
List<ChunkHolder> - 修饰符:
private final - 源码定位:
L10 - 说明:
TODO
- 类型:
-
totalChunks- 类型:
int - 修饰符:
private - 源码定位:
L11 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public void track(ServerLevel level, Runnable scheduler) @ L13
- 方法名:track
- 源码定位:L13
- 返回类型:void
- 修饰符:public
参数:
- level: ServerLevel
- scheduler: Runnable
说明:
TODO
public int readyChunks() @ L28
- 方法名:readyChunks
- 源码定位:L28
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public int pendingChunks() @ L32
- 方法名:pendingChunks
- 源码定位:L32
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public int totalChunks() @ L37
- 方法名:totalChunks
- 源码定位:L37
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class ChunkLoadCounter {
private final List<ChunkHolder> pendingChunks = new ArrayList<>();
private int totalChunks;
public void track(ServerLevel level, Runnable scheduler) {
ServerChunkCache chunkSource = level.getChunkSource();
LongSet alreadyLoadedChunks = new LongOpenHashSet();
chunkSource.runDistanceManagerUpdates();
chunkSource.chunkMap.allChunksWithAtLeastStatus(ChunkStatus.FULL).forEach(chunkHolder -> alreadyLoadedChunks.add(chunkHolder.getPos().pack()));
scheduler.run();
chunkSource.runDistanceManagerUpdates();
chunkSource.chunkMap.allChunksWithAtLeastStatus(ChunkStatus.FULL).forEach(chunkHolder -> {
if (!alreadyLoadedChunks.contains(chunkHolder.getPos().pack())) {
this.pendingChunks.add(chunkHolder);
this.totalChunks++;
}
});
}
public int readyChunks() {
return this.totalChunks - this.pendingChunks();
}
public int pendingChunks() {
this.pendingChunks.removeIf(chunkHolder -> chunkHolder.getLatestStatus() == ChunkStatus.FULL);
return this.pendingChunks.size();
}
public int totalChunks() {
return this.totalChunks;
}
}引用的其他类
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置: