EditData
A classe EditData é usada para editar dados existentes nos arquivos do jogo usando o Content Patcher. Ela herda de ContentData e permite modificar campos específicos ou adicionar novas entradas às estruturas de dados do jogo etc.
Construtor
EditData(LogName: str, Target: str, Fields: dict = {}, Entries: dict = {})
Parâmetros
- LogName (
str): Um nome para depuração ou organização. Aparece no log do Content Patcher. - Target (
str): Caminho do arquivo a ser modificado (ex.:"Data/Objects"ou"Data/Crops"). - TargetField (
list[str], Opcional): Uma lista de chaves que referenciam chaves do dicionário ou da lista para editar uma parte específica do jogo, a partir do objeto definido em Target (Campo é geralmente usado em conjunto com o Entries). -
Entries (
dict, Opcional): Novas entradas a serem adicionadas ou modificadas no objeto alvo, como adicionar um novo item ou entrada de dicionário. -
Fields (
dict, Opcional): Campos a serem modificados no alvo. Ideal para atualizações diretas de valores. -
MoveEntries (
list[MoveEntries], Opcional): Altera a ordem de entrada em uma lista de dados. Usar apenas para com objetos que são listas. -
TextOperations (
list[TextOperations], Opcional): Adiciona ou altera um valor em uma string, entrada ou campo. -
When (
dict[str, str], Opcional): Coloca condições para o patch. -
Update (
str, Opcional): Frequência de atualização. -
LocalTokens (
dict[str, str|int]): Um conjunto de tokens locais a ser usados nesse campo de objeto. -
Priority (
str):Quando vários patches ou mods editam o mesmo recurso, a ordem em que eles devem ser aplicados. Os valores possíveis são Early, Default e Late. O valor padrão é Default. -
TargetLocale (
str): Linguagem obtida no nome dos arquivos/objetos acrescentados para as linguagens do jogo, ex: Data/Objects.fr-FR(Caso seja omtido essa chave, todas as linguagens serão alteradas com essas atualizações.)
Exemplo de uso com a Entries:
from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
#...
self.content.registryContentData(
EditData(
LogName="Editando Preço do Milho",
Target="Data/Objects",
TargetFields=["270"]
Entries={
"Price":45
}
)
)
Criando um novo objeto
Para criar novos objetos, usamos classes especiais preparadas pela biblioteca. Nesse Exemplo iremos usar a classe ObjectsData
from StardewValley.Data import ObjectsData
#...
def contents(self):
#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,
Price=1000,
Texture=f"Mods/{self.content.Manifest.UniqueID}/novoItem",
SpriteIndex=0
)
self.content.registryContentData(
EditData(
LogName="Criando um novo Objeto Pro jogo",
Target="Data/Objects",
Entries={
novo_item.key: novo_item.getJson()
}
)
)
Comportamento das clases especiais
Essas classes especiais criam uma estrutura JSON no formato esperado pelo Content Patcher sob a ação EditData. Ela permite sobrescrever ou expandir dados do jogo de forma segura e controlada.
Visão Geral das Classes de Modificação de Conteúdo
A biblioteca organiza as diferentes edições possíveis do Content Patcher em classes específicas, facilitando a criação e o gerenciamento de mods de forma estruturada e intuitiva.
Cada tipo de modificação — como edição de sprites, dados de objetos, tokens ou condições de carregamento — tem sua própria classe com parâmetros claros, validação automática e integração perfeita com o Content Patcher.
Organização
As classes são separadas em arquivos individuais dentro da biblioteca, seguindo a estrutura dos arquivos de conteúdo de Stardew Valley. Isso permite que os desenvolvedores:
- Trabalhem com tipagem clara e validação automática.
- Usem construtores simples para gerar arquivos do Content Patcher prontos para uso.
- Evitem erros comuns em arquivos JSON manuais.
- Aproveitem a organização de módulos para melhor manutenibilidade e legibilidade.
Lista de classes disponíveis
| Classe | Finalidade |
|---|---|
AchievementsData |
Permite modificar a coleção de conquistas do jogo. (Data/Achievements) |
AdditionalFarmsData |
Permite adicionar fazendas extras ao jogo. (Data/AdditionalFarms) |
AdditionalWallpaperFlooringData |
Permite adicionar pisos e paredes extras ao jogo. (Data/AdditionalWallpaperFlooring) |
AnimationDescriptionsData |
Edita animações (Data/AnimationDescriptions). |
AquariumFishData |
Edita peixes do aquário (Data/AquariumFish). |
AudioChangesData |
Cria ou altera os sons em (Data/AudioChanges). |
BootsData |
Permite adicionar uma nova bota ao jogo, ou substituir uma existente no arquivo (Data/Boots). |
BuffsData |
Permite definir buffs personalizados (Data/Buffs). |
BuildingsData |
Permite adicional/alterar construções (Data/Buildings). |
BundlesData |
Permite adicionar/alterar pacotes (Data/Bundles). |
CharactersData |
Edita personagens (Data/Characters). |
ObjectsData |
Edita Data/Objects. Permite modificar ou adicionar novos itens. |
FishData |
Usado para editar ou adicionar dados de peixes (Data/Fish). |
CropsData |
Modifica plantações (Data/Crops). |
FruitTreesData |
Edita árvores frutíferas (Data/FruitTrees). |
BigCraftablesData |
Edita grandes itens artesanais (Data/BigCraftables). |
HatsData |
Edita chapéus (Data/Hats). |
WeaponsData |
Edita armas (Data/Weapons). |
BootsData |
Edita botas (Data/Boots). |
FurnitureData |
Edita móveis (Data/Furniture). |
TailoringRecipes |
Altera receitas de alfaiataria (Data/TailoringRecipes). |
ShopsData |
Edita lojas (Data/Shops). |
Cada uma dessas classes será explicada com seus parâmetros, dicas de uso e estrutura esperada em suas próprias páginas.
Observação: Todas as classes herdam de ContentData, que fornece a estrutura base e integração com o Content Patcher. Você pode consultar EditData para entender como a estrutura base funciona.
Apagando um valor com a Entries
Faça isso com cautela, pois o item pode estar como referencia em outros lugares do jogo, e precisaria apagar todas as referencias pra não gerar bugs no jogo.
self.content.registryContentData(
EditData(
LogName="Apagando o Item Milho do jogo",
Target="Data/Objects",
Entries={
"270":None
}
)
)
Exemplo com a Fields
from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
#...
self.content.registryContentData(
EditData(
LogName="Editando Preço do Milho",
Target="Data/Objects",
Fields={
"270":{
"Price":45
}
}
)
)
MovieEntries
from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
#...
self.content.registryContentData(
EditData(
LogName="Editando Move Reactions",
Target="Data/MoviesReactions",
MovieEntries=[
MoveEntries(ID="Abigail", BeforeID="Leah"), # Move a Abigail para Antes da Leah
MoveEntries(ID="Abigail", AfterID="Leah"), # Move a abigail para depois da Leah
MoveEntries(ID="Abigail", ToPosition="Top"), # Move a Abigail para o Topo da lista
MoveEntries(ID="Abigail", ToPosition="Bottom")# Move a Abigail para o final da lista
]
)
)
TextOperations
from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
#...
self.content.registryContentData(
EditData(
LogName="Editando Presentes",
Target="Data/NPCGiftTastes",
TextOperations=[
TextOperations(Operation="Append", Target=["Entries", "Universal_Love"], Value="127", Delimiter=" "), # Acrescenta a Strange Doll como presente de "Love" Universal
]
)
)
- Para mais informações sobre o TextOperations e outras funcionalidades consulte a documentação do content patcher em TextOperations e também em EditData