fix error when swapping maps mid-session for a location with interior doors
This commit is contained in:
parent
63d146b271
commit
215574f2b9
|
@ -19,6 +19,7 @@
|
||||||
* Asset changes are now propagated into the parsed save being loaded if applicable.
|
* Asset changes are now propagated into the parsed save being loaded if applicable.
|
||||||
* Added locale to context trace logs.
|
* Added locale to context trace logs.
|
||||||
* Fixed error loading custom map tilesheets in some cases.
|
* Fixed error loading custom map tilesheets in some cases.
|
||||||
|
* Fixed error when swapping maps mid-session for a location with interior doors.
|
||||||
* Fixed `Constants.SaveFolderName` and `CurrentSavePath` not available during early load stages when using `Specialised.LoadStageChanged` event.
|
* Fixed `Constants.SaveFolderName` and `CurrentSavePath` not available during early load stages when using `Specialised.LoadStageChanged` event.
|
||||||
* Fixed `LoadStage.SaveParsed` raised before the parsed save data is available.
|
* Fixed `LoadStage.SaveParsed` raised before the parsed save data is available.
|
||||||
* Fixed 'unknown mod' deprecation warnings showing the wrong stack trace.
|
* Fixed 'unknown mod' deprecation warnings showing the wrong stack trace.
|
||||||
|
|
|
@ -2,7 +2,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.Xna.Framework;
|
using System.Reflection;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using StardewModdingAPI.Framework.Reflection;
|
using StardewModdingAPI.Framework.Reflection;
|
||||||
using StardewValley;
|
using StardewValley;
|
||||||
|
@ -99,8 +99,21 @@ namespace StardewModdingAPI.Metadata
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrWhiteSpace(location.mapPath.Value) && this.GetNormalisedPath(location.mapPath.Value) == key)
|
if (!string.IsNullOrWhiteSpace(location.mapPath.Value) && this.GetNormalisedPath(location.mapPath.Value) == key)
|
||||||
{
|
{
|
||||||
|
// reload map data
|
||||||
this.Reflection.GetMethod(location, "reloadMap").Invoke();
|
this.Reflection.GetMethod(location, "reloadMap").Invoke();
|
||||||
this.Reflection.GetMethod(location, "updateWarps").Invoke();
|
this.Reflection.GetMethod(location, "updateWarps").Invoke();
|
||||||
|
|
||||||
|
// reload doors
|
||||||
|
{
|
||||||
|
Type interiorDoorDictType = Type.GetType($"StardewValley.InteriorDoorDictionary, {Constants.GameAssemblyName}", throwOnError: true);
|
||||||
|
ConstructorInfo constructor = interiorDoorDictType.GetConstructor(new[] { typeof(GameLocation) });
|
||||||
|
if (constructor == null)
|
||||||
|
throw new InvalidOperationException("Can't reset location doors: constructor not found for InteriorDoorDictionary type.");
|
||||||
|
object instance = constructor.Invoke(new object[] { location });
|
||||||
|
|
||||||
|
this.Reflection.GetField<object>(location, "interiorDoors").SetValue(instance);
|
||||||
|
}
|
||||||
|
|
||||||
anyChanged = true;
|
anyChanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue