summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-06-18 22:08:56 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-06-18 22:08:56 -0400
commitb46776a4fbabe765b81751f8c4984cdd8a207419 (patch)
tree1f0cfbec3f78c1e14a8d6d232a81b48207aa488f
parent3e50c90230bf4f7aa4efb69b3db47dddd1e43750 (diff)
downloadSMAPI-b46776a4fbabe765b81751f8c4984cdd8a207419.tar.gz
SMAPI-b46776a4fbabe765b81751f8c4984cdd8a207419.tar.bz2
SMAPI-b46776a4fbabe765b81751f8c4984cdd8a207419.zip
enable string versions in manifest.json (#308)
-rw-r--r--release-notes.md1
-rw-r--r--src/StardewModdingAPI/Framework/Serialisation/ManifestFieldConverter.cs25
2 files changed, 20 insertions, 6 deletions
diff --git a/release-notes.md b/release-notes.md
index 8a8aa46e..851e6abe 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -5,6 +5,7 @@
See [log](https://github.com/Pathoschild/SMAPI/compare/1.10...2.0).
For mod developers:
+* The manifest.json version can now be specified as a string.
* Added `ContentEvents.AssetLoading` event with a helper which lets you intercept the XNB content
load, and dynamically adjust or replace the content being loaded (including support for patching
images).
diff --git a/src/StardewModdingAPI/Framework/Serialisation/ManifestFieldConverter.cs b/src/StardewModdingAPI/Framework/Serialisation/ManifestFieldConverter.cs
index 7acb5fd0..7a59f134 100644
--- a/src/StardewModdingAPI/Framework/Serialisation/ManifestFieldConverter.cs
+++ b/src/StardewModdingAPI/Framework/Serialisation/ManifestFieldConverter.cs
@@ -36,12 +36,25 @@ namespace StardewModdingAPI.Framework.Serialisation
// semantic version
if (objectType == typeof(ISemanticVersion))
{
- JObject obj = JObject.Load(reader);
- int major = obj.Value<int>(nameof(ISemanticVersion.MajorVersion));
- int minor = obj.Value<int>(nameof(ISemanticVersion.MinorVersion));
- int patch = obj.Value<int>(nameof(ISemanticVersion.PatchVersion));
- string build = obj.Value<string>(nameof(ISemanticVersion.Build));
- return new SemanticVersion(major, minor, patch, build);
+ JToken token = JToken.Load(reader);
+ switch (token.Type)
+ {
+ case JTokenType.Object:
+ {
+ JObject obj = (JObject)token;
+ int major = obj.Value<int>(nameof(ISemanticVersion.MajorVersion));
+ int minor = obj.Value<int>(nameof(ISemanticVersion.MinorVersion));
+ int patch = obj.Value<int>(nameof(ISemanticVersion.PatchVersion));
+ string build = obj.Value<string>(nameof(ISemanticVersion.Build));
+ return new SemanticVersion(major, minor, patch, build);
+ }
+
+ case JTokenType.String:
+ return new SemanticVersion(token.Value<string>());
+
+ default:
+ throw new FormatException($"Can't parse {token.Type} token as a semantic version, must be an object or string.");
+ }
}
// manifest dependency