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

StardewModPY

StardewModPY é uma biblioteca Python projetada para simplificar a criação e manipulação de arquivos de patch de conteúdo (mods) para o jogo Stardew Valley.

Instalação

Você pode instalar a biblioteca via pip:

pip install stardewmodpy

Criando um Novo Projeto

Após instalar o StardewModPY, você pode facilmente criar um novo projeto de mod usando o seguinte comando:

sdvpy create "nomeMod" "nomeAutor" "0.0.1" "Descrição do Mod"

Ao criar um projeto, uma estrutura de arquivos será criada na pasta onde o comando for executado:

Folder -- dependences -- frameworks -- nameMod + sdvproject.json

Arquivo: sdvproject.json << arquivo usado para dar inicio ao processo de compilação do mod>>

{
    "defaultProject": "nomeMod",
    "mods_path": null,
    "projects": {
        "nomeMod": {
            "path": "nomeMod",
            "framework": "ContentPatcher"
        }
    }
}

Arquivo: main.py Este aquivo é o inicio do código em python, onde inicia a compilação do mod

from ModEntry import ModEntry
from StardewValley import Manifest

manifest = Manifest(
    Name="nomeMod",
    Author="nomeAutor",
    Version="0.0.1",
    Description="Descrição do Mod",
    UniqueID="nomeAuthor.nomeMod"
)
mod = ModEntry(manifest=manifest)

mod.write()

Arquivo: ModEntry.py É nesse arquivo que você irá começar o desenvolvimento do código do seu mod, tudo irá na função contents()

from StardewValley import Manifest, Helper, ContentPatcher


class ModEntry(Helper):
    def __init__(self, manifest:Manifest):
        super().__init__(
            manifest=manifest, modFramework=ContentPatcher(manifest=manifest)
        )
        self.contents()

    def contents(self):
        # Add your contents here

Parâmetros Extra

Existem também alguns parâmetros que você pode definir no comando ao criar o mod, além dos padrões que são:

Parâmetro Descrissão
--framework Define custom framework (default: ContentPatcher)
--MinimumApiVersion Set minimum API version
--mods_path Define custom path to the game's Mods folder
--Dialogues Create folder and structure for NPC dialogues
--Events Create folder and structure for custom events
--Maps Create folder and structure for maps
--NPCs Create folder and structure for custom NPCs
--Schedules Create folder and structure for schedules

Exemplos:

Se você quer criar um npc você pode definir os parâmetros Necessários para criação do npc

Exemplo:

sdvpy create "nomeMod" "nomeAutor" "0.0.1" "Descrição do Mod" --Dialogues --Events --NPCs --Schedules

Dessa forma será criada a estrutura para adição de NPCs e suas necessidades já ao criar o código.

Extraindo Arquivos do Stardew Valley com StardewXnbHack

Para começar a modificar o Stardew Valley usando o Content Patcher e nossa biblioteca Python, você primeiro precisa extrair os arquivos .xnb do jogo. Para isso, usaremos a ferramenta StardewXnbHack.


📥 Passo 1: Baixar o StardewXnbHack

  1. Acesse a página do projeto no GitHub:
    👉 https://github.com/Pathoschild/StardewXnbHack

  2. Clique na aba Releases ou vá diretamente para:
    https://github.com/Pathoschild/StardewXnbHack/releases.

  3. Baixe a versão mais recente do programa compatível com seu sistema operacional (Windows, Linux ou MacOS).


📂 Passo 2: Extraia para a Pasta do Stardew Valley

Após o download:

  1. Extraia o conteúdo do arquivo .zip na pasta onde o Stardew Valley está instalado.

Exemplo de caminho no Windows (Steam): C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley

  1. Execute o programa StardewXnbHack.exe (ou o script correspondente ao seu sistema).

📁 Passo 3: Acesse os Arquivos Extraídos

Após executar o programa, será criada uma pasta chamada:

Content (unpacked)

