package net.glowstone.net.codec.play.game;
import com.flowpowered.network.Codec;
import com.flowpowered.network.util.ByteBufUtils;
import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.DecoderException;
import net.glowstone.net.message.play.game.BlockChangeMessage;
import net.glowstone.net.message.play.game.MultiBlockChangeMessage;
import java.io.IOException;
import java.util.List;
public final class MultiBlockChangeCodec implements Codec<MultiBlockChangeMessage> {
@Override
public MultiBlockChangeMessage decode(ByteBuf buf) throws IOException {
throw new DecoderException("Cannot decode MultiBlockChangeMessage");
}
@Override
public ByteBuf encode(ByteBuf buf, MultiBlockChangeMessage message) throws IOException {
List<BlockChangeMessage> records = message.getRecords();
buf.writeInt(message.getChunkX());
buf.writeInt(message.getChunkZ());
ByteBufUtils.writeVarInt(buf, records.size());
for (BlockChangeMessage record : records) {
// XZY
int pos = (record.getX() & 0xF) << 12 |
(record.getZ() & 0xF) << 8 |
record.getY() & 0xFF;
buf.writeShort(pos);
ByteBufUtils.writeVarInt(buf, record.getType());
}
return buf;
}
}