mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-15 08:25:21 +01:00
73 lines
2.3 KiB
Java
73 lines
2.3 KiB
Java
package emu.grasscutter.game.home;
|
|
|
|
import dev.morphia.annotations.Entity;
|
|
import emu.grasscutter.data.GameData;
|
|
import emu.grasscutter.game.world.Position;
|
|
import emu.grasscutter.net.proto.*;
|
|
import lombok.*;
|
|
import lombok.experimental.FieldDefaults;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
@Entity
|
|
@Data
|
|
@FieldDefaults(level = AccessLevel.PRIVATE)
|
|
@Builder(builderMethodName = "of")
|
|
public class HomeNPCItem implements HomeMarkPointProtoFactory {
|
|
transient int furnitureId;
|
|
int avatarId;
|
|
Position spawnPos;
|
|
Position spawnRot;
|
|
int costumeId;
|
|
|
|
public static HomeNPCItem parseFrom(HomeNpcDataOuterClass.HomeNpcData homeNpcData) {
|
|
return HomeNPCItem.of()
|
|
.avatarId(homeNpcData.getAvatarId())
|
|
.spawnPos(new Position(homeNpcData.getSpawnPos()))
|
|
.spawnRot(new Position(homeNpcData.getSpawnRot()))
|
|
.costumeId(homeNpcData.getCostumeId())
|
|
.build();
|
|
}
|
|
|
|
public HomeNpcDataOuterClass.HomeNpcData toProto() {
|
|
return HomeNpcDataOuterClass.HomeNpcData.newBuilder()
|
|
.setAvatarId(avatarId)
|
|
.setSpawnPos(spawnPos.toProto())
|
|
.setSpawnRot(spawnRot.toProto())
|
|
.setCostumeId(costumeId)
|
|
.build();
|
|
}
|
|
|
|
public int getFurnitureId() {
|
|
if (this.furnitureId == 0) {
|
|
var data = GameData.getHomeWorldNPCDataMap().get(this.avatarId);
|
|
this.furnitureId = data == null ? -1 : data.getFurnitureID();
|
|
}
|
|
|
|
return this.furnitureId;
|
|
}
|
|
|
|
@Nullable
|
|
@Override
|
|
public HomeMarkPointFurnitureDataOuterClass.HomeMarkPointFurnitureData toMarkPointProto() {
|
|
return HomeMarkPointFurnitureDataOuterClass.HomeMarkPointFurnitureData.newBuilder()
|
|
.setFurnitureId(this.getFurnitureId())
|
|
.setFurnitureType(this.getType().getValue())
|
|
.setPos(this.spawnPos.toProto())
|
|
.setNpcData(HomeMarkPointNPCDataOuterClass.HomeMarkPointNPCData.newBuilder()
|
|
.setAvatarId(this.avatarId)
|
|
.setCostumeId(this.costumeId)
|
|
.build())
|
|
.build();
|
|
}
|
|
|
|
@Override
|
|
public SpecialFurnitureType getType() {
|
|
return SpecialFurnitureType.NPC;
|
|
}
|
|
|
|
@Override
|
|
public boolean isProtoConvertible() {
|
|
return this.getFurnitureId() > 0;
|
|
}
|
|
}
|