Nessa pasta, você encontrará todos os arquivos .xnb convertidos em formatos legíveis, como .json, .png, .tbin e outros.

Esses são os arquivos que você pode modificar usando o Content Patcher e nossa biblioteca.


✅ Próximos Passos

Agora que os arquivos foram extraídos, você pode começar a criar seus mods, ler dados do jogo e gerar patches personalizados usando nossa biblioteca! 🚀

📁 A pasta assets

A pasta assets é usada para armazenar todos os arquivos visuais e de conteúdo que serão usados ou modificados no jogo. Ela deve ser criada dentro da pasta do mod, junto ao arquivos main.py e ModEntry.py


🎨 O que colocar na pasta assets?

Você deve colocar dentro dessa pasta:

  • Imagens (.png) usadas pelo mod.
  • Mapas (.tmx) arquivos de mapa, ou (.tbin).
  • Arquivos .json usados pelos patches do Content Patcher (ex.: newAssets.json, etc.).
  • Sons ou outros recursos que seu mod possa precisar.

⚙️ Comportamento de Compilação

Sempre que você compilar o projeto usando nossa biblioteca, tudo dentro da pasta assets será automaticamente copiado para a pasta final do mod.

Isso significa:

  • Não é necessário mover os arquivos manualmente.
  • Qualquer alteração na pasta assets será refletida na próxima compilação.
  • Os caminhos dos arquivos devem ser pensados como se já estivessem dentro da pasta do mod.

📌 Exemplo

Se você tiver o seguinte arquivo:

assets/Characters/Abigail.png

Ele será copiado para:

<nome-do-mod>/assets/Characters/Abigail.png

E poderá ser referenciado normalmente nos patches do Content Patcher.


✅ Dica

Mantenha sua pasta assets organizada desde o início para facilitar a manutenção do mod e garantir que tudo seja copiado corretamente.


🖼️ Modificando Recursos com o Content Patcher

Nossa biblioteca fornece uma maneira simples de modificar os arquivos do jogo Stardew Valley usando o Content Patcher.


📚 Usando a Classe Helper

A classe ModEntry herda de Helper, que fornece acesso às ferramentas de modificação do jogo. Dentro dela, temos o atributo self.content, que permite registrar alterações nos arquivos do jogo.

Construtor da classe Helper

    def __init__(self, manifest:Manifest, modFramework:Optional[ContentPatcher|SlingShotFramework|FarmTypeManager|ItemExtensions]=None):
        self.modFolderAssets=os.path.join(os.getcwd(), "assets")
        self.assetsFileIgnore=[]
        if modFramework is None:
            self.content = ContentPatcher(manifest=manifest)
        else:
            self.content = modFramework


        self.i18n=i18n()
        steamVerify=steamLoad()
        self.pathSteam=steamVerify.verify()
        self.jsonRead=jsonStardewRead()

        self.modPath=os.path.join("build", self.content.Manifest.Name)
        self.autoTranslate=False

📌 Explicação das variáveis:

  • "self.ModFolderAssets" - Guarda o caminho da pasta assets, caso presente no projeto.

  • "self.assetsFileIgnore" - Guarda uma lista de itens a ser ignorado na pasta assets para não inclusão no mod(útil para mapas que arquivos apontam pra referencia de itens vanilla, ou de outros mods, que podem atrapalhar caso esteja na versão final, e tenha diferentes estações).

  • "self.content" - Recebe a classe do framework que irá utilizar (Valor vem do parâmetro modFramework)

  • self.i18n - Variável usada para tradução entre linguagens no smapi

  • "steamVerify" - Objeto que detecta a pasta do jogo

  • "self.pathSteam" - Recebe a pasta da Steam onde fica o seu jogo.

  • "self.jsonRead" - Objeto da classe jsonStardewRead, que é responsavel por ler e escrever arquivos .json

  • "self.modPath" - Caminho para a pasta build para compilação do mod.

  • "self.autoTranslate" - Variavel de controle para auto tradução.


Frameworks

Content Patcher Class