summaryrefslogtreecommitdiff
path: root/src/TrainerMod/Framework/Commands/Player
diff options
context:
space:
mode:
Diffstat (limited to 'src/TrainerMod/Framework/Commands/Player')
-rw-r--r--src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs55
1 files changed, 25 insertions, 30 deletions
diff --git a/src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs b/src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs
index 30c3de3b..7f4f454c 100644
--- a/src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs
@@ -2,8 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using StardewModdingAPI;
-using StardewValley;
-using StardewValley.Objects;
using TrainerMod.Framework.ItemData;
namespace TrainerMod.Framework.Commands.Player
@@ -12,6 +10,13 @@ namespace TrainerMod.Framework.Commands.Player
internal class ListItemsCommand : TrainerCommand
{
/*********
+ ** Properties
+ *********/
+ /// <summary>Provides methods for searching and constructing items.</summary>
+ private readonly ItemRepository Items = new ItemRepository();
+
+
+ /*********
** Public methods
*********/
/// <summary>Construct an instance.</summary>
@@ -24,12 +29,24 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="args">The command arguments.</param>
public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- var matches = this.GetItems(args.ToArray()).ToArray();
+ // validate
+ if (!Context.IsWorldReady)
+ {
+ monitor.Log("You need to load a save to use this command.", LogLevel.Error);
+ return;
+ }
- // show matches
+ // handle
+ SearchableItem[] matches =
+ (
+ from item in this.GetItems(args.ToArray())
+ orderby item.Type.ToString(), item.Name
+ select item
+ )
+ .ToArray();
string summary = "Searching...\n";
if (matches.Any())
- monitor.Log(summary + this.GetTableString(matches, new[] { "type", "id", "name" }, val => new[] { val.Type.ToString(), val.ID.ToString(), val.Name }), LogLevel.Info);
+ monitor.Log(summary + this.GetTableString(matches, new[] { "type", "name", "id" }, val => new[] { val.Type.ToString(), val.Name, val.ID.ToString() }), LogLevel.Info);
else
monitor.Log(summary + "No items found", LogLevel.Info);
}
@@ -40,7 +57,7 @@ namespace TrainerMod.Framework.Commands.Player
*********/
/// <summary>Get all items which can be searched and added to the player's inventory through the console.</summary>
/// <param name="searchWords">The search string to find.</param>
- private IEnumerable<ISearchItem> GetItems(string[] searchWords)
+ private IEnumerable<SearchableItem> GetItems(string[] searchWords)
{
// normalise search term
searchWords = searchWords?.Where(word => !string.IsNullOrWhiteSpace(word)).ToArray();
@@ -49,33 +66,11 @@ namespace TrainerMod.Framework.Commands.Player
// find matches
return (
- from item in this.GetItems()
- let term = $"{item.ID}|{item.Type}|{item.Name}"
+ from item in this.Items.GetAll()
+ let term = $"{item.ID}|{item.Type}|{item.Name}|{item.DisplayName}"
where searchWords == null || searchWords.All(word => term.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) != -1)
select item
);
}
-
- /// <summary>Get all items which can be searched and added to the player's inventory through the console.</summary>
- private IEnumerable<ISearchItem> GetItems()
- {
- // objects
- foreach (int id in Game1.objectInformation.Keys)
- {
- ISearchItem obj = id >= Ring.ringLowerIndexRange && id <= Ring.ringUpperIndexRange
- ? new SearchableRing(id)
- : (ISearchItem)new SearchableObject(id);
- if (obj.IsValid)
- yield return obj;
- }
-
- // weapons
- foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\weapons").Keys)
- {
- ISearchItem weapon = new SearchableWeapon(id);
- if (weapon.IsValid)
- yield return weapon;
- }
- }
}
}