Content Patcher
Content Patcher é um framework/mod do stardew valley feito pelo PathosChild, que contém muitos recursos poderosos, para modificação do Stardew Valley, desde carregar sprites, editar dados, música, etc.
Na biblioteca do stardewmodpy, o content patcher tem o seguinte construtor:
def __init__(self, manifest:"Manifest"):
self.Manifest=manifest
self.Manifest.ContentPackFor={
"UniqueID": "Pathoschild.ContentPatcher"
}
self.fileName="content.json"
self.contentFile={
"Format": "2.5.0",
"Changes": []
}
self.contentFiles={}
self.extraContents={}
📌 Explicação das variáveis e métodos:
-
self.Manifest (
Manifest) - Guarda o objeto da classe Manifest, que é responsavel pelo arquivo manifest -
self.FileName (
str) - Arquivo principal que o framework salva -
self.contentFile (
dict) - Dicionário principal preparado para salvar no arquivo principal -
self.contentFiles (
dict) - Dicionário para arquivos separados -
self.extraContents (
dict) - Conteúdo extra (nao usado)
self.registryContentData
-
contentData (
Include|Load|EditData|EditImage|EditMap) - Parâmetro que define qual tipo de modificação está sendo feita, eles podem ser: Include, Load, EditData, EditImage, EditMap -
contentFile (
str) - Nome do arquivo.json a ser adicionado ao mod, para uso do content patcher.
self.addCustomLocation
- **customLocations - O recurso CustomLocations permite adicionar novos locais no jogo, com seus próprios mapas e warps.
self.addConfigSchema
- **confifSchema - O recurso ConfigSchema permite adicionar variáveis dinâmicas pre-setadas ao content patcher.
Usando o Framework
Include
Para adicionar novos arquivos .json no content Patcher para deixar o projeto mais organizado, voce pode usar a classe Include.
Exemplo adicionando um novo arquivo:
from StardewValley import Manifest,Include
from StardewValley.helper import Helper
class ModEntry(Helper):
#...
#conteudo
def contents(self):
#acrescenta um arquivo novo no assets
self.content.registryContentData(
Include(
FromFile="novoArquivo"
)
)
Para mais detalhes, consultar a pagina da classe Include
🧩 Load
Aqui está um exemplo de substituição do sprite da Abigail:
from StardewValley import Manifest,Load
from StardewValley.helper import Helper
class ModEntry(Helper):
#...
#conteudo
def contents(self):
self.content.registryContentData(
Load(
LogName="Substituindo sprite",
Target="Characters/Abigail",
FromFile="assets/Abigail.png"
)
)
📌 Explicação dos Parâmetros:
"LogName": Nome que aparecerá no log do SMAPI ao aplicar o patch."Characters/Abigail": Caminho para o recurso original do jogo que está sendo substituído."assets/Abigail.png": Caminho para o novo arquivo dentro da pasta do mod.
📁 Certifique-se de que sua pasta assets contém o arquivo
Certifique-se de que o arquivo Abigail.png esteja presente na pasta assets do seu projeto, pois ele será copiado automaticamente durante a compilação do mod.
- Para mais detalhes, consultar a pagina da classe Load
Outras classes que você pode usar para conteúdos: