check minimum compatibility earlier, move some initialising after game starts

This commit is contained in:
Jesse Plamondon-Willard 2018-06-09 23:21:35 -04:00
parent 248ba90b75
commit e27ada0f61
1 changed files with 49 additions and 49 deletions

View File

@ -127,6 +127,10 @@ namespace StardewModdingAPI
/// <param name="writeToConsole">Whether to output log messages to the console.</param> /// <param name="writeToConsole">Whether to output log messages to the console.</param>
public Program(bool writeToConsole) public Program(bool writeToConsole)
{ {
// init paths
this.VerifyPath(Constants.ModPath);
this.VerifyPath(Constants.LogDir);
// init log file // init log file
this.PurgeLogFiles(); this.PurgeLogFiles();
string logPath = this.GetLogPath(); string logPath = this.GetLogPath();
@ -142,38 +146,29 @@ namespace StardewModdingAPI
}; };
this.EventManager = new EventManager(this.Monitor, this.ModRegistry); this.EventManager = new EventManager(this.Monitor, this.ModRegistry);
// init logging
this.Monitor.Log($"SMAPI {Constants.ApiVersion} with Stardew Valley {Constants.GameVersion} on {EnvironmentUtility.GetFriendlyPlatformName(Constants.Platform)}", LogLevel.Info);
this.Monitor.Log($"Mods go here: {Constants.ModPath}");
this.Monitor.Log($"Log started at {DateTime.UtcNow:s} UTC", LogLevel.Trace);
// validate game version
if (Constants.GameVersion.IsOlderThan(Constants.MinimumGameVersion))
{
this.Monitor.Log($"Oops! You're running Stardew Valley {Constants.GameVersion}, but the oldest supported version is {Constants.MinimumGameVersion}. Please update your game before using SMAPI.", LogLevel.Error);
this.PressAnyKeyToExit();
return;
}
if (Constants.MaximumGameVersion != null && Constants.GameVersion.IsNewerThan(Constants.MaximumGameVersion))
{
this.Monitor.Log($"Oops! You're running Stardew Valley {Constants.GameVersion}, but this version of SMAPI is only compatible up to Stardew Valley {Constants.MaximumGameVersion}. Please check for a newer version of SMAPI: https://smapi.io.", LogLevel.Error);
this.PressAnyKeyToExit();
return;
}
// apply game patches // apply game patches
new GamePatcher(this.Monitor).Apply( new GamePatcher(this.Monitor).Apply(
new GameLocationPatch() new GameLocationPatch()
); );
// init JSON parser
JsonConverter[] converters = {
new StringEnumConverter<Buttons>(),
new StringEnumConverter<Keys>(),
new StringEnumConverter<SButton>(),
new ColorConverter(),
new PointConverter(),
new RectangleConverter(),
new Framework.Serialisation.SemanticVersionConverter()
};
foreach (JsonConverter converter in converters)
this.JsonHelper.JsonSettings.Converters.Add(converter);
// hook up events
ContentEvents.Init(this.EventManager);
ControlEvents.Init(this.EventManager);
GameEvents.Init(this.EventManager);
GraphicsEvents.Init(this.EventManager);
InputEvents.Init(this.EventManager);
LocationEvents.Init(this.EventManager);
MenuEvents.Init(this.EventManager);
MineEvents.Init(this.EventManager);
MultiplayerEvents.Init(this.EventManager);
PlayerEvents.Init(this.EventManager);
SaveEvents.Init(this.EventManager);
SpecialisedEvents.Init(this.EventManager);
TimeEvents.Init(this.EventManager);
} }
/// <summary>Launch SMAPI.</summary> /// <summary>Launch SMAPI.</summary>
@ -183,28 +178,33 @@ namespace StardewModdingAPI
// initialise SMAPI // initialise SMAPI
try try
{ {
// init logging // hook up events
this.Monitor.Log($"SMAPI {Constants.ApiVersion} with Stardew Valley {Constants.GameVersion} on {EnvironmentUtility.GetFriendlyPlatformName(Constants.Platform)}", LogLevel.Info); ContentEvents.Init(this.EventManager);
this.Monitor.Log($"Mods go here: {Constants.ModPath}"); ControlEvents.Init(this.EventManager);
this.Monitor.Log($"Log started at {DateTime.UtcNow:s} UTC", LogLevel.Trace); GameEvents.Init(this.EventManager);
GraphicsEvents.Init(this.EventManager);
InputEvents.Init(this.EventManager);
LocationEvents.Init(this.EventManager);
MenuEvents.Init(this.EventManager);
MineEvents.Init(this.EventManager);
MultiplayerEvents.Init(this.EventManager);
PlayerEvents.Init(this.EventManager);
SaveEvents.Init(this.EventManager);
SpecialisedEvents.Init(this.EventManager);
TimeEvents.Init(this.EventManager);
// validate paths // init JSON parser
this.VerifyPath(Constants.ModPath); JsonConverter[] converters = {
this.VerifyPath(Constants.LogDir); new StringEnumConverter<Buttons>(),
new StringEnumConverter<Keys>(),
// validate game version new StringEnumConverter<SButton>(),
if (Constants.GameVersion.IsOlderThan(Constants.MinimumGameVersion)) new ColorConverter(),
{ new PointConverter(),
this.Monitor.Log($"Oops! You're running Stardew Valley {Constants.GameVersion}, but the oldest supported version is {Constants.MinimumGameVersion}. Please update your game before using SMAPI.", LogLevel.Error); new RectangleConverter(),
this.PressAnyKeyToExit(); new Framework.Serialisation.SemanticVersionConverter()
return; };
} foreach (JsonConverter converter in converters)
if (Constants.MaximumGameVersion != null && Constants.GameVersion.IsNewerThan(Constants.MaximumGameVersion)) this.JsonHelper.JsonSettings.Converters.Add(converter);
{
this.Monitor.Log($"Oops! You're running Stardew Valley {Constants.GameVersion}, but this version of SMAPI is only compatible up to Stardew Valley {Constants.MaximumGameVersion}. Please check for a newer version of SMAPI: https://smapi.io.", LogLevel.Error);
this.PressAnyKeyToExit();
return;
}
// add error handlers // add error handlers
#if SMAPI_FOR_WINDOWS #if SMAPI_FOR_WINDOWS