public void ParseAndExecute(string alias, Arguments args = null) { var grammar = new GrammarParser(args); if (!grammar.HasSubject()) { ItemStrings.WHAT_ITEM.OutputResponse(alias); return; } var target = grammar.GetSubject(); var playerInventory = this.Command.GameState.Player.Inventory; var targetItem = _parserService.GetItemFromInventory(target, playerInventory); if (targetItem == null) { ItemStrings.ITEM_NOT_IN_PLAYER_INVENTORY.OutputResponse(target); return; } if (!targetItem.IsDroppable) { ItemStrings.ITEM_CANNOT_BE_DROPPED.OutputResponse(targetItem.Name); return; } this.Command.DropItem(targetItem); targetItem.ItemStrings.ITEM_DROPPED.OutputResponse(); }