summaryrefslogtreecommitdiff
path: root/src/TrainerMod/Framework/Commands/Player
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-07-02 02:45:02 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-07-02 02:45:02 -0400
commit2ca49fba62f59135c2ed3ec7958cb78073ff486b (patch)
tree5b4e5251606622f615b105b683a2722f4e6b046c /src/TrainerMod/Framework/Commands/Player
parentf9482906ae7ce4dfd41bb4236e094be5d4fa7689 (diff)
downloadSMAPI-2ca49fba62f59135c2ed3ec7958cb78073ff486b.tar.gz
SMAPI-2ca49fba62f59135c2ed3ec7958cb78073ff486b.tar.bz2
SMAPI-2ca49fba62f59135c2ed3ec7958cb78073ff486b.zip
encapsulate TrainerMod's argument parsing (#302)
Diffstat (limited to 'src/TrainerMod/Framework/Commands/Player')
-rw-r--r--src/TrainerMod/Framework/Commands/Player/AddFlooringCommand.cs22
-rw-r--r--src/TrainerMod/Framework/Commands/Player/AddItemCommand.cs41
-rw-r--r--src/TrainerMod/Framework/Commands/Player/AddRingCommand.cs22
-rw-r--r--src/TrainerMod/Framework/Commands/Player/AddWallpaperCommand.cs22
-rw-r--r--src/TrainerMod/Framework/Commands/Player/AddWeaponCommand.cs15
-rw-r--r--src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs4
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetColorCommand.cs23
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetHealthCommand.cs6
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetImmunityCommand.cs6
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetLevelCommand.cs18
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetMaxHealthCommand.cs8
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetMaxStaminaCommand.cs6
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetMoneyCommand.cs4
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetNameCommand.cs33
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetSpeedCommand.cs19
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetStaminaCommand.cs4
-rw-r--r--src/TrainerMod/Framework/Commands/Player/SetStyleCommand.cs24
17 files changed, 84 insertions, 193 deletions
diff --git a/src/TrainerMod/Framework/Commands/Player/AddFlooringCommand.cs b/src/TrainerMod/Framework/Commands/Player/AddFlooringCommand.cs
index 57bd39e3..1bc96466 100644
--- a/src/TrainerMod/Framework/Commands/Player/AddFlooringCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/AddFlooringCommand.cs
@@ -1,5 +1,4 @@
-using System.Linq;
-using StardewModdingAPI;
+using StardewModdingAPI;
using StardewValley;
using StardewValley.Objects;
@@ -19,24 +18,11 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (!args.Any())
- {
- this.LogArgumentsInvalid(monitor, command);
+ // read arguments
+ if (!args.TryGetInt(0, "floor ID", out int floorID, min: 0, max: 39))
return;
- }
- if (!int.TryParse(args[0], out int floorID))
- {
- this.LogArgumentNotInt(monitor, command);
- return;
- }
- if (floorID < 0 || floorID > 39)
- {
- monitor.Log("There is no such flooring ID (must be between 0 and 39).", LogLevel.Error);
- return;
- }
// handle
Wallpaper wallpaper = new Wallpaper(floorID, isFloor: true);
diff --git a/src/TrainerMod/Framework/Commands/Player/AddItemCommand.cs b/src/TrainerMod/Framework/Commands/Player/AddItemCommand.cs
index 6d3cf968..190d040a 100644
--- a/src/TrainerMod/Framework/Commands/Player/AddItemCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/AddItemCommand.cs
@@ -1,5 +1,4 @@
-using System.Linq;
-using StardewModdingAPI;
+using StardewModdingAPI;
using StardewValley;
namespace TrainerMod.Framework.Commands.Player
@@ -18,39 +17,15 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (!args.Any())
- {
- this.LogArgumentsInvalid(monitor, command);
+ // read arguments
+ if (!args.TryGetInt(0, "item ID", out int itemID, min: 0))
return;
- }
- if (!int.TryParse(args[0], out int itemID))
- {
- this.LogUsageError(monitor, "The item ID must be an integer.", command);
- return;
- }
-
- // parse arguments
- int count = 1;
- int quality = 0;
- if (args.Length > 1)
- {
- if (!int.TryParse(args[1], out count))
- {
- this.LogUsageError(monitor, "The optional count is invalid.", command);
- return;
- }
- }
- if (args.Length > 2)
- {
- if (!int.TryParse(args[2], out quality))
- {
- this.LogUsageError(monitor, "The optional quality is invalid.", command);
- return;
- }
- }
+ if (!args.TryGetInt(1, "count", out int count, min: 1, required: false))
+ count = 1;
+ if (!args.TryGetInt(2, "quality", out int quality, min: Object.lowQuality, max: Object.bestQuality, required: false))
+ quality = Object.lowQuality;
// spawn item
var item = new Object(itemID, count) { quality = quality };
diff --git a/src/TrainerMod/Framework/Commands/Player/AddRingCommand.cs b/src/TrainerMod/Framework/Commands/Player/AddRingCommand.cs
index d62d8b5b..93c5b2a5 100644
--- a/src/TrainerMod/Framework/Commands/Player/AddRingCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/AddRingCommand.cs
@@ -1,5 +1,4 @@
-using System.Linq;
-using StardewModdingAPI;
+using StardewModdingAPI;
using StardewValley;
using StardewValley.Objects;
@@ -19,24 +18,11 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (!args.Any())
- {
- this.LogArgumentsInvalid(monitor, command);
+ // parse arguments
+ if (!args.TryGetInt(0, "ring ID", out int ringID, min: Ring.ringLowerIndexRange, max: Ring.ringUpperIndexRange))
return;
- }
- if (!int.TryParse(args[0], out int ringID))
- {
- monitor.Log("<item> is invalid", LogLevel.Error);
- return;
- }
- if (ringID < Ring.ringLowerIndexRange || ringID > Ring.ringUpperIndexRange)
- {
- monitor.Log($"There is no such ring ID (must be between {Ring.ringLowerIndexRange} and {Ring.ringUpperIndexRange}).", LogLevel.Error);
- return;
- }
// handle
Ring ring = new Ring(ringID);
diff --git a/src/TrainerMod/Framework/Commands/Player/AddWallpaperCommand.cs b/src/TrainerMod/Framework/Commands/Player/AddWallpaperCommand.cs
index e02b05a4..dddb9ffd 100644
--- a/src/TrainerMod/Framework/Commands/Player/AddWallpaperCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/AddWallpaperCommand.cs
@@ -1,5 +1,4 @@
-using System.Linq;
-using StardewModdingAPI;
+using StardewModdingAPI;
using StardewValley;
using StardewValley.Objects;
@@ -19,24 +18,11 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (!args.Any())
- {
- this.LogArgumentsInvalid(monitor, command);
+ // parse arguments
+ if (!args.TryGetInt(0, "wallpaper ID", out int wallpaperID, min: 0, max: 111))
return;
- }
- if (!int.TryParse(args[0], out int wallpaperID))
- {
- this.LogArgumentNotInt(monitor, command);
- return;
- }
- if (wallpaperID < 0 || wallpaperID > 111)
- {
- monitor.Log("There is no such wallpaper ID (must be between 0 and 111).", LogLevel.Error);
- return;
- }
// handle
Wallpaper wallpaper = new Wallpaper(wallpaperID);
diff --git a/src/TrainerMod/Framework/Commands/Player/AddWeaponCommand.cs b/src/TrainerMod/Framework/Commands/Player/AddWeaponCommand.cs
index ee94093f..c4ea3d6f 100644
--- a/src/TrainerMod/Framework/Commands/Player/AddWeaponCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/AddWeaponCommand.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using System.Linq;
using StardewModdingAPI;
using StardewValley;
using StardewValley.Tools;
@@ -20,19 +19,11 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (!args.Any())
- {
- this.LogArgumentsInvalid(monitor, command);
+ // parse arguments
+ if (!args.TryGetInt(0, "weapon ID", out int weaponID, min: 0))
return;
- }
- if (!int.TryParse(args[0], out int weaponID))
- {
- this.LogUsageError(monitor, "The weapon ID must be an integer.", command);
- return;
- }
// get raw weapon data
if (!Game1.content.Load<Dictionary<int, string>>("Data\\weapons").TryGetValue(weaponID, out string data))
diff --git a/src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs b/src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs
index a1b9aceb..68adf8c2 100644
--- a/src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/ListItemsCommand.cs
@@ -22,9 +22,9 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- var matches = this.GetItems(args).ToArray();
+ var matches = this.GetItems(args.ToArray()).ToArray();
// show matches
string summary = "Searching...\n";
diff --git a/src/TrainerMod/Framework/Commands/Player/SetColorCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetColorCommand.cs
index 00907fba..28ace0df 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetColorCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetColorCommand.cs
@@ -18,22 +18,23 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (args.Length <= 2)
- {
- this.LogArgumentsInvalid(monitor, command);
+ // parse arguments
+ if (!args.TryGet(0, "target", out string target, oneOf: new[] { "hair", "eyes", "pants" }))
return;
- }
- if (!this.TryParseColor(args[1], out Color color))
+ if (!args.TryGet(1, "color", out string rawColor))
+ return;
+
+ // parse color
+ if (!this.TryParseColor(rawColor, out Color color))
{
- this.LogUsageError(monitor, "The color should be an RBG value like '255,150,0'.", command);
+ this.LogUsageError(monitor, "Argument 1 (color) must be an RBG value like '255,150,0'.");
return;
}
// handle
- switch (args[0])
+ switch (target)
{
case "hair":
Game1.player.hairstyleColor = color;
@@ -49,10 +50,6 @@ namespace TrainerMod.Framework.Commands.Player
Game1.player.pantsColor = color;
monitor.Log("OK, your pants color is updated.", LogLevel.Info);
break;
-
- default:
- this.LogArgumentsInvalid(monitor, command);
- break;
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetHealthCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetHealthCommand.cs
index d3f06459..f64e9035 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetHealthCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetHealthCommand.cs
@@ -32,9 +32,9 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
+ // no-argument mode
if (!args.Any())
{
monitor.Log($"You currently have {(this.InfiniteHealth ? "infinite" : Game1.player.health.ToString())} health. Specify a value to change it.", LogLevel.Info);
@@ -57,7 +57,7 @@ namespace TrainerMod.Framework.Commands.Player
monitor.Log($"OK, you now have {Game1.player.health} health.", LogLevel.Info);
}
else
- this.LogArgumentNotInt(monitor, command);
+ this.LogArgumentNotInt(monitor);
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetImmunityCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetImmunityCommand.cs
index ff74f981..59b28a3c 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetImmunityCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetImmunityCommand.cs
@@ -18,7 +18,7 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
// validate
if (!args.Any())
@@ -28,13 +28,11 @@ namespace TrainerMod.Framework.Commands.Player
}
// handle
- if (int.TryParse(args[0], out int amount))
+ if (args.TryGetInt(0, "amount", out int amount, min: 0))
{
Game1.player.immunity = amount;
monitor.Log($"OK, you now have {Game1.player.immunity} immunity.", LogLevel.Info);
}
- else
- this.LogArgumentNotInt(monitor, command);
}
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetLevelCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetLevelCommand.cs
index 4982a0b8..b223aa9f 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetLevelCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetLevelCommand.cs
@@ -17,22 +17,16 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
// validate
- if (args.Length <= 2)
- {
- this.LogArgumentsInvalid(monitor, command);
+ if (!args.TryGet(0, "skill", out string skill, oneOf: new[] { "luck", "mining", "combat", "farming", "fishing", "foraging" }))
return;
- }
- if (!int.TryParse(args[1], out int level))
- {
- this.LogArgumentNotInt(monitor, command);
+ if (!args.TryGetInt(1, "level", out int level, min: 0, max: 10))
return;
- }
// handle
- switch (args[0])
+ switch (skill)
{
case "luck":
Game1.player.LuckLevel = level;
@@ -63,10 +57,6 @@ namespace TrainerMod.Framework.Commands.Player
Game1.player.ForagingLevel = level;
monitor.Log($"OK, your foraging skill is now {Game1.player.ForagingLevel}.", LogLevel.Info);
break;
-
- default:
- this.LogUsageError(monitor, "That isn't a valid skill.", command);
- break;
}
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetMaxHealthCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetMaxHealthCommand.cs
index 73ba252a..4b9d87dc 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetMaxHealthCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetMaxHealthCommand.cs
@@ -18,7 +18,7 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
// validate
if (!args.Any())
@@ -28,13 +28,11 @@ namespace TrainerMod.Framework.Commands.Player
}
// handle
- if (int.TryParse(args[0], out int maxHealth))
+ if (args.TryGetInt(0, "amount", out int amount, min: 1))
{
- Game1.player.maxHealth = maxHealth;
+ Game1.player.maxHealth = amount;
monitor.Log($"OK, you now have {Game1.player.maxHealth} max health.", LogLevel.Info);
}
- else
- this.LogArgumentNotInt(monitor, command);
}
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetMaxStaminaCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetMaxStaminaCommand.cs
index c21f6592..3997bb1b 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetMaxStaminaCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetMaxStaminaCommand.cs
@@ -18,7 +18,7 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
// validate
if (!args.Any())
@@ -28,13 +28,11 @@ namespace TrainerMod.Framework.Commands.Player
}
// handle
- if (int.TryParse(args[0], out int amount))
+ if (args.TryGetInt(0, "amount", out int amount, min: 1))
{
Game1.player.MaxStamina = amount;
monitor.Log($"OK, you now have {Game1.player.MaxStamina} max stamina.", LogLevel.Info);
}
- else
- this.LogArgumentNotInt(monitor, command);
}
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetMoneyCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetMoneyCommand.cs
index ad74499d..55e069a4 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetMoneyCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetMoneyCommand.cs
@@ -32,7 +32,7 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
// validate
if (!args.Any())
@@ -57,7 +57,7 @@ namespace TrainerMod.Framework.Commands.Player
monitor.Log($"OK, you now have {Game1.player.Money} gold.", LogLevel.Info);
}
else
- this.LogArgumentNotInt(monitor, command);
+ this.LogArgumentNotInt(monitor);
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetNameCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetNameCommand.cs
index 8284d882..3fd4475c 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetNameCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetNameCommand.cs
@@ -17,29 +17,34 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (args.Length <= 1)
- {
- monitor.Log($"Your name is currently '{Game1.player.Name}'. Type 'help player_setname' for usage.", LogLevel.Info);
+ // parse arguments
+ if (!args.TryGet(0, "target", out string target, oneOf: new[] { "player", "farm" }))
return;
- }
+ args.TryGet(1, "name", out string name, required: false);
// handle
- string target = args[0];
switch (target)
{
case "player":
- Game1.player.Name = args[1];
- monitor.Log($"OK, your player's name is now {Game1.player.Name}.", LogLevel.Info);
+ if (!string.IsNullOrWhiteSpace(name))
+ {
+ Game1.player.Name = args[1];
+ monitor.Log($"OK, your name is now {Game1.player.Name}.", LogLevel.Info);
+ }
+ else
+ monitor.Log($"Your name is currently '{Game1.player.Name}'. Type 'help player_setname' for usage.", LogLevel.Info);
break;
+
case "farm":
- Game1.player.farmName = args[1];
- monitor.Log($"OK, your farm's name is now {Game1.player.Name}.", LogLevel.Info);
- break;
- default:
- this.LogArgumentsInvalid(monitor, command);
+ if (!string.IsNullOrWhiteSpace(name))
+ {
+ Game1.player.farmName = args[1];
+ monitor.Log($"OK, your farm's name is now {Game1.player.farmName}.", LogLevel.Info);
+ }
+ else
+ monitor.Log($"Your farm's name is currently '{Game1.player.farmName}'. Type 'help player_setname' for usage.", LogLevel.Info);
break;
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetSpeedCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetSpeedCommand.cs
index a8c05d0c..40b87b62 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetSpeedCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetSpeedCommand.cs
@@ -1,5 +1,4 @@
-using System.Linq;
-using StardewModdingAPI;
+using StardewModdingAPI;
using StardewValley;
namespace TrainerMod.Framework.Commands.Player
@@ -18,22 +17,14 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (!args.Any())
- {
- monitor.Log($"You currently have {Game1.player.addedSpeed} added speed. Specify a value to change it.", LogLevel.Info);
+ // parse arguments
+ if (!args.TryGetInt(0, "added speed", out int amount, min: 0))
return;
- }
- if (!int.TryParse(args[0], out int addedSpeed))
- {
- this.LogArgumentNotInt(monitor, command);
- return;
- }
// handle
- Game1.player.addedSpeed = addedSpeed;
+ Game1.player.addedSpeed = amount;
monitor.Log($"OK, your added speed is now {Game1.player.addedSpeed}.", LogLevel.Info);
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetStaminaCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetStaminaCommand.cs
index 55a55eab..d44d1370 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetStaminaCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetStaminaCommand.cs
@@ -32,7 +32,7 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
// validate
if (!args.Any())
@@ -57,7 +57,7 @@ namespace TrainerMod.Framework.Commands.Player
monitor.Log($"OK, you now have {Game1.player.Stamina} stamina.", LogLevel.Info);
}
else
- this.LogArgumentNotInt(monitor, command);
+ this.LogArgumentNotInt(monitor);
}
}
diff --git a/src/TrainerMod/Framework/Commands/Player/SetStyleCommand.cs b/src/TrainerMod/Framework/Commands/Player/SetStyleCommand.cs
index 9ef5f88b..96e34af2 100644
--- a/src/TrainerMod/Framework/Commands/Player/SetStyleCommand.cs
+++ b/src/TrainerMod/Framework/Commands/Player/SetStyleCommand.cs
@@ -17,22 +17,16 @@ namespace TrainerMod.Framework.Commands.Player
/// <param name="monitor">Writes messages to the console and log file.</param>
/// <param name="command">The command name.</param>
/// <param name="args">The command arguments.</param>
- public override void Handle(IMonitor monitor, string command, string[] args)
+ public override void Handle(IMonitor monitor, string command, ArgumentParser args)
{
- // validate
- if (args.Length <= 1)
- {
- this.LogArgumentsInvalid(monitor, command);
+ // parse arguments
+ if (!args.TryGet(0, "target", out string target, oneOf: new[] { "hair", "shirt", "acc", "skin", "shoe", "swim", "gender" }))
return;
- }
- if (!int.TryParse(args[1], out int styleID))
- {
- this.LogArgumentsInvalid(monitor, command);
+ if (!args.TryGetInt(1, "style ID", out int styleID))
return;
- }
// handle
- switch (args[0])
+ switch (target)
{
case "hair":
Game1.player.changeHairStyle(styleID);
@@ -71,7 +65,7 @@ namespace TrainerMod.Framework.Commands.Player
monitor.Log("OK, you're now in your swimming suit.", LogLevel.Info);
break;
default:
- this.LogUsageError(monitor, "The swim value should be 0 (no swimming suit) or 1 (swimming suit).", command);
+ this.LogUsageError(monitor, "The swim value should be 0 (no swimming suit) or 1 (swimming suit).");
break;
}
break;
@@ -88,14 +82,10 @@ namespace TrainerMod.Framework.Commands.Player
monitor.Log("OK, you're now female.", LogLevel.Info);
break;
default:
- this.LogUsageError(monitor, "The gender value should be 0 (male) or 1 (female).", command);
+ this.LogUsageError(monitor, "The gender value should be 0 (male) or 1 (female).");
break;
}
break;
-
- default:
- this.LogArgumentsInvalid(monitor, command);
- break;
}
}
}