 a guest
Jan 20th, 2013
2,558
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. --[[ Code by NeverCast
2.      This should be loaded like a typical api
3.      Feel free to name it what you like
4. --]]
5. local directions = { =0,=1,=2,=3,=4,=5,["down"] = 0, ["up"] = 1, ["-Z"] = 2, ["+Z"] = 3, ["-X"] = 4, ["+X"] = 5, ["+Y"] = 1, ["-Y"] = 0}
6. directions.south = directions["+Z"]
7. directions.east = directions["+X"]
8. directions.north = directions["-Z"]
9. directions.west = directions["-X"]
10.
11. -- Gets the Unique ID based on the ID and Meta
12. function getID(id, meta)
13.   if meta == nil then
14.     meta = 27268
15.   else
16.     meta = bit.bxor(meta, 0x6E6C)
17.   end
18.   local uuid = bit.bxor(id, 0x4F89) * 0x8000 + bit.bxor(meta, 0x3A69)
19.   return uuid
20. end
21.
22. -- Get a stack table from a single uuid and amount
23. -- This does all the math to reverse the unique ID algorithm that RG wrote.
24. -- Valid for version 2.3
25. function getStack(uuid, c)
26.         -- Reverse RG's fancy math
27.         local subt = bit.band(uuid, 0x7fff)
28.         local dexorm = bit.bxor(subt, 0x3a69)
30.         if dexorm ~= 28262 then -- item takes dmg
32.         end
33.         local id = bit.bxor((uuid-subt)/0x8000, 0x4f89)
34.         -- put it in to a nice table
35.         local stack = {}
36.         stack.amount = c
37.         stack.id = id
39.         return stack
40. end
41.
42. -- Get stacks from an Interactive Sorter
43. -- direction   : the direction of the Interactive Sorter Peripheral
44. -- invDirection: the direction of the inventory from the peripheral
45. -- valid options for invDirection are 0,1,2,3,4,5 ( original values),
46. -- north, south, east, west, up, down, and the +/-X,Y,Z strings.
47. -- (see directions variable)
48. function getStacks(direction, invDirection)
49.         if not peripheral.isPresent(direction) then
50.                 return false, "No Peripheral"
51.         end
52.         if peripheral.getType(direction) ~= "interactiveSorter" then
53.                 return false, "Not a sorter"
54.         end
55.         local stacks = {}
56.         for uuid,count in pairs(peripheral.call(direction, "list", directions[invDirection])) do
57.                 table.insert(stacks, getStack(uuid, count))
58.         end
59.         return true, stacks
60. end
RAW Paste Data