content: package emu.grasscutter.server.packet.recv;
  
  import emu.grasscutter.game.player.Player;
  import emu.grasscutter.net.packet.Opcodes;
  import emu.grasscutter.net.packet.PacketHandler;
  import emu.grasscutter.net.packet.PacketOpcodes;
  import emu.grasscutter.net.proto.SetWidgetSlotReqOuterClass;
  import emu.grasscutter.net.proto.WidgetSlotOpOuterClass;
  import emu.grasscutter.server.game.GameSession;
  import emu.grasscutter.server.packet.send.PacketSetWidgetSlotRsp;
  import emu.grasscutter.server.packet.send.PacketWidgetSlotChangeNotify;
  
  @Opcodes(PacketOpcodes.SetWidgetSlotReq)
  public class HandlerSetWidgetSlotReq extends PacketHandler {
  
      @Override
      public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
          SetWidgetSlotReqOuterClass.SetWidgetSlotReq req = SetWidgetSlotReqOuterClass.SetWidgetSlotReq.parseFrom(payload);
  
          Player player = session.getPlayer();
          player.setWidgetId(req.getMaterialId());
  
          // WidgetSlotChangeNotify op & slot key
          session.send(new PacketWidgetSlotChangeNotify(WidgetSlotOpOuterClass.WidgetSlotOp.WIDGET_SLOT_OP_DETACH));
  
          //only attaching the widget can set it
          if(req.getOp() == WidgetSlotOpOuterClass.WidgetSlotOp.WIDGET_SLOT_OP_ATTACH){
              // WidgetSlotChangeNotify slot
              session.send(new PacketWidgetSlotChangeNotify(req.getMaterialId()));
          }
  
          // SetWidgetSlotRsp
          session.send(new PacketSetWidgetSlotRsp(req.getMaterialId()));
      }
  
  }
  
  