ClientboundLightUpdatePacketData.java

net.minecraft.network.protocol.game.ClientboundLightUpdatePacketData

信息

  • 全限定名:net.minecraft.network.protocol.game.ClientboundLightUpdatePacketData
  • 类型:public class
  • 包:net.minecraft.network.protocol.game
  • 源码路径:src/main/java/net/minecraft/network/protocol/game/ClientboundLightUpdatePacketData.java
  • 起始行号:L17
  • 职责:

    TODO

字段/常量

  • DATA_LAYER_STREAM_CODEC

    • 类型: StreamCodec<ByteBuf,byte[]>
    • 修饰符: private static final
    • 源码定位: L18
    • 说明:

      TODO

  • skyYMask

    • 类型: BitSet
    • 修饰符: private final
    • 源码定位: L19
    • 说明:

      TODO

  • blockYMask

    • 类型: BitSet
    • 修饰符: private final
    • 源码定位: L20
    • 说明:

      TODO

  • emptySkyYMask

    • 类型: BitSet
    • 修饰符: private final
    • 源码定位: L21
    • 说明:

      TODO

  • emptyBlockYMask

    • 类型: BitSet
    • 修饰符: private final
    • 源码定位: L22
    • 说明:

      TODO

  • skyUpdates

    • 类型: List<byte[]>
    • 修饰符: private final
    • 源码定位: L23
    • 说明:

      TODO

  • blockUpdates

    • 类型: List<byte[]>
    • 修饰符: private final
    • 源码定位: L24
    • 说明:

      TODO

内部类/嵌套类型

构造器

public ClientboundLightUpdatePacketData(ChunkPos chunkPos, LevelLightEngine lightEngine, BitSet skyChangedLightSectionFilter, BitSet blockChangedLightSectionFilter) @ L26

  • 构造器名:ClientboundLightUpdatePacketData
  • 源码定位:L26
  • 修饰符:public

参数:

  • chunkPos: ChunkPos
  • lightEngine: LevelLightEngine
  • skyChangedLightSectionFilter: BitSet
  • blockChangedLightSectionFilter: BitSet

说明:

TODO

public ClientboundLightUpdatePacketData(FriendlyByteBuf input, int x, int z) @ L47

  • 构造器名:ClientboundLightUpdatePacketData
  • 源码定位:L47
  • 修饰符:public

参数:

  • input: FriendlyByteBuf
  • x: int
  • z: int

说明:

TODO

方法

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

public void write(FriendlyByteBuf output) @ L56

  • 方法名:write
  • 源码定位:L56
  • 返回类型:void
  • 修饰符:public

参数:

  • output: FriendlyByteBuf

说明:

TODO

private void prepareSectionData(ChunkPos pos, LevelLightEngine lightEngine, LightLayer layer, int sectionIndex, BitSet mask, BitSet emptyMask, List<byte[]> updates) @ L65

  • 方法名:prepareSectionData
  • 源码定位:L65
  • 返回类型:void
  • 修饰符:private

参数:

  • pos: ChunkPos
  • lightEngine: LevelLightEngine
  • layer: LightLayer
  • sectionIndex: int
  • mask: BitSet
  • emptyMask: BitSet
  • updates: List<byte[]>

说明:

TODO

public BitSet getSkyYMask() @ L79

  • 方法名:getSkyYMask
  • 源码定位:L79
  • 返回类型:BitSet
  • 修饰符:public

参数:

说明:

TODO

public BitSet getEmptySkyYMask() @ L83

  • 方法名:getEmptySkyYMask
  • 源码定位:L83
  • 返回类型:BitSet
  • 修饰符:public

参数:

说明:

TODO

public List<byte[]> getSkyUpdates() @ L87

  • 方法名:getSkyUpdates
  • 源码定位:L87
  • 返回类型:List<byte[]>
  • 修饰符:public

参数:

说明:

TODO

public BitSet getBlockYMask() @ L91

  • 方法名:getBlockYMask
  • 源码定位:L91
  • 返回类型:BitSet
  • 修饰符:public

参数:

说明:

TODO

public BitSet getEmptyBlockYMask() @ L95

  • 方法名:getEmptyBlockYMask
  • 源码定位:L95
  • 返回类型:BitSet
  • 修饰符:public

