diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-06-05 15:24:53 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-06-05 17:45:05 -0400 |
commit | ffc339bc29a9b4b08d53a5d147546630116d82d7 (patch) | |
tree | 39746b67020b69b2d2915a91303d5fc0d0ecdaf0 | |
parent | 66b1b583e5233a4b50b832733d8e2cbc329a70be (diff) | |
download | SMAPI-ffc339bc29a9b4b08d53a5d147546630116d82d7.tar.gz SMAPI-ffc339bc29a9b4b08d53a5d147546630116d82d7.tar.bz2 SMAPI-ffc339bc29a9b4b08d53a5d147546630116d82d7.zip |
add support for deploying mods to game folder automatically
-rw-r--r-- | README.md | 50 | ||||
-rw-r--r-- | build/smapi.targets | 25 | ||||
-rw-r--r-- | release-notes.md | 1 |
3 files changed, 52 insertions, 24 deletions
@@ -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: - - ```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. - -That's it! Each time you build, the files in `<game path>\Mods\<mod name>` will be updated. +2. Add this block under the `<Project` line: + + ```xml + <PropertyGroup> + <DeployModFolderName>$(MSBuildProjectName)</DeployModFolderName> + </PropertyGroup> + ``` + +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). diff --git a/build/smapi.targets b/build/smapi.targets index 21989bd1..ea6af723 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -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>
\ No newline at end of file diff --git a/release-notes.md b/release-notes.md index 6ec456bc..ff2734f8 100644 --- a/release-notes.md +++ b/release-notes.md @@ -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 |