Replace your sendMapRegion packet with this:
Code:
public void sendMapRegion() {
player.getCurrentRegion().setAs(player.getPosition());
StreamBuffer.OutBuffer out = StreamBuffer.newOutBuffer(5);
out.writeHeader(client.getEncryptor(), 73);
out.writeShort(player.getPosition().getRegionX() + 6, StreamBuffer.ValueType.A);
out.writeShort(player.getPosition().getRegionY() + 6);
client.send(out.getBuffer());
}
Set the needsPlacement boolean to true on login and when teleporting. Also make sure that in player updating nothing is editing the needsPlacement boolean, it should be reset to false only in the reset() void in the player class.