From 9be620e2fcdc13c6e6a918323157e21e1fed568f Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 19 Oct 2016 14:33:13 -0400 Subject: [PATCH 01/57] extract build configuration from Lookup Anything mod --- stardewvalley.targets | 51 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 stardewvalley.targets diff --git a/stardewvalley.targets b/stardewvalley.targets new file mode 100644 index 00000000..1e71d06a --- /dev/null +++ b/stardewvalley.targets @@ -0,0 +1,51 @@ + + + + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley + C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley + ~\Library\Application Support\Steam\steamapps\common\Stardew Valley\Contents\MacOS + Program + $(GamePath)\StardewModdingAPI.exe + $(GamePath) + + + + + + + + + $(GamePath)\Stardew Valley.exe + + + $(GamePath)\StardewModdingAPI.exe + + + False + $(GamePath)\xTile.dll + + + + + + + False + $(GamePath)\MonoGame.Framework.dll + + + $(GamePath)\StardewValley.exe + + + $(GamePath)\StardewModdingAPI.exe + + + $(GamePath)\xTile.dll + + + + + + + + + \ No newline at end of file From c6dbad2594620f9c25e7e548b813522c1e6c626d Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 19 Oct 2016 14:46:23 -0400 Subject: [PATCH 02/57] add license + readme --- LICENSE.txt | 8 ++++++++ README.md | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 LICENSE.txt create mode 100644 README.md diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..6463a584 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright Pathoschild and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..6ea731d1 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +**Stardew.ModBuildConfig** is an open-source NuGet package which automates the build configuration +for crossplatform [Stardew Valley](http://stardewvalley.net/) mods that use SMAPI. + +The configuration detects the operating system (Linux, Mac, or Windows) and the Stardew Valley +install path, and injects the correct references to Stardew Valley, SMAPI, and XNA/MonoGame. +It also adds a `GamePath` variable which can be used to automate mod installation during testing +if desired. + +## Contents +* [Installation](#installation) +* [Configuration](#configuration) +* [Versions](#versions) +* [See also](#see-also) + +## Installation +### New mod +_TODO_ + +### Migrating an existing mod +_TODO_ + +## Configuration +_TODO_ + +## Versions +_TODO_ + +## See also +_TODO_ +* NuGet package +* Discussion thread \ No newline at end of file From 555e0d12241f9bda0262f513fa6bc8c55cc7d5fe Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 19 Oct 2016 18:54:04 -0400 Subject: [PATCH 03/57] add NuGet package spec + icon --- assets/nuget-icon.pdn | Bin 0 -> 7401 bytes assets/nuget-icon.png | Bin 0 -> 5054 bytes stardewvalley.targets => build/smapi.targets | 0 package.nuspec | 20 +++++++++++++++++++ 4 files changed, 20 insertions(+) create mode 100644 assets/nuget-icon.pdn create mode 100644 assets/nuget-icon.png rename stardewvalley.targets => build/smapi.targets (100%) create mode 100644 package.nuspec diff --git a/assets/nuget-icon.pdn b/assets/nuget-icon.pdn new file mode 100644 index 0000000000000000000000000000000000000000..7bd5c0c543cfedf1171920a0bd4f978908d78473 GIT binary patch literal 7401 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 Uw4q36!2kdN07*qoM6N<$f`284fdBvi literal 0 HcmV?d00001 diff --git a/stardewvalley.targets b/build/smapi.targets similarity index 100% rename from stardewvalley.targets rename to build/smapi.targets diff --git a/package.nuspec b/package.nuspec new file mode 100644 index 00000000..5d8e5e52 --- /dev/null +++ b/package.nuspec @@ -0,0 +1,20 @@ + + + + Pathoschild.Stardew.ModdingBuildConfig + 1.0-alpha + MSBuild config for Stardew Valley mods + Pathoschild + Pathoschild + false + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/master/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.0/assets/nuget-icon.png + Automates the build configuration for a crossplatform Stardew Valley mod that uses SMAPI. + Initial release + + + + + + \ No newline at end of file From 520c46fbe661acac7f6c7854b71d05f58a06cf64 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 19 Oct 2016 19:26:33 -0400 Subject: [PATCH 04/57] expand readme, restructure config --- README.md | 39 ++++++++++++--------- build/smapi.targets | 82 +++++++++++++++++++++++++-------------------- package.nuspec | 2 +- 3 files changed, 71 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 6ea731d1..564f508e 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,38 @@ **Stardew.ModBuildConfig** is an open-source NuGet package which automates the build configuration for crossplatform [Stardew Valley](http://stardewvalley.net/) mods that use SMAPI. -The configuration detects the operating system (Linux, Mac, or Windows) and the Stardew Valley -install path, and injects the correct references to Stardew Valley, SMAPI, and XNA/MonoGame. -It also adds a `GamePath` variable which can be used to automate mod installation during testing -if desired. +The configuration... -## Contents -* [Installation](#installation) -* [Configuration](#configuration) -* [Versions](#versions) -* [See also](#see-also) +1. detects the operating system (Linux, Mac, or Windows) and the Stardew Valley install path; +2. injects the correct references to Stardew Valley, SMAPI, and XNA/MonoGame; +3. (on Windows) configures Visual Studio so you can launch the game for debugging; +4. and adds a `GamePath` variable which can be used to automate mod installation during testing + if desired. ## Installation -### New mod -_TODO_ +### Creating a new mod +1. Create an empty library project. +2. Reference the `Pathoschild.Stardew.ModBuildConfig` NuGet package. +3. [Write your code](http://canimod.com/guides/creating-a-smapi-mod). +4. Compile on any platform. ### Migrating an existing mod -_TODO_ +1. Remove any references to `Microsoft.Xna.*`, Stardew Valley, `StardewModdingAPI`, and xTile. +2. Reference the `Pathoschild.Stardew.ModBuildConfig` NuGet package. +3. Compile on any platform. ## Configuration -_TODO_ +### Custom game path +If you customised where Stardew Valley is installed, you can add your path to the list to try. -## Versions -_TODO_ +1. Get the full path to the directory containing the Stardew Valley executable. +2. Add this section to your `.csproj` file (anywhere before the added ` + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley + + ``` ## See also _TODO_ diff --git a/build/smapi.targets b/build/smapi.targets index 1e71d06a..6231650c 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -1,47 +1,57 @@ - + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley ~\Library\Application Support\Steam\steamapps\common\Stardew Valley\Contents\MacOS - Program - $(GamePath)\StardewModdingAPI.exe - $(GamePath) - - - - - - - $(GamePath)\Stardew Valley.exe - - - $(GamePath)\StardewModdingAPI.exe - - - False - $(GamePath)\xTile.dll - - + + + + + + + + + + $(GamePath)\Stardew Valley.exe + + + $(GamePath)\StardewModdingAPI.exe + + + False + $(GamePath)\xTile.dll + + - - - - False - $(GamePath)\MonoGame.Framework.dll - - - $(GamePath)\StardewValley.exe - - - $(GamePath)\StardewModdingAPI.exe - - - $(GamePath)\xTile.dll - - + + + Program + $(GamePath)\StardewModdingAPI.exe + $(GamePath) + + + + + + + False + $(GamePath)\MonoGame.Framework.dll + + + $(GamePath)\StardewValley.exe + + + $(GamePath)\StardewModdingAPI.exe + + + $(GamePath)\xTile.dll + + + + diff --git a/package.nuspec b/package.nuspec index 5d8e5e52..a000d986 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,7 +2,7 @@ Pathoschild.Stardew.ModdingBuildConfig - 1.0-alpha + 1.0-alpha2 MSBuild config for Stardew Valley mods Pathoschild Pathoschild From e5d38b73720c58b00ea747b66be18f8b735d2e6e Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 19 Oct 2016 20:16:06 -0400 Subject: [PATCH 05/57] tweak error text --- build/smapi.targets | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index 6231650c..f38f1585 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -53,9 +53,8 @@ - + - + - \ No newline at end of file From 465bd538e476766f1114f915f955e30c9abab944 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 19 Oct 2016 20:43:35 -0400 Subject: [PATCH 06/57] add more install paths --- build/smapi.targets | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index f38f1585..7d512a29 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -1,9 +1,18 @@ - C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley + + $(STARDEWVALLEY_DIR) + + + ~/.local/share/Steam/steamapps/common/Stardew Valley + + + ~/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS + + + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley - ~\Library\Application Support\Steam\steamapps\common\Stardew Valley\Contents\MacOS From e3d9894bf353197169fc3e84c973e07cfb5f3aae Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 19 Oct 2016 20:56:48 -0400 Subject: [PATCH 07/57] add package links to readme --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 564f508e..c53b1ac3 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,13 @@ The configuration... ## Installation ### Creating a new mod 1. Create an empty library project. -2. Reference the `Pathoschild.Stardew.ModBuildConfig` NuGet package. +2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModdingBuildConfig). 3. [Write your code](http://canimod.com/guides/creating-a-smapi-mod). 4. Compile on any platform. ### Migrating an existing mod 1. Remove any references to `Microsoft.Xna.*`, Stardew Valley, `StardewModdingAPI`, and xTile. -2. Reference the `Pathoschild.Stardew.ModBuildConfig` NuGet package. +2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModdingBuildConfig). 3. Compile on any platform. ## Configuration @@ -35,6 +35,5 @@ If you customised where Stardew Valley is installed, you can add your path to th ``` ## See also -_TODO_ -* NuGet package +* [NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModdingBuildConfig) * Discussion thread \ No newline at end of file From 524c56ee757464b5785c4d704d4da1862b173db9 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 19 Oct 2016 22:53:49 -0400 Subject: [PATCH 08/57] correct home paths on Linux/Mac --- build/smapi.targets | 4 ++-- package.nuspec | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index 7d512a29..2ca7a829 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -5,10 +5,10 @@ $(STARDEWVALLEY_DIR) - ~/.local/share/Steam/steamapps/common/Stardew Valley + $(HOME)/.local/share/Steam/steamapps/common/Stardew Valley - ~/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS + $(HOME)/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley diff --git a/package.nuspec b/package.nuspec index a000d986..2f585ab5 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,7 +2,7 @@ Pathoschild.Stardew.ModdingBuildConfig - 1.0-alpha2 + 1.0-alpha4 MSBuild config for Stardew Valley mods Pathoschild Pathoschild From 502559146bfb3cd39ee941245c3f71a7798a0760 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 21 Oct 2016 01:25:21 -0400 Subject: [PATCH 09/57] add GOG path on Linux --- build/smapi.targets | 1 + 1 file changed, 1 insertion(+) diff --git a/build/smapi.targets b/build/smapi.targets index 2ca7a829..2c0ca5b7 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -5,6 +5,7 @@ $(STARDEWVALLEY_DIR) + $(HOME)/GOG Games/Stardew Valley/game $(HOME)/.local/share/Steam/steamapps/common/Stardew Valley From 8d532e1cabe374a5b8673f07249e2d3848bc1a78 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 21 Oct 2016 01:25:41 -0400 Subject: [PATCH 10/57] mention mod builder compatibility in readme --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c53b1ac3..73aa082a 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,11 @@ If you customised where Stardew Valley is installed, you can add your path to th ``` +### Compatibility with mod builders +The configuration is designed for compatibility with third-party mod compilers. [Silverplum](https://github.com/rumangerst/SilVerPLuM) +is officially supported, and you can inject the `GAMEPATH` environment variable to override the +detected game path. + ## See also * [NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModdingBuildConfig) * Discussion thread \ No newline at end of file From f9c107b751476b799a87cf25f9ed2424ab1a4775 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 21 Oct 2016 01:41:26 -0400 Subject: [PATCH 11/57] bump to 1.0 --- README.md | 6 +++--- package.nuspec | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 73aa082a..e1b065ec 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,13 @@ The configuration... ## Installation ### Creating a new mod 1. Create an empty library project. -2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModdingBuildConfig). +2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig). 3. [Write your code](http://canimod.com/guides/creating-a-smapi-mod). 4. Compile on any platform. ### Migrating an existing mod 1. Remove any references to `Microsoft.Xna.*`, Stardew Valley, `StardewModdingAPI`, and xTile. -2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModdingBuildConfig). +2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig). 3. Compile on any platform. ## Configuration @@ -40,5 +40,5 @@ is officially supported, and you can inject the `GAMEPATH` environment variable detected game path. ## See also -* [NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModdingBuildConfig) +* [NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig) * Discussion thread \ No newline at end of file diff --git a/package.nuspec b/package.nuspec index 2f585ab5..05c478de 100644 --- a/package.nuspec +++ b/package.nuspec @@ -1,13 +1,13 @@ - Pathoschild.Stardew.ModdingBuildConfig - 1.0-alpha4 + Pathoschild.Stardew.ModBuildConfig + 1.0 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/master/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.0/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.0/assets/nuget-icon.png Automates the build configuration for a crossplatform Stardew Valley mod that uses SMAPI. From 137d795ab3d01bc132e99e19ba9567fd70f3cec3 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 21 Oct 2016 01:48:57 -0400 Subject: [PATCH 12/57] fix package --- package.nuspec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.nuspec b/package.nuspec index 05c478de..58701695 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,7 +2,7 @@ Pathoschild.Stardew.ModBuildConfig - 1.0 + 1.0.1 MSBuild config for Stardew Valley mods Pathoschild Pathoschild @@ -11,10 +11,10 @@ https://github.com/Pathoschild/Stardew.ModBuildConfig https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.0/assets/nuget-icon.png Automates the build configuration for a crossplatform Stardew Valley mod that uses SMAPI. - Initial release + Corrected package structure - + \ No newline at end of file From cb9efa4e8266b67ddb5c19a107af389cdedce49c Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 21 Oct 2016 19:42:09 -0400 Subject: [PATCH 13/57] add support for platform targeting --- README.md | 55 +++++++++++++++++++++++++++++++++++++-------- build/smapi.targets | 31 +++++++++++++++++++++---- package.nuspec | 8 +++---- 3 files changed, 77 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index e1b065ec..b94c118b 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,18 @@ **Stardew.ModBuildConfig** is an open-source NuGet package which automates the build configuration for crossplatform [Stardew Valley](http://stardewvalley.net/) mods that use SMAPI. -The configuration... +## Usage +Basically this package lets you write your mod once, and compile it on any computer. It detects +your current platform (Linux, Mac, or Windows) and game path, and injects the right references +automatically. You can also target a specific platform to create a mod package compatible with that +platform. -1. detects the operating system (Linux, Mac, or Windows) and the Stardew Valley install path; -2. injects the correct references to Stardew Valley, SMAPI, and XNA/MonoGame; -3. (on Windows) configures Visual Studio so you can launch the game for debugging; -4. and adds a `GamePath` variable which can be used to automate mod installation during testing - if desired. +More specifically, the configuration... + +1. detects the operating system and Stardew Valley path; +2. injects the right references to Stardew Valley, SMAPI, and XNA/MonoGame for your platform; +3. configures Visual Studio so you can launch the game for debugging (_Windows only_); +4. and adds a `GamePath` variable which can be used to script mod packaging if desired. ## Installation ### Creating a new mod @@ -23,7 +28,7 @@ The configuration... ## Configuration ### Custom game path -If you customised where Stardew Valley is installed, you can add your path to the list to try. +If you customised where Stardew Valley is installed, you can specify where it is. 1. Get the full path to the directory containing the Stardew Valley executable. 2. Add this section to your `.csproj` file (anywhere before the added ` ``` +The configuration will check your custom path first, then fall back to the default paths. (That way +you can still compile it normally on a different computer.) + +### Target platform +By default the build configuration will target your current platform (e.g. Linux, Mac, or Windows). +If you're compiling it for a different platform (and have the required dependencies installed), you +can manually override the platform detection. + +You can define it... + +* in your `.csproj` (anywhere before the added ` + Windows + + ``` + +* _or_ by setting one of these compile constant: `GAME_PLATFORM_LINUX`, `GAME_PLATFORM_MAC`, or + `GAME_PLATFORM_WINDOWS`. + * In Visual Studio: right-click on the project and choose _Properties_. Click the _Build_ + tab, and enter the constants into the _Conditional compilation symbols_ field. + * In MonoDevelop: right-click on the project and choose _Options. Click the + _Build » Compiler_ tab, and enter the constants into the _Define Symbols_ field. + ### Compatibility with mod builders The configuration is designed for compatibility with third-party mod compilers. [Silverplum](https://github.com/rumangerst/SilVerPLuM) -is officially supported, and you can inject the `GAMEPATH` environment variable to override the -detected game path. +is officially supported, and mod builds can set the following environment variables: + +* `GAMEPATH`: overrides the Stardew Valley install path. +* `GAMEPLATFORM`: overrides the detected platform. Should be only of `Linux`, `Mac`, or `Windows`. + +## Versions +* 1.0: initial release. +* 1.1: added support for targeting platforms. ## See also * [NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig) diff --git a/build/smapi.targets b/build/smapi.targets index 2c0ca5b7..074581b4 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -1,5 +1,23 @@ - + + + + + Linux + Mac + Windows + + + Linux + Mac + Windows + + + $(STARDEWVALLEY_DIR) @@ -16,9 +34,11 @@ C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley - + - + @@ -63,8 +83,11 @@ - + + \ No newline at end of file diff --git a/package.nuspec b/package.nuspec index 58701695..3236e636 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,16 +2,16 @@ Pathoschild.Stardew.ModBuildConfig - 1.0.1 + 1.1 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.0/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.1/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.0/assets/nuget-icon.png + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.1/assets/nuget-icon.png Automates the build configuration for a crossplatform Stardew Valley mod that uses SMAPI. - Corrected package structure + Added support for targeting platforms. From 9db2bbc94168ea4770fb0714f51a6fa813bb9e04 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 24 Oct 2016 10:51:54 -0400 Subject: [PATCH 14/57] no longer copy game binaries to build output --- README.md | 2 +- build/smapi.targets | 23 ++++++++++++++++++----- package.nuspec | 8 ++++---- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b94c118b..0894c49d 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ You can define it... `GAME_PLATFORM_WINDOWS`. * In Visual Studio: right-click on the project and choose _Properties_. Click the _Build_ tab, and enter the constants into the _Conditional compilation symbols_ field. - * In MonoDevelop: right-click on the project and choose _Options. Click the + * In MonoDevelop: right-click on the project and choose _Options_. Click the _Build » Compiler_ tab, and enter the constants into the _Define Symbols_ field. ### Compatibility with mod builders diff --git a/build/smapi.targets b/build/smapi.targets index 074581b4..0bd8e0ae 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -41,18 +41,27 @@ - - - + + false + + + false + + + false + $(GamePath)\Stardew Valley.exe + false $(GamePath)\StardewModdingAPI.exe + false - False $(GamePath)\xTile.dll + false + False @@ -67,17 +76,21 @@ - False $(GamePath)\MonoGame.Framework.dll + false + False $(GamePath)\StardewValley.exe + false $(GamePath)\StardewModdingAPI.exe + false $(GamePath)\xTile.dll + false diff --git a/package.nuspec b/package.nuspec index 3236e636..8072ad38 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,16 +2,16 @@ Pathoschild.Stardew.ModBuildConfig - 1.1 + 1.2 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.1/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.2/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.1/assets/nuget-icon.png + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.2/assets/nuget-icon.png Automates the build configuration for a crossplatform Stardew Valley mod that uses SMAPI. - Added support for targeting platforms. + No longer copies game binaries to build output. From d3946c3324cf6fc0c73590b22770da061b025331 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 5 Dec 2016 11:57:12 -0500 Subject: [PATCH 15/57] add 'simplify mod development' section, add TOC --- README.md | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0894c49d..1b106f1c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ **Stardew.ModBuildConfig** is an open-source NuGet package which automates the build configuration for crossplatform [Stardew Valley](http://stardewvalley.net/) mods that use SMAPI. +## Contents +* [Usage](#usage) +* [Installation](#installation) +* [Configuration](#configuration) +* [Simplify mod development](#simplify-mod-development) + ## Usage Basically this package lets you write your mod once, and compile it on any computer. It detects your current platform (Linux, Mac, or Windows) and game path, and injects the right references @@ -72,10 +78,40 @@ is officially supported, and mod builds can set the following environment variab * `GAMEPATH`: overrides the Stardew Valley install path. * `GAMEPLATFORM`: overrides the detected platform. Should be only of `Linux`, `Mac`, or `Windows`. +## 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: + +1. Edit your mod's `.csproj` file. +2. Add this block of code at the bottom, right above the closing `` tag: + + ```cs + + + $(GamePath)\Mods\$(TargetName) + + + + + + + ``` +3. Optionally, edit the `` value to change the name, or add any additional files your mod needs. + +That's it! Each time you build, the files in `\Mods\` will be updated. + +### Debugging +Debugging into your mod code when the game is running is pretty straightforward, since this package injects some of the configuration automatically. To do that: + +1. [Package your mod into the game directory automatically](#package-your-mod-into-the-game-directory-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. + ## Versions * 1.0: initial release. * 1.1: added support for targeting platforms. ## See also * [NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig) -* Discussion thread \ No newline at end of file +* Discussion thread From 0fe3275037b03fefb4e4c09a30097a85a12a3c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCssig?= Date: Tue, 6 Dec 2016 21:04:50 +0100 Subject: [PATCH 16/57] add support for non default Stardew Valley pathes (Steam and gog) --- build/smapi.targets | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index 0bd8e0ae..759bd104 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -30,9 +30,11 @@ $(HOME)/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS - C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley - C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley - + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley + $([" >$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GOG.com\Games\1453375253}', 'PATH', null,RegistryView.Registry64, RegistryView.Registry32)) + C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null,RegistryView.Registry64, RegistryView.Registry32)) + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley - $([" >$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GOG.com\Games\1453375253}', 'PATH', null,RegistryView.Registry64, RegistryView.Registry32)) C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley - $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null,RegistryView.Registry64, RegistryView.Registry32)) - + $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GOG.com\Games\1453375253@PATH) + $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150@InstallLocation) + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley - $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GOG.com\Games\1453375253@PATH) - $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150@InstallLocation) + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games\1453375253}', 'PATH', null, RegistryView.Registry32)) + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null,RegistryView.Registry64, RegistryView.Registry32)) C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley - $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games\1453375253}', 'PATH', null, RegistryView.Registry32)) - $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null,RegistryView.Registry64, RegistryView.Registry32)) + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games\1453375253', 'PATH', null, RegistryView.Registry32)) + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GOG.com\Games\1453375253', 'PATH', null, RegistryView.Registry64) + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null, RegistryView.Registry64, RegistryView.Registry32)) - - $(STARDEWVALLEY_DIR) - $(HOME)/GOG Games/Stardew Valley/game $(HOME)/.local/share/Steam/steamapps/common/Stardew Valley diff --git a/package.nuspec b/package.nuspec index fb009841..54894d90 100644 --- a/package.nuspec +++ b/package.nuspec @@ -11,7 +11,7 @@ https://github.com/Pathoschild/Stardew.ModBuildConfig https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.3/assets/nuget-icon.png Automates the build configuration for a crossplatform Stardew Valley mod that uses SMAPI. - Fix game path detection on 32-bit Windows. + Fix game path detection on 32-bit Windows; remove support for SilVerPLuM (discontinued). From 93dcf1f1e18441a6eeb585d0d77888248370f429 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Tue, 10 Jan 2017 17:13:58 -0500 Subject: [PATCH 22/57] remove support custom target platform (never used) --- README.md | 24 +----------------------- build/smapi.targets | 17 +++++------------ package.nuspec | 2 +- 3 files changed, 7 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index a02f6f97..bd6feaa2 100644 --- a/README.md +++ b/README.md @@ -48,29 +48,6 @@ If you customised where Stardew Valley is installed, you can specify where it is The configuration will check your custom path first, then fall back to the default paths. (That way you can still compile it normally on a different computer.) -### Target platform -By default the build configuration will target your current platform (e.g. Linux, Mac, or Windows). -If you're compiling it for a different platform (and have the required dependencies installed), you -can manually override the platform detection. - -You can define it... - -* in your `.csproj` (anywhere before the added ` - Windows - - ``` - -* _or_ by setting one of these compile constant: `GAME_PLATFORM_LINUX`, `GAME_PLATFORM_MAC`, or - `GAME_PLATFORM_WINDOWS`. - * In Visual Studio: right-click on the project and choose _Properties_. Click the _Build_ - tab, and enter the constants into the _Conditional compilation symbols_ field. - * In MonoDevelop: right-click on the project and choose _Options_. Click the - _Build » Compiler_ tab, and enter the constants into the _Define Symbols_ field. - ## 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: @@ -105,6 +82,7 @@ This will deploy your mod files into the game directory, launch SMAPI, and attac 1.3: * Fixed non-default game paths on 32-bit Windows. * Removed support for SilVerPLuM (discontinued). +* Removed support for overriding the target platform (never used). 1.2: * Added support for non-default game paths on Windows by reading the registry. diff --git a/build/smapi.targets b/build/smapi.targets index 93588445..3c6717da 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -3,16 +3,9 @@ ## select target OS #######--> - - - Linux - Mac - Windows - - - Linux - Mac - Windows + Linux + Mac + Windows - C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley - C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley + C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games\1453375253', 'PATH', null, RegistryView.Registry32)) $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null, RegistryView.Registry64, RegistryView.Registry32)) diff --git a/package.nuspec b/package.nuspec index 54894d90..5c1f5d1b 100644 --- a/package.nuspec +++ b/package.nuspec @@ -11,7 +11,7 @@ https://github.com/Pathoschild/Stardew.ModBuildConfig https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.3/assets/nuget-icon.png Automates the build configuration for a crossplatform Stardew Valley mod that uses SMAPI. - Fix game path detection on 32-bit Windows; remove support for SilVerPLuM (discontinued). + Fix game path detection on 32-bit Windows; remove support for SilVerPLuM (discontinued); removed support for overriding target platform (never used). From 34d2881aeed5afcb8f93853726f8a1f725a592a9 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Tue, 10 Jan 2017 17:59:24 -0500 Subject: [PATCH 23/57] tweak custom game path section --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index bd6feaa2..83b79ea9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ for crossplatform [Stardew Valley](http://stardewvalley.net/) mods that use SMAP ## Contents * [Usage](#usage) * [Installation](#installation) -* [Configuration](#configuration) +* [Custom game path](#custom-game-path) * [Simplify mod development](#simplify-mod-development) ## Usage @@ -32,21 +32,21 @@ More specifically, the configuration... 2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig). 3. Compile on any platform. -## Configuration -### Custom game path -If you customised where Stardew Valley is installed, you can specify where it is. +## Custom game path +The package should automatically detect your game path. If it can't for some reason, you +can specify it manually. -1. Get the full path to the directory containing the Stardew Valley executable. -2. Add this section to your `.csproj` file (anywhere before the added ` C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley ``` -The configuration will check your custom path first, then fall back to the default paths. (That way -you can still compile it normally on a different computer.) +The configuration will check your custom path first, then fall back to the default paths (so it'll +still compile on a different computer). ## Simplify mod development ### Package your mod into the game directory automatically @@ -55,7 +55,7 @@ During development, it's helpful to have the mod files packaged into your `Mods` 1. Edit your mod's `.csproj` file. 2. Add this block of code at the bottom, right above the closing `` tag: - ```cs + ```xml $(GamePath)\Mods\$(TargetName) From db2cc7ef41aa2ce84e1c610db8d5f6cba3092a45 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 11 Jan 2017 13:46:21 -0500 Subject: [PATCH 24/57] rewrite readme for simplicity --- README.md | 91 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 83b79ea9..7829cd93 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,36 @@ **Stardew.ModBuildConfig** is an open-source NuGet package which automates the build configuration -for crossplatform [Stardew Valley](http://stardewvalley.net/) mods that use SMAPI. +for [Stardew Valley](http://stardewvalley.net/) [SMAPI](https://github.com/Pathoschild/SMAPI) mods. + +The package... + +* lets you write your mod once, and compile it on any computer. It detects the current platform + (Linux, Mac, or Windows) and game install path, and injects the right references automatically. +* configures Visual Studio so you can debug into the mod code when the game is running (_Windows + only_). +* packages the mod automatically into the game's mod folder when you build the code (_optional_). + ## Contents -* [Usage](#usage) -* [Installation](#installation) -* [Custom game path](#custom-game-path) +* [Install](#install) * [Simplify mod development](#simplify-mod-development) +* [Troubleshoot](#troubleshoot) +* [Versions](#versions) -## Usage -Basically this package lets you write your mod once, and compile it on any computer. It detects -your current platform (Linux, Mac, or Windows) and game path, and injects the right references -automatically. You can also target a specific platform to create a mod package compatible with that -platform. +## Install +**When creating a new mod:** -More specifically, the configuration... - -1. detects the operating system and Stardew Valley path; -2. injects the right references to Stardew Valley, SMAPI, and XNA/MonoGame for your platform; -3. configures Visual Studio so you can launch the game for debugging (_Windows only_); -4. and adds a `GamePath` variable which can be used to script mod packaging if desired. - -## Installation -### Creating a new mod 1. Create an empty library project. 2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig). 3. [Write your code](http://canimod.com/guides/creating-a-smapi-mod). 4. Compile on any platform. -### Migrating an existing mod -1. Remove any references to `Microsoft.Xna.*`, Stardew Valley, `StardewModdingAPI`, and xTile. +**When migrating an existing mod:** + +1. Remove any project references to `Microsoft.Xna.*`, `MonoGame`, Stardew Valley, + `StardewModdingAPI`, and `xTile`. 2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig). 3. Compile on any platform. -## Custom game path -The package should automatically detect your game path. If it can't for some reason, you -can specify it manually. - -1. Get the full folder path containing the Stardew Valley executable. -2. Add this to your `.csproj` file under the ` - C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley - - ``` - -The configuration will check your custom path first, then fall back to the default paths (so it'll -still compile on a different computer). - ## 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: @@ -70,22 +53,44 @@ During development, it's helpful to have the mod files packaged into your `Mods` That's it! Each time you build, the files in `\Mods\` will be updated. -### Debugging -Debugging into your mod code when the game is running is pretty straightforward, since this package injects some of the configuration automatically. To do that: +### 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: 1. [Package your mod into the game directory automatically](#package-your-mod-into-the-game-directory-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. +## Troubleshoot +### "Failed to find the game install path" +If you see this error: + +> Failed to find the game install path automatically; edit the *.csproj file and manually add a +> <GamePath> setting with the full directory path containing the Stardew Valley executable. + +...the package couldn't find your game install path automatically. You'll need to specify the +game location: + +1. Get the full folder path containing the Stardew Valley executable. +2. Add this to your `.csproj` file under the ` + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley + + ``` + +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 1.3: -* Fixed non-default game paths on 32-bit Windows. +* Fixed detection of non-default game paths on 32-bit Windows. * Removed support for SilVerPLuM (discontinued). -* Removed support for overriding the target platform (never used). +* Removed support for overriding the target platform (no longer needed since SMAPI crossplatforms mods automatically). 1.2: -* Added support for non-default game paths on Windows by reading the registry. +* Added support for non-default game paths on Windows. 1.1: * Added support for overriding the target platform. @@ -95,7 +100,3 @@ This will deploy your mod files into the game directory, launch SMAPI, and attac * Added support for detecting the game path automatically. * Added support for injecting XNA/MonoGame references automatically based on the OS. * Added support for mod builders like SilVerPLuM. - -## See also -* [NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig) -* Discussion thread From 6f0900b34c1964a9bd047cef0555d44c63f72343 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 11 Jan 2017 14:06:46 -0500 Subject: [PATCH 25/57] update nuspec --- package.nuspec | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.nuspec b/package.nuspec index 5c1f5d1b..4f5b47fd 100644 --- a/package.nuspec +++ b/package.nuspec @@ -7,14 +7,14 @@ Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.3/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.4/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.3/assets/nuget-icon.png - Automates the build configuration for a crossplatform Stardew Valley mod that uses SMAPI. - Fix game path detection on 32-bit Windows; remove support for SilVerPLuM (discontinued); removed support for overriding target platform (never used). + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.4/assets/nuget-icon.png + Automates the build configuration for crossplatform Stardew Valley SMAPI mods. + Fixed detection of non-default game paths on 32-bit Windows; removed support for SilVerPLuM (discontinued); removed support for overriding the target platform (no longer needed). - \ No newline at end of file + From 374f89eb688c03960ac81854d01529f111dcb9e4 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 11 Jan 2017 14:43:11 -0500 Subject: [PATCH 26/57] fix release notes --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7829cd93..59b1eba7 100644 --- a/README.md +++ b/README.md @@ -84,14 +84,17 @@ The configuration will check your custom path first, then fall back to the defau still compile on a different computer). ## Versions -1.3: +1.4: * Fixed detection of non-default game paths on 32-bit Windows. * Removed support for SilVerPLuM (discontinued). * Removed support for overriding the target platform (no longer needed since SMAPI crossplatforms mods automatically). -1.2: +1.3: * Added support for non-default game paths on Windows. +1.2: +* Exclude game binaries from mod build output. + 1.1: * Added support for overriding the target platform. From f37733df11873250233a2cf84a118cfcd37dd643 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 22 Jan 2017 22:18:47 -0500 Subject: [PATCH 27/57] Add GOG Mac path Thanks to LeonBlade for the path. --- README.md | 3 +++ build/smapi.targets | 1 + 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 59b1eba7..f3be04b3 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,9 @@ The configuration will check your custom path first, then fall back to the defau still compile on a different computer). ## Versions +1.5 (upcoming): +* Added default GOG path on Mac. + 1.4: * Fixed detection of non-default game paths on 32-bit Windows. * Removed support for SilVerPLuM (discontinued). diff --git a/build/smapi.targets b/build/smapi.targets index 3c6717da..ed513846 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -17,6 +17,7 @@ $(HOME)/.local/share/Steam/steamapps/common/Stardew Valley + /Applications/Stardew Valley.app/Contents/MacOS $(HOME)/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS From 2c278b970385486232b2c2727ab74c20e7730921 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 22 Jan 2017 22:52:41 -0500 Subject: [PATCH 28/57] add support for setting a custom game path globally --- README.md | 49 +++++++++++++++++++++++++++++++++------------ build/smapi.targets | 8 +++++++- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index f3be04b3..f472049c 100644 --- a/README.md +++ b/README.md @@ -63,28 +63,51 @@ This will deploy your mod files into the game directory, launch SMAPI, and attac ## Troubleshoot ### "Failed to find the game install path" -If you see this error: +That error means the package couldn't figure out where the game is installed. You need to specify +the game location yourself. There's two ways to do that: -> Failed to find the game install path automatically; edit the *.csproj file and manually add a -> <GamePath> setting with the full directory path containing the Stardew Valley executable. +* **Option 1: 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. + 2. Add this to your `.csproj` file under the ` + PATH_HERE + + ``` -1. Get the full folder path containing the Stardew Valley executable. -2. Add this to your `.csproj` file under the ` - C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley - - ``` + 3. Replace `PATH_HERE` with your custom game install path. + +* **Option 2: set the path globally.** + _This will apply to every project that uses version 1.5+ of package._ + + 1. Get the full folder path containing the Stardew Valley executable. + 2. Create this file path: + + platform | path + --------- | ---- + Linux/Mac | `~/stardewvalley.targets` + Windows | `%USERPROFILE%\stardewvalley.targets` + + 3. Save the file with this content: + + ```xml + + + PATH_HERE + + + ``` + + 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). ## Versions 1.5 (upcoming): +* Added support for setting a custom game path globally. * Added default GOG path on Mac. 1.4: diff --git a/build/smapi.targets b/build/smapi.targets index ed513846..de3420d1 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -1,4 +1,10 @@ + + + + @@ -94,6 +100,6 @@ #######--> - + \ No newline at end of file From f681efd6e7950c5a1b40990904b6bcdc3c04818f Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 22 Jan 2017 22:54:07 -0500 Subject: [PATCH 29/57] update nuspec --- package.nuspec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.nuspec b/package.nuspec index 4f5b47fd..5967c2e3 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,16 +2,16 @@ Pathoschild.Stardew.ModBuildConfig - 1.4 + 1.5 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.4/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.5/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.4/assets/nuget-icon.png + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.5/assets/nuget-icon.png Automates the build configuration for crossplatform Stardew Valley SMAPI mods. - Fixed detection of non-default game paths on 32-bit Windows; removed support for SilVerPLuM (discontinued); removed support for overriding the target platform (no longer needed). + Added support for setting a custom game path globally; added default GOG path on Mac. From 8785ebd11749ddcfb2786085535617dcde35eb15 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 5 Jun 2017 14:59:19 -0400 Subject: [PATCH 30/57] recommended path override with config instead of per-project setting --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index f472049c..2c392150 100644 --- a/README.md +++ b/README.md @@ -66,20 +66,7 @@ This will deploy your mod files into the game directory, launch SMAPI, and attac That error means the package couldn't figure out where the game is installed. You need to specify the game location yourself. There's two ways to do that: -* **Option 1: 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. - 2. Add this to your `.csproj` file under the ` - PATH_HERE - - ``` - - 3. Replace `PATH_HERE` with your custom game install path. - -* **Option 2: set the path globally.** +* **Option 1: set the path globally.** _This will apply to every project that uses version 1.5+ of package._ 1. Get the full folder path containing the Stardew Valley executable. @@ -105,6 +92,19 @@ the game location yourself. There's two ways to do that: 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. + 2. Add this to your `.csproj` file under the ` + PATH_HERE + + ``` + + 3. Replace `PATH_HERE` with your custom game install path. + ## Versions 1.5 (upcoming): * Added support for setting a custom game path globally. From 85a51f23c4eabe816345f504133e0d5cdba0633f Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 5 Jun 2017 15:02:40 -0400 Subject: [PATCH 31/57] move release notes into separate file --- README.md | 24 +----------------------- release-notes.md | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 23 deletions(-) create mode 100644 release-notes.md diff --git a/README.md b/README.md index 2c392150..351ebd91 100644 --- a/README.md +++ b/README.md @@ -106,26 +106,4 @@ still compile on a different computer). 3. Replace `PATH_HERE` with your custom game install path. ## Versions -1.5 (upcoming): -* Added support for setting a custom game path globally. -* Added default GOG path on Mac. - -1.4: -* Fixed detection of non-default game paths on 32-bit Windows. -* Removed support for SilVerPLuM (discontinued). -* Removed support for overriding the target platform (no longer needed since SMAPI crossplatforms mods automatically). - -1.3: -* Added support for non-default game paths on Windows. - -1.2: -* Exclude game binaries from mod build output. - -1.1: -* Added support for overriding the target platform. - -1.0: -* Initial release. -* Added support for detecting the game path automatically. -* Added support for injecting XNA/MonoGame references automatically based on the OS. -* Added support for mod builders like SilVerPLuM. +See [release notes](release-notes.md). diff --git a/release-notes.md b/release-notes.md new file mode 100644 index 00000000..91eabb40 --- /dev/null +++ b/release-notes.md @@ -0,0 +1,24 @@ +## Release notes +### 1.5 +* Added support for setting a custom game path globally. +* Added default GOG path on Mac. + +### 1.4 +* Fixed detection of non-default game paths on 32-bit Windows. +* Removed support for SilVerPLuM (discontinued). +* Removed support for overriding the target platform (no longer needed since SMAPI crossplatforms mods automatically). + +### 1.3 +* Added support for non-default game paths on Windows. + +### 1.2 +* Exclude game binaries from mod build output. + +### 1.1 +* Added support for overriding the target platform. + +### 1.0 +* Initial release. +* Added support for detecting the game path automatically. +* Added support for injecting XNA/MonoGame references automatically based on the OS. +* Added support for mod builders like SilVerPLuM. \ No newline at end of file From ffc54bed9c8fe063052306b1e1bc138b9848618d Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 5 Jun 2017 17:27:49 -0400 Subject: [PATCH 32/57] add .gitignore and .gitattributes --- .gitattributes | 2 ++ .gitignore | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..2c61027a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# always normalise line endings +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..41bf35be --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Visual Studio cache/options +.vs/ + +# NuGet packages +*.nupkg From 66b1b583e5233a4b50b832733d8e2cbc329a70be Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 5 Jun 2017 16:01:08 -0400 Subject: [PATCH 33/57] add error if a game folder is detected, but it doesn't contain Stardew Valley or SMAPI --- build/smapi.targets | 3 +++ release-notes.md | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/build/smapi.targets b/build/smapi.targets index de3420d1..21989bd1 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -101,5 +101,8 @@ + + + \ No newline at end of file diff --git a/release-notes.md b/release-notes.md index 91eabb40..6ec456bc 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,4 +1,7 @@ ## Release notes +### 1.6 +* Added a build error if a game folder is found, but doesn't contain Stardew Valley or SMAPI. + ### 1.5 * Added support for setting a custom game path globally. * Added default GOG path on Mac. @@ -21,4 +24,4 @@ * Initial release. * Added support for detecting the game path automatically. * Added support for injecting XNA/MonoGame references automatically based on the OS. -* Added support for mod builders like SilVerPLuM. \ No newline at end of file +* Added support for mod builders like SilVerPLuM. From ffc339bc29a9b4b08d53a5d147546630116d82d7 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 5 Jun 2017 15:24:53 -0400 Subject: [PATCH 34/57] add support for deploying mods to game folder automatically --- README.md | 46 +++++++++++++++++++++++---------------------- build/smapi.targets | 25 ++++++++++++++++++++++++ release-notes.md | 1 + 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 351ebd91..115711f3 100644 --- a/README.md +++ b/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 `` tag: +2. Add this block under the ` - - $(GamePath)\Mods\$(TargetName) - - - - - - - ``` -3. Optionally, edit the `` value to change the name, or add any additional files your mod needs. + ```xml + + $(MSBuildProjectName) + + ``` -That's it! Each time you build, the files in `\Mods\` will be updated. +That's it! Each time you build, the files in `\Mods\` 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 @@ + + + + + + $(GamePath)\Mods\$(DeployModFolderName) + $(ProjectDir)\manifest.json + + + + + + + + + + + + + + + + \ 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 From f74a0429eccf205ac52f51244a716bab786eab2a Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 5 Jun 2017 17:46:45 -0400 Subject: [PATCH 35/57] update nuspec for release --- README.md | 1 - package.nuspec | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 115711f3..c5e01c91 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ The package... only_). * packages the mod automatically into the game's mod folder when you build the code (_optional_). - ## Contents * [Install](#install) * [Simplify mod development](#simplify-mod-development) diff --git a/package.nuspec b/package.nuspec index 5967c2e3..c68d57c6 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,16 +2,16 @@ Pathoschild.Stardew.ModBuildConfig - 1.5 + 1.6 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.5/LICENSE.txt - https://github.com/Pathoschild/Stardew.ModBuildConfig - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.5/assets/nuget-icon.png + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.6/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig#readme + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.6/assets/nuget-icon.png Automates the build configuration for crossplatform Stardew Valley SMAPI mods. - Added support for setting a custom game path globally; added default GOG path on Mac. + SMAPI mods are now deployed automatically to your game folder if you set the 'DeployModFolderName' property; added a build error if a game folder is found, but it doesn't contain Stardew Valley or SMAPI. From cf6445b8e1cfac6299102582288f5406daa724a5 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 9 Jul 2017 23:29:51 -0400 Subject: [PATCH 36/57] improve OS and game path detection to avoid crossplatform issues --- build/smapi.targets | 58 ++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index ea6af723..e2af5d90 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -6,35 +6,36 @@ - - Linux - Mac - Windows - + + + + Linux + $(HOME)/GOG Games/Stardew Valley/game + $(HOME)/.local/share/Steam/steamapps/common/Stardew Valley + + + + + Mac + /Applications/Stardew Valley.app/Contents/MacOS + $(HOME)/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS + + + + + Windows + C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley + C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games\1453375253', 'PATH', null, RegistryView.Registry32)) + $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null, RegistryView.Registry64, RegistryView.Registry32)) + + + - - - $(HOME)/GOG Games/Stardew Valley/game - $(HOME)/.local/share/Steam/steamapps/common/Stardew Valley - - - /Applications/Stardew Valley.app/Contents/MacOS - $(HOME)/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS - - - C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley - C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley - $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games\1453375253', 'PATH', null, RegistryView.Registry32)) - $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null, RegistryView.Registry64, RegistryView.Registry32)) - - - @@ -99,6 +100,9 @@ ## validate #######--> + + + @@ -107,7 +111,7 @@ From 4ca843ee90ed996be60da2b73c4c010335a07171 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 9 Jul 2017 23:30:48 -0400 Subject: [PATCH 37/57] update nuspec for release --- package.nuspec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.nuspec b/package.nuspec index c68d57c6..900e2a5b 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,16 +2,16 @@ Pathoschild.Stardew.ModBuildConfig - 1.6 + 1.6.1 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.6/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.6.1/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig#readme - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.6/assets/nuget-icon.png + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.6.1/assets/nuget-icon.png Automates the build configuration for crossplatform Stardew Valley SMAPI mods. - SMAPI mods are now deployed automatically to your game folder if you set the 'DeployModFolderName' property; added a build error if a game folder is found, but it doesn't contain Stardew Valley or SMAPI. + Improved OS and game path detection. From 9beefb65fa0213603c3aa52875d88c0b410dbfd6 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 9 Jul 2017 23:33:08 -0400 Subject: [PATCH 38/57] clear GamePlatform if unknown --- build/smapi.targets | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build/smapi.targets b/build/smapi.targets index e2af5d90..b2ce5967 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -32,6 +32,11 @@ $([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null, RegistryView.Registry64, RegistryView.Registry32)) + + + + + - + @@ -106,12 +98,12 @@ #######--> - + - - + + @@ -139,4 +131,4 @@ - \ No newline at end of file + From 1fa12092c6130fbf8fb9c256f6c23e69c740a841 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 10 Jul 2017 15:45:22 -0400 Subject: [PATCH 40/57] combine Linux/Mac paths Mono may report Mac as either 'Unix' or 'OSX', and we don't really need to distinguish them for our purposes anyway. --- build/smapi.targets | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index 3a9c42c1..a544067b 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -9,14 +9,13 @@ ## find platform + game path #######--> - + + $(HOME)/GOG Games/Stardew Valley/game $(HOME)/.local/share/Steam/steamapps/common/Stardew Valley - - - - + + /Applications/Stardew Valley.app/Contents/MacOS $(HOME)/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS From 059c277623b1e1813094fe1a4ae80db432bce0ec Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 10 Jul 2017 15:46:20 -0400 Subject: [PATCH 41/57] update nuspec for release --- package.nuspec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.nuspec b/package.nuspec index 900e2a5b..f216803a 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,16 +2,16 @@ Pathoschild.Stardew.ModBuildConfig - 1.6.1 + 1.6.2 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.6.1/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.6.2/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig#readme - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.6.1/assets/nuget-icon.png + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.6.2/assets/nuget-icon.png Automates the build configuration for crossplatform Stardew Valley SMAPI mods. - Improved OS and game path detection. + Improved OS and game path detection; removed undocumented GamePlatform variable. From eca5e56883f3d94e0541710a10e4b2b44d1e38f7 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Thu, 27 Jul 2017 19:15:40 -0400 Subject: [PATCH 42/57] also reference Microsoft.Xna.Framework.Xact by default --- build/smapi.targets | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build/smapi.targets b/build/smapi.targets index a544067b..d95fa887 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -46,6 +46,9 @@ false + + false + $(GamePath)\Stardew Valley.exe false From 285c0448fd6f8c90fa05dc668dd27f452fa513ab Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 28 Jul 2017 00:10:32 -0400 Subject: [PATCH 43/57] add option to create release zip files (Windows-only) CodeTaskFactory doesn't seem to be available on Linux/Mac. --- README.md | 19 ++++++-- build/smapi.targets | 104 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 102 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index c5e01c91..3c137663 100644 --- a/README.md +++ b/README.md @@ -36,12 +36,10 @@ You can copy your mod files into the `Mods` folder automatically each time you b need to do it manually: 1. Edit your mod's `.csproj` file. -2. Add this block under the `` line: ```xml - - $(MSBuildProjectName) - + $(MSBuildProjectName) ``` That's it! Each time you build, the files in `\Mods\` will be updated with @@ -62,6 +60,19 @@ the configuration automatically. To do it: 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. +### Create release zips automatically (Windows-only) +You can create the mod package automatically when you build: + +1. Edit your mod's `.csproj` file. +2. Add this block above the first `` line: + + ```xml + $(SolutionDir)\_releases + ``` + +That's it! Each time you build, the mod files will be zipped into `_releases\.zip`. (You +can change the value to save the zips somewhere else.) + ## Troubleshoot ### "Failed to find the game install path" That error means the package couldn't figure out where the game is installed. You need to specify diff --git a/build/smapi.targets b/build/smapi.targets index d95fa887..b9f7e98e 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -1,6 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + @@ -30,9 +92,10 @@ - + + @@ -95,8 +158,12 @@ + + @@ -110,27 +177,30 @@ - - + + $(GamePath)\Mods\$(DeployModFolderName) - $(ProjectDir)\manifest.json + - + + - + - + - - - - - + + + + + + + From 4dd197068ec556d146e7e822b3a22b217c902a95 Mon Sep 17 00:00:00 2001 From: Mike Weaver Date: Thu, 27 Jul 2017 22:06:25 -0600 Subject: [PATCH 44/57] mark debugging support as Windows-only in readme (#4) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3c137663..96e4415d 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Notes: * 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 +### Debug into the mod code (Windows Only) Stepping into your mod code when the game is running is straightforward, since this package injects the configuration automatically. To do it: From f287ff616e471cf341f8b2cb726842816bdd8d29 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 28 Jul 2017 00:12:26 -0400 Subject: [PATCH 45/57] update nuspec --- README.md | 2 +- package.nuspec | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 96e4415d..c261e705 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Notes: * 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 (Windows Only) +### Debug into the mod code (Windows-only) Stepping into your mod code when the game is running is straightforward, since this package injects the configuration automatically. To do it: diff --git a/package.nuspec b/package.nuspec index f216803a..9abc7251 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,19 +2,19 @@ Pathoschild.Stardew.ModBuildConfig - 1.6.2 + 1.7 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.6.2/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.7/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig#readme - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.6.2/assets/nuget-icon.png + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.7/assets/nuget-icon.png Automates the build configuration for crossplatform Stardew Valley SMAPI mods. - Improved OS and game path detection; removed undocumented GamePlatform variable. + Added option to create release zips on build; added reference to XNA's XACT library for audio-related mods. - + From a10e555095a4f7f0a6858149b3ffd6595fbd24e6 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 28 Jul 2017 11:10:06 -0400 Subject: [PATCH 46/57] fix i18n folder being flattened --- build/smapi.targets | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index b9f7e98e..ea0cfffb 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -34,9 +34,13 @@ { foreach (ITaskItem file in Files) { + // get file info string filePath = file.ItemSpec; string entryName = file.GetMetadata("RecursiveDir") + file.GetMetadata("Filename") + file.GetMetadata("Extension"); - + if (new FileInfo(filePath).Directory.Name.Equals("i18n", StringComparison.InvariantCultureIgnoreCase)) + entryName = Path.Combine("i18n", entryName); + + // add to zip using (Stream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) using (Stream fileStreamInZip = archive.CreateEntry(entryName).Open()) { @@ -187,8 +191,8 @@ - + @@ -198,9 +202,10 @@ + - + From 34eff4b08612f687c32faf8ec1b3363ba9fe0aa0 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 28 Jul 2017 11:21:38 -0400 Subject: [PATCH 47/57] fix duplicate manifest/i18n files added to release zip if they're also copied to build output --- build/smapi.targets | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index ea0cfffb..58737fba 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -190,9 +190,13 @@ - - - + + + + + + + From 048888e09347b38d19bbac5d1c123ec83acfb367 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Fri, 28 Jul 2017 11:26:08 -0400 Subject: [PATCH 48/57] update nuspec --- package.nuspec | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/package.nuspec b/package.nuspec index 9abc7251..b8e96481 100644 --- a/package.nuspec +++ b/package.nuspec @@ -2,16 +2,18 @@ Pathoschild.Stardew.ModBuildConfig - 1.7 + 1.7.1 MSBuild config for Stardew Valley mods Pathoschild Pathoschild false - https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.7/LICENSE.txt + https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.7.1/LICENSE.txt https://github.com/Pathoschild/Stardew.ModBuildConfig#readme - https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.7/assets/nuget-icon.png + https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.7.1/assets/nuget-icon.png Automates the build configuration for crossplatform Stardew Valley SMAPI mods. - Added option to create release zips on build; added reference to XNA's XACT library for audio-related mods. + + 1.7 added an option to create release zips on build and added a reference to XNA's XACT library for audio-related mods. + 1.7.1 fixed an issue where i18n folders were flattened, and ensures that the manifest/i18n files in the project take precedence over those in the build output if both are present. From 6f3fc68dafcaaaab59352378a9cdae41040e271a Mon Sep 17 00:00:00 2001 From: Death Date: Sat, 7 Oct 2017 00:58:17 -0500 Subject: [PATCH 49/57] Updates exported mod zip files to use a base folder Instead of all of the mod files being in the root directory of the zip file, they are now in /ModName/, making it easier for modders to export upload-ready zip files of their mods. --- build/smapi.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/smapi.targets b/build/smapi.targets index 58737fba..ab7fb71f 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -36,7 +36,7 @@ { // get file info string filePath = file.ItemSpec; - string entryName = file.GetMetadata("RecursiveDir") + file.GetMetadata("Filename") + file.GetMetadata("Extension"); + string entryName = ModName + '/' + file.GetMetadata("RecursiveDir") + file.GetMetadata("Filename") + file.GetMetadata("Extension"); if (new FileInfo(filePath).Directory.Name.Equals("i18n", StringComparison.InvariantCultureIgnoreCase)) entryName = Path.Combine("i18n", entryName); From 78e59e1a48e6d9d2583c9adf54422d15e6e7074e Mon Sep 17 00:00:00 2001 From: Death Date: Sat, 7 Oct 2017 17:54:11 -0500 Subject: [PATCH 50/57] add version support to zip filenames (#7) --- build/smapi.targets | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/build/smapi.targets b/build/smapi.targets index ab7fb71f..88408994 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -14,8 +14,10 @@ + + data = (IDictionary)new JavaScriptSerializer().DeserializeObject(json); + IDictionary version = (IDictionary)data["Version"]; + + // Store our version numbers for ease of use + int major = (int)version["MajorVersion"]; + int minor = (int)version["MinorVersion"]; + int patch = (int)version["PatchVersion"]; + + string fileName = String.Format("{0}-{1}.{2}.{3}.zip", ModName, major, minor, patch); + // clear old zip file if present - string zipPath = Path.Combine(OutputFolderPath, ModName + ".zip"); + string zipPath = Path.Combine(OutputFolderPath, fileName); if (File.Exists(zipPath)) File.Delete(zipPath); From 4d32b37790442b8f19379ac89e72f0ecb161b549 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 7 Oct 2017 20:16:04 -0400 Subject: [PATCH 51/57] switch create-zip task to class type to simplify encapsulation --- build/smapi.targets | 134 ++++++++++++++++++++++++++------------------ 1 file changed, 81 insertions(+), 53 deletions(-) diff --git a/build/smapi.targets b/build/smapi.targets index 88408994..3512d042 100644 --- a/build/smapi.targets +++ b/build/smapi.targets @@ -1,6 +1,6 @@ @@ -470,33 +469,3 @@ For SMAPI developers: * 0.3 (2016-03-01, [log](https://github.com/Pathoschild/SMAPI/compare/Alpha0.2...0.3)) * 0.2 (2016-02-29, [log](https://github.com/Pathoschild/SMAPI/compare/Alpha0.1...Alpha0.2) * 0.1 (2016-02-28) -======= -## 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 -* Added support for setting a custom game path globally. -* Added default GOG path on Mac. - -### 1.4 -* Fixed detection of non-default game paths on 32-bit Windows. -* Removed support for SilVerPLuM (discontinued). -* Removed support for overriding the target platform (no longer needed since SMAPI crossplatforms mods automatically). - -### 1.3 -* Added support for non-default game paths on Windows. - -### 1.2 -* Exclude game binaries from mod build output. - -### 1.1 -* Added support for overriding the target platform. - -### 1.0 -* Initial release. -* Added support for detecting the game path automatically. -* Added support for injecting XNA/MonoGame references automatically based on the OS. -* Added support for mod builders like SilVerPLuM. ->>>>>>> mod-build-config/develop diff --git a/src/StardewModdingAPI.ModBuildConfig/README.md b/src/StardewModdingAPI.ModBuildConfig/README.md new file mode 100644 index 00000000..c261e705 --- /dev/null +++ b/src/StardewModdingAPI.ModBuildConfig/README.md @@ -0,0 +1,121 @@ +**Stardew.ModBuildConfig** is an open-source NuGet package which automates the build configuration +for [Stardew Valley](http://stardewvalley.net/) [SMAPI](https://github.com/Pathoschild/SMAPI) mods. + +The package... + +* lets you write your mod once, and compile it on any computer. It detects the current platform + (Linux, Mac, or Windows) and game install path, and injects the right references automatically. +* configures Visual Studio so you can debug into the mod code when the game is running (_Windows + only_). +* packages the mod automatically into the game's mod folder when you build the code (_optional_). + +## Contents +* [Install](#install) +* [Simplify mod development](#simplify-mod-development) +* [Troubleshoot](#troubleshoot) +* [Versions](#versions) + +## Install +**When creating a new mod:** + +1. Create an empty library project. +2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig). +3. [Write your code](http://canimod.com/guides/creating-a-smapi-mod). +4. Compile on any platform. + +**When migrating an existing mod:** + +1. Remove any project references to `Microsoft.Xna.*`, `MonoGame`, Stardew Valley, + `StardewModdingAPI`, and `xTile`. +2. Reference the [`Pathoschild.Stardew.ModBuildConfig` NuGet package](https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig). +3. Compile on any platform. + +## Simplify mod development +### 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 above the first `` line: + + ```xml + $(MSBuildProjectName) + ``` + +That's it! Each time you build, the files in `\Mods\` 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 (Windows-only) +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 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 folder, launch SMAPI, and attach a debugger +automatically. Now you can step through your code, set breakpoints, etc. + +### Create release zips automatically (Windows-only) +You can create the mod package automatically when you build: + +1. Edit your mod's `.csproj` file. +2. Add this block above the first `` line: + + ```xml + $(SolutionDir)\_releases + ``` + +That's it! Each time you build, the mod files will be zipped into `_releases\.zip`. (You +can change the value to save the zips somewhere else.) + +## Troubleshoot +### "Failed to find the game install path" +That error means the package couldn't figure out where the game is installed. You need to specify +the game location yourself. There's two ways to do that: + +* **Option 1: set the path globally.** + _This will apply to every project that uses version 1.5+ of package._ + + 1. Get the full folder path containing the Stardew Valley executable. + 2. Create this file path: + + platform | path + --------- | ---- + Linux/Mac | `~/stardewvalley.targets` + Windows | `%USERPROFILE%\stardewvalley.targets` + + 3. Save the file with this content: + + ```xml + + + PATH_HERE + + + ``` + + 4. Replace `PATH_HERE` with your custom game install path. + +* **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. + 2. Add this to your `.csproj` file under the ` + PATH_HERE + + ``` + + 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/assets/nuget-icon.pdn b/src/StardewModdingAPI.ModBuildConfig/assets/nuget-icon.pdn similarity index 100% rename from assets/nuget-icon.pdn rename to src/StardewModdingAPI.ModBuildConfig/assets/nuget-icon.pdn diff --git a/assets/nuget-icon.png b/src/StardewModdingAPI.ModBuildConfig/assets/nuget-icon.png similarity index 100% rename from assets/nuget-icon.png rename to src/StardewModdingAPI.ModBuildConfig/assets/nuget-icon.png diff --git a/build/smapi.targets b/src/StardewModdingAPI.ModBuildConfig/build/smapi.targets similarity index 100% rename from build/smapi.targets rename to src/StardewModdingAPI.ModBuildConfig/build/smapi.targets diff --git a/package.nuspec b/src/StardewModdingAPI.ModBuildConfig/package.nuspec similarity index 100% rename from package.nuspec rename to src/StardewModdingAPI.ModBuildConfig/package.nuspec diff --git a/src/StardewModdingAPI.ModBuildConfig/release-notes.md b/src/StardewModdingAPI.ModBuildConfig/release-notes.md new file mode 100644 index 00000000..ff2734f8 --- /dev/null +++ b/src/StardewModdingAPI.ModBuildConfig/release-notes.md @@ -0,0 +1,28 @@ +## 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 +* Added support for setting a custom game path globally. +* Added default GOG path on Mac. + +### 1.4 +* Fixed detection of non-default game paths on 32-bit Windows. +* Removed support for SilVerPLuM (discontinued). +* Removed support for overriding the target platform (no longer needed since SMAPI crossplatforms mods automatically). + +### 1.3 +* Added support for non-default game paths on Windows. + +### 1.2 +* Exclude game binaries from mod build output. + +### 1.1 +* Added support for overriding the target platform. + +### 1.0 +* Initial release. +* Added support for detecting the game path automatically. +* Added support for injecting XNA/MonoGame references automatically based on the OS. +* Added support for mod builders like SilVerPLuM. From 929dccb75a1405737975d76648e015a3e7c00177 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 7 Oct 2017 23:07:10 -0400 Subject: [PATCH 54/57] reorganise repo structure --- src/.editorconfig => .editorconfig | 0 {src => build}/GlobalAssemblyInfo.cs | 0 {src => build}/common.targets | 0 .../prepare-install-package.targets | 0 CONTRIBUTING.md => docs/CONTRIBUTING.md | 0 LICENSE => docs/LICENSE.md | 0 README.md => docs/README.md | 0 release-notes.md => docs/release-notes.md | 0 .../README.md | 0 .../assets/nuget-icon.pdn | Bin .../assets/nuget-icon.png | Bin .../build/smapi.targets | 0 .../package.nuspec | 0 .../release-notes.md | 0 .../Properties/AssemblyInfo.cs | 0 .../SpriteBatchMethods.cs | 0 ...StardewModdingAPI.AssemblyRewriters.csproj | 6 +-- .../Enums/Platform.cs | 0 .../Enums/ScriptAction.cs | 0 .../InteractiveInstaller.cs | 0 .../Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../StardewModdingAPI.Installer.csproj | 8 ++-- .../readme.txt | 0 .../ModInfoModel.cs | 0 .../ModSeachModel.cs | 0 .../StardewModdingAPI.Models.projitems | 0 .../StardewModdingAPI.Models.shproj | 0 .../Core/ModResolverTests.cs | 0 .../Core/TranslationTests.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../Sample.cs | 0 .../StardewModdingAPI.Tests.csproj | 8 ++-- .../Utilities/SDateTests.cs | 0 .../Utilities/SemanticVersionTests.cs | 0 .../packages.config | 0 .../Controllers/ModsController.cs | 0 .../ConfigModels/ModUpdateCheckConfig.cs | 0 .../InternalControllerFeatureProvider.cs | 0 .../ModRepositories/BaseRepository.cs | 0 .../ModRepositories/ChucklefishRepository.cs | 0 .../ModRepositories/GitHubRepository.cs | 0 .../ModRepositories/IModRepository.cs | 0 .../ModRepositories/NexusRepository.cs | 0 .../Framework/RewriteSubdomainRule.cs | 0 .../Framework/VersionConstraint.cs | 0 .../Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../Properties/launchSettings.json | 0 .../StardewModdingAPI.Web.csproj | 6 +-- .../Startup.cs | 0 .../appsettings.Development.json | 0 .../appsettings.json | 0 src/{StardewModdingAPI.sln => SMAPI.sln} | 44 +++++++++++------- ....sln.DotSettings => SMAPI.sln.DotSettings} | 0 src/{StardewModdingAPI => SMAPI}/App.config | 0 src/{StardewModdingAPI => SMAPI}/Constants.cs | 0 .../ContentSource.cs | 0 src/{StardewModdingAPI => SMAPI}/Context.cs | 0 .../Events/ChangeType.cs | 0 .../Events/ContentEvents.cs | 0 .../Events/ControlEvents.cs | 0 .../Events/EventArgsClickableMenuChanged.cs | 0 .../Events/EventArgsClickableMenuClosed.cs | 0 .../EventArgsControllerButtonPressed.cs | 0 .../EventArgsControllerButtonReleased.cs | 0 .../EventArgsControllerTriggerPressed.cs | 0 .../EventArgsControllerTriggerReleased.cs | 0 .../Events/EventArgsCurrentLocationChanged.cs | 0 .../Events/EventArgsGameLocationsChanged.cs | 0 .../Events/EventArgsInput.cs | 0 .../Events/EventArgsIntChanged.cs | 0 .../Events/EventArgsInventoryChanged.cs | 0 .../Events/EventArgsKeyPressed.cs | 0 .../Events/EventArgsKeyboardStateChanged.cs | 0 .../Events/EventArgsLevelUp.cs | 0 .../Events/EventArgsLocationObjectsChanged.cs | 0 .../Events/EventArgsMineLevelChanged.cs | 0 .../Events/EventArgsMouseStateChanged.cs | 0 .../Events/EventArgsValueChanged.cs | 0 .../Events/GameEvents.cs | 0 .../Events/GraphicsEvents.cs | 0 .../Events/InputEvents.cs | 0 .../Events/ItemStackChange.cs | 0 .../Events/LocationEvents.cs | 0 .../Events/MenuEvents.cs | 0 .../Events/MineEvents.cs | 0 .../Events/PlayerEvents.cs | 0 .../Events/SaveEvents.cs | 0 .../Events/TimeEvents.cs | 0 .../Framework/Command.cs | 0 .../Framework/CommandManager.cs | 0 .../Framework/Content/AssetData.cs | 0 .../Content/AssetDataForDictionary.cs | 0 .../Framework/Content/AssetDataForImage.cs | 0 .../Framework/Content/AssetDataForObject.cs | 0 .../Framework/Content/AssetInfo.cs | 0 .../Framework/ContentManagerShim.cs | 0 .../Framework/CursorPosition.cs | 0 .../Framework/DeprecationLevel.cs | 0 .../Framework/DeprecationManager.cs | 0 .../SAssemblyLoadFailedException.cs | 0 .../Exceptions/SContentLoadException.cs | 0 .../Framework/Exceptions/SParseException.cs | 0 .../Framework/GameVersion.cs | 0 .../Framework/IModMetadata.cs | 0 .../Framework/InternalExtensions.cs | 0 .../Logging/ConsoleInterceptionManager.cs | 0 .../Logging/InterceptingTextWriter.cs | 0 .../Framework/Logging/LogFileManager.cs | 0 .../Framework/ModHelpers/BaseHelper.cs | 0 .../Framework/ModHelpers/CommandHelper.cs | 0 .../Framework/ModHelpers/ContentHelper.cs | 0 .../Framework/ModHelpers/ModHelper.cs | 0 .../Framework/ModHelpers/ModRegistryHelper.cs | 0 .../Framework/ModHelpers/ReflectionHelper.cs | 0 .../Framework/ModHelpers/TranslationHelper.cs | 0 .../ModLoading/AssemblyDefinitionResolver.cs | 0 .../ModLoading/AssemblyLoadStatus.cs | 0 .../Framework/ModLoading/AssemblyLoader.cs | 0 .../ModLoading/AssemblyParseResult.cs | 0 .../ModLoading/Finders/EventFinder.cs | 0 .../ModLoading/Finders/FieldFinder.cs | 0 .../ModLoading/Finders/MethodFinder.cs | 0 .../ModLoading/Finders/PropertyFinder.cs | 0 .../ModLoading/Finders/TypeFinder.cs | 0 .../ModLoading/IInstructionHandler.cs | 0 .../IncompatibleInstructionException.cs | 0 .../ModLoading/InstructionHandleResult.cs | 0 .../ModLoading/InvalidModStateException.cs | 0 .../ModLoading/ModDependencyStatus.cs | 0 .../Framework/ModLoading/ModMetadata.cs | 0 .../Framework/ModLoading/ModMetadataStatus.cs | 0 .../Framework/ModLoading/ModResolver.cs | 0 .../Framework/ModLoading/Platform.cs | 0 .../ModLoading/PlatformAssemblyMap.cs | 0 .../Framework/ModLoading/RewriteHelper.cs | 0 .../Rewriters/FieldReplaceRewriter.cs | 0 .../Rewriters/FieldToPropertyRewriter.cs | 0 .../Rewriters/MethodParentRewriter.cs | 0 .../Rewriters/TypeReferenceRewriter.cs | 0 .../Rewriters/VirtualEntryCallRemover.cs | 0 .../Framework/ModRegistry.cs | 0 .../Framework/Models/Manifest.cs | 0 .../Framework/Models/ManifestDependency.cs | 0 .../Framework/Models/ModCompatibility.cs | 0 .../Framework/Models/ModDataID.cs | 0 .../Framework/Models/ModDataRecord.cs | 0 .../Framework/Models/ModStatus.cs | 0 .../Framework/Models/SConfig.cs | 0 .../Framework/Monitor.cs | 0 .../Framework/Reflection/CacheEntry.cs | 0 .../Framework/Reflection/PrivateField.cs | 0 .../Framework/Reflection/PrivateMethod.cs | 0 .../Framework/Reflection/PrivateProperty.cs | 0 .../Framework/Reflection/Reflector.cs | 0 .../Framework/RequestExitDelegate.cs | 0 .../Framework/SContentManager.cs | 0 .../Framework/SGame.cs | 0 .../Framework/Serialisation/JsonHelper.cs | 0 .../Serialisation/SFieldConverter.cs | 0 .../SelectiveStringEnumConverter.cs | 0 .../Framework/Utilities/ContextHash.cs | 0 .../Framework/Utilities/Countdown.cs | 0 .../Framework/WebApiClient.cs | 0 .../IAssetData.cs | 0 .../IAssetDataForDictionary.cs | 0 .../IAssetDataForImage.cs | 0 .../IAssetEditor.cs | 0 .../IAssetInfo.cs | 0 .../IAssetLoader.cs | 0 .../ICommandHelper.cs | 0 .../IContentHelper.cs | 0 .../ICursorPosition.cs | 0 src/{StardewModdingAPI => SMAPI}/IManifest.cs | 0 .../IManifestDependency.cs | 0 src/{StardewModdingAPI => SMAPI}/IMod.cs | 0 .../IModHelper.cs | 0 .../IModLinked.cs | 0 .../IModRegistry.cs | 0 src/{StardewModdingAPI => SMAPI}/IMonitor.cs | 0 .../IPrivateField.cs | 0 .../IPrivateMethod.cs | 0 .../IPrivateProperty.cs | 0 .../IReflectionHelper.cs | 0 .../ISemanticVersion.cs | 0 .../ITranslationHelper.cs | 0 src/{StardewModdingAPI => SMAPI}/LogLevel.cs | 0 .../Metadata/CoreAssets.cs | 0 .../Metadata/InstructionMetadata.cs | 0 src/{StardewModdingAPI => SMAPI}/Mod.cs | 0 src/{StardewModdingAPI => SMAPI}/PatchMode.cs | 0 src/{StardewModdingAPI => SMAPI}/Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../SemanticVersion.cs | 0 .../StardewModdingAPI.config.json | 0 .../StardewModdingAPI.csproj | 10 ++-- .../Translation.cs | 0 .../Utilities/SButton.cs | 0 .../Utilities/SDate.cs | 0 src/{StardewModdingAPI => SMAPI}/icon.ico | Bin .../packages.config | 0 .../steam_appid.txt | 0 .../unix-launcher.sh | 0 src/TrainerMod/TrainerMod.csproj | 8 ++-- 205 files changed, 50 insertions(+), 40 deletions(-) rename src/.editorconfig => .editorconfig (100%) rename {src => build}/GlobalAssemblyInfo.cs (100%) rename {src => build}/common.targets (100%) rename {src => build}/prepare-install-package.targets (100%) rename CONTRIBUTING.md => docs/CONTRIBUTING.md (100%) rename LICENSE => docs/LICENSE.md (100%) rename README.md => docs/README.md (100%) rename release-notes.md => docs/release-notes.md (100%) rename src/{StardewModdingAPI.ModBuildConfig => ModBuildConfig}/README.md (100%) rename src/{StardewModdingAPI.ModBuildConfig => ModBuildConfig}/assets/nuget-icon.pdn (100%) rename src/{StardewModdingAPI.ModBuildConfig => ModBuildConfig}/assets/nuget-icon.png (100%) rename src/{StardewModdingAPI.ModBuildConfig => ModBuildConfig}/build/smapi.targets (100%) rename src/{StardewModdingAPI.ModBuildConfig => ModBuildConfig}/package.nuspec (100%) rename src/{StardewModdingAPI.ModBuildConfig => ModBuildConfig}/release-notes.md (100%) rename src/{StardewModdingAPI.AssemblyRewriters => SMAPI.AssemblyRewriters}/Properties/AssemblyInfo.cs (100%) rename src/{StardewModdingAPI.AssemblyRewriters => SMAPI.AssemblyRewriters}/SpriteBatchMethods.cs (100%) rename src/{StardewModdingAPI.AssemblyRewriters => SMAPI.AssemblyRewriters}/StardewModdingAPI.AssemblyRewriters.csproj (92%) rename src/{StardewModdingAPI.Installer => SMAPI.Installer}/Enums/Platform.cs (100%) rename src/{StardewModdingAPI.Installer => SMAPI.Installer}/Enums/ScriptAction.cs (100%) rename src/{StardewModdingAPI.Installer => SMAPI.Installer}/InteractiveInstaller.cs (100%) rename src/{StardewModdingAPI.Installer => SMAPI.Installer}/Program.cs (100%) rename src/{StardewModdingAPI.Installer => SMAPI.Installer}/Properties/AssemblyInfo.cs (100%) rename src/{StardewModdingAPI.Installer => SMAPI.Installer}/StardewModdingAPI.Installer.csproj (91%) rename src/{StardewModdingAPI.Installer => SMAPI.Installer}/readme.txt (100%) rename src/{StardewModdingAPI.Models => SMAPI.Models}/ModInfoModel.cs (100%) rename src/{StardewModdingAPI.Models => SMAPI.Models}/ModSeachModel.cs (100%) rename src/{StardewModdingAPI.Models => SMAPI.Models}/StardewModdingAPI.Models.projitems (100%) rename src/{StardewModdingAPI.Models => SMAPI.Models}/StardewModdingAPI.Models.shproj (100%) rename src/{StardewModdingAPI.Tests => SMAPI.Tests}/Core/ModResolverTests.cs (100%) rename src/{StardewModdingAPI.Tests => SMAPI.Tests}/Core/TranslationTests.cs (100%) rename src/{StardewModdingAPI.Tests => SMAPI.Tests}/Properties/AssemblyInfo.cs (100%) rename src/{StardewModdingAPI.Tests => SMAPI.Tests}/Sample.cs (100%) rename src/{StardewModdingAPI.Tests => SMAPI.Tests}/StardewModdingAPI.Tests.csproj (93%) rename src/{StardewModdingAPI.Tests => SMAPI.Tests}/Utilities/SDateTests.cs (100%) rename src/{StardewModdingAPI.Tests => SMAPI.Tests}/Utilities/SemanticVersionTests.cs (100%) rename src/{StardewModdingAPI.Tests => SMAPI.Tests}/packages.config (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Controllers/ModsController.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/ConfigModels/ModUpdateCheckConfig.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/InternalControllerFeatureProvider.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/ModRepositories/BaseRepository.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/ModRepositories/ChucklefishRepository.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/ModRepositories/GitHubRepository.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/ModRepositories/IModRepository.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/ModRepositories/NexusRepository.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/RewriteSubdomainRule.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Framework/VersionConstraint.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Program.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Properties/AssemblyInfo.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Properties/launchSettings.json (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/StardewModdingAPI.Web.csproj (79%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/Startup.cs (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/appsettings.Development.json (100%) rename src/{StardewModdingAPI.Web => SMAPI.Web}/appsettings.json (100%) rename src/{StardewModdingAPI.sln => SMAPI.sln} (78%) rename src/{StardewModdingAPI.sln.DotSettings => SMAPI.sln.DotSettings} (100%) rename src/{StardewModdingAPI => SMAPI}/App.config (100%) rename src/{StardewModdingAPI => SMAPI}/Constants.cs (100%) rename src/{StardewModdingAPI => SMAPI}/ContentSource.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Context.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/ChangeType.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/ContentEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/ControlEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsClickableMenuChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsClickableMenuClosed.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsControllerButtonPressed.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsControllerButtonReleased.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsControllerTriggerPressed.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsControllerTriggerReleased.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsCurrentLocationChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsGameLocationsChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsInput.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsIntChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsInventoryChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsKeyPressed.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsKeyboardStateChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsLevelUp.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsLocationObjectsChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsMineLevelChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsMouseStateChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/EventArgsValueChanged.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/GameEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/GraphicsEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/InputEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/ItemStackChange.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/LocationEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/MenuEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/MineEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/PlayerEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/SaveEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Events/TimeEvents.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Command.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/CommandManager.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Content/AssetData.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Content/AssetDataForDictionary.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Content/AssetDataForImage.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Content/AssetDataForObject.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Content/AssetInfo.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ContentManagerShim.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/CursorPosition.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/DeprecationLevel.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/DeprecationManager.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Exceptions/SAssemblyLoadFailedException.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Exceptions/SContentLoadException.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Exceptions/SParseException.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/GameVersion.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/IModMetadata.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/InternalExtensions.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Logging/ConsoleInterceptionManager.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Logging/InterceptingTextWriter.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Logging/LogFileManager.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModHelpers/BaseHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModHelpers/CommandHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModHelpers/ContentHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModHelpers/ModHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModHelpers/ModRegistryHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModHelpers/ReflectionHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModHelpers/TranslationHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/AssemblyDefinitionResolver.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/AssemblyLoadStatus.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/AssemblyLoader.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/AssemblyParseResult.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Finders/EventFinder.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Finders/FieldFinder.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Finders/MethodFinder.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Finders/PropertyFinder.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Finders/TypeFinder.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/IInstructionHandler.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/IncompatibleInstructionException.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/InstructionHandleResult.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/InvalidModStateException.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/ModDependencyStatus.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/ModMetadata.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/ModMetadataStatus.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/ModResolver.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Platform.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/PlatformAssemblyMap.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/RewriteHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Rewriters/FieldReplaceRewriter.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Rewriters/FieldToPropertyRewriter.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Rewriters/MethodParentRewriter.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Rewriters/TypeReferenceRewriter.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModLoading/Rewriters/VirtualEntryCallRemover.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/ModRegistry.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Models/Manifest.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Models/ManifestDependency.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Models/ModCompatibility.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Models/ModDataID.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Models/ModDataRecord.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Models/ModStatus.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Models/SConfig.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Monitor.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Reflection/CacheEntry.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Reflection/PrivateField.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Reflection/PrivateMethod.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Reflection/PrivateProperty.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Reflection/Reflector.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/RequestExitDelegate.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/SContentManager.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/SGame.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Serialisation/JsonHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Serialisation/SFieldConverter.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Serialisation/SelectiveStringEnumConverter.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Utilities/ContextHash.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/Utilities/Countdown.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Framework/WebApiClient.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IAssetData.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IAssetDataForDictionary.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IAssetDataForImage.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IAssetEditor.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IAssetInfo.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IAssetLoader.cs (100%) rename src/{StardewModdingAPI => SMAPI}/ICommandHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IContentHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/ICursorPosition.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IManifest.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IManifestDependency.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IMod.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IModHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IModLinked.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IModRegistry.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IMonitor.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IPrivateField.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IPrivateMethod.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IPrivateProperty.cs (100%) rename src/{StardewModdingAPI => SMAPI}/IReflectionHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/ISemanticVersion.cs (100%) rename src/{StardewModdingAPI => SMAPI}/ITranslationHelper.cs (100%) rename src/{StardewModdingAPI => SMAPI}/LogLevel.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Metadata/CoreAssets.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Metadata/InstructionMetadata.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Mod.cs (100%) rename src/{StardewModdingAPI => SMAPI}/PatchMode.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Program.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Properties/AssemblyInfo.cs (100%) rename src/{StardewModdingAPI => SMAPI}/SemanticVersion.cs (100%) rename src/{StardewModdingAPI => SMAPI}/StardewModdingAPI.config.json (100%) rename src/{StardewModdingAPI => SMAPI}/StardewModdingAPI.csproj (97%) rename src/{StardewModdingAPI => SMAPI}/Translation.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Utilities/SButton.cs (100%) rename src/{StardewModdingAPI => SMAPI}/Utilities/SDate.cs (100%) rename src/{StardewModdingAPI => SMAPI}/icon.ico (100%) rename src/{StardewModdingAPI => SMAPI}/packages.config (100%) rename src/{StardewModdingAPI => SMAPI}/steam_appid.txt (100%) rename src/{StardewModdingAPI => SMAPI}/unix-launcher.sh (100%) diff --git a/src/.editorconfig b/.editorconfig similarity index 100% rename from src/.editorconfig rename to .editorconfig diff --git a/src/GlobalAssemblyInfo.cs b/build/GlobalAssemblyInfo.cs similarity index 100% rename from src/GlobalAssemblyInfo.cs rename to build/GlobalAssemblyInfo.cs diff --git a/src/common.targets b/build/common.targets similarity index 100% rename from src/common.targets rename to build/common.targets diff --git a/src/prepare-install-package.targets b/build/prepare-install-package.targets similarity index 100% rename from src/prepare-install-package.targets rename to build/prepare-install-package.targets diff --git a/CONTRIBUTING.md b/docs/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.md rename to docs/CONTRIBUTING.md diff --git a/LICENSE b/docs/LICENSE.md similarity index 100% rename from LICENSE rename to docs/LICENSE.md diff --git a/README.md b/docs/README.md similarity index 100% rename from README.md rename to docs/README.md diff --git a/release-notes.md b/docs/release-notes.md similarity index 100% rename from release-notes.md rename to docs/release-notes.md diff --git a/src/StardewModdingAPI.ModBuildConfig/README.md b/src/ModBuildConfig/README.md similarity index 100% rename from src/StardewModdingAPI.ModBuildConfig/README.md rename to src/ModBuildConfig/README.md diff --git a/src/StardewModdingAPI.ModBuildConfig/assets/nuget-icon.pdn b/src/ModBuildConfig/assets/nuget-icon.pdn similarity index 100% rename from src/StardewModdingAPI.ModBuildConfig/assets/nuget-icon.pdn rename to src/ModBuildConfig/assets/nuget-icon.pdn diff --git a/src/StardewModdingAPI.ModBuildConfig/assets/nuget-icon.png b/src/ModBuildConfig/assets/nuget-icon.png similarity index 100% rename from src/StardewModdingAPI.ModBuildConfig/assets/nuget-icon.png rename to src/ModBuildConfig/assets/nuget-icon.png diff --git a/src/StardewModdingAPI.ModBuildConfig/build/smapi.targets b/src/ModBuildConfig/build/smapi.targets similarity index 100% rename from src/StardewModdingAPI.ModBuildConfig/build/smapi.targets rename to src/ModBuildConfig/build/smapi.targets diff --git a/src/StardewModdingAPI.ModBuildConfig/package.nuspec b/src/ModBuildConfig/package.nuspec similarity index 100% rename from src/StardewModdingAPI.ModBuildConfig/package.nuspec rename to src/ModBuildConfig/package.nuspec diff --git a/src/StardewModdingAPI.ModBuildConfig/release-notes.md b/src/ModBuildConfig/release-notes.md similarity index 100% rename from src/StardewModdingAPI.ModBuildConfig/release-notes.md rename to src/ModBuildConfig/release-notes.md diff --git a/src/StardewModdingAPI.AssemblyRewriters/Properties/AssemblyInfo.cs b/src/SMAPI.AssemblyRewriters/Properties/AssemblyInfo.cs similarity index 100% rename from src/StardewModdingAPI.AssemblyRewriters/Properties/AssemblyInfo.cs rename to src/SMAPI.AssemblyRewriters/Properties/AssemblyInfo.cs diff --git a/src/StardewModdingAPI.AssemblyRewriters/SpriteBatchMethods.cs b/src/SMAPI.AssemblyRewriters/SpriteBatchMethods.cs similarity index 100% rename from src/StardewModdingAPI.AssemblyRewriters/SpriteBatchMethods.cs rename to src/SMAPI.AssemblyRewriters/SpriteBatchMethods.cs diff --git a/src/StardewModdingAPI.AssemblyRewriters/StardewModdingAPI.AssemblyRewriters.csproj b/src/SMAPI.AssemblyRewriters/StardewModdingAPI.AssemblyRewriters.csproj similarity index 92% rename from src/StardewModdingAPI.AssemblyRewriters/StardewModdingAPI.AssemblyRewriters.csproj rename to src/SMAPI.AssemblyRewriters/StardewModdingAPI.AssemblyRewriters.csproj index c8b03086..651b822d 100644 --- a/src/StardewModdingAPI.AssemblyRewriters/StardewModdingAPI.AssemblyRewriters.csproj +++ b/src/SMAPI.AssemblyRewriters/StardewModdingAPI.AssemblyRewriters.csproj @@ -1,4 +1,4 @@ - + @@ -33,12 +33,12 @@ - + Properties\GlobalAssemblyInfo.cs - + \ No newline at end of file diff --git a/src/StardewModdingAPI.Installer/Enums/Platform.cs b/src/SMAPI.Installer/Enums/Platform.cs similarity index 100% rename from src/StardewModdingAPI.Installer/Enums/Platform.cs rename to src/SMAPI.Installer/Enums/Platform.cs diff --git a/src/StardewModdingAPI.Installer/Enums/ScriptAction.cs b/src/SMAPI.Installer/Enums/ScriptAction.cs similarity index 100% rename from src/StardewModdingAPI.Installer/Enums/ScriptAction.cs rename to src/SMAPI.Installer/Enums/ScriptAction.cs diff --git a/src/StardewModdingAPI.Installer/InteractiveInstaller.cs b/src/SMAPI.Installer/InteractiveInstaller.cs similarity index 100% rename from src/StardewModdingAPI.Installer/InteractiveInstaller.cs rename to src/SMAPI.Installer/InteractiveInstaller.cs diff --git a/src/StardewModdingAPI.Installer/Program.cs b/src/SMAPI.Installer/Program.cs similarity index 100% rename from src/StardewModdingAPI.Installer/Program.cs rename to src/SMAPI.Installer/Program.cs diff --git a/src/StardewModdingAPI.Installer/Properties/AssemblyInfo.cs b/src/SMAPI.Installer/Properties/AssemblyInfo.cs similarity index 100% rename from src/StardewModdingAPI.Installer/Properties/AssemblyInfo.cs rename to src/SMAPI.Installer/Properties/AssemblyInfo.cs diff --git a/src/StardewModdingAPI.Installer/StardewModdingAPI.Installer.csproj b/src/SMAPI.Installer/StardewModdingAPI.Installer.csproj similarity index 91% rename from src/StardewModdingAPI.Installer/StardewModdingAPI.Installer.csproj rename to src/SMAPI.Installer/StardewModdingAPI.Installer.csproj index 58ce519c..f8e368a4 100644 --- a/src/StardewModdingAPI.Installer/StardewModdingAPI.Installer.csproj +++ b/src/SMAPI.Installer/StardewModdingAPI.Installer.csproj @@ -1,4 +1,4 @@ - + @@ -36,7 +36,7 @@ - + Properties\GlobalAssemblyInfo.cs @@ -51,6 +51,6 @@ - - + + \ No newline at end of file diff --git a/src/StardewModdingAPI.Installer/readme.txt b/src/SMAPI.Installer/readme.txt similarity index 100% rename from src/StardewModdingAPI.Installer/readme.txt rename to src/SMAPI.Installer/readme.txt diff --git a/src/StardewModdingAPI.Models/ModInfoModel.cs b/src/SMAPI.Models/ModInfoModel.cs similarity index 100% rename from src/StardewModdingAPI.Models/ModInfoModel.cs rename to src/SMAPI.Models/ModInfoModel.cs diff --git a/src/StardewModdingAPI.Models/ModSeachModel.cs b/src/SMAPI.Models/ModSeachModel.cs similarity index 100% rename from src/StardewModdingAPI.Models/ModSeachModel.cs rename to src/SMAPI.Models/ModSeachModel.cs diff --git a/src/StardewModdingAPI.Models/StardewModdingAPI.Models.projitems b/src/SMAPI.Models/StardewModdingAPI.Models.projitems similarity index 100% rename from src/StardewModdingAPI.Models/StardewModdingAPI.Models.projitems rename to src/SMAPI.Models/StardewModdingAPI.Models.projitems diff --git a/src/StardewModdingAPI.Models/StardewModdingAPI.Models.shproj b/src/SMAPI.Models/StardewModdingAPI.Models.shproj similarity index 100% rename from src/StardewModdingAPI.Models/StardewModdingAPI.Models.shproj rename to src/SMAPI.Models/StardewModdingAPI.Models.shproj diff --git a/src/StardewModdingAPI.Tests/Core/ModResolverTests.cs b/src/SMAPI.Tests/Core/ModResolverTests.cs similarity index 100% rename from src/StardewModdingAPI.Tests/Core/ModResolverTests.cs rename to src/SMAPI.Tests/Core/ModResolverTests.cs diff --git a/src/StardewModdingAPI.Tests/Core/TranslationTests.cs b/src/SMAPI.Tests/Core/TranslationTests.cs similarity index 100% rename from src/StardewModdingAPI.Tests/Core/TranslationTests.cs rename to src/SMAPI.Tests/Core/TranslationTests.cs diff --git a/src/StardewModdingAPI.Tests/Properties/AssemblyInfo.cs b/src/SMAPI.Tests/Properties/AssemblyInfo.cs similarity index 100% rename from src/StardewModdingAPI.Tests/Properties/AssemblyInfo.cs rename to src/SMAPI.Tests/Properties/AssemblyInfo.cs diff --git a/src/StardewModdingAPI.Tests/Sample.cs b/src/SMAPI.Tests/Sample.cs similarity index 100% rename from src/StardewModdingAPI.Tests/Sample.cs rename to src/SMAPI.Tests/Sample.cs diff --git a/src/StardewModdingAPI.Tests/StardewModdingAPI.Tests.csproj b/src/SMAPI.Tests/StardewModdingAPI.Tests.csproj similarity index 93% rename from src/StardewModdingAPI.Tests/StardewModdingAPI.Tests.csproj rename to src/SMAPI.Tests/StardewModdingAPI.Tests.csproj index 41525bcb..42c3318f 100644 --- a/src/StardewModdingAPI.Tests/StardewModdingAPI.Tests.csproj +++ b/src/SMAPI.Tests/StardewModdingAPI.Tests.csproj @@ -1,4 +1,4 @@ - + @@ -45,7 +45,7 @@ - + Properties\GlobalAssemblyInfo.cs @@ -59,11 +59,11 @@ - + {f1a573b0-f436-472c-ae29-0b91ea6b9f8f} StardewModdingAPI - + \ No newline at end of file diff --git a/src/StardewModdingAPI.Tests/Utilities/SDateTests.cs b/src/SMAPI.Tests/Utilities/SDateTests.cs similarity index 100% rename from src/StardewModdingAPI.Tests/Utilities/SDateTests.cs rename to src/SMAPI.Tests/Utilities/SDateTests.cs diff --git a/src/StardewModdingAPI.Tests/Utilities/SemanticVersionTests.cs b/src/SMAPI.Tests/Utilities/SemanticVersionTests.cs similarity index 100% rename from src/StardewModdingAPI.Tests/Utilities/SemanticVersionTests.cs rename to src/SMAPI.Tests/Utilities/SemanticVersionTests.cs diff --git a/src/StardewModdingAPI.Tests/packages.config b/src/SMAPI.Tests/packages.config similarity index 100% rename from src/StardewModdingAPI.Tests/packages.config rename to src/SMAPI.Tests/packages.config diff --git a/src/StardewModdingAPI.Web/Controllers/ModsController.cs b/src/SMAPI.Web/Controllers/ModsController.cs similarity index 100% rename from src/StardewModdingAPI.Web/Controllers/ModsController.cs rename to src/SMAPI.Web/Controllers/ModsController.cs diff --git a/src/StardewModdingAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs b/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs rename to src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs diff --git a/src/StardewModdingAPI.Web/Framework/InternalControllerFeatureProvider.cs b/src/SMAPI.Web/Framework/InternalControllerFeatureProvider.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/InternalControllerFeatureProvider.cs rename to src/SMAPI.Web/Framework/InternalControllerFeatureProvider.cs diff --git a/src/StardewModdingAPI.Web/Framework/ModRepositories/BaseRepository.cs b/src/SMAPI.Web/Framework/ModRepositories/BaseRepository.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/ModRepositories/BaseRepository.cs rename to src/SMAPI.Web/Framework/ModRepositories/BaseRepository.cs diff --git a/src/StardewModdingAPI.Web/Framework/ModRepositories/ChucklefishRepository.cs b/src/SMAPI.Web/Framework/ModRepositories/ChucklefishRepository.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/ModRepositories/ChucklefishRepository.cs rename to src/SMAPI.Web/Framework/ModRepositories/ChucklefishRepository.cs diff --git a/src/StardewModdingAPI.Web/Framework/ModRepositories/GitHubRepository.cs b/src/SMAPI.Web/Framework/ModRepositories/GitHubRepository.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/ModRepositories/GitHubRepository.cs rename to src/SMAPI.Web/Framework/ModRepositories/GitHubRepository.cs diff --git a/src/StardewModdingAPI.Web/Framework/ModRepositories/IModRepository.cs b/src/SMAPI.Web/Framework/ModRepositories/IModRepository.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/ModRepositories/IModRepository.cs rename to src/SMAPI.Web/Framework/ModRepositories/IModRepository.cs diff --git a/src/StardewModdingAPI.Web/Framework/ModRepositories/NexusRepository.cs b/src/SMAPI.Web/Framework/ModRepositories/NexusRepository.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/ModRepositories/NexusRepository.cs rename to src/SMAPI.Web/Framework/ModRepositories/NexusRepository.cs diff --git a/src/StardewModdingAPI.Web/Framework/RewriteSubdomainRule.cs b/src/SMAPI.Web/Framework/RewriteSubdomainRule.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/RewriteSubdomainRule.cs rename to src/SMAPI.Web/Framework/RewriteSubdomainRule.cs diff --git a/src/StardewModdingAPI.Web/Framework/VersionConstraint.cs b/src/SMAPI.Web/Framework/VersionConstraint.cs similarity index 100% rename from src/StardewModdingAPI.Web/Framework/VersionConstraint.cs rename to src/SMAPI.Web/Framework/VersionConstraint.cs diff --git a/src/StardewModdingAPI.Web/Program.cs b/src/SMAPI.Web/Program.cs similarity index 100% rename from src/StardewModdingAPI.Web/Program.cs rename to src/SMAPI.Web/Program.cs diff --git a/src/StardewModdingAPI.Web/Properties/AssemblyInfo.cs b/src/SMAPI.Web/Properties/AssemblyInfo.cs similarity index 100% rename from src/StardewModdingAPI.Web/Properties/AssemblyInfo.cs rename to src/SMAPI.Web/Properties/AssemblyInfo.cs diff --git a/src/StardewModdingAPI.Web/Properties/launchSettings.json b/src/SMAPI.Web/Properties/launchSettings.json similarity index 100% rename from src/StardewModdingAPI.Web/Properties/launchSettings.json rename to src/SMAPI.Web/Properties/launchSettings.json diff --git a/src/StardewModdingAPI.Web/StardewModdingAPI.Web.csproj b/src/SMAPI.Web/StardewModdingAPI.Web.csproj similarity index 79% rename from src/StardewModdingAPI.Web/StardewModdingAPI.Web.csproj rename to src/SMAPI.Web/StardewModdingAPI.Web.csproj index 746b1a69..6b1d0687 100644 --- a/src/StardewModdingAPI.Web/StardewModdingAPI.Web.csproj +++ b/src/SMAPI.Web/StardewModdingAPI.Web.csproj @@ -1,4 +1,4 @@ - + netcoreapp2.0 @@ -6,7 +6,7 @@ - + @@ -21,6 +21,6 @@ - + diff --git a/src/StardewModdingAPI.Web/Startup.cs b/src/SMAPI.Web/Startup.cs similarity index 100% rename from src/StardewModdingAPI.Web/Startup.cs rename to src/SMAPI.Web/Startup.cs diff --git a/src/StardewModdingAPI.Web/appsettings.Development.json b/src/SMAPI.Web/appsettings.Development.json similarity index 100% rename from src/StardewModdingAPI.Web/appsettings.Development.json rename to src/SMAPI.Web/appsettings.Development.json diff --git a/src/StardewModdingAPI.Web/appsettings.json b/src/SMAPI.Web/appsettings.json similarity index 100% rename from src/StardewModdingAPI.Web/appsettings.json rename to src/SMAPI.Web/appsettings.json diff --git a/src/StardewModdingAPI.sln b/src/SMAPI.sln similarity index 78% rename from src/StardewModdingAPI.sln rename to src/SMAPI.sln index 5e8a2c93..5936ff43 100644 --- a/src/StardewModdingAPI.sln +++ b/src/SMAPI.sln @@ -5,42 +5,50 @@ VisualStudioVersion = 15.0.26730.16 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrainerMod", "TrainerMod\TrainerMod.csproj", "{28480467-1A48-46A7-99F8-236D95225359}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StardewModdingAPI", "StardewModdingAPI\StardewModdingAPI.csproj", "{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StardewModdingAPI", "SMAPI\StardewModdingAPI.csproj", "{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "metadata", "metadata", "{86C452BE-D2D8-45B4-B63F-E329EB06CEDA}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".root", ".root", "{86C452BE-D2D8-45B4-B63F-E329EB06CEDA}" ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig + ..\.editorconfig = ..\.editorconfig ..\.gitattributes = ..\.gitattributes ..\.gitignore = ..\.gitignore - common.targets = common.targets - ..\CONTRIBUTING.md = ..\CONTRIBUTING.md - GlobalAssemblyInfo.cs = GlobalAssemblyInfo.cs - ..\LICENSE = ..\LICENSE - prepare-install-package.targets = prepare-install-package.targets - ..\README.md = ..\README.md - ..\release-notes.md = ..\release-notes.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StardewModdingAPI.Installer", "StardewModdingAPI.Installer\StardewModdingAPI.Installer.csproj", "{443DDF81-6AAF-420A-A610-3459F37E5575}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StardewModdingAPI.Installer", "SMAPI.Installer\StardewModdingAPI.Installer.csproj", "{443DDF81-6AAF-420A-A610-3459F37E5575}" ProjectSection(ProjectDependencies) = postProject {28480467-1A48-46A7-99F8-236D95225359} = {28480467-1A48-46A7-99F8-236D95225359} {F1A573B0-F436-472C-AE29-0B91EA6B9F8F} = {F1A573B0-F436-472C-AE29-0B91EA6B9F8F} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StardewModdingAPI.AssemblyRewriters", "StardewModdingAPI.AssemblyRewriters\StardewModdingAPI.AssemblyRewriters.csproj", "{10DB0676-9FC1-4771-A2C8-E2519F091E49}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StardewModdingAPI.AssemblyRewriters", "SMAPI.AssemblyRewriters\StardewModdingAPI.AssemblyRewriters.csproj", "{10DB0676-9FC1-4771-A2C8-E2519F091E49}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StardewModdingAPI.Tests", "StardewModdingAPI.Tests\StardewModdingAPI.Tests.csproj", "{36CCB19E-92EB-48C7-9615-98EEFD45109B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StardewModdingAPI.Tests", "SMAPI.Tests\StardewModdingAPI.Tests.csproj", "{36CCB19E-92EB-48C7-9615-98EEFD45109B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StardewModdingAPI.Web", "StardewModdingAPI.Web\StardewModdingAPI.Web.csproj", "{A308F679-51A3-4006-92D5-BAEC7EBD01A1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StardewModdingAPI.Web", "SMAPI.Web\StardewModdingAPI.Web.csproj", "{A308F679-51A3-4006-92D5-BAEC7EBD01A1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Internal", "Internal", "{82D22ED7-A0A7-4D64-8E92-4B6A5E74ED11}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "StardewModdingAPI.Models", "StardewModdingAPI.Models\StardewModdingAPI.Models.shproj", "{2AA02FB6-FF03-41CF-A215-2EE60AB4F5DC}" +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "StardewModdingAPI.Models", "SMAPI.Models\StardewModdingAPI.Models.shproj", "{2AA02FB6-FF03-41CF-A215-2EE60AB4F5DC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{EB35A917-67B9-4EFA-8DFC-4FB49B3949BB}" + ProjectSection(SolutionItems) = preProject + ..\docs\CONTRIBUTING.md = ..\docs\CONTRIBUTING.md + ..\docs\LICENSE.md = ..\docs\LICENSE.md + ..\docs\README.md = ..\docs\README.md + ..\docs\release-notes.md = ..\docs\release-notes.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{09CF91E5-5BAB-4650-A200-E5EA9A633046}" + ProjectSection(SolutionItems) = preProject + ..\build\common.targets = ..\build\common.targets + ..\build\GlobalAssemblyInfo.cs = ..\build\GlobalAssemblyInfo.cs + ..\build\prepare-install-package.targets = ..\build\prepare-install-package.targets + EndProjectSection EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution - StardewModdingAPI.Models\StardewModdingAPI.Models.projitems*{2aa02fb6-ff03-41cf-a215-2ee60ab4f5dc}*SharedItemsImports = 13 - StardewModdingAPI.Models\StardewModdingAPI.Models.projitems*{f1a573b0-f436-472c-ae29-0b91ea6b9f8f}*SharedItemsImports = 4 + SMAPI.Models\StardewModdingAPI.Models.projitems*{2aa02fb6-ff03-41cf-a215-2ee60ab4f5dc}*SharedItemsImports = 13 + SMAPI.Models\StardewModdingAPI.Models.projitems*{f1a573b0-f436-472c-ae29-0b91ea6b9f8f}*SharedItemsImports = 4 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -121,6 +129,8 @@ Global {10DB0676-9FC1-4771-A2C8-E2519F091E49} = {82D22ED7-A0A7-4D64-8E92-4B6A5E74ED11} {36CCB19E-92EB-48C7-9615-98EEFD45109B} = {82D22ED7-A0A7-4D64-8E92-4B6A5E74ED11} {2AA02FB6-FF03-41CF-A215-2EE60AB4F5DC} = {82D22ED7-A0A7-4D64-8E92-4B6A5E74ED11} + {EB35A917-67B9-4EFA-8DFC-4FB49B3949BB} = {86C452BE-D2D8-45B4-B63F-E329EB06CEDA} + {09CF91E5-5BAB-4650-A200-E5EA9A633046} = {86C452BE-D2D8-45B4-B63F-E329EB06CEDA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {70143042-A862-47A8-A677-7C819DDC90DC} diff --git a/src/StardewModdingAPI.sln.DotSettings b/src/SMAPI.sln.DotSettings similarity index 100% rename from src/StardewModdingAPI.sln.DotSettings rename to src/SMAPI.sln.DotSettings diff --git a/src/StardewModdingAPI/App.config b/src/SMAPI/App.config similarity index 100% rename from src/StardewModdingAPI/App.config rename to src/SMAPI/App.config diff --git a/src/StardewModdingAPI/Constants.cs b/src/SMAPI/Constants.cs similarity index 100% rename from src/StardewModdingAPI/Constants.cs rename to src/SMAPI/Constants.cs diff --git a/src/StardewModdingAPI/ContentSource.cs b/src/SMAPI/ContentSource.cs similarity index 100% rename from src/StardewModdingAPI/ContentSource.cs rename to src/SMAPI/ContentSource.cs diff --git a/src/StardewModdingAPI/Context.cs b/src/SMAPI/Context.cs similarity index 100% rename from src/StardewModdingAPI/Context.cs rename to src/SMAPI/Context.cs diff --git a/src/StardewModdingAPI/Events/ChangeType.cs b/src/SMAPI/Events/ChangeType.cs similarity index 100% rename from src/StardewModdingAPI/Events/ChangeType.cs rename to src/SMAPI/Events/ChangeType.cs diff --git a/src/StardewModdingAPI/Events/ContentEvents.cs b/src/SMAPI/Events/ContentEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/ContentEvents.cs rename to src/SMAPI/Events/ContentEvents.cs diff --git a/src/StardewModdingAPI/Events/ControlEvents.cs b/src/SMAPI/Events/ControlEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/ControlEvents.cs rename to src/SMAPI/Events/ControlEvents.cs diff --git a/src/StardewModdingAPI/Events/EventArgsClickableMenuChanged.cs b/src/SMAPI/Events/EventArgsClickableMenuChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsClickableMenuChanged.cs rename to src/SMAPI/Events/EventArgsClickableMenuChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsClickableMenuClosed.cs b/src/SMAPI/Events/EventArgsClickableMenuClosed.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsClickableMenuClosed.cs rename to src/SMAPI/Events/EventArgsClickableMenuClosed.cs diff --git a/src/StardewModdingAPI/Events/EventArgsControllerButtonPressed.cs b/src/SMAPI/Events/EventArgsControllerButtonPressed.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsControllerButtonPressed.cs rename to src/SMAPI/Events/EventArgsControllerButtonPressed.cs diff --git a/src/StardewModdingAPI/Events/EventArgsControllerButtonReleased.cs b/src/SMAPI/Events/EventArgsControllerButtonReleased.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsControllerButtonReleased.cs rename to src/SMAPI/Events/EventArgsControllerButtonReleased.cs diff --git a/src/StardewModdingAPI/Events/EventArgsControllerTriggerPressed.cs b/src/SMAPI/Events/EventArgsControllerTriggerPressed.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsControllerTriggerPressed.cs rename to src/SMAPI/Events/EventArgsControllerTriggerPressed.cs diff --git a/src/StardewModdingAPI/Events/EventArgsControllerTriggerReleased.cs b/src/SMAPI/Events/EventArgsControllerTriggerReleased.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsControllerTriggerReleased.cs rename to src/SMAPI/Events/EventArgsControllerTriggerReleased.cs diff --git a/src/StardewModdingAPI/Events/EventArgsCurrentLocationChanged.cs b/src/SMAPI/Events/EventArgsCurrentLocationChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsCurrentLocationChanged.cs rename to src/SMAPI/Events/EventArgsCurrentLocationChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsGameLocationsChanged.cs b/src/SMAPI/Events/EventArgsGameLocationsChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsGameLocationsChanged.cs rename to src/SMAPI/Events/EventArgsGameLocationsChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsInput.cs b/src/SMAPI/Events/EventArgsInput.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsInput.cs rename to src/SMAPI/Events/EventArgsInput.cs diff --git a/src/StardewModdingAPI/Events/EventArgsIntChanged.cs b/src/SMAPI/Events/EventArgsIntChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsIntChanged.cs rename to src/SMAPI/Events/EventArgsIntChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsInventoryChanged.cs b/src/SMAPI/Events/EventArgsInventoryChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsInventoryChanged.cs rename to src/SMAPI/Events/EventArgsInventoryChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsKeyPressed.cs b/src/SMAPI/Events/EventArgsKeyPressed.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsKeyPressed.cs rename to src/SMAPI/Events/EventArgsKeyPressed.cs diff --git a/src/StardewModdingAPI/Events/EventArgsKeyboardStateChanged.cs b/src/SMAPI/Events/EventArgsKeyboardStateChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsKeyboardStateChanged.cs rename to src/SMAPI/Events/EventArgsKeyboardStateChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsLevelUp.cs b/src/SMAPI/Events/EventArgsLevelUp.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsLevelUp.cs rename to src/SMAPI/Events/EventArgsLevelUp.cs diff --git a/src/StardewModdingAPI/Events/EventArgsLocationObjectsChanged.cs b/src/SMAPI/Events/EventArgsLocationObjectsChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsLocationObjectsChanged.cs rename to src/SMAPI/Events/EventArgsLocationObjectsChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsMineLevelChanged.cs b/src/SMAPI/Events/EventArgsMineLevelChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsMineLevelChanged.cs rename to src/SMAPI/Events/EventArgsMineLevelChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsMouseStateChanged.cs b/src/SMAPI/Events/EventArgsMouseStateChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsMouseStateChanged.cs rename to src/SMAPI/Events/EventArgsMouseStateChanged.cs diff --git a/src/StardewModdingAPI/Events/EventArgsValueChanged.cs b/src/SMAPI/Events/EventArgsValueChanged.cs similarity index 100% rename from src/StardewModdingAPI/Events/EventArgsValueChanged.cs rename to src/SMAPI/Events/EventArgsValueChanged.cs diff --git a/src/StardewModdingAPI/Events/GameEvents.cs b/src/SMAPI/Events/GameEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/GameEvents.cs rename to src/SMAPI/Events/GameEvents.cs diff --git a/src/StardewModdingAPI/Events/GraphicsEvents.cs b/src/SMAPI/Events/GraphicsEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/GraphicsEvents.cs rename to src/SMAPI/Events/GraphicsEvents.cs diff --git a/src/StardewModdingAPI/Events/InputEvents.cs b/src/SMAPI/Events/InputEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/InputEvents.cs rename to src/SMAPI/Events/InputEvents.cs diff --git a/src/StardewModdingAPI/Events/ItemStackChange.cs b/src/SMAPI/Events/ItemStackChange.cs similarity index 100% rename from src/StardewModdingAPI/Events/ItemStackChange.cs rename to src/SMAPI/Events/ItemStackChange.cs diff --git a/src/StardewModdingAPI/Events/LocationEvents.cs b/src/SMAPI/Events/LocationEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/LocationEvents.cs rename to src/SMAPI/Events/LocationEvents.cs diff --git a/src/StardewModdingAPI/Events/MenuEvents.cs b/src/SMAPI/Events/MenuEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/MenuEvents.cs rename to src/SMAPI/Events/MenuEvents.cs diff --git a/src/StardewModdingAPI/Events/MineEvents.cs b/src/SMAPI/Events/MineEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/MineEvents.cs rename to src/SMAPI/Events/MineEvents.cs diff --git a/src/StardewModdingAPI/Events/PlayerEvents.cs b/src/SMAPI/Events/PlayerEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/PlayerEvents.cs rename to src/SMAPI/Events/PlayerEvents.cs diff --git a/src/StardewModdingAPI/Events/SaveEvents.cs b/src/SMAPI/Events/SaveEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/SaveEvents.cs rename to src/SMAPI/Events/SaveEvents.cs diff --git a/src/StardewModdingAPI/Events/TimeEvents.cs b/src/SMAPI/Events/TimeEvents.cs similarity index 100% rename from src/StardewModdingAPI/Events/TimeEvents.cs rename to src/SMAPI/Events/TimeEvents.cs diff --git a/src/StardewModdingAPI/Framework/Command.cs b/src/SMAPI/Framework/Command.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Command.cs rename to src/SMAPI/Framework/Command.cs diff --git a/src/StardewModdingAPI/Framework/CommandManager.cs b/src/SMAPI/Framework/CommandManager.cs similarity index 100% rename from src/StardewModdingAPI/Framework/CommandManager.cs rename to src/SMAPI/Framework/CommandManager.cs diff --git a/src/StardewModdingAPI/Framework/Content/AssetData.cs b/src/SMAPI/Framework/Content/AssetData.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Content/AssetData.cs rename to src/SMAPI/Framework/Content/AssetData.cs diff --git a/src/StardewModdingAPI/Framework/Content/AssetDataForDictionary.cs b/src/SMAPI/Framework/Content/AssetDataForDictionary.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Content/AssetDataForDictionary.cs rename to src/SMAPI/Framework/Content/AssetDataForDictionary.cs diff --git a/src/StardewModdingAPI/Framework/Content/AssetDataForImage.cs b/src/SMAPI/Framework/Content/AssetDataForImage.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Content/AssetDataForImage.cs rename to src/SMAPI/Framework/Content/AssetDataForImage.cs diff --git a/src/StardewModdingAPI/Framework/Content/AssetDataForObject.cs b/src/SMAPI/Framework/Content/AssetDataForObject.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Content/AssetDataForObject.cs rename to src/SMAPI/Framework/Content/AssetDataForObject.cs diff --git a/src/StardewModdingAPI/Framework/Content/AssetInfo.cs b/src/SMAPI/Framework/Content/AssetInfo.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Content/AssetInfo.cs rename to src/SMAPI/Framework/Content/AssetInfo.cs diff --git a/src/StardewModdingAPI/Framework/ContentManagerShim.cs b/src/SMAPI/Framework/ContentManagerShim.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ContentManagerShim.cs rename to src/SMAPI/Framework/ContentManagerShim.cs diff --git a/src/StardewModdingAPI/Framework/CursorPosition.cs b/src/SMAPI/Framework/CursorPosition.cs similarity index 100% rename from src/StardewModdingAPI/Framework/CursorPosition.cs rename to src/SMAPI/Framework/CursorPosition.cs diff --git a/src/StardewModdingAPI/Framework/DeprecationLevel.cs b/src/SMAPI/Framework/DeprecationLevel.cs similarity index 100% rename from src/StardewModdingAPI/Framework/DeprecationLevel.cs rename to src/SMAPI/Framework/DeprecationLevel.cs diff --git a/src/StardewModdingAPI/Framework/DeprecationManager.cs b/src/SMAPI/Framework/DeprecationManager.cs similarity index 100% rename from src/StardewModdingAPI/Framework/DeprecationManager.cs rename to src/SMAPI/Framework/DeprecationManager.cs diff --git a/src/StardewModdingAPI/Framework/Exceptions/SAssemblyLoadFailedException.cs b/src/SMAPI/Framework/Exceptions/SAssemblyLoadFailedException.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Exceptions/SAssemblyLoadFailedException.cs rename to src/SMAPI/Framework/Exceptions/SAssemblyLoadFailedException.cs diff --git a/src/StardewModdingAPI/Framework/Exceptions/SContentLoadException.cs b/src/SMAPI/Framework/Exceptions/SContentLoadException.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Exceptions/SContentLoadException.cs rename to src/SMAPI/Framework/Exceptions/SContentLoadException.cs diff --git a/src/StardewModdingAPI/Framework/Exceptions/SParseException.cs b/src/SMAPI/Framework/Exceptions/SParseException.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Exceptions/SParseException.cs rename to src/SMAPI/Framework/Exceptions/SParseException.cs diff --git a/src/StardewModdingAPI/Framework/GameVersion.cs b/src/SMAPI/Framework/GameVersion.cs similarity index 100% rename from src/StardewModdingAPI/Framework/GameVersion.cs rename to src/SMAPI/Framework/GameVersion.cs diff --git a/src/StardewModdingAPI/Framework/IModMetadata.cs b/src/SMAPI/Framework/IModMetadata.cs similarity index 100% rename from src/StardewModdingAPI/Framework/IModMetadata.cs rename to src/SMAPI/Framework/IModMetadata.cs diff --git a/src/StardewModdingAPI/Framework/InternalExtensions.cs b/src/SMAPI/Framework/InternalExtensions.cs similarity index 100% rename from src/StardewModdingAPI/Framework/InternalExtensions.cs rename to src/SMAPI/Framework/InternalExtensions.cs diff --git a/src/StardewModdingAPI/Framework/Logging/ConsoleInterceptionManager.cs b/src/SMAPI/Framework/Logging/ConsoleInterceptionManager.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Logging/ConsoleInterceptionManager.cs rename to src/SMAPI/Framework/Logging/ConsoleInterceptionManager.cs diff --git a/src/StardewModdingAPI/Framework/Logging/InterceptingTextWriter.cs b/src/SMAPI/Framework/Logging/InterceptingTextWriter.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Logging/InterceptingTextWriter.cs rename to src/SMAPI/Framework/Logging/InterceptingTextWriter.cs diff --git a/src/StardewModdingAPI/Framework/Logging/LogFileManager.cs b/src/SMAPI/Framework/Logging/LogFileManager.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Logging/LogFileManager.cs rename to src/SMAPI/Framework/Logging/LogFileManager.cs diff --git a/src/StardewModdingAPI/Framework/ModHelpers/BaseHelper.cs b/src/SMAPI/Framework/ModHelpers/BaseHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModHelpers/BaseHelper.cs rename to src/SMAPI/Framework/ModHelpers/BaseHelper.cs diff --git a/src/StardewModdingAPI/Framework/ModHelpers/CommandHelper.cs b/src/SMAPI/Framework/ModHelpers/CommandHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModHelpers/CommandHelper.cs rename to src/SMAPI/Framework/ModHelpers/CommandHelper.cs diff --git a/src/StardewModdingAPI/Framework/ModHelpers/ContentHelper.cs b/src/SMAPI/Framework/ModHelpers/ContentHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModHelpers/ContentHelper.cs rename to src/SMAPI/Framework/ModHelpers/ContentHelper.cs diff --git a/src/StardewModdingAPI/Framework/ModHelpers/ModHelper.cs b/src/SMAPI/Framework/ModHelpers/ModHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModHelpers/ModHelper.cs rename to src/SMAPI/Framework/ModHelpers/ModHelper.cs diff --git a/src/StardewModdingAPI/Framework/ModHelpers/ModRegistryHelper.cs b/src/SMAPI/Framework/ModHelpers/ModRegistryHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModHelpers/ModRegistryHelper.cs rename to src/SMAPI/Framework/ModHelpers/ModRegistryHelper.cs diff --git a/src/StardewModdingAPI/Framework/ModHelpers/ReflectionHelper.cs b/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModHelpers/ReflectionHelper.cs rename to src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs diff --git a/src/StardewModdingAPI/Framework/ModHelpers/TranslationHelper.cs b/src/SMAPI/Framework/ModHelpers/TranslationHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModHelpers/TranslationHelper.cs rename to src/SMAPI/Framework/ModHelpers/TranslationHelper.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/AssemblyDefinitionResolver.cs b/src/SMAPI/Framework/ModLoading/AssemblyDefinitionResolver.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/AssemblyDefinitionResolver.cs rename to src/SMAPI/Framework/ModLoading/AssemblyDefinitionResolver.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/AssemblyLoadStatus.cs b/src/SMAPI/Framework/ModLoading/AssemblyLoadStatus.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/AssemblyLoadStatus.cs rename to src/SMAPI/Framework/ModLoading/AssemblyLoadStatus.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/AssemblyLoader.cs b/src/SMAPI/Framework/ModLoading/AssemblyLoader.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/AssemblyLoader.cs rename to src/SMAPI/Framework/ModLoading/AssemblyLoader.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/AssemblyParseResult.cs b/src/SMAPI/Framework/ModLoading/AssemblyParseResult.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/AssemblyParseResult.cs rename to src/SMAPI/Framework/ModLoading/AssemblyParseResult.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Finders/EventFinder.cs b/src/SMAPI/Framework/ModLoading/Finders/EventFinder.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Finders/EventFinder.cs rename to src/SMAPI/Framework/ModLoading/Finders/EventFinder.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Finders/FieldFinder.cs b/src/SMAPI/Framework/ModLoading/Finders/FieldFinder.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Finders/FieldFinder.cs rename to src/SMAPI/Framework/ModLoading/Finders/FieldFinder.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Finders/MethodFinder.cs b/src/SMAPI/Framework/ModLoading/Finders/MethodFinder.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Finders/MethodFinder.cs rename to src/SMAPI/Framework/ModLoading/Finders/MethodFinder.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Finders/PropertyFinder.cs b/src/SMAPI/Framework/ModLoading/Finders/PropertyFinder.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Finders/PropertyFinder.cs rename to src/SMAPI/Framework/ModLoading/Finders/PropertyFinder.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Finders/TypeFinder.cs b/src/SMAPI/Framework/ModLoading/Finders/TypeFinder.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Finders/TypeFinder.cs rename to src/SMAPI/Framework/ModLoading/Finders/TypeFinder.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/IInstructionHandler.cs b/src/SMAPI/Framework/ModLoading/IInstructionHandler.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/IInstructionHandler.cs rename to src/SMAPI/Framework/ModLoading/IInstructionHandler.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/IncompatibleInstructionException.cs b/src/SMAPI/Framework/ModLoading/IncompatibleInstructionException.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/IncompatibleInstructionException.cs rename to src/SMAPI/Framework/ModLoading/IncompatibleInstructionException.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/InstructionHandleResult.cs b/src/SMAPI/Framework/ModLoading/InstructionHandleResult.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/InstructionHandleResult.cs rename to src/SMAPI/Framework/ModLoading/InstructionHandleResult.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/InvalidModStateException.cs b/src/SMAPI/Framework/ModLoading/InvalidModStateException.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/InvalidModStateException.cs rename to src/SMAPI/Framework/ModLoading/InvalidModStateException.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModDependencyStatus.cs b/src/SMAPI/Framework/ModLoading/ModDependencyStatus.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/ModDependencyStatus.cs rename to src/SMAPI/Framework/ModLoading/ModDependencyStatus.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModMetadata.cs b/src/SMAPI/Framework/ModLoading/ModMetadata.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/ModMetadata.cs rename to src/SMAPI/Framework/ModLoading/ModMetadata.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModMetadataStatus.cs b/src/SMAPI/Framework/ModLoading/ModMetadataStatus.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/ModMetadataStatus.cs rename to src/SMAPI/Framework/ModLoading/ModMetadataStatus.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/SMAPI/Framework/ModLoading/ModResolver.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs rename to src/SMAPI/Framework/ModLoading/ModResolver.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Platform.cs b/src/SMAPI/Framework/ModLoading/Platform.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Platform.cs rename to src/SMAPI/Framework/ModLoading/Platform.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/PlatformAssemblyMap.cs b/src/SMAPI/Framework/ModLoading/PlatformAssemblyMap.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/PlatformAssemblyMap.cs rename to src/SMAPI/Framework/ModLoading/PlatformAssemblyMap.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/RewriteHelper.cs b/src/SMAPI/Framework/ModLoading/RewriteHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/RewriteHelper.cs rename to src/SMAPI/Framework/ModLoading/RewriteHelper.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Rewriters/FieldReplaceRewriter.cs b/src/SMAPI/Framework/ModLoading/Rewriters/FieldReplaceRewriter.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Rewriters/FieldReplaceRewriter.cs rename to src/SMAPI/Framework/ModLoading/Rewriters/FieldReplaceRewriter.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Rewriters/FieldToPropertyRewriter.cs b/src/SMAPI/Framework/ModLoading/Rewriters/FieldToPropertyRewriter.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Rewriters/FieldToPropertyRewriter.cs rename to src/SMAPI/Framework/ModLoading/Rewriters/FieldToPropertyRewriter.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Rewriters/MethodParentRewriter.cs b/src/SMAPI/Framework/ModLoading/Rewriters/MethodParentRewriter.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Rewriters/MethodParentRewriter.cs rename to src/SMAPI/Framework/ModLoading/Rewriters/MethodParentRewriter.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Rewriters/TypeReferenceRewriter.cs b/src/SMAPI/Framework/ModLoading/Rewriters/TypeReferenceRewriter.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Rewriters/TypeReferenceRewriter.cs rename to src/SMAPI/Framework/ModLoading/Rewriters/TypeReferenceRewriter.cs diff --git a/src/StardewModdingAPI/Framework/ModLoading/Rewriters/VirtualEntryCallRemover.cs b/src/SMAPI/Framework/ModLoading/Rewriters/VirtualEntryCallRemover.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModLoading/Rewriters/VirtualEntryCallRemover.cs rename to src/SMAPI/Framework/ModLoading/Rewriters/VirtualEntryCallRemover.cs diff --git a/src/StardewModdingAPI/Framework/ModRegistry.cs b/src/SMAPI/Framework/ModRegistry.cs similarity index 100% rename from src/StardewModdingAPI/Framework/ModRegistry.cs rename to src/SMAPI/Framework/ModRegistry.cs diff --git a/src/StardewModdingAPI/Framework/Models/Manifest.cs b/src/SMAPI/Framework/Models/Manifest.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Models/Manifest.cs rename to src/SMAPI/Framework/Models/Manifest.cs diff --git a/src/StardewModdingAPI/Framework/Models/ManifestDependency.cs b/src/SMAPI/Framework/Models/ManifestDependency.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Models/ManifestDependency.cs rename to src/SMAPI/Framework/Models/ManifestDependency.cs diff --git a/src/StardewModdingAPI/Framework/Models/ModCompatibility.cs b/src/SMAPI/Framework/Models/ModCompatibility.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Models/ModCompatibility.cs rename to src/SMAPI/Framework/Models/ModCompatibility.cs diff --git a/src/StardewModdingAPI/Framework/Models/ModDataID.cs b/src/SMAPI/Framework/Models/ModDataID.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Models/ModDataID.cs rename to src/SMAPI/Framework/Models/ModDataID.cs diff --git a/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs b/src/SMAPI/Framework/Models/ModDataRecord.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Models/ModDataRecord.cs rename to src/SMAPI/Framework/Models/ModDataRecord.cs diff --git a/src/StardewModdingAPI/Framework/Models/ModStatus.cs b/src/SMAPI/Framework/Models/ModStatus.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Models/ModStatus.cs rename to src/SMAPI/Framework/Models/ModStatus.cs diff --git a/src/StardewModdingAPI/Framework/Models/SConfig.cs b/src/SMAPI/Framework/Models/SConfig.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Models/SConfig.cs rename to src/SMAPI/Framework/Models/SConfig.cs diff --git a/src/StardewModdingAPI/Framework/Monitor.cs b/src/SMAPI/Framework/Monitor.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Monitor.cs rename to src/SMAPI/Framework/Monitor.cs diff --git a/src/StardewModdingAPI/Framework/Reflection/CacheEntry.cs b/src/SMAPI/Framework/Reflection/CacheEntry.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Reflection/CacheEntry.cs rename to src/SMAPI/Framework/Reflection/CacheEntry.cs diff --git a/src/StardewModdingAPI/Framework/Reflection/PrivateField.cs b/src/SMAPI/Framework/Reflection/PrivateField.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Reflection/PrivateField.cs rename to src/SMAPI/Framework/Reflection/PrivateField.cs diff --git a/src/StardewModdingAPI/Framework/Reflection/PrivateMethod.cs b/src/SMAPI/Framework/Reflection/PrivateMethod.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Reflection/PrivateMethod.cs rename to src/SMAPI/Framework/Reflection/PrivateMethod.cs diff --git a/src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs b/src/SMAPI/Framework/Reflection/PrivateProperty.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Reflection/PrivateProperty.cs rename to src/SMAPI/Framework/Reflection/PrivateProperty.cs diff --git a/src/StardewModdingAPI/Framework/Reflection/Reflector.cs b/src/SMAPI/Framework/Reflection/Reflector.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Reflection/Reflector.cs rename to src/SMAPI/Framework/Reflection/Reflector.cs diff --git a/src/StardewModdingAPI/Framework/RequestExitDelegate.cs b/src/SMAPI/Framework/RequestExitDelegate.cs similarity index 100% rename from src/StardewModdingAPI/Framework/RequestExitDelegate.cs rename to src/SMAPI/Framework/RequestExitDelegate.cs diff --git a/src/StardewModdingAPI/Framework/SContentManager.cs b/src/SMAPI/Framework/SContentManager.cs similarity index 100% rename from src/StardewModdingAPI/Framework/SContentManager.cs rename to src/SMAPI/Framework/SContentManager.cs diff --git a/src/StardewModdingAPI/Framework/SGame.cs b/src/SMAPI/Framework/SGame.cs similarity index 100% rename from src/StardewModdingAPI/Framework/SGame.cs rename to src/SMAPI/Framework/SGame.cs diff --git a/src/StardewModdingAPI/Framework/Serialisation/JsonHelper.cs b/src/SMAPI/Framework/Serialisation/JsonHelper.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Serialisation/JsonHelper.cs rename to src/SMAPI/Framework/Serialisation/JsonHelper.cs diff --git a/src/StardewModdingAPI/Framework/Serialisation/SFieldConverter.cs b/src/SMAPI/Framework/Serialisation/SFieldConverter.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Serialisation/SFieldConverter.cs rename to src/SMAPI/Framework/Serialisation/SFieldConverter.cs diff --git a/src/StardewModdingAPI/Framework/Serialisation/SelectiveStringEnumConverter.cs b/src/SMAPI/Framework/Serialisation/SelectiveStringEnumConverter.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Serialisation/SelectiveStringEnumConverter.cs rename to src/SMAPI/Framework/Serialisation/SelectiveStringEnumConverter.cs diff --git a/src/StardewModdingAPI/Framework/Utilities/ContextHash.cs b/src/SMAPI/Framework/Utilities/ContextHash.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Utilities/ContextHash.cs rename to src/SMAPI/Framework/Utilities/ContextHash.cs diff --git a/src/StardewModdingAPI/Framework/Utilities/Countdown.cs b/src/SMAPI/Framework/Utilities/Countdown.cs similarity index 100% rename from src/StardewModdingAPI/Framework/Utilities/Countdown.cs rename to src/SMAPI/Framework/Utilities/Countdown.cs diff --git a/src/StardewModdingAPI/Framework/WebApiClient.cs b/src/SMAPI/Framework/WebApiClient.cs similarity index 100% rename from src/StardewModdingAPI/Framework/WebApiClient.cs rename to src/SMAPI/Framework/WebApiClient.cs diff --git a/src/StardewModdingAPI/IAssetData.cs b/src/SMAPI/IAssetData.cs similarity index 100% rename from src/StardewModdingAPI/IAssetData.cs rename to src/SMAPI/IAssetData.cs diff --git a/src/StardewModdingAPI/IAssetDataForDictionary.cs b/src/SMAPI/IAssetDataForDictionary.cs similarity index 100% rename from src/StardewModdingAPI/IAssetDataForDictionary.cs rename to src/SMAPI/IAssetDataForDictionary.cs diff --git a/src/StardewModdingAPI/IAssetDataForImage.cs b/src/SMAPI/IAssetDataForImage.cs similarity index 100% rename from src/StardewModdingAPI/IAssetDataForImage.cs rename to src/SMAPI/IAssetDataForImage.cs diff --git a/src/StardewModdingAPI/IAssetEditor.cs b/src/SMAPI/IAssetEditor.cs similarity index 100% rename from src/StardewModdingAPI/IAssetEditor.cs rename to src/SMAPI/IAssetEditor.cs diff --git a/src/StardewModdingAPI/IAssetInfo.cs b/src/SMAPI/IAssetInfo.cs similarity index 100% rename from src/StardewModdingAPI/IAssetInfo.cs rename to src/SMAPI/IAssetInfo.cs diff --git a/src/StardewModdingAPI/IAssetLoader.cs b/src/SMAPI/IAssetLoader.cs similarity index 100% rename from src/StardewModdingAPI/IAssetLoader.cs rename to src/SMAPI/IAssetLoader.cs diff --git a/src/StardewModdingAPI/ICommandHelper.cs b/src/SMAPI/ICommandHelper.cs similarity index 100% rename from src/StardewModdingAPI/ICommandHelper.cs rename to src/SMAPI/ICommandHelper.cs diff --git a/src/StardewModdingAPI/IContentHelper.cs b/src/SMAPI/IContentHelper.cs similarity index 100% rename from src/StardewModdingAPI/IContentHelper.cs rename to src/SMAPI/IContentHelper.cs diff --git a/src/StardewModdingAPI/ICursorPosition.cs b/src/SMAPI/ICursorPosition.cs similarity index 100% rename from src/StardewModdingAPI/ICursorPosition.cs rename to src/SMAPI/ICursorPosition.cs diff --git a/src/StardewModdingAPI/IManifest.cs b/src/SMAPI/IManifest.cs similarity index 100% rename from src/StardewModdingAPI/IManifest.cs rename to src/SMAPI/IManifest.cs diff --git a/src/StardewModdingAPI/IManifestDependency.cs b/src/SMAPI/IManifestDependency.cs similarity index 100% rename from src/StardewModdingAPI/IManifestDependency.cs rename to src/SMAPI/IManifestDependency.cs diff --git a/src/StardewModdingAPI/IMod.cs b/src/SMAPI/IMod.cs similarity index 100% rename from src/StardewModdingAPI/IMod.cs rename to src/SMAPI/IMod.cs diff --git a/src/StardewModdingAPI/IModHelper.cs b/src/SMAPI/IModHelper.cs similarity index 100% rename from src/StardewModdingAPI/IModHelper.cs rename to src/SMAPI/IModHelper.cs diff --git a/src/StardewModdingAPI/IModLinked.cs b/src/SMAPI/IModLinked.cs similarity index 100% rename from src/StardewModdingAPI/IModLinked.cs rename to src/SMAPI/IModLinked.cs diff --git a/src/StardewModdingAPI/IModRegistry.cs b/src/SMAPI/IModRegistry.cs similarity index 100% rename from src/StardewModdingAPI/IModRegistry.cs rename to src/SMAPI/IModRegistry.cs diff --git a/src/StardewModdingAPI/IMonitor.cs b/src/SMAPI/IMonitor.cs similarity index 100% rename from src/StardewModdingAPI/IMonitor.cs rename to src/SMAPI/IMonitor.cs diff --git a/src/StardewModdingAPI/IPrivateField.cs b/src/SMAPI/IPrivateField.cs similarity index 100% rename from src/StardewModdingAPI/IPrivateField.cs rename to src/SMAPI/IPrivateField.cs diff --git a/src/StardewModdingAPI/IPrivateMethod.cs b/src/SMAPI/IPrivateMethod.cs similarity index 100% rename from src/StardewModdingAPI/IPrivateMethod.cs rename to src/SMAPI/IPrivateMethod.cs diff --git a/src/StardewModdingAPI/IPrivateProperty.cs b/src/SMAPI/IPrivateProperty.cs similarity index 100% rename from src/StardewModdingAPI/IPrivateProperty.cs rename to src/SMAPI/IPrivateProperty.cs diff --git a/src/StardewModdingAPI/IReflectionHelper.cs b/src/SMAPI/IReflectionHelper.cs similarity index 100% rename from src/StardewModdingAPI/IReflectionHelper.cs rename to src/SMAPI/IReflectionHelper.cs diff --git a/src/StardewModdingAPI/ISemanticVersion.cs b/src/SMAPI/ISemanticVersion.cs similarity index 100% rename from src/StardewModdingAPI/ISemanticVersion.cs rename to src/SMAPI/ISemanticVersion.cs diff --git a/src/StardewModdingAPI/ITranslationHelper.cs b/src/SMAPI/ITranslationHelper.cs similarity index 100% rename from src/StardewModdingAPI/ITranslationHelper.cs rename to src/SMAPI/ITranslationHelper.cs diff --git a/src/StardewModdingAPI/LogLevel.cs b/src/SMAPI/LogLevel.cs similarity index 100% rename from src/StardewModdingAPI/LogLevel.cs rename to src/SMAPI/LogLevel.cs diff --git a/src/StardewModdingAPI/Metadata/CoreAssets.cs b/src/SMAPI/Metadata/CoreAssets.cs similarity index 100% rename from src/StardewModdingAPI/Metadata/CoreAssets.cs rename to src/SMAPI/Metadata/CoreAssets.cs diff --git a/src/StardewModdingAPI/Metadata/InstructionMetadata.cs b/src/SMAPI/Metadata/InstructionMetadata.cs similarity index 100% rename from src/StardewModdingAPI/Metadata/InstructionMetadata.cs rename to src/SMAPI/Metadata/InstructionMetadata.cs diff --git a/src/StardewModdingAPI/Mod.cs b/src/SMAPI/Mod.cs similarity index 100% rename from src/StardewModdingAPI/Mod.cs rename to src/SMAPI/Mod.cs diff --git a/src/StardewModdingAPI/PatchMode.cs b/src/SMAPI/PatchMode.cs similarity index 100% rename from src/StardewModdingAPI/PatchMode.cs rename to src/SMAPI/PatchMode.cs diff --git a/src/StardewModdingAPI/Program.cs b/src/SMAPI/Program.cs similarity index 100% rename from src/StardewModdingAPI/Program.cs rename to src/SMAPI/Program.cs diff --git a/src/StardewModdingAPI/Properties/AssemblyInfo.cs b/src/SMAPI/Properties/AssemblyInfo.cs similarity index 100% rename from src/StardewModdingAPI/Properties/AssemblyInfo.cs rename to src/SMAPI/Properties/AssemblyInfo.cs diff --git a/src/StardewModdingAPI/SemanticVersion.cs b/src/SMAPI/SemanticVersion.cs similarity index 100% rename from src/StardewModdingAPI/SemanticVersion.cs rename to src/SMAPI/SemanticVersion.cs diff --git a/src/StardewModdingAPI/StardewModdingAPI.config.json b/src/SMAPI/StardewModdingAPI.config.json similarity index 100% rename from src/StardewModdingAPI/StardewModdingAPI.config.json rename to src/SMAPI/StardewModdingAPI.config.json diff --git a/src/StardewModdingAPI/StardewModdingAPI.csproj b/src/SMAPI/StardewModdingAPI.csproj similarity index 97% rename from src/StardewModdingAPI/StardewModdingAPI.csproj rename to src/SMAPI/StardewModdingAPI.csproj index 3721a11b..c6ff75d1 100644 --- a/src/StardewModdingAPI/StardewModdingAPI.csproj +++ b/src/SMAPI/StardewModdingAPI.csproj @@ -1,4 +1,4 @@ - + @@ -87,7 +87,7 @@ - + Properties\GlobalAssemblyInfo.cs @@ -265,13 +265,13 @@ false - + - + {10db0676-9fc1-4771-a2c8-e2519f091e49} StardewModdingAPI.AssemblyRewriters - + \ No newline at end of file diff --git a/src/StardewModdingAPI/Translation.cs b/src/SMAPI/Translation.cs similarity index 100% rename from src/StardewModdingAPI/Translation.cs rename to src/SMAPI/Translation.cs diff --git a/src/StardewModdingAPI/Utilities/SButton.cs b/src/SMAPI/Utilities/SButton.cs similarity index 100% rename from src/StardewModdingAPI/Utilities/SButton.cs rename to src/SMAPI/Utilities/SButton.cs diff --git a/src/StardewModdingAPI/Utilities/SDate.cs b/src/SMAPI/Utilities/SDate.cs similarity index 100% rename from src/StardewModdingAPI/Utilities/SDate.cs rename to src/SMAPI/Utilities/SDate.cs diff --git a/src/StardewModdingAPI/icon.ico b/src/SMAPI/icon.ico similarity index 100% rename from src/StardewModdingAPI/icon.ico rename to src/SMAPI/icon.ico diff --git a/src/StardewModdingAPI/packages.config b/src/SMAPI/packages.config similarity index 100% rename from src/StardewModdingAPI/packages.config rename to src/SMAPI/packages.config diff --git a/src/StardewModdingAPI/steam_appid.txt b/src/SMAPI/steam_appid.txt similarity index 100% rename from src/StardewModdingAPI/steam_appid.txt rename to src/SMAPI/steam_appid.txt diff --git a/src/StardewModdingAPI/unix-launcher.sh b/src/SMAPI/unix-launcher.sh similarity index 100% rename from src/StardewModdingAPI/unix-launcher.sh rename to src/SMAPI/unix-launcher.sh diff --git a/src/TrainerMod/TrainerMod.csproj b/src/TrainerMod/TrainerMod.csproj index 383e8c28..3182338c 100644 --- a/src/TrainerMod/TrainerMod.csproj +++ b/src/TrainerMod/TrainerMod.csproj @@ -1,4 +1,4 @@ - + @@ -48,7 +48,7 @@ - + Properties\GlobalAssemblyInfo.cs @@ -85,7 +85,7 @@ - + {f1a573b0-f436-472c-ae29-0b91ea6b9f8f} StardewModdingAPI False @@ -98,5 +98,5 @@ - + \ No newline at end of file From a050dcede6a32213665922aefefbc1565ffdf06d Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 7 Oct 2017 23:16:25 -0400 Subject: [PATCH 55/57] move technical docs out of README --- docs/README.md | 140 ++--------------------------------------- docs/technical-docs.md | 137 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+), 136 deletions(-) create mode 100644 docs/technical-docs.md diff --git a/docs/README.md b/docs/README.md index 01dd77ce..37aa50fe 100644 --- a/docs/README.md +++ b/docs/README.md @@ -40,140 +40,8 @@ doesn't change any of your game files. It serves five main purposes: crashing the game, and makes it possible to troubleshoot errors in the game itself that would otherwise show a generic 'program has stopped working' type of message._ -## For players -* [Intro & FAQs](http://stardewvalleywiki.com/Modding:Player_FAQs) -* [Installing SMAPI](http://stardewvalleywiki.com/Modding:Installing_SMAPI) -* [Release notes](release-notes.md#release-notes) -* Need help? Come [chat on Discord](https://discord.gg/KCJHWhX) or [post in the support forums](http://community.playstarbound.com/threads/smapi-stardew-modding-api.108375/). - _Please don't submit issues on GitHub for support questions._ - -## For mod developers -* [Modding documentation](http://stardewvalleywiki.com/Modding:Index) -* [Release notes](release-notes.md#release-notes) +## Documentation +* [For players & mod creators](http://stardewvalleywiki.com/Modding:Index) +* [Release notes](release-notes.md) +* [Technical docs](technical-docs.md) * [Chat on Discord](https://discord.gg/KCJHWhX) with SMAPI developers and other modders - -## For SMAPI developers -_This section is about compiling SMAPI itself from source. If you don't know what that means, this -section isn't relevant to you; see the previous sections to use or create mods._ - -### Compiling from source -Using an official SMAPI release is recommended for most users. - -SMAPI uses some C# 7 code, so you'll need at least -[Visual Studio 2017](https://www.visualstudio.com/vs/community/) on Windows, -[MonoDevelop 7.0](http://www.monodevelop.com/) on Linux, -[Visual Studio 2017 for Mac](https://www.visualstudio.com/vs/visual-studio-mac/), or an equivalent -IDE to compile it. It uses build configuration derived from the -[crossplatform mod config](https://github.com/Pathoschild/Stardew.ModBuildConfig#readme) to detect -your current OS automatically and load the correct references. Compile output will be placed in a -`bin` folder at the root of the git repository. - -### Debugging a local build -Rebuilding the solution in debug mode will copy the SMAPI files into your game folder. Starting -the `StardewModdingAPI` project with debugging from Visual Studio (on Mac or Windows) will launch -SMAPI with the debugger attached, so you can intercept errors and step through the code being -executed. This doesn't work in MonoDevelop on Linux, unfortunately. - -### Preparing a release -To prepare a crossplatform SMAPI release, you'll need to compile it on two platforms. See -[crossplatforming info](http://stardewvalleywiki.com/Modding:Creating_a_SMAPI_mod#Test_on_all_platforms) -on the wiki for the first-time setup. - -1. Update the version number in `GlobalAssemblyInfo.cs` and `Constants::Version`. Make sure you use a - [semantic version](http://semver.org). Recommended format: - - build type | format | example - :--------- | :-------------------------------- | :------ - dev build | `-alpha.` | `2.0-alpha.20171230` - prerelease | `-prerelease.` | `2.0-prerelease.2` - release | `` | `2.0` - -2. In Windows: - 1. Rebuild the solution in _Release_ mode. - 2. Rename `bin/Packaged` to `SMAPI ` (e.g. `SMAPI 2.0`). - 2. Transfer the `SMAPI ` folder to Linux or Mac. - _This adds the installer executable and Windows files. We'll do the rest in Linux or Mac, - since we need to set Unix file permissions that Windows won't save._ - -2. In Linux or Mac: - 1. Rebuild the solution in _Release_ mode. - 2. Copy `bin/internal/Packaged/Mono` into the `SMAPI ` folder. - 3. If you did everything right so far, you should have a folder like this: - - ``` - SMAPI-2.x/ - install.exe - readme.txt - internal/ - Mono/ - Mods/* - Mono.Cecil.dll - Newtonsoft.Json.dll - StardewModdingAPI - StardewModdingAPI.AssemblyRewriters.dll - StardewModdingAPI.config.json - StardewModdingAPI.exe - StardewModdingAPI.pdb - StardewModdingAPI.xml - steam_appid.txt - System.Numerics.dll - System.Runtime.Caching.dll - System.ValueTuple.dll - Windows/ - Mods/* - Mono.Cecil.dll - Newtonsoft.Json.dll - StardewModdingAPI.AssemblyRewriters.dll - StardewModdingAPI.config.json - StardewModdingAPI.exe - StardewModdingAPI.pdb - StardewModdingAPI.xml - System.ValueTuple.dll - steam_appid.txt - ``` - 4. Open a terminal in the `SMAPI ` folder and run `chmod 755 internal/Mono/StardewModdingAPI`. - 5. Copy & paste the `SMAPI ` folder as `SMAPI for developers`. - 6. In the `SMAPI ` folder... - * edit `internal/Mono/StardewModdingAPI.config.json` and - `internal/Windows/StardewModdingAPI.config.json` to disable developer mode; - * delete `internal/Windows/StardewModdingAPI.xml`. - 7. Compress the two folders into `SMAPI .zip` and `SMAPI for developers.zip`. - -## Advanced usage -### Configuration file -You can customise the SMAPI behaviour by editing the `StardewModdingAPI.config.json` file in your -game folder. - -Basic fields: - -field | purpose ------------------ | ------- -`DeveloperMode` | Default `false` (except in _SMAPI for developers_ releases). Whether to enable features intended for mod developers (mainly more detailed console logging). -`CheckForUpdates` | Default `true`. Whether SMAPI should check for a newer version when you load the game. If a new version is available, a small message will appear in the console. This doesn't affect the load time even if your connection is offline or slow, because it happens in the background. -`VerboseLogging` | Default `false`. Whether SMAPI should log more information about the game context. -`ModData` | Internal metadata about SMAPI mods. Changing this isn't recommended and may destabilise your game. See documentation in the file. - -### Command-line arguments -The SMAPI installer recognises three command-line arguments: - -argument | purpose --------- | ------- -`--install` | Preselects the install action, skipping the prompt asking what the user wants to do. -`--uninstall` | Preselects the uninstall action, skipping the prompt asking what the user wants to do. -`--game-path "path"` | Specifies the full path to the folder containing the Stardew Valley executable, skipping automatic detection and any prompt to choose a path. If the path is not valid, the installer displays an error. - -SMAPI itself recognises two arguments, but these are intended for internal use or testing and may -change without warning. - -argument | purpose --------- | ------- -`--log-path "path"` | The relative or absolute path of the log file SMAPI should write. -`--no-terminal` | SMAPI won't write anything to the console window. (Messages will still be written to the log file.) - -### Compile flags -SMAPI uses a small number of conditional compilation constants, which you can set by editing the -`` element in `StardewModdingAPI.csproj`. Supported constants: - -flag | purpose ----- | ------- -`SMAPI_FOR_WINDOWS` | Indicates that SMAPI is being compiled on Windows for players on Windows. Set automatically in `crossplatform.targets`. diff --git a/docs/technical-docs.md b/docs/technical-docs.md new file mode 100644 index 00000000..d37d327d --- /dev/null +++ b/docs/technical-docs.md @@ -0,0 +1,137 @@ +← [README](README.md) + +This file provides more technical documentation about SMAPI. If you only want to use or create +mods, this section isn't relevant to you; see the main README to use or create mods. + +## Contents +* [Development](#development) + * [Compiling from source](#compiling-from-source) + * [Debugging a local build](#debugging-a-local-build) + * [Preparing a release](#preparing-a-release) +* [Customisation](#customisation) + * [Configuration file](#configuration-file) + * [Command-line arguments](#command-line-arguments) + * [Compile flags](#compile-flags) + +## Development +### Compiling from source +Using an official SMAPI release is recommended for most users. + +SMAPI uses some C# 7 code, so you'll need at least +[Visual Studio 2017](https://www.visualstudio.com/vs/community/) on Windows, +[MonoDevelop 7.0](http://www.monodevelop.com/) on Linux, +[Visual Studio 2017 for Mac](https://www.visualstudio.com/vs/visual-studio-mac/), or an equivalent +IDE to compile it. It uses build configuration derived from the +[crossplatform mod config](https://github.com/Pathoschild/Stardew.ModBuildConfig#readme) to detect +your current OS automatically and load the correct references. Compile output will be placed in a +`bin` folder at the root of the git repository. + +### Debugging a local build +Rebuilding the solution in debug mode will copy the SMAPI files into your game folder. Starting +the `StardewModdingAPI` project with debugging from Visual Studio (on Mac or Windows) will launch +SMAPI with the debugger attached, so you can intercept errors and step through the code being +executed. This doesn't work in MonoDevelop on Linux, unfortunately. + +### Preparing a release +To prepare a crossplatform SMAPI release, you'll need to compile it on two platforms. See +[crossplatforming info](http://stardewvalleywiki.com/Modding:Creating_a_SMAPI_mod#Test_on_all_platforms) +on the wiki for the first-time setup. + +1. Update the version number in `GlobalAssemblyInfo.cs` and `Constants::Version`. Make sure you use a + [semantic version](http://semver.org). Recommended format: + + build type | format | example + :--------- | :-------------------------------- | :------ + dev build | `-alpha.` | `2.0-alpha.20171230` + prerelease | `-prerelease.` | `2.0-prerelease.2` + release | `` | `2.0` + +2. In Windows: + 1. Rebuild the solution in _Release_ mode. + 2. Rename `bin/Packaged` to `SMAPI ` (e.g. `SMAPI 2.0`). + 2. Transfer the `SMAPI ` folder to Linux or Mac. + _This adds the installer executable and Windows files. We'll do the rest in Linux or Mac, + since we need to set Unix file permissions that Windows won't save._ + +2. In Linux or Mac: + 1. Rebuild the solution in _Release_ mode. + 2. Copy `bin/internal/Packaged/Mono` into the `SMAPI ` folder. + 3. If you did everything right so far, you should have a folder like this: + + ``` + SMAPI-2.x/ + install.exe + readme.txt + internal/ + Mono/ + Mods/* + Mono.Cecil.dll + Newtonsoft.Json.dll + StardewModdingAPI + StardewModdingAPI.AssemblyRewriters.dll + StardewModdingAPI.config.json + StardewModdingAPI.exe + StardewModdingAPI.pdb + StardewModdingAPI.xml + steam_appid.txt + System.Numerics.dll + System.Runtime.Caching.dll + System.ValueTuple.dll + Windows/ + Mods/* + Mono.Cecil.dll + Newtonsoft.Json.dll + StardewModdingAPI.AssemblyRewriters.dll + StardewModdingAPI.config.json + StardewModdingAPI.exe + StardewModdingAPI.pdb + StardewModdingAPI.xml + System.ValueTuple.dll + steam_appid.txt + ``` + 4. Open a terminal in the `SMAPI ` folder and run `chmod 755 internal/Mono/StardewModdingAPI`. + 5. Copy & paste the `SMAPI ` folder as `SMAPI for developers`. + 6. In the `SMAPI ` folder... + * edit `internal/Mono/StardewModdingAPI.config.json` and + `internal/Windows/StardewModdingAPI.config.json` to disable developer mode; + * delete `internal/Windows/StardewModdingAPI.xml`. + 7. Compress the two folders into `SMAPI .zip` and `SMAPI for developers.zip`. + +## Customisation +### Configuration file +You can customise the SMAPI behaviour by editing the `StardewModdingAPI.config.json` file in your +game folder. + +Basic fields: + +field | purpose +----------------- | ------- +`DeveloperMode` | Default `false` (except in _SMAPI for developers_ releases). Whether to enable features intended for mod developers (mainly more detailed console logging). +`CheckForUpdates` | Default `true`. Whether SMAPI should check for a newer version when you load the game. If a new version is available, a small message will appear in the console. This doesn't affect the load time even if your connection is offline or slow, because it happens in the background. +`VerboseLogging` | Default `false`. Whether SMAPI should log more information about the game context. +`ModData` | Internal metadata about SMAPI mods. Changing this isn't recommended and may destabilise your game. See documentation in the file. + +### Command-line arguments +The SMAPI installer recognises three command-line arguments: + +argument | purpose +-------- | ------- +`--install` | Preselects the install action, skipping the prompt asking what the user wants to do. +`--uninstall` | Preselects the uninstall action, skipping the prompt asking what the user wants to do. +`--game-path "path"` | Specifies the full path to the folder containing the Stardew Valley executable, skipping automatic detection and any prompt to choose a path. If the path is not valid, the installer displays an error. + +SMAPI itself recognises two arguments, but these are intended for internal use or testing and may +change without warning. + +argument | purpose +-------- | ------- +`--log-path "path"` | The relative or absolute path of the log file SMAPI should write. +`--no-terminal` | SMAPI won't write anything to the console window. (Messages will still be written to the log file.) + +### Compile flags +SMAPI uses a small number of conditional compilation constants, which you can set by editing the +`` element in `StardewModdingAPI.csproj`. Supported constants: + +flag | purpose +---- | ------- +`SMAPI_FOR_WINDOWS` | Indicates that SMAPI is being compiled on Windows for players on Windows. Set automatically in `crossplatform.targets`. From a0fc392002b98ffe803d48be70cd272e22706194 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 7 Oct 2017 23:18:06 -0400 Subject: [PATCH 56/57] update readme --- docs/README.md | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/docs/README.md b/docs/README.md index 37aa50fe..2adf2bf0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,21 +1,9 @@ ![](docs/imgs/SMAPI.png) -## Contents -* [What is SMAPI?](#what-is-smapi) -* **[For players](#for-players)** -* **[For mod developers](#for-mod-developers)** -* [For SMAPI developers](#for-smapi-developers) - * [Compiling from source](#compiling-from-source) - * [Debugging a local build](#debugging-a-local-build) - * [Preparing a release](#preparing-a-release) -* [Advanced usage](#advanced-usage) - * [Configuration file](#configuration-file) - * [Command-line arguments](#command-line-arguments) - ## What is SMAPI? -**SMAPI** is an [open-source](LICENSE) modding API for [Stardew Valley](http://stardewvalley.net/) +**SMAPI** is an [open-source](LICENSE.md) modding API for [Stardew Valley](http://stardewvalley.net/) that lets you play the game with mods. It's safely installed alongside the game's executable, and -doesn't change any of your game files. It serves five main purposes: +doesn't change any of your game files. It serves six main purposes: 1. **Load mods into the game.** _SMAPI loads mods when the game is starting up so they can interact with it. (Code mods aren't @@ -40,6 +28,10 @@ doesn't change any of your game files. It serves five main purposes: crashing the game, and makes it possible to troubleshoot errors in the game itself that would otherwise show a generic 'program has stopped working' type of message._ +6. **Provide update checks.** + _SMAPI automatically checks for new versions of your installed mods, and notifies you when any + are available._ + ## Documentation * [For players & mod creators](http://stardewvalleywiki.com/Modding:Index) * [Release notes](release-notes.md) From 5928f5f86c4493ddb6b89bce0b7d0fb73a884c09 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 7 Oct 2017 23:19:23 -0400 Subject: [PATCH 57/57] remove readme header image --- docs/README.md | 3 --- docs/imgs/SMAPI.png | Bin 252371 -> 0 bytes 2 files changed, 3 deletions(-) delete mode 100644 docs/imgs/SMAPI.png diff --git a/docs/README.md b/docs/README.md index 2adf2bf0..92a39dbe 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,3 @@ -![](docs/imgs/SMAPI.png) - -## What is SMAPI? **SMAPI** is an [open-source](LICENSE.md) modding API for [Stardew Valley](http://stardewvalley.net/) that lets you play the game with mods. It's safely installed alongside the game's executable, and doesn't change any of your game files. It serves six main purposes: diff --git a/docs/imgs/SMAPI.png b/docs/imgs/SMAPI.png deleted file mode 100644 index 50f375b69b83d6f74f1f866348f5860e252e70a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252371 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

;URPsez7&S<2uR5UoVlX?<*@1cusLNsH*W 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�pv#YZ**~geuUN%>Y4(a81J4YD8jX@z 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 XzRenCCLhLL;wE)bnnP;