参数:

说明:

TODO

public List<byte[]> getBlockUpdates() @ L99

  • 方法名:getBlockUpdates
  • 源码定位:L99
  • 返回类型:List<byte[]>
  • 修饰符:public

参数:

说明:

TODO

代码

public class ClientboundLightUpdatePacketData {
    private static final StreamCodec<ByteBuf, byte[]> DATA_LAYER_STREAM_CODEC = ByteBufCodecs.byteArray(2048);
    private final BitSet skyYMask;
    private final BitSet blockYMask;
    private final BitSet emptySkyYMask;
    private final BitSet emptyBlockYMask;
    private final List<byte[]> skyUpdates;
    private final List<byte[]> blockUpdates;
 
    public ClientboundLightUpdatePacketData(
        ChunkPos chunkPos, LevelLightEngine lightEngine, @Nullable BitSet skyChangedLightSectionFilter, @Nullable BitSet blockChangedLightSectionFilter
    ) {
        this.skyYMask = new BitSet();
        this.blockYMask = new BitSet();
        this.emptySkyYMask = new BitSet();
        this.emptyBlockYMask = new BitSet();
        this.skyUpdates = Lists.newArrayList();
        this.blockUpdates = Lists.newArrayList();
 
        for (int sectionIndex = 0; sectionIndex < lightEngine.getLightSectionCount(); sectionIndex++) {
            if (skyChangedLightSectionFilter == null || skyChangedLightSectionFilter.get(sectionIndex)) {
                this.prepareSectionData(chunkPos, lightEngine, LightLayer.SKY, sectionIndex, this.skyYMask, this.emptySkyYMask, this.skyUpdates);
            }
 
            if (blockChangedLightSectionFilter == null || blockChangedLightSectionFilter.get(sectionIndex)) {
                this.prepareSectionData(chunkPos, lightEngine, LightLayer.BLOCK, sectionIndex, this.blockYMask, this.emptyBlockYMask, this.blockUpdates);
            }
        }
    }
 
    public ClientboundLightUpdatePacketData(FriendlyByteBuf input, int x, int z) {
        this.skyYMask = input.readBitSet();
        this.blockYMask = input.readBitSet();
        this.emptySkyYMask = input.readBitSet();
        this.emptyBlockYMask = input.readBitSet();
        this.skyUpdates = input.readList(DATA_LAYER_STREAM_CODEC);
        this.blockUpdates = input.readList(DATA_LAYER_STREAM_CODEC);
    }
 
    public void write(FriendlyByteBuf output) {
        output.writeBitSet(this.skyYMask);
        output.writeBitSet(this.blockYMask);
        output.writeBitSet(this.emptySkyYMask);
        output.writeBitSet(this.emptyBlockYMask);
        output.writeCollection(this.skyUpdates, DATA_LAYER_STREAM_CODEC);
        output.writeCollection(this.blockUpdates, DATA_LAYER_STREAM_CODEC);
    }
 
    private void prepareSectionData(
        ChunkPos pos, LevelLightEngine lightEngine, LightLayer layer, int sectionIndex, BitSet mask, BitSet emptyMask, List<byte[]> updates
    ) {
        DataLayer data = lightEngine.getLayerListener(layer).getDataLayerData(SectionPos.of(pos, lightEngine.getMinLightSection() + sectionIndex));
        if (data != null) {
            if (data.isEmpty()) {
                emptyMask.set(sectionIndex);
            } else {
                mask.set(sectionIndex);
                updates.add(data.copy().getData());
            }
        }
    }
 
    public BitSet getSkyYMask() {
        return this.skyYMask;
    }
 
    public BitSet getEmptySkyYMask() {
        return this.emptySkyYMask;
    }
 
    public List<byte[]> getSkyUpdates() {
        return this.skyUpdates;
    }
 
    public BitSet getBlockYMask() {
        return this.blockYMask;
    }
 
    public BitSet getEmptyBlockYMask() {
        return this.emptyBlockYMask;
    }
 
    public List<byte[]> getBlockUpdates() {
        return this.blockUpdates;
    }
}

引用的其他类