package net.scapeemulator.game.msg.encoder;
import io.netty.buffer.ByteBufAllocator;
import net.scapeemulator.game.model.player.Item;
import net.scapeemulator.game.model.player.SlottedItem;
import net.scapeemulator.game.msg.MessageEncoder;
import net.scapeemulator.game.msg.impl.inter.InterfaceSlottedItemsMessage;
import net.scapeemulator.game.net.game.DataType;
import net.scapeemulator.game.net.game.GameFrame;
import net.scapeemulator.game.net.game.GameFrame.Type;
import net.scapeemulator.game.net.game.GameFrameBuilder;
public final class InterfaceSlottedItemsMessageEncoder extends MessageEncoder<InterfaceSlottedItemsMessage> {
public InterfaceSlottedItemsMessageEncoder() {
super(InterfaceSlottedItemsMessage.class);
}
@Override
public GameFrame encode(ByteBufAllocator alloc, InterfaceSlottedItemsMessage message) {
SlottedItem[] items = message.getItems();
GameFrameBuilder builder = new GameFrameBuilder(alloc, 22, Type.VARIABLE_SHORT);
builder.put(DataType.INT, (message.getId() << 16) | message.getSlot());
builder.put(DataType.SHORT, message.getType());
for (SlottedItem slottedItem : items) {
int slot = slottedItem.getSlot();
builder.putSmart(slot);
Item item = slottedItem.getItem();
if (item == null) {
builder.put(DataType.SHORT, 0);
} else {
int amount = item.getAmount();
builder.put(DataType.SHORT, item.getId() + 1);
if (amount >= 255) {
builder.put(DataType.BYTE, 255);
builder.put(DataType.INT, amount);
} else {
builder.put(DataType.BYTE, amount);
}
}
}
return builder.toGameFrame();
}
}