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

BigCraftablesData

Essa classe representa um objeto do tipo Big Craftable, utilizado para criar itens grandes interativos no jogo, como máquinas, decorações ou móveis. Ela facilita a criação e o registro desses itens no Content Patcher, com uma sintaxe simples e limpa.


Construtor

def __init__(self,
    key: str,
    Name: str,
    DisplayName: str,
    Description: str,
    Price: Optional[int] = None,
    Fragility: Optional[int]= None,
    CanBePlacedOutdoors: Optional[bool] = None,
    CanBePlacedIndoors: Optional[bool] = None,
    IsLamp: Optional[bool] = None, 
    Texture: Optional[str] = None,
    SpriteIndex: Optional[int] = None, 
    ContextTags: Optional[List[str]] = None,
    CustomFields: Optional[dict[str,str]] = None
)

Propriedades disponíveis

Nome Tipo Descrissão
key (str) Identificador único do Item.
Name (str) Nome interno do item.
DisplayName str Nome que será exibido no jogo.
Description (str) Descrição do item.
Price (int) Preço base do Item.
Fragility (int) Como o item pode ser coletado. Os valores possíveis são 0 (coletado com qualquer ferramenta), 1 (destruído se atingido por um machado/enxada/picareta ou coletado com qualquer outra ferramenta) ou 2 (não pode ser removido após ser colocado). Padrão 0.
CanBePlacedOutdoors (bool) Indica se o item pode ser colocado em ambientes externos. Padrão: verdadeiro.
CanBePlacedIndoors (bool) Indica se o item pode ser colocado em ambientes internos. Padrão: verdadeiro.
IsLamp (bool) Define se é uma luminária deve produzir luz quando está escuro. Padrão falso.
Texture (bool) O nome do recurso para a textura que contém o sprite do item. Geralmente definido na função Load, no parâmetro Target.
SpriteIndex (bool) Índice do sprite no arquivo de textura.
ContextTags (List[str]) As tags de contexto personalizadas a serem adicionadas a este item (além das tags adicionadas automaticamente com base nos outros dados do objeto). Elas são formatadas como uma lista
CustomFields (dict[str, str]) Campos customizados adicionais.

Comportamento

Instâncias de BigCraftablesData são projetadas para serem usadas dentro do campo Entries de uma ação EditData. Quando você deseja adicionar um novo objeto ou substituir completamente os dados de um objeto existente. Ao criar um objeto BigCraftablesData com os parâmetros desejados e fornecer sua representação JSON (getJson()) como um valor no dicionário Entries (usando a chave do objeto), você instrui o Content Patcher a escrever esses dados no arquivo Data/Objects. Essa abordagem estruturada ajuda os desenvolvedores a evitar erros comuns associados a arquivos JSON manuais. Criando um novo objeto usando BigCraftablesData Para criar um novo objeto, você primeiro instancia a classe BigCraftablesData com todos os detalhes necessários para o novo item. Em seguida, você usa esta instância BigCraftablesData dentro do dicionário Entries de uma ação EditData, mapeando a chave do BigCraftablesData para sua representação JSON obtida via novo_item.getJson(). A ação EditData deve ter Data/BigCraftables como alvo (Target).

Criando um novo objeto

ModEntry.py:

from StardewValley import Manifest, EditData
from StardewValley.Data import BigCraftablesData

# no registryContetData
novo_craftable=BigCraftablesData(
    key=f"{self.content.Manifest.UniqueID}_custom_object",
    Name=f"{self.content.Manifest.UniqueID}_custom_object",
    DisplayName="{{i18n:CustomObject.name}}",
    Description="{{i18n:CustomObject.description}}",
    Price=500,
    Fragility=0,
    CanBePlacedIndoors=True,
    CanBePlacedOutdoors=True,
    IsLamp=True,
    Texture=True,
    SpriteIndex=True
)
self.content.registryContentData(
    EditData(
        Target="Data/BigCraftables",
        Entries={
            novo_craftable.key: novo_craftable.getJson()
        }
    )
)

Criando um novo item usando classe personalizada

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

NovoCraftable.py

from StardewValley.Data import BigCraftablesData
from StardewValley.Helper import Helper

class NovoCraftable(BigCraftablesData, mod: Helper):
    def __init__(self):
        self.key=f"{mod.content.Manifest.UniqueID}_custom_object"
        self.Name=f"{mod.content.Manifest.UniqueID}_custom_object"
        self.DisplayName="{{i18n:CustomObject.name}}" # Pode escrever diretamente o nome aqui ou uma referencia pro i18n
        self.Description="{{i18n:CustomObject.description}}" # Pode escrever diretamente a descrissão aqui ou uma referencia pro i18n
        self.Price=500
        self.Fragility=0
        self.CanBePlacedIndoors=True
        self.CanBePlacedOutdoors=True
        self.IsLamp=True
        self.Texture=True
        self.SpriteIndex=True

ModEntry.py

from StardewValley import Manifest, EditData
from StardewValley.Helper import Helper
from NovoCraftable import NovoCraftable

# no registryContetData
self.content.registryContentData(
    EditData(
        Target="Data/BigCraftables",
        Entries={
            NovoCraftable().key: NovoCraftable().getJson()
        }
    )
)