package net.scapeemulator.game.msg.encoder; import io.netty.buffer.ByteBufAllocator; import java.io.IOException; import net.scapeemulator.game.msg.MessageEncoder; import net.scapeemulator.game.msg.impl.PlayerUpdateMessage; import net.scapeemulator.game.net.game.GameFrame; import net.scapeemulator.game.net.game.GameFrameBuilder; import net.scapeemulator.game.update.PlayerDescriptor; public final class PlayerUpdateMessageEncoder extends MessageEncoder<PlayerUpdateMessage> { public PlayerUpdateMessageEncoder() { super(PlayerUpdateMessage.class); } @Override public GameFrame encode(ByteBufAllocator alloc, PlayerUpdateMessage message) throws IOException { GameFrameBuilder builder = new GameFrameBuilder(alloc, 225, GameFrame.Type.VARIABLE_SHORT); GameFrameBuilder blockBuilder = new GameFrameBuilder(alloc); builder.switchToBitAccess(); message.getSelfDescriptor().encode(message, builder, blockBuilder); builder.putBits(8, message.getLocalPlayerCount()); for (PlayerDescriptor descriptor : message.getDescriptors()) descriptor.encode(message, builder, blockBuilder); if (blockBuilder.getLength() > 0) { builder.putBits(11, 2047); builder.switchToByteAccess(); builder.putRawBuilder(blockBuilder); } else { builder.switchToByteAccess(); } return builder.toGameFrame(); } }