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

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