View difference between Paste ID: 4NB9hcbe and 4yqarp7y
SHOW: | | - or go back to the newest paste.
1-
local currentState=false
1+
2
3
function getJar()
4
  return peripheral.wrap("back")
5
end
6
7
function getAspect()
8
  if (jarPeripheral==nil) then
9
    jarPeripheral=getJar()
10
  end
11
  local tableAspect= jarPeripheral.getAspects()[1]
12
  if(tableAspect~=nil) then
13
    return tableAspect["name"]
14
  else
15
    return nil
16
  end
17
end
18
19
function getAspectAmount()
20
  local Aspect= getAspect()
21
  if( Aspect==nil) then
22
    return nil
23
  else
24
    return jarPeripheral.getAspectCount(Aspect)
25
  end
26
end
27
28
function openNetwork()
29
  if(rednet.isOpen("front")==false) then
30
    rednet.open("front")
31
  end
32
end
33
34
function split(str,pat)
35
  local t={}
36
  local fpat="(.-)"..pat
37
  local last_end=1
38
  local s, e, cap = str:find(fpat, 1)
39
  while s do
40
    if s ~= 1 or cap ~= "" then
41
      table.insert(t,cap)
42
    end
43
    last_end=e+1
44
    s, e, cap = str:find(fpat, last_end)
45
  end
46
  if last_end <= #str then
47
    cap = str:sub(last_end)
48
    table.insert(t, cap)
49
  end
50
  return t
51
end
52
53
function canDoStorage(qty)
54
  if (getAspectAmount()+qty<=64) then
55
    return true
56
  else
57
    return false
58
  end
59
end
60
61
function openStorage()
62
  redstone.setOutput("top",true)
63
end
64
65
function closeStorage()
66
  redstone.setOutput("top",false)
67
end
68
69
function mkStrAspectData()
70
  local AspectType=getAspect()
71
  if (AspectType==nil) then
72
    return "aspectdata-untyped"
73
  end
74
  return "aspectdata-"..AspectType.."-"..getAspectAmount()
75
end
76
77
function setStartup()
78
  if(fs.exists("startup")==false) then
79
    local startupFile=fs.open("startup","w")
80
    startupFile.write("os.run({}, \""..shell.getRunningProgram().."\")")
81
    startupFile.close()
82
  end
83
end
84
85-
    write(textutils.serialize(senderId))
85+
86
  openNetwork()
87
  while(true) do
88
    write("test")
89
    senderId, rawMessage, distance = rednet.receive()
90
    local messageTable=split(rawMessage,"-")
91
    --write(rawMessage)
92
    --write(textutils.serialize(senderId))
93
    if(messageTable[1]=="wherestore") then
94
      if(messageTable[2]==getAspect()) then
95
        if (canDoStorage(messageTable[3])) then
96
          write("Inform provider i'm avaible for this\n")
97
          rednet.send(senderId,"here")
98
        end          
99
      end
100
    elseif (messageTable[1]=="store") then
101
      if (messageTable[2]==getAspect()) then
102
        write("Begin to store\n")
103
        openStorage()
104
      end
105
    elseif(messageTable[1]=="stop") then
106
      write("End to store\n")
107
      closeStorage()
108
    elseif(messageTable[1]=="howmany") then
109
      write("Begin to store\n")
110
      rednet.send(senderId, mkStrAspectData())
111
    end      
112
  end
113
end
114
115
setStartup()
116
listenNetwork()
117
--write(getAspect())
118
--write(textutils.serialize(canDoStorage(16)))
119
--write(textutils.serialize(split("store-magic","-")))
120
--write(textutils.serialize(getAspectAmount()))