content: package emu.grasscutter.game.entity;
  
  import emu.grasscutter.game.props.EntityIdType;
  import emu.grasscutter.game.world.Scene;
  import emu.grasscutter.net.proto.*;
  import emu.grasscutter.scripts.data.SceneNPC;
  import emu.grasscutter.utils.Position;
  import it.unimi.dsi.fastutil.ints.Int2FloatMap;
  import lombok.Getter;
  
  public class EntityNPC extends GameEntity{
      @Getter(onMethod = @__(@Override))
      private final Position position;
      @Getter(onMethod = @__(@Override))
      private final Position rotation;
      private final SceneNPC metaNpc;
      @Getter private final int suiteId;
  
      public EntityNPC(Scene scene, SceneNPC metaNPC, int blockId, int suiteId) {
          super(scene);
          this.id = getScene().getWorld().getNextEntityId(EntityIdType.NPC);
          setConfigId(metaNPC.config_id);
          setGroupId(metaNPC.group.id);
          setBlockId(blockId);
          this.suiteId = suiteId;
          this.position = metaNPC.pos.clone();
          this.rotation = metaNPC.rot.clone();
          this.metaNpc = metaNPC;
  
      }
  
      @Override public Int2FloatMap getFightProperties() {return null;}
  
      @Override
      public SceneEntityInfoOuterClass.SceneEntityInfo toProto() {
  
         EntityAuthorityInfoOuterClass.EntityAuthorityInfo authority = EntityAuthorityInfoOuterClass.EntityAuthorityInfo.newBuilder()
                 .setAbilityInfo(AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo.newBuilder())
                 .setRendererChangedInfo(EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo.newBuilder())
                 .setAiInfo(SceneEntityAiInfoOuterClass.SceneEntityAiInfo.newBuilder()
                         .setIsAiOpen(true)
                         .setBornPos(getPosition().toProto()))
                 .setBornPos(getPosition().toProto())
                 .build();
  
          SceneEntityInfoOuterClass.SceneEntityInfo.Builder entityInfo = SceneEntityInfoOuterClass.SceneEntityInfo.newBuilder()
                  .setEntityId(getId())
                  .setEntityType(ProtEntityTypeOuterClass.ProtEntityType.PROT_ENTITY_TYPE_NPC)
                  .setMotionInfo(MotionInfoOuterClass.MotionInfo.newBuilder()
                          .setPos(getPosition().toProto())
                          .setRot(getRotation().toProto())
                          .setSpeed(VectorOuterClass.Vector.newBuilder()))
                  .addAnimatorParaList(AnimatorParameterValueInfoPairOuterClass.AnimatorParameterValueInfoPair.newBuilder())
                  .setEntityClientData(EntityClientDataOuterClass.EntityClientData.newBuilder())
                  .setEntityAuthorityInfo(authority)
                  .setLifeState(1);
  
  
          entityInfo.setNpc(SceneNpcInfoOuterClass.SceneNpcInfo.newBuilder()
                          .setNpcId(metaNpc.npc_id)
                          .setBlockId(getBlockId())
                  .build());
  
          return entityInfo.build();
      }
  }
  