Compatibility fix
This commit is contained in:
parent
48fd5a490b
commit
3c59a5fc6a
|
@ -0,0 +1,9 @@
|
|||
using Microsoft.Xna.Framework.Audio;
|
||||
using StardewValley;
|
||||
|
||||
namespace StardewModdingAPI.Framework.ModLoading.RewriteFacades;
|
||||
|
||||
public interface ISoundBankMethods : ISoundBank
|
||||
{
|
||||
CueDefinition GetCueDefinition(string name);
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
using Microsoft.Xna.Framework.Graphics;
|
||||
using StardewValley.Menus;
|
||||
|
||||
namespace StardewModdingAPI.Framework.ModLoading.RewriteFacades;
|
||||
|
||||
public class OptionsElementMethods : OptionsElement
|
||||
{
|
||||
public OptionsElementMethods(string label) : base(label)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void draw(SpriteBatch b, int slotX, int slotY, IClickableMenu context = null)
|
||||
{
|
||||
base.draw(b, slotX, slotY);
|
||||
}
|
||||
}
|
|
@ -293,6 +293,10 @@ namespace StardewModdingAPI.Framework
|
|||
MiniMonoModHotfix.Apply();
|
||||
HarmonyPatcher.Apply("SMAPI", this.Monitor,
|
||||
new Game1Patcher(this.Reflection, this.OnLoadStageChanged),
|
||||
#if SMAPI_FOR_MOBILE
|
||||
new StringPatcher(this.Reflection),
|
||||
new ThreadSilenceExitPatch(this.Monitor),
|
||||
#endif
|
||||
new TitleMenuPatcher(this.OnLoadStageChanged)
|
||||
);
|
||||
// new GamePatcher(this.Monitor).Apply(
|
||||
|
|
|
@ -58,34 +58,6 @@ namespace StardewModdingAPI.Metadata
|
|||
|
||||
#if SMAPI_FOR_MOBILE
|
||||
// module rewrite for .Net 5 runtime assemblies
|
||||
// yield return new TypeModuleReferenceRewriter("System",
|
||||
// new []
|
||||
// {
|
||||
// "System.Runtime"
|
||||
// },
|
||||
// new []
|
||||
// {
|
||||
// "System.Collections.Generic.ISet`1"
|
||||
// }, typeof(System.Collections.Generic.ISet<>).Assembly);
|
||||
// yield return new TypeModuleReferenceRewriter("System",
|
||||
// new []
|
||||
// {
|
||||
// "System.Runtime"
|
||||
// },
|
||||
// new []
|
||||
// {
|
||||
// "System.Collections.Generic.HashSet`1"
|
||||
// }, typeof(System.Collections.Generic.HashSet<>).Assembly);
|
||||
// yield return new TypeModuleReferenceRewriter("System.Runtime",
|
||||
// new []
|
||||
// {
|
||||
// "System.Runtime"
|
||||
// },
|
||||
// new []
|
||||
// {
|
||||
// "System.Collections.Generic.IReadOnlySet`1"
|
||||
// }, typeof(System.Collections.Generic.IReadOnlySet<>).Assembly);
|
||||
|
||||
yield return new ModuleReferenceRewriter("System.*", "System.", new Version(5,0), new[]
|
||||
{
|
||||
typeof(System.Collections.CollectionBase).Assembly,
|
||||
|
@ -94,6 +66,7 @@ namespace StardewModdingAPI.Metadata
|
|||
typeof(System.Xml.XmlDocument).Assembly,
|
||||
typeof(System.Xml.Linq.XComment).Assembly,
|
||||
typeof(System.Collections.Generic.IReadOnlySet<>).Assembly,
|
||||
typeof(System.Data.DataTable).Assembly,
|
||||
});
|
||||
|
||||
yield return new TypeFieldToAnotherTypePropertyRewriter(typeof(Game1), typeof(Game1Methods), "onScreenMenus", "onScreenMenus");
|
||||
|
@ -119,6 +92,8 @@ namespace StardewModdingAPI.Metadata
|
|||
yield return new MethodParentRewriter(typeof(IClickableMenu), typeof(IClickableMenuMethods));
|
||||
yield return new MethodParentRewriter(typeof(SpriteText), typeof(SpriteTextMethods));
|
||||
yield return new MethodParentRewriter(typeof(Utility), typeof(UtilityMethods));
|
||||
yield return new MethodParentRewriter(typeof(OptionsElement), typeof(OptionsElementMethods));
|
||||
yield return new MethodParentRewriter(typeof(ISoundBank), typeof(ISoundBankMethods));
|
||||
|
||||
//Constructor Rewrites
|
||||
yield return new MethodParentRewriter(typeof(MapPage), typeof(MapPageMethods));
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using StardewModdingAPI.Enums;
|
||||
using StardewModdingAPI.Framework.Reflection;
|
||||
using StardewModdingAPI.Internal.Patching;
|
||||
using StardewValley;
|
||||
using StardewValley.Menus;
|
||||
using StardewValley.Minigames;
|
||||
|
||||
namespace StardewModdingAPI.Patches
|
||||
{
|
||||
/// <summary>Harmony patches for <see cref="Game1"/> which notify SMAPI for save load stages.</summary>
|
||||
/// <remarks>Patch methods must be static for Harmony to work correctly. See the Harmony documentation before renaming patch arguments.</remarks>
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming", Justification = "Argument names are defined by Harmony and methods are named for clarity.")]
|
||||
[SuppressMessage("ReSharper", "IdentifierTypo", Justification = "Argument names are defined by Harmony and methods are named for clarity.")]
|
||||
internal class StringPatcher : BasePatcher
|
||||
{
|
||||
/*********
|
||||
** Fields
|
||||
*********/
|
||||
/// <summary>Simplifies access to private code.</summary>
|
||||
private static Reflector Reflection = null!; // initialized in constructor
|
||||
|
||||
|
||||
/*********
|
||||
** Public methods
|
||||
*********/
|
||||
/// <summary>Construct an instance.</summary>
|
||||
/// <param name="reflection">Simplifies access to private code.</param>
|
||||
/// <param name="onStageChanged">A callback to invoke when the load stage changes.</param>
|
||||
public StringPatcher(Reflector reflection)
|
||||
{
|
||||
StringPatcher.Reflection = reflection;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Apply(Harmony harmony, IMonitor monitor)
|
||||
{
|
||||
// detect CreatedInitialLocations and SaveAddedLocations
|
||||
harmony.Patch(
|
||||
original: this.RequireMethod<string>(nameof(string.Split), new []{typeof(char), typeof(StringSplitOptions)}),
|
||||
prefix: this.GetHarmonyMethod(nameof(StringPatcher.Before_Split))
|
||||
);
|
||||
harmony.Patch(
|
||||
original: this.RequireMethod<string>(nameof(string.Split), new []{typeof(string), typeof(StringSplitOptions)}),
|
||||
prefix: this.GetHarmonyMethod(nameof(StringPatcher.Before_Split))
|
||||
);
|
||||
harmony.Patch(
|
||||
original: this.RequireMethod<string>(nameof(string.Split), new []{typeof(char), typeof(int), typeof(StringSplitOptions)}),
|
||||
prefix: this.GetHarmonyMethod(nameof(StringPatcher.Before_Split))
|
||||
);
|
||||
harmony.Patch(
|
||||
original: this.RequireMethod<string>(nameof(string.Split), new []{typeof(string), typeof(int), typeof(StringSplitOptions)}),
|
||||
prefix: this.GetHarmonyMethod(nameof(StringPatcher.Before_Split))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/*********
|
||||
** Private methods
|
||||
*********/
|
||||
/// <summary>The method to call before <see cref="string.Split"/>.</summary>
|
||||
/// <returns>Returns whether to execute the original method.</returns>
|
||||
/// <remarks>This method must be static for Harmony to work correctly. See the Harmony documentation before renaming arguments.</remarks>
|
||||
private static bool Before_Split(string __instance, ref StringSplitOptions options)
|
||||
{
|
||||
if (3 == (uint)options)
|
||||
{
|
||||
options = StringSplitOptions.RemoveEmptyEntries;
|
||||
}
|
||||
else if(2 == (uint)options)
|
||||
{
|
||||
options = StringSplitOptions.None;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -141,6 +141,7 @@
|
|||
<Reference Include="Mono.Security" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="0Harmony">
|
||||
|
|
Loading…
Reference in New Issue