Cambios

Creación de la pagina Mod structure
{{../../Encabezado}}

'''Consulte [[Modding:Guía del Modder/Introducción|Modding:Guía del Modder]] para obtener una introducción a la creación de un mod SMAPI. Esta es una página de referencia técnica que asume que ya ha seguido esa guía.'''

__TOC__

==Estructura basica==
Un mod SMAPI debe tener...
# un archivo DLL compilado que contiene el código para ejecutar como parte del mod (vea la [[#Entrada de mod|''entrada del mod'' a continuación]]);
# un archivo [[Modding:Guía del Modder/APIs/Manifest|<samp>manifest.json</samp>]] que describe el mod.

Opcionalmente puede tener...
# cualquier número de archivos [[#Dependencias|compiled<samp>.dll</samp> y <samp>.pdb</samp> a los que hace referencia el DLL del mod principal]];
# una carpeta [[Modding:Guía del Modder/APIs/Traducción|<samp>i18n</samp> que contiene las traducciones]];
# cualquier número de archivos personalizados utilizados por el código mod (generalmente una carpeta <samp>assets</samp> por convención).

==Entrada de mod==
El proyecto mod principal debe tener una subclase de <samp>StardewModdingAPI.Mod</samp>. La clase a menudo se nombra <samp>ModEntry</samp> por convención, pero puede usar cualquier nombre de C# válido. La clase debe implementar un método <samp>Entry</samp>que SMAPI llamará una vez que se cargue el mod. El <samp>helper</samp> proporciona acceso a casi todas las [[Modding:Guía del Modder/APIs|APIs de SMAPI]] (disponible como <samp>this.Helper</samp> en otros métodos).

Aquí está la implementación mínima posible (que no hace nada en absoluto):
<syntaxhighlight lang="c#">
using StardewModdingAPI;

/// <summary>El punto de entrada del mod.</summary>
public class ModEntry : Mod
{
/// <summary>El punto de entrada del mod, al que se llama después de cargar el mod por primera vez.</summary>
/// <param name="helper">Proporciona APIs simplificadas para escribir mods.</param>
public override void Entry(IModHelper helper)
{

}
}
</syntaxhighlight>

El método <samp>Entry</samp> se llama muy temprano en el proceso de ejecución, por lo que algunas cosas aún no se han inicializado. Puedes usar eventos como <samp>GameLaunched</samp>, <samp>SaveLoaded</samp>, o <samp>DayStarted</samp> para acceder a todas las funciones. Este es un breve resumen del uso de las APIs en <samp>Entry</samp>:
{| class="wikitable"
|-
! característica
! estado
|-
| La mayoría de las APIs de SMAPI
| ✓ disponible. Eso incluye el [[Modding:Guía del Modder/APIs/Eventos|registro de controladores de eventos]], [[Modding:Guía del Modder/APIs/Config|lectura de la configuración]], [[Modding:Guía del Modder/APIs/Contenido|carga de assets]], y la [[Modding:Guía del Modder/APIs/Integración#Mod registry|obtención de información de mod]].
|-
| <samp>helper.ModRegistry.GetApi</samp>
| ✖ No disponible, ya que algunas mods aún no se han inicializado..
|-
| Campos del juego
| ✖ No disponible de forma fiable, ya que los mods se cargan al principio del proceso. Eso incluye campos básicos como <samp>Game1.objectInformation</samp>.
|}

==Dependencias==
La mayoría de los mods son independientes y solo tienen un archivo DLL, pero ese no es un límite estricto. Estos son algunos patrones comunes:

* [[Modding:Guía del Modder/APIs/Manifest#Dependencias|Declare una dependencia de otro mod]], y SMAPI cargará el otro mod antes que el suyo y mostrará un error amistoso si no está instalado. Puede [Modding:Guía del Modder/APIs/Integración|usar una API proporcionada por mod]] si el mod tiene una, o hacer referencia a la DLL directamente. (Si hace referencia a una DLL mod, asegúrese de que ''no esté'' [https://msdn.microsoft.com/en-us/library/t1zz5y8c(v=vs.100). marcada como 'copy local']para evitar problemas; SMAPI cargará la versión instalada en su lugar).
* [https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/shared-projects Cree un proyecto compartido] y haga referencia a él desde su proyecto mod. El código del proyecto compartido se compilará como parte de su proyecto de modificación (por lo que será una DLL que contenga ambos proyectos en la carpeta de modificación).
* Haga referencia a projects/DLLs y copie sus DLL en su carpeta mod. SMAPI detectará la referencia y cargará las DLL desde su carpeta mod automáticamente. '''No haga esto para hacer referencia a un mod''' — ya que puede causar errores confusos cuando hay varias versiones disponibles (vea la primera opción en su lugar).

[[en:Modding:Modder Guide/APIs/Mod structure]]
[[zh:模组:制作指南/APIs/Mod structure]]
836

ediciones