summaryrefslogtreecommitdiff
path: root/src/TrainerMod/ItemData
diff options
context:
space:
mode:
Diffstat (limited to 'src/TrainerMod/ItemData')
-rw-r--r--src/TrainerMod/ItemData/ISearchItem.cs21
-rw-r--r--src/TrainerMod/ItemData/ItemType.cs15
-rw-r--r--src/TrainerMod/ItemData/SearchableObject.cs48
-rw-r--r--src/TrainerMod/ItemData/SearchableRing.cs48
-rw-r--r--src/TrainerMod/ItemData/SearchableWeapon.cs48
5 files changed, 180 insertions, 0 deletions
diff --git a/src/TrainerMod/ItemData/ISearchItem.cs b/src/TrainerMod/ItemData/ISearchItem.cs
new file mode 100644
index 00000000..b2f7c2b8
--- /dev/null
+++ b/src/TrainerMod/ItemData/ISearchItem.cs
@@ -0,0 +1,21 @@
+namespace TrainerMod.ItemData
+{
+ /// <summary>An item that can be searched and added to the player's inventory through the console.</summary>
+ internal interface ISearchItem
+ {
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>Whether the item is valid.</summary>
+ bool IsValid { get; }
+
+ /// <summary>The item ID.</summary>
+ int ID { get; }
+
+ /// <summary>The item name.</summary>
+ string Name { get; }
+
+ /// <summary>The item type.</summary>
+ ItemType Type { get; }
+ }
+} \ No newline at end of file
diff --git a/src/TrainerMod/ItemData/ItemType.cs b/src/TrainerMod/ItemData/ItemType.cs
new file mode 100644
index 00000000..2e049aa1
--- /dev/null
+++ b/src/TrainerMod/ItemData/ItemType.cs
@@ -0,0 +1,15 @@
+namespace TrainerMod.ItemData
+{
+ /// <summary>An item type that can be searched and added to the player through the console.</summary>
+ internal enum ItemType
+ {
+ /// <summary>Any object in <see cref="StardewValley.Game1.objectInformation"/> (except rings).</summary>
+ Object,
+
+ /// <summary>A ring in <see cref="StardewValley.Game1.objectInformation"/>.</summary>
+ Ring,
+
+ /// <summary>A weapon from <c>Data\weapons</c>.</summary>
+ Weapon
+ }
+}
diff --git a/src/TrainerMod/ItemData/SearchableObject.cs b/src/TrainerMod/ItemData/SearchableObject.cs
new file mode 100644
index 00000000..30362f54
--- /dev/null
+++ b/src/TrainerMod/ItemData/SearchableObject.cs
@@ -0,0 +1,48 @@
+using StardewValley;
+
+namespace TrainerMod.ItemData
+{
+ /// <summary>An object that can be searched and added to the player's inventory through the console.</summary>
+ internal class SearchableObject : ISearchItem
+ {
+ /*********
+ ** Properties
+ *********/
+ /// <summary>The underlying item.</summary>
+ private readonly Item Item;
+
+
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>Whether the item is valid.</summary>
+ public bool IsValid => this.Item != null && this.Item.Name != "Broken Item";
+
+ /// <summary>The item ID.</summary>
+ public int ID => this.Item.parentSheetIndex;
+
+ /// <summary>The item name.</summary>
+ public string Name => this.Item.Name;
+
+ /// <summary>The item type.</summary>
+ public ItemType Type => ItemType.Object;
+
+
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>Construct an instance.</summary>
+ /// <param name="id">The item ID.</param>
+ public SearchableObject(int id)
+ {
+ try
+ {
+ this.Item = new Object(id, 1);
+ }
+ catch
+ {
+ // invalid
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/TrainerMod/ItemData/SearchableRing.cs b/src/TrainerMod/ItemData/SearchableRing.cs
new file mode 100644
index 00000000..7751e6aa
--- /dev/null
+++ b/src/TrainerMod/ItemData/SearchableRing.cs
@@ -0,0 +1,48 @@
+using StardewValley.Objects;
+
+namespace TrainerMod.ItemData
+{
+ /// <summary>A ring that can be searched and added to the player's inventory through the console.</summary>
+ internal class SearchableRing : ISearchItem
+ {
+ /*********
+ ** Properties
+ *********/
+ /// <summary>The underlying item.</summary>
+ private readonly Ring Ring;
+
+
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>Whether the item is valid.</summary>
+ public bool IsValid => this.Ring != null;
+
+ /// <summary>The item ID.</summary>
+ public int ID => this.Ring.parentSheetIndex;
+
+ /// <summary>The item name.</summary>
+ public string Name => this.Ring.Name;
+
+ /// <summary>The item type.</summary>
+ public ItemType Type => ItemType.Ring;
+
+
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>Construct an instance.</summary>
+ /// <param name="id">The ring ID.</param>
+ public SearchableRing(int id)
+ {
+ try
+ {
+ this.Ring = new Ring(id);
+ }
+ catch
+ {
+ // invalid
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/TrainerMod/ItemData/SearchableWeapon.cs b/src/TrainerMod/ItemData/SearchableWeapon.cs
new file mode 100644
index 00000000..cc9ef459
--- /dev/null
+++ b/src/TrainerMod/ItemData/SearchableWeapon.cs
@@ -0,0 +1,48 @@
+using StardewValley.Tools;
+
+namespace TrainerMod.ItemData
+{
+ /// <summary>A weapon that can be searched and added to the player's inventory through the console.</summary>
+ internal class SearchableWeapon : ISearchItem
+ {
+ /*********
+ ** Properties
+ *********/
+ /// <summary>The underlying item.</summary>
+ private readonly MeleeWeapon Weapon;
+
+
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>Whether the item is valid.</summary>
+ public bool IsValid => this.Weapon != null;
+
+ /// <summary>The item ID.</summary>
+ public int ID => this.Weapon.initialParentTileIndex;
+
+ /// <summary>The item name.</summary>
+ public string Name => this.Weapon.Name;
+
+ /// <summary>The item type.</summary>
+ public ItemType Type => ItemType.Weapon;
+
+
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>Construct an instance.</summary>
+ /// <param name="id">The weapon ID.</param>
+ public SearchableWeapon(int id)
+ {
+ try
+ {
+ this.Weapon = new MeleeWeapon(id);
+ }
+ catch
+ {
+ // invalid
+ }
+ }
+ }
+} \ No newline at end of file