package net.glowstone.net.codec.play.player; import com.flowpowered.network.Codec; import com.flowpowered.network.util.ByteBufUtils; import io.netty.buffer.ByteBuf; import net.glowstone.net.GlowBufUtils; import net.glowstone.net.message.play.player.BossBarMessage; import net.glowstone.net.message.play.player.BossBarMessage.Action; import net.glowstone.net.message.play.player.BossBarMessage.Color; import net.glowstone.net.message.play.player.BossBarMessage.Division; import net.glowstone.util.TextMessage; import java.io.IOException; import java.util.UUID; public class BossBarCodec implements Codec<BossBarMessage> { @Override public BossBarMessage decode(ByteBuf buffer) throws IOException { UUID uuid = GlowBufUtils.readUuid(buffer); Action action = Action.fromInt(ByteBufUtils.readVarInt(buffer)); switch (action) { case ADD: TextMessage title = GlowBufUtils.readChat(buffer); float health = buffer.readFloat(); Color color = Color.fromInt(ByteBufUtils.readVarInt(buffer)); Division division = Division.fromInt(ByteBufUtils.readVarInt(buffer)); byte flags = buffer.readByte(); return new BossBarMessage(uuid, action, title, health, color, division, flags); case REMOVE: return new BossBarMessage(uuid, action); case UPDATE_HEALTH: health = buffer.readFloat(); return new BossBarMessage(uuid, action, health); case UPDATE_TITLE: title = GlowBufUtils.readChat(buffer); return new BossBarMessage(uuid, action, title); case UPDATE_STYLE: color = Color.fromInt(ByteBufUtils.readVarInt(buffer)); division = Division.fromInt(ByteBufUtils.readVarInt(buffer)); return new BossBarMessage(uuid, action, color, division); case UPDATE_FLAGS: flags = buffer.readByte(); return new BossBarMessage(uuid, action, flags); } //INFO: This return is dead code. We would NPE before on the action line. return null; } @Override public ByteBuf encode(ByteBuf buf, BossBarMessage message) throws IOException { GlowBufUtils.writeUuid(buf, message.getUuid()); ByteBufUtils.writeVarInt(buf, message.getAction().ordinal()); switch (message.getAction()) { case ADD: GlowBufUtils.writeChat(buf, message.getTitle()); buf.writeFloat(message.getHealth()); ByteBufUtils.writeVarInt(buf, message.getColor().ordinal()); ByteBufUtils.writeVarInt(buf, message.getDivision().ordinal()); buf.writeByte(message.getFlags()); break; case UPDATE_HEALTH: buf.writeFloat(message.getHealth()); break; case UPDATE_TITLE: GlowBufUtils.writeChat(buf, message.getTitle()); break; case UPDATE_STYLE: ByteBufUtils.writeVarInt(buf, message.getColor().ordinal()); ByteBufUtils.writeVarInt(buf, message.getDivision().ordinal()); break; case UPDATE_FLAGS: buf.writeByte(message.getFlags()); break; } return buf; } }