LoadingChunkTracker.java

net.minecraft.server.level.LoadingChunkTracker

信息

  • 全限定名:net.minecraft.server.level.LoadingChunkTracker
  • 类型:package-private class
  • 包:net.minecraft.server.level
  • 源码路径:src/main/java/net/minecraft/server/level/LoadingChunkTracker.java
  • 起始行号:L5
  • 继承:ChunkTracker
  • 职责:

    TODO

字段/常量

  • MAX_LEVEL

    • 类型: int
    • 修饰符: private static final
    • 源码定位: L6
    • 说明:

      TODO

  • distanceManager

    • 类型: DistanceManager
    • 修饰符: private final
    • 源码定位: L7
    • 说明:

      TODO

  • ticketStorage

    • 类型: TicketStorage
    • 修饰符: private final
    • 源码定位: L8
    • 说明:

      TODO

内部类/嵌套类型

构造器

public LoadingChunkTracker(DistanceManager distanceManager, TicketStorage ticketStorage) @ L10

  • 构造器名:LoadingChunkTracker
  • 源码定位:L10
  • 修饰符:public

参数:

  • distanceManager: DistanceManager
  • ticketStorage: TicketStorage

说明:

TODO

方法

下面的方法块按源码顺序生成。

protected int getLevelFromSource(long to) @ L17

  • 方法名:getLevelFromSource
  • 源码定位:L17
  • 返回类型:int
  • 修饰符:protected

参数:

  • to: long

说明:

TODO

protected int getLevel(long node) @ L22

  • 方法名:getLevel
  • 源码定位:L22
  • 返回类型:int
  • 修饰符:protected

参数:

  • node: long

说明:

TODO

protected void setLevel(long node, int level) @ L34

  • 方法名:setLevel
  • 源码定位:L34
  • 返回类型:void
  • 修饰符:protected

参数:

  • node: long
  • level: int

说明:

TODO

public int runDistanceUpdates(int count) @ L46

  • 方法名:runDistanceUpdates
  • 源码定位:L46
  • 返回类型:int
  • 修饰符:public

参数:

  • count: int

说明:

TODO

代码

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 to) {
        return this.ticketStorage.getTicketLevelAt(to, false);
    }
 
    @Override
    protected int getLevel(long node) {
        if (!this.distanceManager.isChunkToRemove(node)) {
            ChunkHolder chunk = this.distanceManager.getChunk(node);
            if (chunk != null) {
                return chunk.getTicketLevel();
            }
        }
 
        return MAX_LEVEL;
    }
 
    @Override
    protected void setLevel(long node, int level) {
        ChunkHolder chunk = this.distanceManager.getChunk(node);
        int oldLevel = chunk == null ? MAX_LEVEL : chunk.getTicketLevel();
        if (oldLevel != level) {
            chunk = this.distanceManager.updateChunkScheduling(node, level, chunk, oldLevel);
            if (chunk != null) {
                this.distanceManager.chunksToUpdateFutures.add(chunk);
            }
        }
    }
 
    public int runDistanceUpdates(int count) {
        return this.runUpdates(count);
    }
}

引用的其他类