content: package emu.grasscutter.server.packet.recv;
  
  import emu.grasscutter.game.world.Scene;
  import emu.grasscutter.net.packet.Opcodes;
  import emu.grasscutter.net.packet.PacketHandler;
  import emu.grasscutter.net.packet.PacketOpcodes;
  import emu.grasscutter.net.proto.HomeSceneJumpReqOuterClass;
  import emu.grasscutter.server.game.GameSession;
  import emu.grasscutter.server.packet.send.PacketHomeSceneJumpRsp;
  import emu.grasscutter.utils.Position;
  
  @Opcodes(PacketOpcodes.HomeSceneJumpReq)
  public class HandlerHomeSceneJumpReq extends PacketHandler {
  	
  	@Override
  	public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
  		var req = HomeSceneJumpReqOuterClass.HomeSceneJumpReq.parseFrom(payload);
  
  		int realmId = 2000 + session.getPlayer().getCurrentRealmId();
  
  		var home = session.getPlayer().getHome();
  		var homeScene = home.getHomeSceneItem(realmId);
  		home.save();
  
  		Scene scene = session.getPlayer().getWorld().getSceneById(req.getIsEnterRoomScene() ? homeScene.getRoomSceneId() : realmId);
  		Position pos = scene.getScriptManager().getConfig().born_pos;
  
  		session.getPlayer().getWorld().transferPlayerToScene(
  				session.getPlayer(),
  				req.getIsEnterRoomScene() ? homeScene.getRoomSceneId() : realmId,
  				pos
  		);
  
  		session.send(new PacketHomeSceneJumpRsp(req.getIsEnterRoomScene()));
  	}
  
  }
  