View difference between Paste ID: QLmU7Lre and 9JiAgeGp
SHOW: | | - or go back to the newest paste.
1
os.loadAPI("button")
2
local m = peripheral.wrap("right")
3
local rsOut = {}
4
local c = peripheral.wrap("container_chest_0")
5
local a = peripheral.wrap("tt_magnet_0")
6
local s = peripheral.wrap("auto_spawner_0")
7
m.clear()
8
local mobArray = {}
9
local buttonColors = {}
10
local attractorStatus = ""
11
local page = 1
12
local pages = 0
13
local currMob = ""
14
   
15
function fillMainTable()
16
   getCurrMob()
17
   checkExact()
18
   getAttractorStatus()
19
   m.clear()
20
   button.clearTable()
21
   button.setTable("Lights", lights, "", 4, 17, 2, 4)
22
   button.setTable("Door", door, "", 20, 33, 2, 4)
23
   button.setTable("Grinders", grinders, "", 4, 17, 6, 8)
24
   button.setTable("DrawBridge", drawBridge, "", 20, 33, 6, 8)
25
   button.setTable("Attractor", attractorToggle, "", 4, 17, 10, 12)
26
   button.setTable(attractorStatus, togglePush, "", 20, 33, 10, 12)
27
   button.setTable("Mob Selector", mobSelect, "", 20, 33, 14, 16)
28
   button.setTable("Spawner", spawner, "", 4, 17, 14, 16)
29
   --button.setTable("Refresh", refresh, "", 15, 35, 19, 19)
30
   print("Filled")
31
   button.screen()
32
   for i,j in pairs(buttonColors) do
33
      if not rsOut[j] then button.toggleButton(i) end
34
   end
35
   button.toggleButton("Attractor")
36
   button.label(1, 19, "Current Mob: "..currMob)
37
   button.label(30, 19, "Exact: "..currExact)
38
end
39
40
function getAttractorStatus()
41
   if a.isPulling() then
42
      attractorStatus = "Pulling"
43
   else
44
      attractorStatus = "Pushing"
45
   end
46
end
47
48
function togglePush()
49
   button.flash(attractorStatus)
50
   a.setPulling(not a.isPulling())
51
   fillMainTable()
52
end
53
54
function fillTable()
55
   checkMobs()
56
   checkExact()
57
   getCurrMob()
58
   m.clear()
59
   button.clearTable()
60
   local totalrows = 0
61
   local npp = 12 --names per page
62
   local numNames = 0
63
   local col = 2
64
   local row = 12
65
   local countRow = 1
66
   local currName = 0
67
   for i,j in pairs(mobArray) do
68
      totalrows = totalrows+1
69
   end
70
   pages = math.ceil(totalrows/npp)
71
   print(totalrows)
72
   for name,slot in pairs(mobArray) do
73
       currName = currName + 1
74
       if currName > npp*(page-1) and currName < npp*page+1 then
75
         row = 4+(countRow)
76
         button.setTable(string.sub(name, 0, 17), insertMob, slot, col, col+17 , row, row)
77
         if col == 21 then 
78
           col = 2 
79
           countRow = countRow + 2
80
         else 
81
           col = col+19 
82
         end
83
       end
84
   end
85
   button.setTable("Next Page", nextPage, "", 27, 38, 1, 1)
86
   button.setTable("Prev Page", prevPage, "", 2, 13, 1, 1)
87
   button.setTable("Main Menu", goMainMenu, "", 15, 25, 1, 1)
88
   button.setTable("Exact: "..currExact, switchExact, "", 21, 38, 18, 19)
89
   button.setTable("Remove Mob", removeMob, "", 2, 19, 18, 19)
90
   button.screen()
91
   button.label(15,3, "Page: "..tostring(page).." of "..tostring(pages))
92
   button.label(12, 16, "Current Mob: "..currMob)
93
end      
94
95
function getCurrMob()
96
   data = s.getStackInSlot(1)
97
   currMob = data.captured
