ChunkTracker.java
net.minecraft.server.level.ChunkTracker
信息
- 全限定名:net.minecraft.server.level.ChunkTracker
- 类型:public abstract class
- 包:net.minecraft.server.level
- 源码路径:src/main/java/net/minecraft/server/level/ChunkTracker.java
- 起始行号:L6
- 继承:DynamicGraphMinFixedPoint
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
protected ChunkTracker(int levelCount, int minQueueSize, int minMapSize) @ L7
- 构造器名:ChunkTracker
- 源码定位:L7
- 修饰符:protected
参数:
- levelCount: int
- minQueueSize: int
- minMapSize: int
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected boolean isSource(long node) @ L11
- 方法名:isSource
- 源码定位:L11
- 返回类型:boolean
- 修饰符:protected
参数:
- node: long
说明:
TODO
protected void checkNeighborsAfterUpdate(long node, int level, boolean onlyDecrease) @ L16
- 方法名:checkNeighborsAfterUpdate
- 源码定位:L16
- 返回类型:void
- 修饰符:protected
参数:
- node: long
- level: int
- onlyDecrease: boolean
说明:
TODO
protected int getComputedLevel(long node, long knownParent, int knownLevelFromParent) @ L34
- 方法名:getComputedLevel
- 源码定位:L34
- 返回类型:int
- 修饰符:protected
参数:
- node: long
- knownParent: long
- knownLevelFromParent: int
说明:
TODO
protected int computeLevelFromNeighbor(long from, long to, int fromLevel) @ L64
- 方法名:computeLevelFromNeighbor
- 源码定位:L64
- 返回类型:int
- 修饰符:protected
参数:
- from: long
- to: long
- fromLevel: int
说明:
TODO
protected abstract int getLevelFromSource(long to) @ L69
- 方法名:getLevelFromSource
- 源码定位:L69
- 返回类型:int
- 修饰符:protected abstract
参数:
- to: long
说明:
TODO
public void update(long node, int newLevelFrom, boolean onlyDecreased) @ L71
- 方法名:update
- 源码定位:L71
- 返回类型:void
- 修饰符:public
参数:
- node: long
- newLevelFrom: int
- onlyDecreased: boolean
说明:
TODO
代码
public abstract class ChunkTracker extends DynamicGraphMinFixedPoint {
protected ChunkTracker(int levelCount, int minQueueSize, int minMapSize) {
super(levelCount, minQueueSize, minMapSize);
}
@Override
protected boolean isSource(long node) {
return node == ChunkPos.INVALID_CHUNK_POS;
}
@Override
protected void checkNeighborsAfterUpdate(long node, int level, boolean onlyDecrease) {
if (!onlyDecrease || level < this.levelCount - 2) {
ChunkPos pos = ChunkPos.unpack(node);
int x = pos.x();
int z = pos.z();
for (int offsetX = -1; offsetX <= 1; offsetX++) {
for (int offsetZ = -1; offsetZ <= 1; offsetZ++) {
long neighbor = ChunkPos.pack(x + offsetX, z + offsetZ);
if (neighbor != node) {
this.checkNeighbor(node, neighbor, level, onlyDecrease);
}
}
}
}
}
@Override
protected int getComputedLevel(long node, long knownParent, int knownLevelFromParent) {
int computedLevel = knownLevelFromParent;
ChunkPos pos = ChunkPos.unpack(node);
int x = pos.x();
int z = pos.z();
for (int offsetX = -1; offsetX <= 1; offsetX++) {
for (int offsetZ = -1; offsetZ <= 1; offsetZ++) {
long neighbor = ChunkPos.pack(x + offsetX, z + offsetZ);
if (neighbor == node) {
neighbor = ChunkPos.INVALID_CHUNK_POS;
}
if (neighbor != knownParent) {
int costFromNeighbor = this.computeLevelFromNeighbor(neighbor, node, this.getLevel(neighbor));
if (computedLevel > costFromNeighbor) {
computedLevel = costFromNeighbor;
}
if (computedLevel == 0) {
return computedLevel;
}
}
}
}
return computedLevel;
}
@Override
protected int computeLevelFromNeighbor(long from, long to, int fromLevel) {
return from == ChunkPos.INVALID_CHUNK_POS ? this.getLevelFromSource(to) : fromLevel + 1;
}
protected abstract int getLevelFromSource(long to);
public void update(long node, int newLevelFrom, boolean onlyDecreased) {
this.checkEdge(ChunkPos.INVALID_CHUNK_POS, node, newLevelFrom, onlyDecreased);
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
ChunkPos.pack(), ChunkPos.unpack()
- 引用位置:
-
- 引用位置:
继承
- 引用位置: