Skip to content
🚧 Esta documentação ainda está em desenvolvimento e pode conter informações incompletas.

BuildingsData

A classe BuildingsData permite adicionar ou alterar construções ao jogo.

Construtor

def __init__(
    self,
    *,
    key: str,
    Name: str,
    Description: str,
    Texture: str,
    NameForGeneralType: Optional[str] = None, 
    Builder: Optional[str] = None,
    BuildCost: Optional[int] = None,
    BuildMaterials: Optional[List[BuildMaterials]] = None, 
    BuildDays: Optional[int] = None, 
    BuildCondition: Optional[str] = None, 
    BuildMenuDrawOffset: Optional[Position] = None,   
    AdditionalPlacementTiles: Optional[list[AdditionalPlacementTiles]] = None,
    IndoorItems: Optional[list[IndoorItems]] = None,        
    MagicalConstruction: Optional[bool] = None,        
    AddMailOnBuild: Optional[list[str]] = None,        
    BuildingToUpgrade: Optional[str] = None,
    IndoorItemMoves: Optional[list[IndoorItemMoves]] = None, 
    UpgradeSignTile: Optional[Position] = None,#use getStr() to return a valid value for this variable
    UpgradeSignHeight: Optional[float] = 0.0,
    Size: Optional[Position] = None,
    CollisionMap: Optional[str] = None,
    HumanDoor: Optional[Position] = None,
    AnimalDoor: Optional[Rectangle]=None,
    AnimalDoorOpenDuration: Optional[float] = None,
    AnimalDoorCloseDuration: Optional[float] = None,
    AnimalDoorOpenSound: Optional[str] = None, 
    AnimalDoorCloseSound: Optional[str] = None,
    SourceRect: Optional[Rectangle] = None,
    Skins: Optional[list[Skins]] = None,
    FadeWhenBehind: Optional[bool] = None,
    DrawOffset: Optional[Position] = None,#use getStr() to return a valid value for this variable
    SeasonOffset: Optional[Position] = None,
    SortTileOffset: Optional[float] = None,
    AllowsFlooringUnderneath: Optional[bool] = None, 
    DrawLayers: Optional[list[DrawLayers]] = None,
    DrawShadow: Optional[bool] = True,
    IndoorMap: Optional[str] = None, 
    IndoorMapType: Optional[str] = None,
    NonInstancedIndoorLocation: Optional[str] = None,
    MaxOccupants: Optional[int] = None, 
    AllowAnimalPregnancy: Optional[bool] = None, 
    ValidOccupantTypes: Optional[list[str]] = None,
    HayCapacity: Optional[int] = None,        
    ItemConversions: Optional[list[ItemConversions]] = None,         
    Chests: Optional[list[Chests]] = None,        
    ActionTiles: Optional[list[ActionTiles]] = None,
    DefaultAction: Optional[str] = None,
    TileProperties: Optional[list[TileProperties]] = [],
    AdditionalTilePropertyRadius: Optional[int] = None, 
    Metadata: Optional[dict[str, str]] = None,
    BuildingType: Optional[str] = None,
    ModData: Optional[dict[str, str]] = None,
    CustomFields: Optional[str] = None
)

Parâmetros

Name Type Description
key (str) Identificação da construção
Name (str) Nome da construção
Description (str) Descrição da construção
Texture (str) Objeto da textura da construção
NameForGeneralType (str, Optional) Nome Geral da construção
Builder (str, Optional) Npc responsável pela construção: Apenas Robin e Wizard são válidos.
BuildCost (int, Optional) Custo da construção
BuildMaterials (list[BuildMaterials], Optional) Materiais usados na construção, veja a clase em BuildMaterials
BuildDays (int, Optional) Dias de construção, default:0
BuildCondition (str, Optional) Condições para construção, usando uma game query, exemplos na (wiki)[https://stardewvalleywiki.com/Modding:Game_state_queries]
BuildMenuDrawOffset (Position, Optional) Sprite a ser exibido no menu de construções, padrão: nenhum. Classe usada: Position
AdditionalPlacementTiles (list[AdditionalPlacementTiles], Optional) Tiles adicionais que são tratados como parte da construção ao colocar no menu de construção, usando a classe em AdditionalPlacementTiles
IndoorItems (list[IndoorItems], Optional) Itens adicionados dentro da construção ao ser concluída. Veja a classe em IndoorItems
MagicalConstruction (bool, Optional) Temática mística durante o menu de construções, além de ser conclúida de imediato
AddMailOnBuild (list[str], Optional) Identificações de cartas a serem recebidas por todos os jogadores ao contruir pela primeira vez
BuildingToUpgrade (str, Optional) Identificação de construção que pode ser construida a partir da primeira, como um aprimoramento, se for omitida, a construção será construida como nova
IndoorItemMoves (list[IndoorItemMoves], Optional) Itens que podem ser movidos dentro da construção ao ser atualizada. Veja a classe em IndoorItemMoves
UpgradeSignTile (Position, Optional) Posição do tile para sinal de aprimoração na construção durante a atualização. Default: Position(0, 0). Classe usada: Position
UpgradeSignHeight (float, Optional) Altura em pixels do sinal de melhoria quando Robin está construindo uma melhoria. O padrão é 0.
Size (Position, Optional) Tamanho da construção. Default Position(1,1). Classe usada: Position
CollisionMap (str, Optional) Um bloco de texto ASCII que indica em quais peças do edifício os jogadores podem andar, onde cada personagem pode ser X (bloqueado) ou O (passável). O padrão é que todas as peças sejam bloqueadas. Ex: single line with \n line breaks: CollisionMap= "XXXX\nXOOX"
HumanDoor (Position, Optional) A posição da porta que pode ser clicada para se teletransportar para o interior do edifício. Isso é medido em blocos em relação ao bloco do canto superior esquerdo. O padrão é desabilitado. Classe usada: Position
AnimalDoor (Rectangle, Optional) A posição e o tamanho da porta que os animais usam para entrar/sair do edifício, se o interior do edifício for um local para animais, especificado como um objeto com os campos X, Y, Largura e Altura. Isso é medido em blocos em relação ao bloco do canto superior esquerdo. O padrão é desabilitado. Classe usada: Rectangle
AnimalDoorOpenDuration (float, Optional) Tempo de abertura da animação da porta animal, em milisegundos, se omitida, a porta abre instantaneamente.
AnimalDoorCloseDuration (float, Optional) Tempo de fechamento da animação da porta animal, em milisegundos, se omitida, a porta fecha instantaneamente.
AnimalDoorOpenSound (str, Optional) ID respectivo ao som de abertura da porta animal. Padrão: desativado
AnimalDoorCloseSound (str, Optional) ID respectivo ao som de fechamento da porta animal. Padrão desativado
SourceRect (Rectangle, Optional) Área em pixels da construção especificada com os campos X, Y, Width, Height, por padrão é o tamanho da texture. Classe usada: Rectangle
Skins (list[Skins], Optional) As aparências que podem ser selecionadas no menu do Robin (como cabanas de pedra/tábua/tronco), além da aparência padrão baseada em Textura. Veja a classe em Skins
FadeWhenBehind (bool, Optional) Se a construção deve se tornar semitransparente quando o jogador estiver atrás dele. Padrão: true.
DrawOffset (Position, Optional) Deslocamento de pixel aplicado em relação ao Sprite da construção no mundo. Padrão: Position(0, 0). Classe usada: Position
SeasonOffset (Position, Optional) Um deslocamento de pixel a ser aplicado a cada estação. Isso é aplicado à posição do SourceRect multiplicando o deslocamento por 0 (primavera), 1 (verão), 2 (outono) ou 3 (inverno). Padrão Position(0, 0), para que todas as estações usem o mesmo retângulo de origem. Classe usada: Position
SortTileOffset (float, Optional) Um deslocamento de ladrilho Y aplicado ao calcular as camadas de renderização. Por exemplo, um valor de 2,5 tratará o edifício como se ele estivesse 2,5 blocos mais à frente na tela para fins de disposição em camadas. Padrão 0
AllowsFlooringUnderneath (bool, Optional) Se o piso pode ser colocado embaixo e, quando o edifício é colocado, se ele deixará o piso embaixo dele. Padrão: true.
DrawLayers (list[DrawLayers], Optional) Uma lista de texturas para desenhar sobre ou atrás do edifício, com suporte para condições e animações. Isso consiste em uma lista de modelos com os campos da classe DrawLayers
DrawShadow (bool, Optional) Se deve ser desenhada uma sombra automática ao longo da borda inferior do sprite do edifício. Padrão: true.
IndoorMap (str, Optional) O nome do objeto de mapa em Maps a ser carregado para o interior da construção. Por exemplo, "Shed" carregará o mapa Maps/Shed do galpão.
IndoorMapType (str, Optional) Nome completo da classe em C# que gerenciará a parte interna da construção. Exemplos: StardewValley.AnimalHouse; StardewValley.Locations.Cabin, etc. O default é o local genérico: StardewValley.Locations.GameLocation
NonInstancedIndoorLocation (str, Optional) Nome global e único a ser tratado pelo interior da construção como FarmHouse e Greenhouse para suas construções. Cada local só pode ser usado por um edifício. Se o local já estiver em uso (por exemplo, porque o jogador tem dois desses edifícios), cada edifício subsequente usará o IndoorMap e o IndoorMapType. Por exemplo, a primeira estufa usará o local global Greenhouse (Estufa), e qualquer estufa subsequente usará um local instanciado separado.
MaxOccupants (int, Optional) Quantidade máxima de animais na construção
AllowAnimalPregnancy (bool, Optional) Permite a reprodução de animais na construção. Default: False
ValidOccupantTypes (list[str], Optional) Uma lista de IDs de construções cujos animais também devem ser permitidos nessa construção. Por exemplo, [ "Barn", "Coop" ] permitirá animais de celeiro e de galinheiro nessa construção. Padrão: nenhum
HayCapacity (int, Optional) A quantidade de feno que pode ser armazenada nessa construção, se construido na fazenda, funciona como silos e contribui para o feno disponível na fazenda.
ItemConversions (list[ItemConversions], Optional) Conversões de itens na construção #Continuar
Chests (list[Chests], Optional) Caixas de armazenamento na construção
ActionTiles (list[ActionTiles], Optional) Tiles de ações na construção
DefaultAction (str, Optional) Ação padrão na construção
TileProperties (list[TileProperties], Optional) Propriedades de tiles na construção
AdditionalTilePropertyRadius (int, Optional) Ao interagir, um tile adicional será criado ao redor, manter 0 para que apenas os tiles padrões funcionem
Metadata (dict[str, str], Optional) Propriedades extras que podem ser usadas pelo jogo. Exemplo: Caso houver uma chaminé, ela produzirá fumaça caso acesa
BuildingType (str, Optional) Nome completo do tipo em C# para a instancia da construção. Caso seja personalizado, utilize ferramentas como o SpaceCore para lidar com serialização e sincronização multijogador
ModData (dict[str, str], Optional) Propriedades extras anexadas a construção quando for contruída
CustomFields (str, Optional) Campos personalizados

Comportamento

...

Criando um novo objeto

ModEntry.py

from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
from StardewValley.Data import BuildingsData


nova_building = BuildingsData(
    key="author.modName_NomeConstrução",
    Name="Nome da construção",
    Description="Descrição da construção",
    Texture="NomeConstrução_texture", # Carregar usando Load
)

# Registrando o objeto através do EditData
self.content.registryContentData(
    EditData(
        LogName="Criando uma nova construção",
        Target="Data/Buildings",
        Entries={
            # Mapeia a chave do seu objeto para a representação JSON do objeto
            nova_building.key: nova_building.getJson()
        }
    )
)

Criando um novo objeto através de uma classe personalizada

Para usar uma classe personalizada, você pode criar um novo arquivo ou no mesmo arquivo criar uma classe:

Um novo arquivo.py:

building.py

from StardewValley.Data import BuildingsData
from StardewValley.helper import Helper


class NovaConstrução(BuildingsData):
    def __init__(self, mod: Helper):
        self.key = f"{mod.content.Manifest.UniqueID}_NomeConstrução"
        self.Name = "Nome da construção"
        self.Description = "Descrição da construção"
        self.Texture = "NomeConstrução_texture" # Carregar usando Load

ModEntry.py

from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
from building import NovaConstrução # Importando classe personalizada

#... (dentro de um método como contents(self) na sua classe de mod)

nova_building = NovaConstrução(self)

# Registrando o objeto através do EditData
self.content.registryContentData(
    EditData(
        LogName="Criando uma nova construção",
        Target="Data/Buildings",
        Entries={
            # Mapeia a chave do seu objeto para a representação JSON do objeto
            nova_building.key: nova_building.getJson()
        }
    )
)