From 0c1bca3db044b6f228538f1738d52c31e4481e48 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 17 Feb 2018 18:51:09 -0500 Subject: validate that mod APIs are public (#435) --- docs/release-notes.md | 1 + src/SMAPI/Program.cs | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/docs/release-notes.md b/docs/release-notes.md index 228fec82..f0a7a718 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -9,6 +9,7 @@ * For modders: * Fixed deadlock in rare cases when injecting a file with an asset loader. + * Fixed unhelpful error when a mod exposes a non-public API. * For SMAPI developers: * Overhauled `StardewModdingApi.config.json`'s `ModData` format to be more concise, reduce the memory footprint, and support versioning/defaulting more fields. diff --git a/src/SMAPI/Program.cs b/src/SMAPI/Program.cs index 88e27768..fd2bb340 100644 --- a/src/SMAPI/Program.cs +++ b/src/SMAPI/Program.cs @@ -804,6 +804,12 @@ namespace StardewModdingAPI try { object api = metadata.Mod.GetApi(); + if (api != null && !api.GetType().IsPublic) + { + api = null; + this.Monitor.Log($"{metadata.DisplayName} provides an API instance with a non-public type. This isn't currently supported, so the API won't be available to other mods.", LogLevel.Warn); + } + if (api != null) this.Monitor.Log($" Found mod-provided API ({api.GetType().FullName}).", LogLevel.Trace); metadata.SetApi(api); -- cgit