Модификации:Моддер гайд/Приступая к работе: различия между версиями

Материал из Stardew Valley Wiki
Перейти к навигации Перейти к поиску
м (Замена текста — «(e.g. » на «(''e.g.,'' »)
 
(не показано 15 промежуточных версий 7 участников)
Строка 3: Строка 3:
 
{{Переведите}}
 
{{Переведите}}
  
Do you want to create SMAPI mods for Stardew Valley? This guide is for you! '''For using mods, see [[Modding:Player Guide/Getting Started|Modding:Player Guide]]. For creating Content Patcher packs, see [[Модификации:Content Patcher]].'''
+
Желаете начать создавать моды для игры Stardew Valley с помощью SMAPI? Тогда этот гайд для вас! '''Для использования модов, перейди в [[Modding:Player Guide/Getting Started|Modding:Player Guide]]. Для создания патчей, см [[Модификации:Content Patcher]].'''
  
 
==Вступление==
 
==Вступление==
===What is a SMAPI mod?===
+
===Что за SMAPI?===
A SMAPI mod uses the [https://smapi.io/ SMAPI] modding API to extend the game logic. The mod can respond when something happens in the game (like when an object is placed in the world), run code periodically (like once per update tick), change the game's assets and data, etc. SMAPI mods are written in C# using the .NET Framework, and Stardew Valley uses XNA/MonoGame for the game logic (drawing to the screen, user input, etc).
+
SMAPI — это специальное API для создания модификаций с целью расширения логик игры. Мод поможет реализовать изменения в игре (например, добавить новый предмет в мир), периодично запускать строчки кода (например, добавить автоматическую проверку обновлений), изменять игровые механики, логики и другое. Модификации SMAPI написаны на языке программирования C#, используют технологию .NET Framework. Stardew Valley использует движок XNA/MonoGame для реализации игровых механик (отрисовка объектов, отслеживание пользовательского ввода и прочее).
  
===Why do mods use SMAPI?===
+
===Почему модификации используют SMAPI?===
SMAPI does a lot for you! For example, SMAPI will...
+
SMAPI предоставляет возможность для реализации многих функций. Например:
  
# Load your mod into the game. Code mods aren't possible without SMAPI to load them.
+
# Загрузка мода в игру. Без SMAPI модификации не запустятся.
# Provide APIs and events which let you interact with the game in ways you otherwise couldn't. There are simplified APIs for game asset/data changes, player configuration, translation, reflection, etc. These are covered later in the guide.
+
# Упрощённые API, которые позволяют создать взаимодействия, которые раньше были недоступны. Они делают более простым внесение изменений в механики игры, настройку игрового персонажа, перевода и прочего. Но об этом чуть позже.
# Rewrite your mod for crossplatform compatibility when it's loaded. That lets you write mod code without worrying about the differences between the Linux/Mac/Windows versions of the game.
+
# Кроссплатформенность. Это значит, что не нужно думать, как интегрировать модификацию на разные ОС.
# Rewrite your mod to update it. SMAPI detects and fixes mod code broken by a game update in common cases.
+
# Изменение и обновление модификации. SMAPI обнаруживает и чинит дыры в коде, приводящие к поломке игры.
# Intercept errors. If your mod crashes or causes an error, SMAPI will intercept the error, show the error details in the console window, and in most cases automatically recover the game. This means your mod won't accidentally crash the game, and it makes it much easier to troubleshoot errors.
+
# Вывод ошибок. Если мод ломает игру или работает неправильно, SMAPI обнаружит ошибку, выведет её детали в окне консоли, и во многих случаях автоматически перезагрузит игру. Это значит, что поиск и устранение неполадки займёт гораздо меньше времени.
# Provide update checks. SMAPI automatically alerts players when a new version of your mod is available.
+
# Система обновлений. SMAPI автоматически уведомляет игроков о выходе новой версии мода.
# Provide compatibility checks. SMAPI automatically detects when your mod is incompatible and disables it before it causes problems, so players aren't left with broken games.
+
# Проверка совместимости. SMAPI автоматически проверяет и определяет несовместимость или неработоспособность модификации на текущей системе и отключает его до появления проблем у игроков. Так пользователи не останутся со сломанными версиями игр.
  
===Can I make a mod?===
+
===Могу ли я создать мод?===
Yes! This guide will help you create a simple mod step-by-step. If you follow along, you'll have created a mod! Then you'll just need to make it do what you want.
+
Да! Этот гайд поможет вам создать простой мод пошагово. Если вы выполните все действия, то создадите основу мода! После этого вам будет нужно просто подстроить ее под свои нужды.
  
If you're new to programming: many mod developers start with little or no programming experience. You can certainly learn along the way if you're determined, but you should be prepared for a steep learning curve. Don't be too ambitious at first; it's better to start with a small mod when you're figuring it out. It's easy to become overwhelmed at first and give up. The modding community is very welcoming, so don't be afraid to ask questions!
+
Если вы новичок в программировании, помните, многие создатели модов начинали с низким или нулевым уровнем программирования. Если вы решительно настроены, то точно можете научиться этому в процессе, но вы должны быть готовы приложить много усилий. Не будьте слишком амбициозно настроенными в самом начале, лучше начать с небольшого мода для пробы: иначе можно легко перегореть и бросить начатое. Сообщество по созданию модов очень дружелюбное, не бойтесь задавать вопросы!
  
If you already have programming experience, you should be fine. Programming experience in C# or Java will make things easier, but it isn't critical. If you're unfamiliar with C#, you can skim through the ''Learning C#'' references below to fill in any gaps.
+
Если же вы уже имели дело с программированием, то вы справитесь. Опыт в С# или Java облегчит задачу, но не критичен. Если вы не знакомы с С#, вы можете просмотреть приведенные ниже обучения по С# для закрытия некоторых пробелов.
  
===Can I make a mod ''without SMAPI''?===
+
===Могу ли я создать мод ''без использования SMAPI''?===
Yep. Many SMAPI mods support '[[Modding:Content_packs|content packs]]', which let you provide JSON text files, images, etc which they use. For example, you can [[Modding:Content Patcher|use Content Patcher]] to edit the game's images and data with zero programming needed. The rest of this guide is about creating a new SMAPI mod; for content packs, see [[Modding:Content Patcher]] (or the mod documentation if creating a content pack for a different mod).
+
Да. Многие SMAPI моды поддерживают так называемыe '[[Modding:Content_packs|контент паки]]', которые позволят вам применять текстовые JSON файлы, изображения и т.п. Например, вы можете использовать [[Modding:Content Patcher|Content Patcher]] для замены игровых картинок и данных без необходимости программировать. Оставшаяся часть этого гайда посвящена созданию SMAPI мода; для использования контент паков, прочитайте статью [[Modding:Content Patcher]] (или документацию мода, если вы создаете контент пак для другого мода).
  
===Where can I get help?===
+
===Где я могу получить помощь?===
<span id="help"></span>The Stardew Valley modding community is very welcoming. Feel free to ask for help in [[Modding:Community#Discord|#making-mods on the Stardew Valley Discord]].
+
<span id="help"></span>Сообщество по созданию модов Stardew Valley очень дружелюбное. Не стесняйтесь просить о помощи в [[Modding:Community#Discord|Discord сервере по модам Stardew Valley #making-mods]].
  
==Get started==
+
==Начало==
===Learn C#===
+
===Обучение C#===
Since mods are written in C#, it's a good idea to get acquainted with it first. You don't need to memorise everything, but a grasp of the basics (like fields, methods, variables, and classes) will make everything else much easier.
+
Так как моды пишутся на С#, хорошей идеей было бы ознакомиться с этим языком сразу. Вам не нужно запоминать все, но основы (вроде полей, методов, переменных и категорий) облегчат вам задачу.
  
Some useful resources:
+
Некоторые полезные ресурсы:
* [https://docs.microsoft.com/en-us/dotnet/csharp/quick-starts/ ''C# Quickstarts''] teaches the basics of C# with interactive examples.
+
* [https://docs.microsoft.com/en-us/dotnet/csharp/quick-starts/ ''C# Quickstarts''] интерактивно обучает базам С#.
* [https://mva.microsoft.com/en-us/training-courses/c-fundamentals-for-absolute-beginners-16169 ''C# Fundamentals for Absolute Beginners''] is a video guide which will walk you through C#, from the basic concepts to event-driven programming (which is what SMAPI mods mostly use).
+
* [https://mva.microsoft.com/en-us/training-courses/c-fundamentals-for-absolute-beginners-16169 ''C# Fundamentals for Absolute Beginners''] — видеогайд, который проведет вас по С# от базовых концептов до событийно-ориентированного програмированния (в котором чаще всего моды SMAPI и нуждаются).
 +
* [https://metanit.com/sharp/ Язык программирования C# и платформа .NET] — учебник на русском языке.
  
===Requirements===
+
===Требования===
Before you start:
+
Прежде чем вы начнете:
# Read the [[Modding:Player Guide/Getting Started|Player Guide]]. The rest of this guide assumes you're already familiar with using mods.
+
# Прочитайте [[Modding:Player Guide/Getting Started|Player Guide]]. Оставшаяся часть данного гайда подразумевает, что вы уже знакомы с использованием модов.
# Install Stardew Valley.
+
# Установите Stardew Valley.
# Install [[Modding:Player Guide/Getting Started#Install SMAPI|SMAPI]].
+
# Установите [[Modding:Player Guide/Getting Started#Install SMAPI|SMAPI]].
# Install the IDE (''integrated development environment'').
+
# Установите IDE (''интегрированная среда разработки'').
#* On Linux: install [http://www.monodevelop.com/ MonoDevelop].
+
#* На Linux: установите [http://www.monodevelop.com/ MonoDevelop].
#* On Mac: install [https://visualstudio.microsoft.com/vs/mac/ Visual Studio for Mac]. (This is a rebranded MonoDevelop.)
+
#* На Mac: установите [https://visualstudio.microsoft.com/vs/mac/ Visual Studio for Mac]. (Это обновленный MonoDevelop.)
#* On Windows: install [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community]. When the installer asks about workloads, enable ''.NET Desktop Development''.  
+
#* На Windows: установите [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community]. Когда установщик спросит о рабочей нагрузке (workloads), добавьте разрешение для ''.NET Desktop Development''.
  
If you're not familiar with Visual Studio (on Windows/Mac) or MonoDevelop (on Linux), [[Modding:IDE reference]] explains how to do the important stuff you need for this guide.
+
Если вы не знакомы с Visual Studio (на Windows/Mac) или MonoDevelop (на Linux), [[Modding:IDE референс]] объясняет, как сделать необходимые вещи для этого гайда.
 
+
==Создайте простой мод==
==Create a basic mod==
+
===Быстрый старт===
===Quick start===
+
Если у вас достаточно опыта, чтобы пропустить учебник, вот краткий обзор этого раздела:
If you're experienced enough to skip the tutorial, here's a quick summary of this section:
+
{{collapse|расширения для быстрого старта|content=&#32;
{{collapse|expand for quick start|content=&#32;
 
 
# Create an empty C# class library project.
 
# Create an empty C# class library project.
 
# Target .NET Framework 4.5, 4.5.1, or 4.5.2 for best compatibility.
 
# Target .NET Framework 4.5, 4.5.1, or 4.5.2 for best compatibility.
Строка 132: Строка 132:
 
# <code>public class ModEntry : Mod</code> (see [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/class class keyword]) creates your mod's main class, and subclasses SMAPI's <samp>Mod</samp> class. SMAPI will detect your <samp>Mod</samp> subclass automatically, and <samp>Mod</samp> gives you access to SMAPI's APIs.
 
# <code>public class ModEntry : Mod</code> (see [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/class class keyword]) creates your mod's main class, and subclasses SMAPI's <samp>Mod</samp> class. SMAPI will detect your <samp>Mod</samp> subclass automatically, and <samp>Mod</samp> gives you access to SMAPI's APIs.
 
# <code>public override void Entry(IModHelper helper)</code> is the method SMAPI will call when your mod is loaded into the game. The <code>helper</code> provides convenient access to many of SMAPI's APIs.
 
# <code>public override void Entry(IModHelper helper)</code> is the method SMAPI will call when your mod is loaded into the game. The <code>helper</code> provides convenient access to many of SMAPI's APIs.
# <code>helper.Events.Input.ButtonPressed += this.OnButtonPressed;</code> adds an 'event handler' (i.e. a method to call) when the button-pressed event happens. In other words, when a button is pressed (the <samp>helper.Events.Input.ButtonPressed</samp> event), SMAPI will call your <samp>this.OnButtonPressed</samp> method. See [[Modding:Modder Guide/APIs/Events|events in the SMAPI reference]] for more info.
+
# <code>helper.Events.Input.ButtonPressed += this.OnButtonPressed;</code> adds an 'event handler' (''i.e.,'' a method to call) when the button-pressed event happens. In other words, when a button is pressed (the <samp>helper.Events.Input.ButtonPressed</samp> event), SMAPI will call your <samp>this.OnButtonPressed</samp> method. See [[Modding:Modder Guide/APIs/Events|events in the SMAPI reference]] for more info.
  
 
===Add your manifest===
 
===Add your manifest===
Строка 175: Строка 175:
  
 
==FAQs==
 
==FAQs==
===Where's the SMAPI documentation?===
+
===Где SMAPI документация?===
This is just the 'getting started' tutorial. For more documentation, see the [[Modding:Modder Guide/APIs|SMAPI reference]] and the [[Modding:Index|topics listed on the index page]].
+
Это всего лишь руководство по началу. Для просмотра документации смотри: [[Modding:Modder Guide/APIs|SMAPI reference]] и [[Modding:Index|topics listed on the index page]].
  
===How do I make my mod work crossplatform?===
+
===Как сделать кросс-платформенный мод?===
SMAPI will automatically adjust your mod so it works on Linux, MacOS, and Windows. However, there are a few things you should do to avoid problems:
+
SMAPI автоматически настроит ваш мод таким образом, чтобы он работал в Linux, macOS и Windows. Однако есть несколько вещей, которые вы должны сделать, чтобы избежать проблем:
  
 
<ol>
 
<ol>
<li>Use the [https://smapi.io/package/readme crossplatform build config] package to automatically set up your project references. This makes crossplatform compatibility easier and lets your code compile on any platform. (If you followed the above guide, you already have this.)</li>
+
<li>Используйте [https://smapi.io/package/readme конфигурацию кросс-платформенной сборки] для автоматической настройки ссылок. Это упрощает кросс-платформенную совместимость и позволяет вашему коду компилироваться на любой платформе. (If you followed the above guide, you already have this.)</li>
  
<li>Use <samp>System.IO.Path.Combine</samp> to build file paths, don't hardcode path separators since they won't work on all platforms.
+
<li>Используйте <samp>System.IO.Path.Combine</samp> для построения путей к файлу, не кодируйте разделители путей, так как они не будут работать на всех платформах.
  
 
<syntaxhighlight lang="c#">
 
<syntaxhighlight lang="c#">
Строка 207: Строка 207:
  
 
===How do I decompile the game code?===
 
===How do I decompile the game code?===
It's often useful to see how the game code works. The game code is compiled into <samp>StardewValley.exe</samp> (i.e. converted to a machine-readable format), but you can decompile it get a mostly-readable approximation of the original code. (This might not be fully functional due to decompiler limitations, but you'll be able to see what it's doing.)
+
It's often useful to see how the game code works. The game code is compiled into <samp>StardewValley.exe</samp> (''i.e.,'' converted to a machine-readable format), but you can decompile it get a mostly-readable approximation of the original code. (This might not be fully functional due to decompiler limitations, but you'll be able to see what it's doing.)
  
 
To decompile the game code...
 
To decompile the game code...

Текущая версия на 21:38, 11 ноября 2023

Создание SMAPI модов SMAPI mascot.png


Модификации:Индекс

Robin building.png
“Предстоит ещё много работы...”
— Робин

Неполный перевод

Эта статья или её часть до сих пор не переведены на русский язык. Вы можете оказать помощь в переводе путем ее редактирования.
Последний раз редактировалось Фереште в 2023-11-11 21:38:02.

Желаете начать создавать моды для игры Stardew Valley с помощью SMAPI? Тогда этот гайд для вас! Для использования модов, перейди в Modding:Player Guide. Для создания патчей, см Модификации:Content Patcher.

Вступление

Что за SMAPI?

SMAPI — это специальное API для создания модификаций с целью расширения логик игры. Мод поможет реализовать изменения в игре (например, добавить новый предмет в мир), периодично запускать строчки кода (например, добавить автоматическую проверку обновлений), изменять игровые механики, логики и другое. Модификации SMAPI написаны на языке программирования C#, используют технологию .NET Framework. Stardew Valley использует движок XNA/MonoGame для реализации игровых механик (отрисовка объектов, отслеживание пользовательского ввода и прочее).

Почему модификации используют SMAPI?

SMAPI предоставляет возможность для реализации многих функций. Например:

  1. Загрузка мода в игру. Без SMAPI модификации не запустятся.
  2. Упрощённые API, которые позволяют создать взаимодействия, которые раньше были недоступны. Они делают более простым внесение изменений в механики игры, настройку игрового персонажа, перевода и прочего. Но об этом чуть позже.
  3. Кроссплатформенность. Это значит, что не нужно думать, как интегрировать модификацию на разные ОС.
  4. Изменение и обновление модификации. SMAPI обнаруживает и чинит дыры в коде, приводящие к поломке игры.
  5. Вывод ошибок. Если мод ломает игру или работает неправильно, SMAPI обнаружит ошибку, выведет её детали в окне консоли, и во многих случаях автоматически перезагрузит игру. Это значит, что поиск и устранение неполадки займёт гораздо меньше времени.
  6. Система обновлений. SMAPI автоматически уведомляет игроков о выходе новой версии мода.
  7. Проверка совместимости. SMAPI автоматически проверяет и определяет несовместимость или неработоспособность модификации на текущей системе и отключает его до появления проблем у игроков. Так пользователи не останутся со сломанными версиями игр.

Могу ли я создать мод?

Да! Этот гайд поможет вам создать простой мод пошагово. Если вы выполните все действия, то создадите основу мода! После этого вам будет нужно просто подстроить ее под свои нужды.

Если вы новичок в программировании, помните, многие создатели модов начинали с низким или нулевым уровнем программирования. Если вы решительно настроены, то точно можете научиться этому в процессе, но вы должны быть готовы приложить много усилий. Не будьте слишком амбициозно настроенными в самом начале, лучше начать с небольшого мода для пробы: иначе можно легко перегореть и бросить начатое. Сообщество по созданию модов очень дружелюбное, не бойтесь задавать вопросы!

Если же вы уже имели дело с программированием, то вы справитесь. Опыт в С# или Java облегчит задачу, но не критичен. Если вы не знакомы с С#, вы можете просмотреть приведенные ниже обучения по С# для закрытия некоторых пробелов.

Могу ли я создать мод без использования SMAPI?

Да. Многие SMAPI моды поддерживают так называемыe 'контент паки', которые позволят вам применять текстовые JSON файлы, изображения и т.п. Например, вы можете использовать Content Patcher для замены игровых картинок и данных без необходимости программировать. Оставшаяся часть этого гайда посвящена созданию SMAPI мода; для использования контент паков, прочитайте статью Modding:Content Patcher (или документацию мода, если вы создаете контент пак для другого мода).

Где я могу получить помощь?

Сообщество по созданию модов Stardew Valley очень дружелюбное. Не стесняйтесь просить о помощи в Discord сервере по модам Stardew Valley #making-mods.

Начало

Обучение C#

Так как моды пишутся на С#, хорошей идеей было бы ознакомиться с этим языком сразу. Вам не нужно запоминать все, но основы (вроде полей, методов, переменных и категорий) облегчат вам задачу.

Некоторые полезные ресурсы:

Требования

Прежде чем вы начнете:

  1. Прочитайте Player Guide. Оставшаяся часть данного гайда подразумевает, что вы уже знакомы с использованием модов.
  2. Установите Stardew Valley.
  3. Установите SMAPI.
  4. Установите IDE (интегрированная среда разработки).
    • На Linux: установите MonoDevelop.
    • На Mac: установите Visual Studio for Mac. (Это обновленный MonoDevelop.)
    • На Windows: установите Visual Studio Community. Когда установщик спросит о рабочей нагрузке (workloads), добавьте разрешение для .NET Desktop Development.

Если вы не знакомы с Visual Studio (на Windows/Mac) или MonoDevelop (на Linux), Modding:IDE референс объясняет, как сделать необходимые вещи для этого гайда.

Создайте простой мод

Быстрый старт

Если у вас достаточно опыта, чтобы пропустить учебник, вот краткий обзор этого раздела:

расширения для быстрого старта 
  1. Create an empty C# class library project.
  2. Target .NET Framework 4.5, 4.5.1, or 4.5.2 for best compatibility.
  3. Reference the Pathoschild.Stardew.ModBuildConfig NuGet package to automatically add the right references depending on the platform the mod is being compiled on.
  4. Create a ModEntry class which subclasses StardewModdingAPI.Mod.
  5. Override the Entry method, and write your code using the SMAPI events and APIs.
  6. Create a manifest.json file which describes your mod for SMAPI.
  7. Create a zip file containing the mod files for release.

Create the project

A SMAPI mod is a compiled library (DLL) with an entry method that gets called by SMAPI, so let's set that up.

  1. Open Visual Studio or MonoDevelop.
  2. Create a solution with a .NET Framework class library project (see how to create a project). Make sure you choose .NET Framework (not .NET Core, .NET Standard, or .NET 5+).
  3. Change the target framework to .NET Framework 4.5, 4.5.1, or 4.5.2 for best compatibility (see how to change target framework).
    That's the version installed and used by the game. Newer versions may not be installed for players, and SMAPI may not be able to load them.
  4. Reference the Pathoschild.Stardew.ModBuildConfig NuGet package (see how to add the package).
  5. Restart Visual Studio/MonoDevelop after installing the package.

Add the code

Next let's add some code SMAPI will run.

  1. Delete the Class1.cs or MyClass.cs file (see how to delete a file).
  2. Add a C# class file called ModEntry.cs to your project (see how to add a file).
  3. Put this code in the file (replace YourProjectName with the name of your project):
    using System;
    using Microsoft.Xna.Framework;
    using StardewModdingAPI;
    using StardewModdingAPI.Events;
    using StardewModdingAPI.Utilities;
    using StardewValley;
    
    namespace YourProjectName
    {
        /// <summary>The mod entry point.</summary>
        public class ModEntry : Mod
        {
            /*********
            ** Public methods
            *********/
            /// <summary>The mod entry point, called after the mod is first loaded.</summary>
            /// <param name="helper">Provides simplified APIs for writing mods.</param>
            public override void Entry(IModHelper helper)
            {
                helper.Events.Input.ButtonPressed += this.OnButtonPressed;
            }
    
    
            /*********
            ** Private methods
            *********/
            /// <summary>Raised after the player presses a button on the keyboard, controller, or mouse.</summary>
            /// <param name="sender">The event sender.</param>
            /// <param name="e">The event data.</param>
            private void OnButtonPressed(object sender, ButtonPressedEventArgs e)
            {
                // ignore if player hasn't loaded a save yet
                if (!Context.IsWorldReady)
                    return;
    
                // print button presses to the console window
                this.Monitor.Log($"{Game1.player.Name} pressed {e.Button}.", LogLevel.Debug);
            }
        }
    }
    

Here's a breakdown of what that code is doing:

  1. using X; (see using directive) makes classes in that namespace available in your code.
  2. namespace YourProjectName (see namespace keyword) defines the scope for your mod code. Don't worry about this when you're starting out, Visual Studio or MonoDevelop will add it automatically when you add a file.
  3. public class ModEntry : Mod (see class keyword) creates your mod's main class, and subclasses SMAPI's Mod class. SMAPI will detect your Mod subclass automatically, and Mod gives you access to SMAPI's APIs.
  4. public override void Entry(IModHelper helper) is the method SMAPI will call when your mod is loaded into the game. The helper provides convenient access to many of SMAPI's APIs.
  5. helper.Events.Input.ButtonPressed += this.OnButtonPressed; adds an 'event handler' (i.e., a method to call) when the button-pressed event happens. In other words, when a button is pressed (the helper.Events.Input.ButtonPressed event), SMAPI will call your this.OnButtonPressed method. See events in the SMAPI reference for more info.

Add your manifest

The mod manifest tells SMAPI about your mod.

  1. Add a file named manifest.json to your project.
  2. Paste this code into the file:
    {
      "Name": "<your project name>",
      "Author": "<your name>",
      "Version": "1.0.0",
      "Description": "<One or two sentences about the mod>",
      "UniqueID": "<your name>.<your project name>",
      "EntryDll": "<your project name>.dll",
      "MinimumApiVersion": "3.0.0",
      "UpdateKeys": []
    }
    
  3. Replace the <...> placeholders with the correct info. Don't leave any <> symbols!

This will be listed in the console output when the game is launching. For more info, see the manifest docs.

Try your mod

  1. Build the project.
    If you did the create the project steps correctly, this will automatically add your mod to the game's Mods folder.
  2. Run the game through SMAPI.

The mod so far will just send a message to the console window whenever you press a key in the game.

Troubleshoot

If the tutorial mod doesn't work...

  1. Review the above steps to make sure you didn't skip something.
  2. Check for error messages which may explain why it's not working:
    • In Visual Studio, click Build > Rebuild Solution and check the Output pane or Error list.
    • In MonoDevelop, click Build > Rebuild All and wait until it's done. Then click the "Build: XX errors, XX warnings" bar at the top, and check the XX Errors and Build Output tabs.
  3. If one of the errors (not necessarily the first one) says the package can't find your game folder, see Visual Studio can't find the game/SMAPI/XNA DLLs.
  4. See the troubleshooting guide.
  5. If all else fails, come ask for help in the #making-mods in the Stardew Valley Discord. :)

FAQs

Где SMAPI документация?

Это всего лишь руководство по началу. Для просмотра документации смотри: SMAPI reference и topics listed on the index page.

Как сделать кросс-платформенный мод?

SMAPI автоматически настроит ваш мод таким образом, чтобы он работал в Linux, macOS и Windows. Однако есть несколько вещей, которые вы должны сделать, чтобы избежать проблем:

  1. Используйте конфигурацию кросс-платформенной сборки для автоматической настройки ссылок. Это упрощает кросс-платформенную совместимость и позволяет вашему коду компилироваться на любой платформе. (If you followed the above guide, you already have this.)
  2. Используйте System.IO.Path.Combine для построения путей к файлу, не кодируйте разделители путей, так как они не будут работать на всех платформах.
    // ✘ Don't do this! It won't work on Linux/Mac.
    string path = this.Helper.DirectoryPath + "\assets\image.png";
    
    // ✓ This is OK
    string path = Path.Combine(this.Helper.DirectoryPath, "assets", "image.png");
    
  3. Use this.Helper.DirectoryPath, don't try to determine the mod path yourself.
    // ✘ Don't do this! It will crash if SMAPI rewrites the assembly (''e.g.,'' to update or crossplatform it).
    string modFolder = Assembly.GetCallingAssembly().Location;
    
    // ✓ This is OK
    string modFolder = this.Helper.DirectoryPath;
    
  4. The following describes the upcoming SMAPI 3.13.0, and may change before release.
    An asset name identifies an asset you can load through a content API like Game1.content.Load<T>("asset name"), like Characters/Abigail. This is not a file path, and the asset name format on Windows does not match the path format. When comparing asset names, make sure you use PathUtilities.NormalizePath("some/path") instead of path helpers.

How do I decompile the game code?

It's often useful to see how the game code works. The game code is compiled into StardewValley.exe (i.e., converted to a machine-readable format), but you can decompile it get a mostly-readable approximation of the original code. (This might not be fully functional due to decompiler limitations, but you'll be able to see what it's doing.)

To decompile the game code...

  1. First-time setup:
    1. Install the latest ILSpy release for Windows release (get the "ILSpy_binaries" file under assets). You can use Avalonia ILSpy for Linux and macOS.
    2. Open ILSpy.
    3. Click View > Options, scroll to the "Other" section at the bottom, and enable "Always qualify member references".
  2. Open StardewValley.exe in ILSpy.
  3. Right-click on Stardew Valley and choose Save Code to create a decompiled project you can open in Visual Studio.

To unpack the XNB data/image files, see Modding:Editing XNB files.