Code/net/minecraft/network/protocol/game/ClientboundLightUpdatePacke...

100 lines
3.8 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.network.protocol.game;
import com.google.common.collect.Lists;
import io.netty.buffer.ByteBuf;
import java.util.BitSet;
import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.core.SectionPos;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.LightLayer;
import net.minecraft.world.level.chunk.DataLayer;
import net.minecraft.world.level.lighting.LevelLightEngine;
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 p_285385_, LevelLightEngine p_285143_, @Nullable BitSet p_285253_, @Nullable BitSet p_285051_) {
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 i = 0; i < p_285143_.getLightSectionCount(); i++) {
if (p_285253_ == null || p_285253_.get(i)) {
this.prepareSectionData(p_285385_, p_285143_, LightLayer.SKY, i, this.skyYMask, this.emptySkyYMask, this.skyUpdates);
}
if (p_285051_ == null || p_285051_.get(i)) {
this.prepareSectionData(p_285385_, p_285143_, LightLayer.BLOCK, i, this.blockYMask, this.emptyBlockYMask, this.blockUpdates);
}
}
}
public ClientboundLightUpdatePacketData(FriendlyByteBuf p_195737_, int p_195738_, int p_195739_) {
this.skyYMask = p_195737_.readBitSet();
this.blockYMask = p_195737_.readBitSet();
this.emptySkyYMask = p_195737_.readBitSet();
this.emptyBlockYMask = p_195737_.readBitSet();
this.skyUpdates = p_195737_.readList(DATA_LAYER_STREAM_CODEC);
this.blockUpdates = p_195737_.readList(DATA_LAYER_STREAM_CODEC);
}
public void write(FriendlyByteBuf p_195750_) {
p_195750_.writeBitSet(this.skyYMask);
p_195750_.writeBitSet(this.blockYMask);
p_195750_.writeBitSet(this.emptySkyYMask);
p_195750_.writeBitSet(this.emptyBlockYMask);
p_195750_.writeCollection(this.skyUpdates, DATA_LAYER_STREAM_CODEC);
p_195750_.writeCollection(this.blockUpdates, DATA_LAYER_STREAM_CODEC);
}
private void prepareSectionData(
ChunkPos p_195742_, LevelLightEngine p_195743_, LightLayer p_195744_, int p_195745_, BitSet p_195746_, BitSet p_195747_, List<byte[]> p_195748_
) {
DataLayer datalayer = p_195743_.getLayerListener(p_195744_).getDataLayerData(SectionPos.of(p_195742_, p_195743_.getMinLightSection() + p_195745_));
if (datalayer != null) {
if (datalayer.isEmpty()) {
p_195747_.set(p_195745_);
} else {
p_195746_.set(p_195745_);
p_195748_.add(datalayer.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;
}
}