View difference between Paste ID: dUh038df and vQGyMpUY
SHOW: | | - or go back to the newest paste.
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]=0,[1]=1,[2]=2,[3]=3,[4]=4,[5]=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, 0xffff)
27+
        local subt = bit.band(uuid, 0x7fff)
28
        local dexorm = bit.bxor(subt, 0x3a69)
29
        local metadata = nil
30
        if dexorm ~= 28262 then -- item takes dmg
31
                metadata = bit.bxor(dexorm, 0x6e6c)
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
38
        stack.meta = metadata
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