add support for deploying mods to game folder automatically
This commit is contained in:
parent
66b1b583e5
commit
ffc339bc29
46
README.md
46
README.md
|
@ -32,34 +32,36 @@ The package...
|
|||
3. Compile on any platform.
|
||||
|
||||
## Simplify mod development
|
||||
### Package your mod into the game directory automatically
|
||||
During development, it's helpful to have the mod files packaged into your `Mods` directory automatically each time you build. To do that:
|
||||
### Package your mod into the game folder automatically
|
||||
You can copy your mod files into the `Mods` folder automatically each time you build, so you don't
|
||||
need to do it manually:
|
||||
|
||||
1. Edit your mod's `.csproj` file.
|
||||
2. Add this block of code at the bottom, right above the closing `</Project>` tag:
|
||||
2. Add this block under the `<Project` line:
|
||||
|
||||
```xml
|
||||
<Target Name="AfterBuild">
|
||||
<PropertyGroup>
|
||||
<ModPath>$(GamePath)\Mods\$(TargetName)</ModPath>
|
||||
</PropertyGroup>
|
||||
<Copy SourceFiles="$(TargetDir)\$(TargetName).dll" DestinationFolder="$(ModPath)" />
|
||||
<Copy SourceFiles="$(TargetDir)\$(TargetName).pdb" DestinationFolder="$(ModPath)" Condition="Exists('$(TargetDir)\$(TargetName).pdb')" />
|
||||
<Copy SourceFiles="$(TargetDir)\$(TargetName).dll.mdb" DestinationFolder="$(ModPath)" Condition="Exists('$(TargetDir)\$(TargetName).dll.mdb')" />
|
||||
<Copy SourceFiles="$(ProjectDir)manifest.json" DestinationFolder="$(ModPath)" />
|
||||
</Target>
|
||||
```
|
||||
3. Optionally, edit the `<ModPath>` value to change the name, or add any additional files your mod needs.
|
||||
```xml
|
||||
<PropertyGroup>
|
||||
<DeployModFolderName>$(MSBuildProjectName)</DeployModFolderName>
|
||||
</PropertyGroup>
|
||||
```
|
||||
|
||||
That's it! Each time you build, the files in `<game path>\Mods\<mod name>` will be updated.
|
||||
That's it! Each time you build, the files in `<game path>\Mods\<mod name>` will be updated with
|
||||
your `manifest.json`, build output, and any `i18n` files.
|
||||
|
||||
Notes:
|
||||
* To add custom files, just [add them to the build output](https://stackoverflow.com/a/10828462/262123).
|
||||
* To customise the folder name, just replace `$(MSBuildProjectName)` with the folder name you want.
|
||||
* If your project references another mod, make sure the reference is [_not_ marked 'copy local'](https://msdn.microsoft.com/en-us/library/t1zz5y8c(v=vs.100).aspx).
|
||||
|
||||
### Debug into the mod code
|
||||
Stepping into your mod code when the game is running is straightforward, since this package injects the configuration automatically. To do it:
|
||||
Stepping into your mod code when the game is running is straightforward, since this package injects
|
||||
the configuration automatically. To do it:
|
||||
|
||||
1. [Package your mod into the game directory automatically](#package-your-mod-into-the-game-directory-automatically).
|
||||
1. [Package your mod into the game folder automatically](#package-your-mod-into-the-game-folder-automatically).
|
||||
2. Launch the project with debugging in Visual Studio or MonoDevelop.
|
||||
|
||||
This will deploy your mod files into the game directory, launch SMAPI, and attach a debugger automatically. Now you can step through your code, set breakpoints, etc.
|
||||
This will deploy your mod files into the game folder, launch SMAPI, and attach a debugger
|
||||
automatically. Now you can step through your code, set breakpoints, etc.
|
||||
|
||||
## Troubleshoot
|
||||
### "Failed to find the game install path"
|
||||
|
@ -89,9 +91,6 @@ the game location yourself. There's two ways to do that:
|
|||
|
||||
4. Replace `PATH_HERE` with your custom game install path.
|
||||
|
||||
The configuration will check your custom path first, then fall back to the default paths (so it'll
|
||||
still compile on a different computer).
|
||||
|
||||
* **Option 2: set the path in the project file.**
|
||||
_(You'll need to do it for every project that uses the package.)_
|
||||
1. Get the folder path containing the Stardew Valley `.exe` file.
|
||||
|
@ -105,5 +104,8 @@ still compile on a different computer).
|
|||
|
||||
3. Replace `PATH_HERE` with your custom game install path.
|
||||
|
||||
The configuration will check your custom path first, then fall back to the default paths (so it'll
|
||||
still compile on a different computer).
|
||||
|
||||
## Versions
|
||||
See [release notes](release-notes.md).
|
||||
|
|
|
@ -105,4 +105,29 @@
|
|||
<Error Condition="'$(GamePlatform)' != 'Windows' AND !Exists('$(GamePath)\StardewValley.exe')" Text="Found a game folder at $(GamePath), but it doesn't contain Stardew Valley. You should delete this folder if it's empty." />
|
||||
<Error Condition="!Exists('$(GamePath)\StardewModdingAPI.exe')" Text="Found a game folder at $(GamePath), but it doesn't contain SMAPI." />
|
||||
</Target>
|
||||
|
||||
<!--######
|
||||
## deploy mod files
|
||||
#######-->
|
||||
<Target Name="AfterBuild" Condition="'$(DeployModFolderName)' != ''">
|
||||
<!--generate paths-->
|
||||
<PropertyGroup>
|
||||
<ModDeployPath>$(GamePath)\Mods\$(DeployModFolderName)</ModDeployPath>
|
||||
<FallbackManifestPath>$(ProjectDir)\manifest.json</FallbackManifestPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<BuildFiles Include="$(TargetDir)\**\*.*" />
|
||||
<FallbackTranslationFiles Include="$(ProjectDir)\i18n\*.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<!--validate-->
|
||||
<Error Text="Could not deploy mod automatically because no build output was found." Condition="'@(BuildFiles)' == ''" />
|
||||
<Error Text="Could not deploy mod automatically because no manifest.json was found in the project or build output." Condition="!Exists('$(TargetDir)\manifest.json') AND !Exists('$(FallbackManifestPath)')" />
|
||||
|
||||
<!-- copy mod files -->
|
||||
<Message Text="Deploying mod to $(ModDeployPath)..." Importance="high" />
|
||||
<Copy SourceFiles="@(BuildFiles)" DestinationFolder="$(ModDeployPath)\%(RecursiveDir)" SkipUnchangedFiles="true" />
|
||||
<Copy SourceFiles="$(FallbackManifestPath)" DestinationFolder="$(ModDeployPath)" Condition="!Exists('$(TargetDir)\manifest.json')" />
|
||||
<Copy SourceFiles="@(FallbackTranslationFiles)" DestinationFolder="$(ModDeployPath)\i18n\%(RecursiveDir)" Condition="!Exists('$(TargetDir)\i18n')" />
|
||||
</Target>
|
||||
</Project>
|
|
@ -1,5 +1,6 @@
|
|||
## Release notes
|
||||
### 1.6
|
||||
* Added support for deploying mod files into `Mods` automatically.
|
||||
* Added a build error if a game folder is found, but doesn't contain Stardew Valley or SMAPI.
|
||||
|
||||
### 1.5
|
||||
|
|
Loading…
Reference in New Issue