98
end
99
100
function goMainMenu()
101
   fillMainTable()
102
--   refresh()
103
end
104
105
function checkExact()
106
   if s.getSpawnExact() then
107
      currExact = "Yes"
108
   else
109
      currExact = "No"
110
   end
111
end
112
113
function switchExact()
114
   s.setSpawnExact(not s.getSpawnExact())
115
   fillTable()
116
end
117
118
function nextPage()
119
   if page+1 <= pages then 
120
      page = page+1 
121
   end
122
   fillTable()
123
   sleep(0.25)
124
end
125
126
function prevPage()
127
   if page-1 >= 1 then page = page-1 end
128
   fillTable()
129
   sleep(0.25)
130
end   
131
                           
132
function getMobs()
133
   mobArray = {}
134
   for i = 1,27  do
135
      if c.getStackInSlot(i) then
136
         data = c.getStackInSlot(i)
137
         --print(i..":"..data.captured)
138
         mobArray[data.captured] = i
139
      end
140
   end
141
end
142
143
function findEmptySlot()
144
   for i = 1,27 do
145
      if not c.getStackInSlot(i) then
146
         return(i)
147
      end
148
   end
149
end
150
151
function removeMob()
152
   local slot = findEmptySlot()
153
   c.pullItem("down", 1, 1, slot)
154
end
155
156
function insertMob(info)
157
   removeMob()
158
   c.pushItem("down", info, 1, 1)
159
   fillTable()
160
end
161
162
function checkMobs()
163
   getMobs()
164
   --fillTable()
165
end
166
167
function initRS()
168
   rsOut[colors.white] = false
169
   rsOut[colors.orange] = true
170
   rsOut[colors.magenta] = false
171
   rsOut[colors.lightBlue] = true
172
   rsOut[colors.yellow] = false
173
   rsOut[colors.lime] = true
174
   buttonColors["Lights"] = colors.white
175
   buttonColors["Spawner"] = colors.orange
176
   buttonColors["Grinders"] = colors.magenta
177
   buttonColors["DrawBridge"] = colors.lightBlue
178
   buttonColors["Attractor"] = colors.yellow
179
   buttonColors["Door"] = colors.lime
180
end
181
182
function setRS()
183
   local colorOutput = 0
184
   for i,j in pairs(rsOut) do
185
      if j then colorOutput = colorOutput + i end
186
	end
187
	rs.setBundledOutput("left", colorOutput)
188
end
189
190
function lights()
191
   button.toggleButton("Lights")
192
   rsOut[colors.white] = not rsOut[colors.white]
193
   setRS()
194
end
195
196
function door()
197
   button.toggleButton("Door")
198
   rsOut[colors.lime] = not rsOut[colors.lime]
199
   setRS()
200
end
201
 
202
function spawner()
203
   button.toggleButton("Spawner")
204
   rsOut[colors.orange] = not rsOut[colors.orange]
205
   setRS()
206
end
207
208
function grinders()
209
   button.toggleButton("Grinders")
210
   rsOut[colors.magenta] = not rsOut[colors.magenta]
211
   setRS()
212
end
213
214
function drawBridge()
215
   button.toggleButton("DrawBridge")
216
   rsOut[colors.lightBlue] = not rsOut[colors.lightBlue]
217
   setRS()
218
end
219
220
function attractorToggle()
221
   button.toggleButton("Attractor")
222
   rsOut[colors.yellow] = not rsOut[colors.yellow]
223
   setRS()
224
end
225
226
function mobSelect()
227
   fillTable()
228
--   refresh()
229
--   getClick()
230
end
231
232
function getClick()
233
   local event,side,x,y = os.pullEvent()
234
   if event=="monitor_touch" then
235
     button.checkxy(x,y) 
236
   end
237
end
238
239
function refresh()
240
   m.clear()
241
   print("Refreshed")
242
   button.screen()
243
end
244
245
initRS()
246
setRS()
247
fillMainTable()
248
--refresh()
249
while true do getClick() end