summaryrefslogtreecommitdiff
path: root/src/SMAPI
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI')
-rw-r--r--src/SMAPI/Constants.cs48
-rw-r--r--src/SMAPI/Events/ChangeType.cs2
-rw-r--r--src/SMAPI/Events/OneSecondUpdateTickedEventArgs.cs2
-rw-r--r--src/SMAPI/Events/OneSecondUpdateTickingEventArgs.cs2
-rw-r--r--src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs2
-rw-r--r--src/SMAPI/Events/UnvalidatedUpdateTickingEventArgs.cs2
-rw-r--r--src/SMAPI/Events/UpdateTickedEventArgs.cs2
-rw-r--r--src/SMAPI/Events/UpdateTickingEventArgs.cs2
-rw-r--r--src/SMAPI/Events/WarpedEventArgs.cs1
-rw-r--r--src/SMAPI/Framework/CommandManager.cs1
-rw-r--r--src/SMAPI/Framework/Content/AssetData.cs7
-rw-r--r--src/SMAPI/Framework/Content/AssetDataForImage.cs13
-rw-r--r--src/SMAPI/Framework/Content/AssetDataForMap.cs5
-rw-r--r--src/SMAPI/Framework/Content/AssetDataForObject.cs15
-rw-r--r--src/SMAPI/Framework/Content/AssetInfo.cs9
-rw-r--r--src/SMAPI/Framework/ContentCoordinator.cs5
-rw-r--r--src/SMAPI/Framework/ContentManagers/BaseContentManager.cs2
-rw-r--r--src/SMAPI/Framework/ContentManagers/ModContentManager.cs6
-rw-r--r--src/SMAPI/Framework/ContentPack.cs34
-rw-r--r--src/SMAPI/Framework/CursorPosition.cs11
-rw-r--r--src/SMAPI/Framework/DeprecationLevel.cs2
-rw-r--r--src/SMAPI/Framework/DeprecationManager.cs1
-rw-r--r--src/SMAPI/Framework/Events/EventManager.cs2
-rw-r--r--src/SMAPI/Framework/Events/ManagedEvent.cs43
-rw-r--r--src/SMAPI/Framework/Events/ModGameLoopEvents.cs1
-rw-r--r--src/SMAPI/Framework/GameVersion.cs2
-rw-r--r--src/SMAPI/Framework/IModMetadata.cs14
-rw-r--r--src/SMAPI/Framework/Input/GamePadStateBuilder.cs31
-rw-r--r--src/SMAPI/Framework/Input/IInputStateBuilder.cs4
-rw-r--r--src/SMAPI/Framework/Input/KeyboardStateBuilder.cs17
-rw-r--r--src/SMAPI/Framework/Input/MouseStateBuilder.cs39
-rw-r--r--src/SMAPI/Framework/Input/SInputState.cs157
-rw-r--r--src/SMAPI/Framework/InternalExtensions.cs4
-rw-r--r--src/SMAPI/Framework/Logging/ConsoleInterceptionManager.cs59
-rw-r--r--src/SMAPI/Framework/Logging/InterceptingTextWriter.cs55
-rw-r--r--src/SMAPI/Framework/Logging/LogManager.cs600
-rw-r--r--src/SMAPI/Framework/ModHelpers/BaseHelper.cs4
-rw-r--r--src/SMAPI/Framework/ModHelpers/CommandHelper.cs13
-rw-r--r--src/SMAPI/Framework/ModHelpers/ContentHelper.cs44
-rw-r--r--src/SMAPI/Framework/ModHelpers/ContentPackHelper.cs13
-rw-r--r--src/SMAPI/Framework/ModHelpers/DataHelper.cs34
-rw-r--r--src/SMAPI/Framework/ModHelpers/InputHelper.cs14
-rw-r--r--src/SMAPI/Framework/ModHelpers/ModHelper.cs32
-rw-r--r--src/SMAPI/Framework/ModHelpers/ModRegistryHelper.cs15
-rw-r--r--src/SMAPI/Framework/ModHelpers/MultiplayerHelper.cs19
-rw-r--r--src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs34
-rw-r--r--src/SMAPI/Framework/ModHelpers/TranslationHelper.cs13
-rw-r--r--src/SMAPI/Framework/ModLoading/AssemblyLoader.cs31
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/EventFinder.cs10
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/FieldFinder.cs10
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/MethodFinder.cs10
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/PropertyFinder.cs10
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/ReferenceToMemberWithUnexpectedTypeFinder.cs10
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/ReferenceToMissingMemberFinder.cs17
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/TypeAssemblyFinder.cs6
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/TypeFinder.cs6
-rw-r--r--src/SMAPI/Framework/ModLoading/Framework/BaseInstructionHandler.cs23
-rw-r--r--src/SMAPI/Framework/ModLoading/Framework/RecursiveRewriter.cs67
-rw-r--r--src/SMAPI/Framework/ModLoading/Framework/RewriteHelper.cs24
-rw-r--r--src/SMAPI/Framework/ModLoading/IInstructionHandler.cs3
-rw-r--r--src/SMAPI/Framework/ModLoading/ModFailReason.cs27
-rw-r--r--src/SMAPI/Framework/ModLoading/ModMetadata.cs95
-rw-r--r--src/SMAPI/Framework/ModLoading/ModResolver.cs48
-rw-r--r--src/SMAPI/Framework/ModLoading/Rewriters/FieldReplaceRewriter.cs35
-rw-r--r--src/SMAPI/Framework/ModLoading/Rewriters/FieldToPropertyRewriter.cs65
-rw-r--r--src/SMAPI/Framework/ModLoading/Rewriters/Harmony1AssemblyRewriter.cs13
-rw-r--r--src/SMAPI/Framework/ModLoading/Rewriters/HeuristicFieldRewriter.cs106
-rw-r--r--src/SMAPI/Framework/ModLoading/Rewriters/HeuristicMethodRewriter.cs109
-rw-r--r--src/SMAPI/Framework/ModLoading/Rewriters/MethodParentRewriter.cs9
-rw-r--r--src/SMAPI/Framework/ModLoading/Rewriters/StaticFieldToConstantRewriter.cs74
-rw-r--r--src/SMAPI/Framework/ModLoading/Rewriters/TypeReferenceRewriter.cs6
-rw-r--r--src/SMAPI/Framework/Models/SConfig.cs4
-rw-r--r--src/SMAPI/Framework/Monitor.cs32
-rw-r--r--src/SMAPI/Framework/Networking/MultiplayerPeer.cs18
-rw-r--r--src/SMAPI/Framework/Networking/MultiplayerPeerMod.cs6
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedField.cs7
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedMethod.cs9
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedProperty.cs7
-rw-r--r--src/SMAPI/Framework/Reflection/Reflector.cs2
-rw-r--r--src/SMAPI/Framework/Rendering/SXnaDisplayDevice.cs8
-rw-r--r--src/SMAPI/Framework/RequestExitDelegate.cs2
-rw-r--r--src/SMAPI/Framework/SCore.cs1443
-rw-r--r--src/SMAPI/Framework/SGame.cs2008
-rw-r--r--src/SMAPI/Framework/SGameConstructorHack.cs43
-rw-r--r--src/SMAPI/Framework/StateTracking/Snapshots/PlayerSnapshot.cs1
-rw-r--r--src/SMAPI/Framework/Utilities/Countdown.cs2
-rw-r--r--src/SMAPI/Framework/WatcherCore.cs7
-rw-r--r--src/SMAPI/IAssetDataForMap.cs2
-rw-r--r--src/SMAPI/IReflectedField.cs2
-rw-r--r--src/SMAPI/IReflectedMethod.cs2
-rw-r--r--src/SMAPI/Metadata/CoreAssetPropagator.cs45
-rw-r--r--src/SMAPI/Metadata/InstructionMetadata.cs5
-rw-r--r--src/SMAPI/PatchMode.cs2
-rw-r--r--src/SMAPI/Patches/DialogueErrorPatch.cs6
-rw-r--r--src/SMAPI/Patches/EventErrorPatch.cs11
-rw-r--r--src/SMAPI/Patches/LoadContextPatch.cs5
-rw-r--r--src/SMAPI/Patches/LoadErrorPatch.cs5
-rw-r--r--src/SMAPI/Patches/ObjectErrorPatch.cs5
-rw-r--r--src/SMAPI/Patches/ScheduleErrorPatch.cs5
-rw-r--r--src/SMAPI/Program.cs31
-rw-r--r--src/SMAPI/Properties/AssemblyInfo.cs5
-rw-r--r--src/SMAPI/SButton.cs2
-rw-r--r--src/SMAPI/SMAPI.config.json9
-rw-r--r--src/SMAPI/SMAPI.csproj3
-rw-r--r--src/SMAPI/SemanticVersion.cs47
-rw-r--r--src/SMAPI/Utilities/PathUtilities.cs45
-rw-r--r--src/SMAPI/Utilities/SDate.cs6
107 files changed, 3003 insertions, 3090 deletions
diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs
index c1c99150..858e832f 100644
--- a/src/SMAPI/Constants.cs
+++ b/src/SMAPI/Constants.cs
@@ -5,11 +5,42 @@ using System.Reflection;
using StardewModdingAPI.Enums;
using StardewModdingAPI.Framework;
using StardewModdingAPI.Framework.ModLoading;
+using StardewModdingAPI.Toolkit.Framework;
using StardewModdingAPI.Toolkit.Utilities;
using StardewValley;
namespace StardewModdingAPI
{
+ /// <summary>Contains constants that are accessed before the game itself has been loaded.</summary>
+ /// <remarks>Most code should use <see cref="Constants"/> instead of this class directly.</remarks>
+ internal static class EarlyConstants
+ {
+ //
+ // Note: this class *must not* depend on any external DLL beyond .NET Framework itself.
+ // That includes the game or SMAPI toolkit, since it's accessed before those are loaded.
+ //
+ // Adding an external dependency may seem to work in some cases, but will prevent SMAPI
+ // from showing a human-readable error if the game isn't available. To test this, just
+ // rename "Stardew Valley.exe" in the game folder; you should see an error like "Oops!
+ // SMAPI can't find the game", not a technical exception.
+ //
+
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>The path to the game folder.</summary>
+ public static string ExecutionPath { get; } = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+
+ /// <summary>The absolute path to the folder containing SMAPI's internal files.</summary>
+ public static readonly string InternalFilesPath = Path.Combine(EarlyConstants.ExecutionPath, "smapi-internal");
+
+ /// <summary>The target game platform.</summary>
+ internal static GamePlatform Platform { get; } = (GamePlatform)Enum.Parse(typeof(GamePlatform), LowLevelEnvironmentUtility.DetectPlatform());
+
+ /// <summary>The game's assembly name.</summary>
+ internal static string GameAssemblyName => EarlyConstants.Platform == GamePlatform.Windows ? "Stardew Valley" : "StardewValley";
+ }
+
/// <summary>Contains SMAPI's constants and assumptions.</summary>
public static class Constants
{
@@ -20,19 +51,19 @@ namespace StardewModdingAPI
** Public
****/
/// <summary>SMAPI's current semantic version.</summary>
- public static ISemanticVersion ApiVersion { get; } = new Toolkit.SemanticVersion("3.6.2");
+ public static ISemanticVersion ApiVersion { get; } = new Toolkit.SemanticVersion("3.7.0");
/// <summary>The minimum supported version of Stardew Valley.</summary>
public static ISemanticVersion MinimumGameVersion { get; } = new GameVersion("1.4.1");
/// <summary>The maximum supported version of Stardew Valley.</summary>
- public static ISemanticVersion MaximumGameVersion { get; } = null;
+ public static ISemanticVersion MaximumGameVersion { get; } = new GameVersion("1.4.5");
/// <summary>The target game platform.</summary>
- public static GamePlatform TargetPlatform => (GamePlatform)Constants.Platform;
+ public static GamePlatform TargetPlatform { get; } = EarlyConstants.Platform;
/// <summary>The path to the game folder.</summary>
- public static string ExecutionPath { get; } = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ public static string ExecutionPath { get; } = EarlyConstants.ExecutionPath;
/// <summary>The directory path containing Stardew Valley's app data.</summary>
public static string DataPath { get; } = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley");
@@ -67,7 +98,7 @@ namespace StardewModdingAPI
internal const string GamePerformanceCounterName = "<StardewValley>";
/// <summary>The absolute path to the folder containing SMAPI's internal files.</summary>
- internal static readonly string InternalFilesPath = Program.DllSearchPath;
+ internal static readonly string InternalFilesPath = EarlyConstants.InternalFilesPath;
/// <summary>The file path for the SMAPI configuration file.</summary>
internal static string ApiConfigPath => Path.Combine(Constants.InternalFilesPath, "config.json");
@@ -105,11 +136,8 @@ namespace StardewModdingAPI
/// <summary>The game's current semantic version.</summary>
internal static ISemanticVersion GameVersion { get; } = new GameVersion(Game1.version);
- /// <summary>The target game platform.</summary>
- internal static Platform Platform { get; } = EnvironmentUtility.DetectPlatform();
-
- /// <summary>The game's assembly name.</summary>
- internal static string GameAssemblyName => Constants.Platform == Platform.Windows ? "Stardew Valley" : "StardewValley";
+ /// <summary>The target game platform as a SMAPI toolkit constant.</summary>
+ internal static Platform Platform { get; } = (Platform)Constants.TargetPlatform;
/// <summary>The language code for non-translated mod assets.</summary>
internal static LocalizedContentManager.LanguageCode DefaultLanguage { get; } = LocalizedContentManager.LanguageCode.en;
diff --git a/src/SMAPI/Events/ChangeType.cs b/src/SMAPI/Events/ChangeType.cs
index 4b207f08..0fc717df 100644
--- a/src/SMAPI/Events/ChangeType.cs
+++ b/src/SMAPI/Events/ChangeType.cs
@@ -12,4 +12,4 @@ namespace StardewModdingAPI.Events
/// <summary>The stack size changed.</summary>
StackChange
}
-} \ No newline at end of file
+}
diff --git a/src/SMAPI/Events/OneSecondUpdateTickedEventArgs.cs b/src/SMAPI/Events/OneSecondUpdateTickedEventArgs.cs
index 48e08e5e..608bdc69 100644
--- a/src/SMAPI/Events/OneSecondUpdateTickedEventArgs.cs
+++ b/src/SMAPI/Events/OneSecondUpdateTickedEventArgs.cs
@@ -10,7 +10,7 @@ namespace StardewModdingAPI.Events
** Accessors
*********/
/// <summary>The number of ticks elapsed since the game started, including the current tick.</summary>
- public uint Ticks => SGame.TicksElapsed;
+ public uint Ticks => SCore.TicksElapsed;
/*********
diff --git a/src/SMAPI/Events/OneSecondUpdateTickingEventArgs.cs b/src/SMAPI/Events/OneSecondUpdateTickingEventArgs.cs
index 58cf802a..f30a2245 100644
--- a/src/SMAPI/Events/OneSecondUpdateTickingEventArgs.cs
+++ b/src/SMAPI/Events/OneSecondUpdateTickingEventArgs.cs
@@ -10,7 +10,7 @@ namespace StardewModdingAPI.Events
** Accessors
*********/
/// <summary>The number of ticks elapsed since the game started, excluding the upcoming tick.</summary>
- public uint Ticks => SGame.TicksElapsed;
+ public uint Ticks => SCore.TicksElapsed;
/*********
diff --git a/src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs b/src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs
index 258e2f99..ff635787 100644
--- a/src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs
+++ b/src/SMAPI/Events/UnvalidatedUpdateTickedEventArgs.cs
@@ -10,7 +10,7 @@ namespace StardewModdingAPI.Events
** Accessors
*********/
/// <summary>The number of ticks elapsed since the game started, including the current tick.</summary>
- public uint Ticks => SGame.TicksElapsed;
+ public uint Ticks => SCore.TicksElapsed;
<