To check how many of a given item is in an inventory in a given direction, you need to use the
sorter.list(direction) function, where
direction is an integer corresponding to the direction of the inventory in relationship to the sorter (0 for down, 1 for up, 2 for -Z, 3 for +Z, 4 for -X and 5 for +X). This function returns a table, so you've got to use a loop to look through it. I implemented a
checkInput() function like so:
inChest = sorter.list(inputDirection)
for id,count in pairs(inChest) do
if id==currency then
inputDirection is the direction of the ender chest, and
currency is the item ID of the desired payment item (in this case, 264). I did it this way so you can configure the payment later without having to change it everywhere. That returns hoe many diamonds, if any, are in the ender chest.
You can extract items from an inventory and move them to another inventory using the sorter function
sorter.extract(inputDirection, id, outputDirection, count). So, for example, to trade 10 diamonds for a specified record
item, you could do something like this (after verifying that payment is there, and the record is in stock):
sorter.extract(inputDirection, currency, paymentDirection, price)
sorter.extract(stockDirection, item, inputDirection, 1)
As for the buttons, the use of Advanced Monitors allows the use of touchscreens. I used Direwolf20's Button API, found on pastebin here (use
pastebin get S8x0K3ui button to download it directly from the ComputerCraft computer). It can be quite confusing, though. Direwolf has a tutorial for it here, which explains what each function does.
The core function that you're going to be using is
button.setTable(name, func, xmin, xmax, ymin, ymax), where
func is the name of the function that you want the button to perform when you push it. You need to do this for each button you want to have and use. For example:
button.setTable("^", cursorUp, true, 26, 27, 5, 8)
button.setTable("v", cursorDown, true, 26, 27, 13, 16)
button.setTable("Purchase", purchase, true, 10, 19, 18, 19)
(those positionings happen to work well on a 3x3 monitor setup).
I used a
cursorPos variable to track where the cursor was, and modified that variable accordingly with
cursorDown(). The function
purchase() uses the current cursor position as a reference to which item is selected, and makes the trade.
Monitor touch is a pullEvent that can be used to trigger an action. Like so:
while true do
event, side, x, y = os.pullEvent("monitor_touch")
I am very sorry that this answer is probably a tad longwinded and confusing. ComputerCraft can do that sometimes. In my tinkering with the various APIs needed, I actually wrote a storefront script, which can be found on pastebin here. Whether you want to use that, or look at it a little then figure it out on your own, go ahead. The latter is a much better practice in my opinion.
You may want to check out the ComputerCraft Wiki for more on the API involved. Be sure to check out Direwolf's tutorial on the Button API as well, since he's much better at explaining his code than I am. And, finally, though the documentation is a little scarce, there is some documentation on MiscPeripherals on the ComputerCraft forums, found here.