package com.nukkitx.protocol.bedrock.v313.serializer; import com.nukkitx.network.VarInts; import com.nukkitx.protocol.bedrock.packet.BossEventPacket; import com.nukkitx.protocol.bedrock.v313.BedrockUtils; import com.nukkitx.protocol.serializer.PacketSerializer; import io.netty.buffer.ByteBuf; import lombok.AccessLevel; import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class BossEventSerializer_v313 implements PacketSerializer<BossEventPacket> { public static final BossEventSerializer_v313 INSTANCE = new BossEventSerializer_v313(); @Override public void serialize(ByteBuf buffer, BossEventPacket packet) { VarInts.writeLong(buffer, packet.getBossUniqueEntityId()); VarInts.writeUnsignedInt(buffer, packet.getAction().ordinal()); switch (packet.getAction()) { case REGISTER_PLAYER: case UNREGISTER_PLAYER: VarInts.writeLong(buffer, packet.getPlayerUniqueEntityId()); break; case SHOW: BedrockUtils.writeString(buffer, packet.getTitle()); buffer.writeFloatLE(packet.getHealthPercentage()); // fall through case DARKEN_SKY: buffer.writeShortLE(packet.getDarkenSky()); // fall through case OVERLAY: VarInts.writeUnsignedInt(buffer, packet.getColor()); VarInts.writeUnsignedInt(buffer, packet.getOverlay()); break; case HEALTH_PERCENTAGE: buffer.writeFloatLE(packet.getHealthPercentage()); break; case TITLE: BedrockUtils.writeString(buffer, packet.getTitle()); break; default: throw new RuntimeException("BossEvent transactionType was unknown!"); } } @Override public void deserialize(ByteBuf buffer, BossEventPacket packet) { packet.setBossUniqueEntityId(VarInts.readInt(buffer)); BossEventPacket.Action action = BossEventPacket.Action.values()[VarInts.readUnsignedInt(buffer)]; packet.setAction(action); switch (action) { case REGISTER_PLAYER: case UNREGISTER_PLAYER: packet.setPlayerUniqueEntityId(VarInts.readLong(buffer)); break; case SHOW: packet.setTitle(BedrockUtils.readString(buffer)); packet.setHealthPercentage(buffer.readFloatLE()); // fall through case DARKEN_SKY: packet.setDarkenSky(buffer.readUnsignedShortLE()); // fall through case OVERLAY: packet.setColor(VarInts.readUnsignedInt(buffer)); packet.setOverlay(VarInts.readUnsignedInt(buffer)); break; case HEALTH_PERCENTAGE: packet.setHealthPercentage(buffer.readFloatLE()); break; case TITLE: packet.setTitle(BedrockUtils.readString(buffer)); break; } } }