package net.scapeemulator.game.update; import net.scapeemulator.game.model.Position; import net.scapeemulator.game.model.mob.Direction; import net.scapeemulator.game.model.npc.NPC; import net.scapeemulator.game.msg.impl.NpcUpdateMessage; import net.scapeemulator.game.net.game.GameFrameBuilder; public final class AddNpcDescriptor extends NpcDescriptor { private final int id, type; private final Direction direction; private final Position position; public AddNpcDescriptor(NPC npc) { super(npc); this.id = npc.getId(); this.type = npc.getType(); this.direction = npc.getMostRecentDirection(); this.position = npc.getPosition(); } @Override public void encodeDescriptor(NpcUpdateMessage message, GameFrameBuilder builder, GameFrameBuilder blockBuilder) { int x = position.getX() - message.getPosition().getX(); int y = position.getY() - message.getPosition().getY(); builder.putBits(15, id); builder.putBits(1, 1); // check builder.putBits(3, direction.toInteger()); builder.putBits(1, isBlockUpdatedRequired() ? 1 : 0); builder.putBits(5, y); builder.putBits(14, type); builder.putBits(5, x); } }