I've considered a packet solution, but it got needlessly complicated very quickly, in that I have to send a packet that says "Current player used item X in hotbar slot Y on block Z" and the server has to 1) check for and consume one of the item in that hotbar slot if present, 2) try to find the item elsewhere in the inventory if it's changed in between sending the packet, 3) fail the operation (and somehow notify the client of this failure, which by the time it's happened could involve altered client state) if the item is not in the server inventory, then generate the new item in the server-side inventory, then send a packet back to the client about where the item (should have) ended up.
It's nuts. I had a look at Forestry which recently came out for 1.3, and his code for un-crating an item on right-click doesn't do any of this, but then again, I can't seem to actually make a crated item to test with, so maybe that hasn't been updated yet.
There has to be some better way than this around-the-world journey.