summaryrefslogtreecommitdiff
path: root/src/SMAPI
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2018-04-11 21:15:16 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2018-04-11 21:15:16 -0400
commit9c1617c9ee51a0f6b93242fe8fc789336957460c (patch)
treefc1cf736ed0c7c6e8731abf87bfb8d1a17f8746d /src/SMAPI
parentb9bc1a6d17cafa0a97b46ffecda432cfc2f23b51 (diff)
downloadSMAPI-9c1617c9ee51a0f6b93242fe8fc789336957460c.tar.gz
SMAPI-9c1617c9ee51a0f6b93242fe8fc789336957460c.tar.bz2
SMAPI-9c1617c9ee51a0f6b93242fe8fc789336957460c.zip
drop support for Stardew Valley 1.2 (#453)
Diffstat (limited to 'src/SMAPI')
-rw-r--r--src/SMAPI/Constants.cs28
-rw-r--r--src/SMAPI/Events/EventArgsInput.cs6
-rw-r--r--src/SMAPI/Events/EventArgsInventoryChanged.cs12
-rw-r--r--src/SMAPI/Events/EventArgsLocationObjectsChanged.cs18
-rw-r--r--src/SMAPI/Framework/ContentCore.cs83
-rw-r--r--src/SMAPI/Framework/ContentManagerShim.cs8
-rw-r--r--src/SMAPI/Framework/GameVersion.cs8
-rw-r--r--src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs116
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedField.cs3
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedMethod.cs3
-rw-r--r--src/SMAPI/Framework/Reflection/ReflectedProperty.cs3
-rw-r--r--src/SMAPI/Framework/SGame.cs711
-rw-r--r--src/SMAPI/IPrivateField.cs30
-rw-r--r--src/SMAPI/IPrivateMethod.cs31
-rw-r--r--src/SMAPI/IPrivateProperty.cs30
-rw-r--r--src/SMAPI/IReflectionHelper.cs69
-rw-r--r--src/SMAPI/Metadata/CoreAssetPropagator.cs47
-rw-r--r--src/SMAPI/Metadata/InstructionMetadata.cs63
-rw-r--r--src/SMAPI/StardewModdingAPI.csproj3
19 files changed, 21 insertions, 1251 deletions
diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs
index 1e35c030..e547dfa6 100644
--- a/src/SMAPI/Constants.cs
+++ b/src/SMAPI/Constants.cs
@@ -37,28 +37,13 @@ namespace StardewModdingAPI
** Public
****/
/// <summary>SMAPI's current semantic version.</summary>
- public static ISemanticVersion ApiVersion { get; } =
-#if STARDEW_VALLEY_1_3
- new SemanticVersion($"2.6-alpha.{DateTime.UtcNow:yyyyMMddHHmm}");
-#else
- new SemanticVersion("2.5.5");
-#endif
+ public static ISemanticVersion ApiVersion { get; } = new SemanticVersion($"2.6-alpha.{DateTime.UtcNow:yyyyMMddHHmm}");
/// <summary>The minimum supported version of Stardew Valley.</summary>
- public static ISemanticVersion MinimumGameVersion { get; } =
-#if STARDEW_VALLEY_1_3
- new GameVersion("1.3.0.4");
-#else
- new SemanticVersion("1.2.30");
-#endif
+ public static ISemanticVersion MinimumGameVersion { get; } = new GameVersion("1.3.0.27");
/// <summary>The maximum supported version of Stardew Valley.</summary>
- public static ISemanticVersion MaximumGameVersion { get; } =
-#if STARDEW_VALLEY_1_3
- null;
-#else
- new SemanticVersion("1.2.33");
-#endif
+ public static ISemanticVersion MaximumGameVersion { get; } = null;
/// <summary>The path to the game folder.</summary>
public static string ExecutionPath { get; } = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
@@ -184,12 +169,7 @@ namespace StardewModdingAPI
/// <summary>Get the name of a save directory for the current player.</summary>
private static string GetSaveFolderName()
{
- string prefix =
-#if STARDEW_VALLEY_1_3
- new string(Game1.player.Name.Where(char.IsLetterOrDigit).ToArray());
-#else
- new string(Game1.player.name.Where(char.IsLetterOrDigit).ToArray());
-#endif
+ string prefix = new string(Game1.player.Name.Where(char.IsLetterOrDigit).ToArray());
return $"{prefix}_{Game1.uniqueIDForThisGame}";
}
diff --git a/src/SMAPI/Events/EventArgsInput.cs b/src/SMAPI/Events/EventArgsInput.cs
index 75b9b8cd..b2bd978b 100644
--- a/src/SMAPI/Events/EventArgsInput.cs
+++ b/src/SMAPI/Events/EventArgsInput.cs
@@ -18,12 +18,6 @@ namespace StardewModdingAPI.Events
/// <summary>The current cursor position.</summary>
public ICursorPosition Cursor { get; }
-#if !STARDEW_VALLEY_1_3
- /// <summary>Whether the input is considered a 'click' by the game for enabling action.</summary>
- [Obsolete("Use " + nameof(EventArgsInput.IsActionButton) + " or " + nameof(EventArgsInput.IsUseToolButton) + " instead")] // deprecated in SMAPI 2.1
- public bool IsClick => this.IsActionButton;
-#endif
-
/// <summary>Whether the input should trigger actions on the affected tile.</summary>
public bool IsActionButton { get; }
diff --git a/src/SMAPI/Events/EventArgsInventoryChanged.cs b/src/SMAPI/Events/EventArgsInventoryChanged.cs
index b85ae9db..1fdca834 100644
--- a/src/SMAPI/Events/EventArgsInventoryChanged.cs
+++ b/src/SMAPI/Events/EventArgsInventoryChanged.cs
@@ -12,11 +12,7 @@ namespace StardewModdingAPI.Events
** Accessors
*********/
/// <summary>The player's inventory.</summary>
-#if STARDEW_VALLEY_1_3
public IList<Item> Inventory { get; }
-#else
- public List<Item> Inventory { get; }
-#endif
/// <summary>The added items.</summary>
public List<ItemStackChange> Added { get; }
@@ -34,13 +30,7 @@ namespace StardewModdingAPI.Events
/// <summary>Construct an instance.</summary>
/// <param name="inventory">The player's inventory.</param>
/// <param name="changedItems">The inventory changes.</param>
- public EventArgsInventoryChanged(
-#if STARDEW_VALLEY_1_3
- IList<Item> inventory,
-#else
- List<Item> inventory,
-#endif
- List<ItemStackChange> changedItems)
+ public EventArgsInventoryChanged(IList<Item> inventory, List<ItemStackChange> changedItems)
{
this.Inventory = inventory;
this.Added = changedItems.Where(n => n.ChangeType == ChangeType.Added).ToList();
diff --git a/src/SMAPI/Events/EventArgsLocationObjectsChanged.cs b/src/SMAPI/Events/EventArgsLocationObjectsChanged.cs
index 180e9d78..de6bd365 100644
--- a/src/SMAPI/Events/EventArgsLocationObjectsChanged.cs
+++ b/src/SMAPI/Events/EventArgsLocationObjectsChanged.cs
@@ -1,11 +1,7 @@
using System;
-using Microsoft.Xna.Framework;
-#if STARDEW_VALLEY_1_3
using System.Collections.Generic;
+using Microsoft.Xna.Framework;
using Netcode;
-#else
-using StardewValley;
-#endif
using Object = StardewValley.Object;
namespace StardewModdingAPI.Events
@@ -17,11 +13,7 @@ namespace StardewModdingAPI.Events
** Accessors
*********/
/// <summary>The current list of objects in the current location.</summary>
-#if STARDEW_VALLEY_1_3
public IDictionary<Vector2, NetRef<Object>> NewObjects { get; }
-#else
- public SerializableDictionary<Vector2, Object> NewObjects { get; }
-#endif
/*********
@@ -29,13 +21,7 @@ namespace StardewModdingAPI.Events
*********/
/// <summary>Construct an instance.</summary>
/// <param name="newObjects">The current list of objects in the current location.</param>
- public EventArgsLocationObjectsChanged(
-#if STARDEW_VALLEY_1_3
- IDictionary<Vector2, NetRef<Object>> newObjects
-#else
- SerializableDictionary<Vector2, Object> newObjects
-#endif
- )
+ public EventArgsLocationObjectsChanged(IDictionary<Vector2, NetRef<Object>> newObjects)
{
this.NewObjects = newObjects;
}
diff --git a/src/SMAPI/Framework/ContentCore.cs b/src/SMAPI/Framework/ContentCore.cs
index 43357553..9da18481 100644
--- a/src/SMAPI/Framework/ContentCore.cs
+++ b/src/SMAPI/Framework/ContentCore.cs
@@ -44,10 +44,8 @@ namespace StardewModdingAPI.Framework
/// <summary>The underlying asset cache.</summary>
private readonly ContentCache Cache;
-#if STARDEW_VALLEY_1_3
/// <summary>A lookup which indicates whether the asset is localisable (i.e. the filename contains the locale), if previously loaded.</summary>
private readonly IDictionary<string, bool> IsLocalisableLookup;
-#endif
/// <summary>The locale codes used in asset keys indexed by enum value.</summary>
private readonly IDictionary<LocalizedContentManager.LanguageCode, string> Locales;
@@ -111,9 +109,7 @@ namespace StardewModdingAPI.Framework
this.CoreAssets = new CoreAssetPropagator(this.NormaliseAssetName, reflection);
this.Locales = this.GetKeyLocales(reflection);
this.LanguageCodes = this.Locales.ToDictionary(p => p.Value, p => p.Key, StringComparer.InvariantCultureIgnoreCase);
-#if STARDEW_VALLEY_1_3
this.IsLocalisableLookup = reflection.GetField<IDictionary<string, bool>>(this.Content, "_localizedAsset").GetValue();
-#endif
}
/// <summary>Get a new content manager which defers loading to the content core.</summary>
@@ -209,11 +205,7 @@ namespace StardewModdingAPI.Framework
/// <param name="language">The language code for which to load content.</param>
/// <exception cref="ArgumentException">The <paramref name="assetName"/> is empty or contains invalid characters.</exception>
/// <exception cref="ContentLoadException">The content asset couldn't be loaded (e.g. because it doesn't exist).</exception>
- public T Load<T>(string assetName, ContentManager instance
-#if STARDEW_VALLEY_1_3
- , LocalizedContentManager.LanguageCode language
-#endif
- )
+ public T Load<T>(string assetName, ContentManager instance, LocalizedContentManager.LanguageCode language)
{
// normalise asset key
this.AssertValidAssetKeyFormat(assetName);
@@ -221,11 +213,7 @@ namespace StardewModdingAPI.Framework
// load game content
if (!assetName.StartsWith(this.ModContentPrefix))
-#if STARDEW_VALLEY_1_3
return this.LoadImpl<T>(assetName, instance, language);
-#else
- return this.LoadImpl<T>(assetName, instance);
-#endif
// load mod content
SContentLoadException GetContentError(string reasonPhrase) => new SContentLoadException($"Failed loading content asset '{assetName}': {reasonPhrase}");
@@ -235,11 +223,7 @@ namespace StardewModdingAPI.Framework
{
// try cache
if (this.IsLoaded(assetName))
-#if STARDEW_VALLEY_1_3
return this.LoadImpl<T>(assetName, instance, language);
-#else
- return this.LoadImpl<T>(assetName, instance);
-#endif
// get file
FileInfo file = this.GetModFile(assetName);
@@ -251,11 +235,7 @@ namespace StardewModdingAPI.Framework
{
// XNB file
case ".xnb":
-#if STARDEW_VALLEY_1_3
return this.LoadImpl<T>(assetName, instance, language);
-#else
- return this.LoadImpl<T>(assetName, instance);
-#endif
// unpacked map
case ".tbin":
@@ -436,10 +416,6 @@ namespace StardewModdingAPI.Framework
/// <param name="reflection">Simplifies access to private game code.</param>
private IDictionary<LocalizedContentManager.LanguageCode, string> GetKeyLocales(Reflector reflection)
{
-#if !STARDEW_VALLEY_1_3
- IReflectedField<LocalizedContentManager.LanguageCode> codeField = reflection.GetField<LocalizedContentManager.LanguageCode>(typeof(LocalizedContentManager), "_currentLangCode");
- LocalizedContentManager.LanguageCode previousCode = codeField.GetValue();
-#endif
string previousOverride = this.Content.LanguageCodeOverride;
try
@@ -448,21 +424,11 @@ namespace StardewModdingAPI.Framework
this.Content.LanguageCodeOverride = null;
// create locale => code map
- IReflectedMethod languageCodeString = reflection
-#if STARDEW_VALLEY_1_3
- .GetMethod(this.Content, "languageCodeString");
-#else
- .GetMethod(this.Content, "languageCode");
-#endif
+ IReflectedMethod languageCodeString = reflection.GetMethod(this.Content, "languageCodeString");
IDictionary<LocalizedContentManager.LanguageCode, string> map = new Dictionary<LocalizedContentManager.LanguageCode, string>();
foreach (LocalizedContentManager.LanguageCode code in Enum.GetValues(typeof(LocalizedContentManager.LanguageCode)))
{
-#if STARDEW_VALLEY_1_3
map[code] = languageCodeString.Invoke<string>(code);
-#else
- codeField.SetValue(code);
- map[code] = languageCodeString.Invoke<string>();
-#endif
}
return map;
@@ -471,10 +437,6 @@ namespace StardewModdingAPI.Framework
{
// restore previous settings
this.Content.LanguageCodeOverride = previousOverride;
-#if !STARDEW_VALLEY_1_3
- codeField.SetValue(previousCode);
-#endif
-
}
}
@@ -520,18 +482,12 @@ namespace StardewModdingAPI.Framework
/// <param name="normalisedAssetName">The normalised asset name.</param>
private bool IsNormalisedKeyLoaded(string normalisedAssetName)
{
-#if STARDEW_VALLEY_1_3
if (!this.IsLocalisableLookup.TryGetValue(normalisedAssetName, out bool localisable))
return false;
return localisable
? this.Cache.ContainsKey($"{normalisedAssetName}.{this.Locales[this.Content.GetCurrentLanguage()]}")
: this.Cache.ContainsKey(normalisedAssetName);
-#else
- return
- this.Cache.ContainsKey(normalisedAssetName)
- || this.Cache.ContainsKey($"{normalisedAssetName}.{this.Locales[this.Content.GetCurrentLanguage()]}"); // translated asset
-#endif
}
/// <summary>Track that a content manager loaded an asset.</summary>
@@ -552,11 +508,7 @@ namespace StardewModdingAPI.Framework
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
/// <param name="instance">The content manager instance for which to load the asset.</param>
/// <param name="language">The language code for which to load content.</param>
- private T LoadImpl<T>(string assetName, ContentManager instance
-#if STARDEW_VALLEY_1_3
- , LocalizedContentManager.LanguageCode language
-#endif
- )
+ private T LoadImpl<T>(string assetName, ContentManager instance, LocalizedContentManager.LanguageCode language)
{
return this.WithWriteLock(() =>
{
@@ -564,13 +516,7 @@ namespace StardewModdingAPI.Framework
if (this.IsNormalisedKeyLoaded(assetName))
{
this.TrackAssetLoader(assetName, instance);
- return this.Content
-
-#if STARDEW_VALLEY_1_3
- .Load<T>(assetName, language);
-#else
- .Load<T>(assetName);
-#endif
+ return this.Content.Load<T>(assetName, language);
}
// load asset
@@ -579,30 +525,17 @@ namespace StardewModdingAPI.Framework
{
this.Monitor.Log($"Broke loop while loading asset '{assetName}'.", LogLevel.Warn);
this.Monitor.Log($"Bypassing mod loaders for this asset. Stack trace:\n{Environment.StackTrace}", LogLevel.Trace);
- data = this.Content
-#if STARDEW_VALLEY_1_3
- .Load<T>(assetName, language);
-#else
- .Load<T>(assetName);
-#endif
+ data = this.Content.Load<T>(assetName, language);
}
else
{
data = this.AssetsBeingLoaded.Track(assetName, () =>
{
- string locale =
-#if STARDEW_VALLEY_1_3
- this.GetLocale(language);
-#else
- this.GetLocale();
-#endif
+ string locale = this.GetLocale(language);
IAssetInfo info = new AssetInfo(locale, assetName, typeof(T), this.NormaliseAssetName);
- IAssetData asset = this.ApplyLoader<T>(info)
-#if STARDEW_VALLEY_1_3
+ IAssetData asset =
+ this.ApplyLoader<T>(info)
?? new AssetDataForObject(info, this.Content.Load<T>(assetName, language), this.NormaliseAssetName);
-#else
- ?? new AssetDataForObject(info, this.Content.Load<T>(assetName), this.NormaliseAssetName);
-#endif
asset = this.ApplyEditors<T>(info, asset);
return (T)asset.Data;
});
diff --git a/src/SMAPI/Framework/ContentManagerShim.cs b/src/SMAPI/Framework/ContentManagerShim.cs
index 8f88fc2d..2791eb78 100644
--- a/src/SMAPI/Framework/ContentManagerShim.cs
+++ b/src/SMAPI/Framework/ContentManagerShim.cs
@@ -43,14 +43,9 @@ namespace StardewModdingAPI.Framework
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
public override T Load<T>(string assetName)
{
-#if STARDEW_VALLEY_1_3
return this.Load<T>(assetName, LocalizedContentManager.CurrentLanguageCode);
-#else
- return this.ContentCore.Load<T>(assetName, this);
-#endif
}
-#if STARDEW_VALLEY_1_3
/// <summary>Load an asset that has been processed by the content pipeline.</summary>
/// <typeparam name="T">The type of asset to load.</typeparam>
/// <param name="assetName">The asset path relative to the loader root directory, not including the <c>.xnb</c> extension.</param>
@@ -67,7 +62,6 @@ namespace StardewModdingAPI.Framework
{
return this.Load<T>(assetName, LanguageCode.en);
}
-#endif
/// <summary>Inject an asset into the cache.</summary>
/// <typeparam name="T">The type of asset to inject.</typeparam>
@@ -78,13 +72,11 @@ namespace StardewModdingAPI.Framework
this.ContentCore.Inject<T>(assetName, value, this);
}
-#if STARDEW_VALLEY_1_3
/// <summary>Create a new content manager for temporary use.</summary>
public override LocalizedContentManager CreateTemporary()
{
return this.ContentCore.CreateContentManager("(temporary)");
}
-#endif
/*********
diff --git a/src/SMAPI/Framework/GameVersion.cs b/src/SMAPI/Framework/GameVersion.cs
index e5022212..85b2eef6 100644
--- a/src/SMAPI/Framework/GameVersion.cs
+++ b/src/SMAPI/Framework/GameVersion.cs
@@ -49,10 +49,8 @@ namespace StardewModdingAPI.Framework
/// <param name="gameVersion">The game version string.</param>
private static string GetSemanticVersionString(string gameVersion)
{
-#if STARDEW_VALLEY_1_3
- if(gameVersion.StartsWith("1.3.0."))
+ if (gameVersion.StartsWith("1.3.0."))
return new SemanticVersion(1, 3, 0, "alpha." + gameVersion.Substring("1.3.0.".Length)).ToString();
-#endif
return GameVersion.VersionMap.TryGetValue(gameVersion, out string semanticVersion)
? semanticVersion
@@ -63,10 +61,8 @@ namespace StardewModdingAPI.Framework
/// <param name="semanticVersion">The semantic version string.</param>
private static string GetGameVersionString(string semanticVersion)
{
- #if STARDEW_VALLEY_1_3
- if(semanticVersion.StartsWith("1.3-alpha."))
+ if (semanticVersion.StartsWith("1.3-alpha."))
return "1.3.0." + semanticVersion.Substring("1.3-alpha.".Length);
- #endif
foreach (var mapping in GameVersion.VersionMap)
{
diff --git a/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs b/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs
index e5bf47f6..648d6742 100644
--- a/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs
+++ b/src/SMAPI/Framework/ModHelpers/ReflectionHelper.cs
@@ -107,122 +107,6 @@ namespace StardewModdingAPI.Framework.ModHelpers
);
}
-#if !STARDEW_VALLEY_1_3
- /****
- ** Obsolete
- ****/
- /// <summary>Get a private instance field.</summary>
- /// <typeparam name="TValue">The field type.</typeparam>
- /// <param name="obj">The object which has the field.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- /// <returns>Returns the field wrapper, or <c>null</c> if the field doesn't exist and <paramref name="required"/> is <c>false</c>.</returns>
- [Obsolete]
- public IPrivateField<TValue> GetPrivateField<TValue>(object obj, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateField<TValue>)this.GetField<TValue>(obj, name, required);
- }
-
- /// <summary>Get a private static field.</summary>
- /// <typeparam name="TValue">The field type.</typeparam>
- /// <param name="type">The type which has the field.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- [Obsolete]
- public IPrivateField<TValue> GetPrivateField<TValue>(Type type, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateField<TValue>)this.GetField<TValue>(type, name, required);
- }
-
- /// <summary>Get a private instance property.</summary>
- /// <typeparam name="TValue">The property type.</typeparam>
- /// <param name="obj">The object which has the property.</param>
- /// <param name="name">The property name.</param>
- /// <param name="required">Whether to throw an exception if the private property is not found.</param>
- [Obsolete]
- public IPrivateProperty<TValue> GetPrivateProperty<TValue>(object obj, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateProperty<TValue>)this.GetProperty<TValue>(obj, name, required);
- }
-
- /// <summary>Get a private static property.</summary>
- /// <typeparam name="TValue">The property type.</typeparam>
- /// <param name="type">The type which has the property.</param>
- /// <param name="name">The property name.</param>
- /// <param name="required">Whether to throw an exception if the private property is not found.</param>
- [Obsolete]
- public IPrivateProperty<TValue> GetPrivateProperty<TValue>(Type type, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateProperty<TValue>)this.GetProperty<TValue>(type, name, required);
- }
-
- /// <summary>Get the value of a private instance field.</summary>
- /// <typeparam name="TValue">The field type.</typeparam>
- /// <param name="obj">The object which has the field.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- /// <returns>Returns the field value, or the default value for <typeparamref name="TValue"/> if the field wasn't found and <paramref name="required"/> is false.</returns>
- /// <remarks>
- /// This is a shortcut for <see cref="GetPrivateField{TValue}(object,string,bool)"/> followed by <see cref="IPrivateField{TValue}.GetValue"/>.
- /// When <paramref name="required" /> is false, this will return the default value if reflection fails. If you need to check whether the field exists, use <see cref="GetPrivateField{TValue}(object,string,bool)" /> instead.
- /// </remarks>
- [Obsolete]
- public TValue GetPrivateValue<TValue>(object obj, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- IPrivateField<TValue> field = (IPrivateField<TValue>)this.GetField<TValue>(obj, name, required);
- return field != null
- ? field.GetValue()
- : default(TValue);
- }
-
- /// <summary>Get the value of a private static field.</summary>
- /// <typeparam name="TValue">The field type.</typeparam>
- /// <param name="type">The type which has the field.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- /// <returns>Returns the field value, or the default value for <typeparamref name="TValue"/> if the field wasn't found and <paramref name="required"/> is false.</returns>
- /// <remarks>
- /// This is a shortcut for <see cref="GetPrivateField{TValue}(Type,string,bool)"/> followed by <see cref="IPrivateField{TValue}.GetValue"/>.
- /// When <paramref name="required" /> is false, this will return the default value if reflection fails. If you need to check whether the field exists, use <see cref="GetPrivateField{TValue}(Type,string,bool)" /> instead.
- /// </remarks>
- [Obsolete]
- public TValue GetPrivateValue<TValue>(Type type, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- IPrivateField<TValue> field = (IPrivateField<TValue>)this.GetField<TValue>(type, name, required);
- return field != null
- ? field.GetValue()
- : default(TValue);
- }
-
- /// <summary>Get a private instance method.</summary>
- /// <param name="obj">The object which has the method.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- [Obsolete]
- public IPrivateMethod GetPrivateMethod(object obj, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateMethod)this.GetMethod(obj, name, required);
- }
-
- /// <summary>Get a private static method.</summary>
- /// <param name="type">The type which has the method.</param>
- /// <param name="name">The field name.</param>
- /// <param name="required">Whether to throw an exception if the private field is not found.</param>
- [Obsolete]
- public IPrivateMethod GetPrivateMethod(Type type, string name, bool required = true)
- {
- this.DeprecationManager.Warn($"{nameof(IReflectionHelper)}.GetPrivate*", "2.3", DeprecationLevel.Notice);
- return (IPrivateMethod)this.GetMethod(type, name, required);
- }
-#endif
-
/*********
** Private methods
diff --git a/src/SMAPI/Framework/Reflection/ReflectedField.cs b/src/SMAPI/Framework/Reflection/ReflectedField.cs
index fb420dc5..09638b1d 100644
--- a/src/SMAPI/Framework/Reflection/ReflectedField.cs
+++ b/src/SMAPI/Framework/Reflection/ReflectedField.cs
@@ -6,9 +6,6 @@ namespace StardewModdingAPI.Framework.Reflection
/// <summary>A field obtained through reflection.</summary>
/// <typeparam name="TValue">The field value type.</typeparam>
internal class ReflectedField<TValue> : IReflectedField<TValue>
-#if !STARDEW_VALLEY_1_3
- , IPrivateField<TValue>
-#endif
{
/*********
** Properties
diff --git a/src/SMAPI/Framework/Reflection/ReflectedMethod.cs b/src/SMAPI/Framework/Reflection/ReflectedMethod.cs
index 803bc316..7d9072a0 100644
--- a/src/SMAPI/Framework/Reflection/ReflectedMethod.cs
+++ b/src/SMAPI/Framework/Reflection/ReflectedMethod.cs
@@ -5,9 +5,6 @@ namespace StardewModdingAPI.Framework.Reflection
{
/// <summary>A method obtained through reflection.</summary>
internal class ReflectedMethod : IReflectedMethod
-#if !STARDEW_VALLEY_1_3
- , IPrivateMethod
-#endif
{
/*********
** Properties
diff --git a/src/SMAPI/Framework/Reflection/ReflectedProperty.cs b/src/SMAPI/Framework/Reflection/ReflectedProperty.cs
index 4f9d4e19..d59b71ac 100644
--- a/src/SMAPI/Framework/Reflection/ReflectedProperty.cs
+++ b/src/SMAPI/Framework/Reflection/ReflectedProperty.cs
@@ -6,9 +6,6 @@ namespace StardewModdingAPI.Framework.Reflection
/// <summary>A property obtained through reflection.</summary>
/// <typeparam name="TValue">The property value type.</typeparam>
internal class ReflectedProperty<TValue> : IReflectedProperty<TValue>
-#if !STARDEW_VALLEY_1_3
- , IPrivateProperty<TValue>
-#endif
{
/*********
** Properties
diff --git a/src/SMAPI/Framework/SGame.cs b/src/SMAPI/Framework/SGame.cs
index c6e9aa92..b486f8cd 100644
--- a/src/SMAPI/Framework/SGame.cs
+++ b/src/SMAPI/Framework/SGame.cs
@@ -1,18 +1,14 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading;
-using System.Threading.Tasks;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
-#if STARDEW_VALLEY_1_3
using Netcode;
-#endif
using StardewModdingAPI.Events;
using StardewModdingAPI.Framework.Events;
using StardewModdingAPI.Framework.Input;
@@ -24,11 +20,7 @@ using StardewValley.Locations;
using StardewValley.Menus;
using StardewValley.Tools;
using xTile.Dimensions;
-#if !STARDEW_VALLEY_1_3
-using xTile.Layers;
-#else
using SFarmer = StardewValley.Farmer;
-#endif
namespace StardewModdingAPI.Framework
{
@@ -136,11 +128,6 @@ namespace StardewModdingAPI.Framework
/// <summary>Whether this is the very first update tick since the game started.</summary>
private bool FirstUpdate;
-#if !STARDEW_VALLEY_1_3
- /// <summary>The current game instance.</summary>
- private static SGame Instance;
-#endif
-
/// <summary>A callback to invoke after the game finishes initialising.</summary>
private readonly Action OnGameInitialised;
@@ -150,29 +137,9 @@ namespace StardewModdingAPI.Framework
/// <summary>Simplifies access to private game code.</summary>
private static Reflector Reflection;
-#if !STARDEW_VALLEY_1_3
// ReSharper disable ArrangeStaticMemberQualifier, ArrangeThisQualifier, InconsistentNaming
- /// <summary>Used to access private fields and methods.</summary>
- private static List<float> _fpsList => SGame.Reflection.GetField<List<float>>(typeof(Game1), nameof(_fpsList)).GetValue();
- private static Stopwatch _fpsStopwatch => SGame.Reflection.GetField<Stopwatch>(typeof(Game1), nameof(SGame._fpsStopwatch)).GetValue();
- private static float _fps
- {
- set => SGame.Reflection.GetField<float>(typeof(Game1), nameof(_fps)).SetValue(value);
- }
- private static Task _newDayTask => SGame.Reflection.GetField<Task>(typeof(Game1), nameof(_newDayTask)).GetValue();
- private Color bgColor => SGame.Reflection.GetField<Color>(this, nameof(this.bgColor)).GetValue();
- public RenderTarget2D screenWrapper => SGame.Reflection.GetProperty<RenderTarget2D>(this, "screen").GetValue(); // deliberately renamed to avoid an infinite loop
- public BlendState lightingBlend => SGame.Reflection.GetField<BlendState>(this, nameof(this.lightingBlend)).GetValue();
- private readonly Action drawFarmBuildings = () => SGame.Reflection.GetMethod(SGame.Instance, nameof(drawFarmBuildings)).Invoke();
- private readonly Action drawHUD = () => SGame.Reflection.GetMethod(SGame.Instance, nameof(drawHUD)).Invoke();
- private readonly Action drawDialogueBox = () => SGame.Reflection.GetMethod(SGame.Instance, nameof(drawDialogueBox)).Invoke();
- private readonly Action renderScreenBuffer = () => SGame.Reflection.GetMethod(SGame.Instance, nameof(renderScreenBuffer)).Invoke();
- // ReSharper restore ArrangeStaticMemberQualifier, ArrangeThisQualifier, InconsistentNaming
-#endif
-
-#if STARDEW_VALLEY_1_3
private static StringBuilder _debugStringBuilder => SGame.Reflection.GetField<StringBuilder>(typeof(Game1), nameof(_debugStringBuilder)).GetValue();
-#endif
+ // ReSharper restore ArrangeStaticMemberQualifier, ArrangeThisQualifier, InconsistentNaming
/*********
@@ -199,9 +166,6 @@ namespace StardewModdingAPI.Framework
this.Monitor = mo