ObjectsData
A classe ObjectsData é uma das classes especiais fornecidas pela biblioteca para auxiliar na modificação de dados existentes ou na adição de novas entradas aos arquivos do jogo. Especificamente, ObjectsData é usada para editar o arquivo Data/Objects. Ela permite modificar ou adicionar novos itens. Essas classes especiais criam uma estrutura JSON no formato esperado pelo Content Patcher sob a ação EditData, permitindo sobrescrever ou expandir dados do jogo de forma segura e controlada [1].
ObjectsData herda de modelsData que fornece a estrutura base e integração com o Content Patcher [4].
Construtor
ObjectsData(
key: str,
Name: str,
DisplayName: str,
Description: str,
Type: str,
Category: int,
Price: Optional[int] = 0,
Texture: Optional[str] = None,
SpriteIndex: int = 0,
ColorOverlayFromNextIndex: Optional[bool] = False,
Edibility: Optional[int] = -300,
IsDrink: Optional[bool] = False,
Buffs: Optional[List[ObjectsBuffsData]] = None,
GeodeDropsDefaultItems: bool = False,
GeodeDrops: Optional[List[str]] = None,
ArtifactSpotChances: Optional[str] = None,
CanBeGivenAsGift: bool = True,
CanBeTrashed: bool = True,
ExcludeFromFishingCollection: bool = False,
ExcludeFromShippingCollection: bool = False,
ExcludeFromRandomSale: bool = False,
ContextTags: Optional[List[str]] = None,
CustomFields: Optional[dict[str, str]] = None
)
Parâmetros
| Name | Type | Description |
|---|---|---|
key |
(str) |
ID unica do item. |
Name |
(str) |
Nome interno do item. |
DisplayName |
(str) |
Nome que aparece no jogo. |
Description |
(str) |
Descrissão do item, que pode ser um código i18n, ou um texto simples que represente a descrissão do item. |
Type |
(str) |
O tipo geral do item, como Artifact ou Minerals. Os tipos básicos são: Basic, Artifact, Litter, Minerals, Quest, Crafting, Fish, Cooking, Seeds, Ring, interactive e alguns valores de espaço reservado, como asdf.. |
Category |
(int) |
Categoria do Objeto. |
Price |
(Optional[int], default=0) |
O preço do item quando vendido pelo jogador. |
Texture |
(Optional[str], default=None) |
O caminho para o arquivo de textura para o sprite do objeto(é o nome que você coloca na target onde carrega o sprite da textura). |
SpriteIndex |
(int, default=0) |
O índice do sprite do objeto dentro do seu arquivo de textura. |
ColorOverlayFromNextIndex |
(Optional[bool], default=False) |
Quando desenhado como um objeto colorido, define se a cor deve ser aplicada ao próximo sprite na planilha de sprites e desenhá-lo sobre o sprite principal. Se falso, a cor é aplicada ao sprite principal.. |
Edibility |
(Optional[int], default=-300) |
Um valor numérico que determina quanta energia (comestibilidade × 2,5) e saúde (comestibilidade × 1,125) são restauradas quando este item é consumido. Um item com comestibilidade de -300 não pode ser consumido, valores de -299 a -1 reduzem saúde e energia, e zero pode ser consumido, mas não altera saúde/energia. Padrão -300. |
IsDrink |
(Optional[bool], default=False) |
Indica se o objeto é uma bebida e não uma comida. |
Buffs |
(Optional[List[ObjectsBuffsData]], default=None) |
Uma lista de buffs associados ao objeto. Se None, usa uma lista vazia, veja em ObjectsBuffsData. |
GeodeDropsDefaultItems |
(bool, default=False) |
Propósito desconhecido pelas fontes. |
GeodeDrops |
(Optional[List[str]], default=None) |
Uma lista de itens que podem ser obtidos deste objeto se for um geodo. Se None, usa uma lista vazia. |
ArtifactSpotChances |
(Optional[str], default=None) |
Propósito desconhecido pelas fontes. |
CanBeGivenAsGift |
(bool, default=True) |
Indica se o objeto pode ser dado como presente. |
CanBeTrashed |
(bool, default=True) |
Indica se o objeto pode ser descartado. |
ExcludeFromFishingCollection |
(bool, default=False) |
Indica se o objeto deve ser excluído da coleção de pesca. |
ExcludeFromShippingCollection |
(bool, default=False): Indica se o objeto deve ser excluído da coleção de envio. |
|
ExcludeFromRandomSale |
(bool, default=False) |
Indica se o objeto deve ser excluído de vendas aleatórias. |
ContextTags |
(Optional[List[str]], default=None) |
Uma lista de tags de contexto para o objeto. Se None, usa uma lista vazia. |
CustomFields |
(Optional[dict[str, str]], default=None) |
Campos customizados para o objeto. |
Comportamento
Instâncias de ObjectsData 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 ObjectsData 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 ObjectsData Para criar um novo objeto, você primeiro instancia a classe ObjectsData com todos os detalhes necessários para o novo item. Em seguida, você usa esta instância ObjectsData dentro do dicionário Entries de uma ação EditData, mapeando a chave do ObjectsData para sua representação JSON obtida via novo_item.getJson(). A ação EditData deve ter Data/Objects como alvo (Target).
Criando um novo objeto
ModEntry.py:
from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
from StardewValley.Data import ObjectsData # Importe a classe ObjectsData
# ... (dentro de um método como contents(self) na sua classe de mod)
# Primeiro criando um objeto da classe ObjectsData
novo_item=ObjectsData(
key=f"{self.content.Manifest.UniqueID}_novoItem",
Name=f"{self.content.Manifest.UniqueID}_novoItem",
DisplayName="Novo Item",
Description="Uma novo item legal",
Type="Basic",
Category=-79, # Exemplo de categoria, use a apropriada para o seu item
Price=1000,
Texture=f"Mods/{self.content.Manifest.UniqueID}/novoItem", # Caminho para a textura customizada
SpriteIndex=0 # Índice do sprite na textura
)
# Registrando a ação EditData para adicionar o novo objeto
self.content.registryContentData(
EditData(
LogName="Criando um novo Objeto Pro jogo", # Nome para o log do Content Patcher
Target="Data/Objects", # O arquivo de dados a ser modificado
Entries={
# Mapeia a chave do seu objeto para a representação JSON do objeto
novo_item.key: novo_item.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:
Um novo arquivo.py:
novoItem.py
from StardewValley.Data import ObjectsData
from StardewValley.helper import Helper
class NovoItem(ObjectsData):
def __init__(self, mod:Helper):
self.key=f"{mod.content.Manifest.UniqueID}_novoItem"
self.Name=f"{mod.content.Manifest.UniqueID}_novoItem"
self.DisplayName="Novo Item"
self.Description="Uma novo item legal"
self.Type="Basic"
self.Category=-79 # Exemplo de categoria, use a apropriada para o seu item
self.Price=1000
E no arquivo ModEntry.py
from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
from novoItem import NovoItem #novo arquivo a classe criada acima importada
#... (dentro de um método como contents(self) na sua classe de mod)
novo_item=NovoItem(self)
self.content.registryContentData(
EditData(
LogName="Criando um novo Objeto Pro jogo", # Nome para o log do Content Patcher
Target="Data/Objects", # O arquivo de dados a ser modificado
Entries={
# Mapeia a chave do seu objeto para a representação JSON do objeto
novo_item.key: novo_item.getJson()
}
)
)