View difference between Paste ID: 63zeY2tF and zB6k3Pii
SHOW: | | - or go back to the newest paste.
1
local component = require("component")
2
local fs = require("filesystem")
3
local serialization = require("serialization")
4
local meController = component.proxy(component.me_controller.address)
5
local gpu = component.gpu
6
gpu.setResolution(160,50)
7
local gui = require("gui")
8
local event = require("event")
9
10
gui.checkVersion(2,5)
11
12
local prgName = "Applied Energistics 2 Auto Stock"
13
local version = "v1.3"
14
local lines = {}
15
local items = {}
16
local craftTasks = {}
17
local maxCpuUsage = 1
18
local currentCpuUsage = 0
19
20
local function LoadConfig()
21-
	local file,err = io.open("config.cfg", "r")
21+
  local file,err = io.open("config.cfg", "r")
22-
	if err == nil then
22+
  if err == nil then
23-
		local data = file:read("*n")
23+
    local data = file:read("*n")
24-
		maxCpuUsage = tonumber(data)
24+
    maxCpuUsage = tonumber(data)
25-
		gui.setText(mainGui, CpuMaxUsage, maxCpuUsage .. "")
25+
    gui.setText(mainGui, CpuMaxUsage, maxCpuUsage .. "")
26-
		file:close()
26+
    file:close()
27-
	end
27+
  end
28
end
29
30
local function SaveConfig()
31-
	local file,err = io.open("config.cfg", "w")
31+
  local file,err = io.open("config.cfg", "w")
32-
	file:write(maxCpuUsage)
32+
  file:write(maxCpuUsage)
33-
	file:close()
33+
  file:close()
34
end
35
36
local function LoadItems()
37-
	local file,err = io.open("items.cfg", "r")
37+
  local file,err = io.open("items.cfg", "r")
38-
	if err == nil then
38+
  if err == nil then
39-
		local data = file:read("*a")
39+
    local data = file:read("*a")
40-
		file:close()
40+
    file:close()
41
42-
		local itemsToLoad = serialization.unserialize(data)
42+
    local itemsToLoad = serialization.unserialize(data)
43-
		items = {}
43+
    items = {}
44-
		for index = 1, #itemsToLoad do
44+
    for index = 1, #itemsToLoad do
45-
			items[index] = itemsToLoad[index]
45+
      items[index] = itemsToLoad[index]
46-
		end
46+
    end
47
48-
		for index = 1, #items do
48+
    for index = 1, #items do
49-
			items[index]["Name"] = ""
49+
      items[index]["Name"] = ""
50-
			items[index]["CurrentCraftAmount"] = 0
50+
      items[index]["CurrentCraftAmount"] = 0
51-
			items[index]["CurrentValue"] = 0
51+
      items[index]["CurrentValue"] = 0
52-
			items[index]["Message"] = ""
52+
      items[index]["Message"] = ""
53-
		end
53+
    end
54-
	end
54+
  end
55
end
56
57
local function SaveItems()
58-
	local file,err = io.open("items.cfg", "w")
58+
  local file,err = io.open("items.cfg", "w")
59-
	local itemsToSave = {}
59+
  local itemsToSave = {}
60-
	for index = 1, #items do
60+
  for index = 1, #items do
61-
		itemsToSave[index] = {}
61+
    itemsToSave[index] = {}
62-
		itemsToSave[index]["rawItemName"] = items[index]["rawItemName"]
62+
    itemsToSave[index]["rawItemName"] = items[index]["rawItemName"]
63-
		itemsToSave[index]["rawItemDamage"] = items[index]["rawItemDamage"]
63+
    itemsToSave[index]["rawItemDamage"] = items[index]["rawItemDamage"]
64-
		itemsToSave[index]["Setpoint"] = items[index]["Setpoint"]
64+
    itemsToSave[index]["Setpoint"] = items[index]["Setpoint"]
65-
		itemsToSave[index]["CraftAmount"] = items[index]["CraftAmount"]
65+
    itemsToSave[index]["CraftAmount"] = items[index]["CraftAmount"]
66-
	end
66+
  end
67-
	file:write(serialization.serialize(itemsToSave))
67+
  file:write(serialization.serialize(itemsToSave))
68-
	file:close()
68+
  file:close()
69
70-
	LoadItems()
70+
  LoadItems()
71
end
72
73
mainGui = gui.newGui(1, 2, 159, 48, true)
74
75
local function DrawHeaders()
76-
	Header_Name = gui.newLabel(mainGui, 4, 2, "Name", 0xc0c0c0, 0x0, 30)
76+
  Header_Name = gui.newLabel(mainGui, 4, 2, "Name", 0xc0c0c0, 0x0, 30)
77-
	Header_Current = gui.newLabel(mainGui, 35, 2, "Current (Setpoint)", 0xc0c0c0, 0x0, 18)
77+
  Header_Current = gui.newLabel(mainGui, 35, 2, "Current (Setpoint)", 0xc0c0c0, 0x0, 18)
78-
	Header_Crafting = gui.newLabel(mainGui, 54, 2, "Crafting", 0xc0c0c0, 0x0, 8)
78+
  Header_Crafting = gui.newLabel(mainGui, 54, 2, "Crafting", 0xc0c0c0, 0x0, 8)
79-
	Header_Message = gui.newLabel(mainGui, 63, 2, "Message", 0xc0c0c0, 0x0, 15)
79+
  Header_Message = gui.newLabel(mainGui, 63, 2, "Message", 0xc0c0c0, 0x0, 15)
80-
	Header_Line = gui.newHLine(mainGui, 1, 3, 76)
80+
  Header_Line = gui.newHLine(mainGui, 1, 3, 76)
81-
	Header2_Name = gui.newLabel(mainGui, 84, 2, "Name", 0xc0c0c0, 0x0, 30)
81+
  Header2_Name = gui.newLabel(mainGui, 84, 2, "Name", 0xc0c0c0, 0x0, 30)
82-
	Header2_Current = gui.newLabel(mainGui, 115, 2, "Current (Setpoint)", 0xc0c0c0, 0x0, 18)
82+
  Header2_Current = gui.newLabel(mainGui, 115, 2, "Current (Setpoint)", 0xc0c0c0, 0x0, 18)
83-
	Header2_Crafting = gui.newLabel(mainGui, 134, 2, "Crafting", 0xc0c0c0, 0x0, 8)
83+
  Header2_Crafting = gui.newLabel(mainGui, 134, 2, "Crafting", 0xc0c0c0, 0x0, 8)
84-
	Header2_Message = gui.newLabel(mainGui, 143, 2, "Message", 0xc0c0c0, 0x0, 15)
84+
  Header2_Message = gui.newLabel(mainGui, 143, 2, "Message", 0xc0c0c0, 0x0, 15)
85-
	Header2_Line = gui.newHLine(mainGui, 81, 3, 76)
85+
  Header2_Line = gui.newHLine(mainGui, 81, 3, 76)
86
end
87
88
local function DrawLines()
89-
	local rowCount = 1
89+
  local rowCount = 1
90-
	for index = 1, 86 do
90+
  for index = 1, 86 do
91-
		if index % 2 == 1 then
91+
    if index % 2 == 1 then
92-
			lines[index] = {}
92+
      lines[index] = {}
93-
			lines[index]["Radio"] = gui.newRadio(mainGui, 1, 3 + rowCount)
93+
      lines[index]["Radio"] = gui.newRadio(mainGui, 1, 3 + rowCount)
94-
			lines[index]["Name"] = gui.newLabel(mainGui, 4, 3 + rowCount, "", 0xc0c0c0, 0x0, 30)
94+
      lines[index]["Name"] = gui.newLabel(mainGui, 4, 3 + rowCount, "", 0xc0c0c0, 0x0, 30)
95-
			lines[index]["Current"] = gui.newLabel(mainGui, 35, 3 + rowCount, "", 0xc0c0c0, 0x0, 18)
95+
      lines[index]["Current"] = gui.newLabel(mainGui, 35, 3 + rowCount, "", 0xc0c0c0, 0x0, 18)
96-
			lines[index]["Crafting"] = gui.newLabel(mainGui, 54, 3 + rowCount, "", 0xc0c0c0, 0x0, 8)
96+
      lines[index]["Crafting"] = gui.newLabel(mainGui, 54, 3 + rowCount, "", 0xc0c0c0, 0x0, 8)
97-
			lines[index]["Message"] = gui.newLabel(mainGui, 63, 3 + rowCount, "", 0xc0c0c0, 0x0, 15)
97+
      lines[index]["Message"] = gui.newLabel(mainGui, 63, 3 + rowCount, "", 0xc0c0c0, 0x0, 15)
98-
		else
98+
    else
99-
			lines[index] = {}
99+
      lines[index] = {}
100-
			lines[index]["Radio"] = gui.newRadio(mainGui, 81, 3 + rowCount)
100+
      lines[index]["Radio"] = gui.newRadio(mainGui, 81, 3 + rowCount)
101-
			lines[index]["Name"] = gui.newLabel(mainGui, 84, 3 + rowCount, "", 0xc0c0c0, 0x0, 30)
101+
      lines[index]["Name"] = gui.newLabel(mainGui, 84, 3 + rowCount, "", 0xc0c0c0, 0x0, 30)
102-
			lines[index]["Current"] = gui.newLabel(mainGui, 115, 3 + rowCount, "", 0xc0c0c0, 0x0, 18)
102+
      lines[index]["Current"] = gui.newLabel(mainGui, 115, 3 + rowCount, "", 0xc0c0c0, 0x0, 18)
103-
			lines[index]["Crafting"] = gui.newLabel(mainGui, 134, 3 + rowCount, "", 0xc0c0c0, 0x0, 8)
103+
      lines[index]["Crafting"] = gui.newLabel(mainGui, 134, 3 + rowCount, "", 0xc0c0c0, 0x0, 8)
104-
			lines[index]["Message"] = gui.newLabel(mainGui, 143, 3 + rowCount, "", 0xc0c0c0, 0x0, 15)
104+
      lines[index]["Message"] = gui.newLabel(mainGui, 143, 3 + rowCount, "", 0xc0c0c0, 0x0, 15)
105-
			rowCount = rowCount + 1
105+
      rowCount = rowCount + 1
106-
		end
106+
    end
107-
	end
107+
  end
108
109-
	for index = 1, 86 do
109+
  for index = 1, 86 do
110-
		gui.setVisible(mainGui, lines[index]["Radio"], false, true)
110+
    gui.setVisible(mainGui, lines[index]["Radio"], false, true)
111-
	end
111+
  end
112
end
113
114
local function EmptyLines()
115-
	for index = 1, 86 do
115+
  for index = 1, 86 do
116-
		gui.setVisible(mainGui, lines[index]["Radio"], false, true)
116+
    gui.setVisible(mainGui, lines[index]["Radio"], false, true)
117-
		gui.setText(mainGui, lines[index]["Name"], "")
117+
    gui.setText(mainGui, lines[index]["Name"], "")
118-
		gui.setText(mainGui, lines[index]["Current"], "")
118+
    gui.setText(mainGui, lines[index]["Current"], "")
119-
		gui.setText(mainGui, lines[index]["Crafting"], "")
119+
    gui.setText(mainGui, lines[index]["Crafting"], "")
120-
		gui.setText(mainGui, lines[index]["Message"], "")
120+
    gui.setText(mainGui, lines[index]["Message"], "")
121-
	end
121+
  end
122
end
123
124
local function FillLines()
125-
	for index = 1, #items do
125+
  for index = 1, #items do
126-
		gui.setVisible(mainGui, lines[index]["Radio"], true, true)
126+
    gui.setVisible(mainGui, lines[index]["Radio"], true, true)
127-
		gui.setEnable(mainGui, lines[index]["Radio"], true, true)
127+
    gui.setEnable(mainGui, lines[index]["Radio"], true, true)
128-
		gui.setText(mainGui, lines[index]["Name"], items[index]["Name"])
128+
    gui.setText(mainGui, lines[index]["Name"], items[index]["Name"])
129-
		gui.setText(mainGui, lines[index]["Current"], items[index]["CurrentValue"] .. " (" .. items[index]["Setpoint"] .. ")")
129+
    gui.setText(mainGui, lines[index]["Current"], items[index]["CurrentValue"] .. " (" .. items[index]["Setpoint"] .. ")")
130-
		if items[index]["CurrentCraftAmount"] > 0 then
130+
    if items[index]["CurrentCraftAmount"] > 0 then
131-
			gui.setText(mainGui, lines[index]["Crafting"], items[index]["CurrentCraftAmount"] .. "")
131+
      gui.setText(mainGui, lines[index]["Crafting"], items[index]["CurrentCraftAmount"] .. "")
132-
		else
132+
    else
133-
			gui.setText(mainGui, lines[index]["Crafting"], "")
133+
      gui.setText(mainGui, lines[index]["Crafting"], "")
134-
		end
134+
    end
135-
		gui.setText(mainGui, lines[index]["Message"], items[index]["Message"])
135+
    gui.setText(mainGui, lines[index]["Message"], items[index]["Message"])
136-
	end
136+
  end
137
end
138
139
local addGui_Open
140
local changeGui_Open
141
local addItem = {}
142
local changeItemIndex
143
144
local function Item_Name_Callback(guiID, textID, text)
145
   addItem["Name"] = text
146
end
147
148
local function Setpoint_Callback(guiID, textID, text)
149
   addItem["Setpoint"] = tonumber(text)
150
end
151
152
local function ItemDamage_Callback(guiID, textID, text)
153
   addItem["Damage"] = tonumber(text)
154
end
155
156
local function CraftAmount_Callback(guiID, textID, text)
157
   addItem["CraftAmount"] = tonumber(text)
158
end
159
160
local function addButtonCallback(guiID, id)
161-
	index = #items + 1
161+
  index = #items + 1
162-
	if index <= 86 then
162+
  if index <= 86 then
163-
		items[index] = {}
163+
    items[index] = {}
164-
		items[index]["rawItemName"] = addItem["Name"]
164+
    items[index]["rawItemName"] = addItem["Name"]
165-
		items[index]["rawItemDamage"] = addItem["Damage"]
165+
    items[index]["rawItemDamage"] = addItem["Damage"]
166-
		items[index]["Setpoint"] = addItem["Setpoint"]
166+
    items[index]["Setpoint"] = addItem["Setpoint"]
167-
		items[index]["CraftAmount"] = addItem["CraftAmount"]
167+
    items[index]["CraftAmount"] = addItem["CraftAmount"]
168
169-
		SaveItems()
169+
    SaveItems()
170
171-
		addGui_Open = false
171+
    addGui_Open = false
172-
	else
172+
  else
173-
		addGui_Open = false
173+
    addGui_Open = false
174-
		gui.showMsg("Maximum number of items reached (86 items).")
174+
    gui.showMsg("Maximum number of items reached (86 items).")
175-
	end
175+
  end
176
end
177
178
local function changeButtonCallback(guiID, id)
179-
	index = changeItemIndex
179+
  index = changeItemIndex
180-
	items[index] = {}
180+
  items[index] = {}
181-
	items[index]["rawItemName"] = addItem["Name"]
181+
  items[index]["rawItemName"] = addItem["Name"]
182-
	items[index]["rawItemDamage"] = addItem["Damage"]
182+
  items[index]["rawItemDamage"] = addItem["Damage"]
183-
	items[index]["Setpoint"] = addItem["Setpoint"]
183+
  items[index]["Setpoint"] = addItem["Setpoint"]
184-
	items[index]["CraftAmount"] = addItem["CraftAmount"]
184+
  items[index]["CraftAmount"] = addItem["CraftAmount"]
185
186-
	SaveItems()
186+
  SaveItems()
187
188-
	changeGui_Open = false
188+
  changeGui_Open = false
189
end
190
191
local function exitButtonCallback(guiID, id)
192-
	addGui_Open = false
192+
  addGui_Open = false
193-
	changeGui_Open = false
193+
  changeGui_Open = false
194
end
195
196
local function AddItem_Callback(guiID, buttonID)
197-
	local addGui = gui.newGui("center", "center", 62, 10, true, "Add Item")
197+
  local addGui = gui.newGui("center", "center", 62, 10, true, "Add Item")
198-
	Item_Name_Label = gui.newLabel(addGui, 1, 1, "   Item Name: ", 0xc0c0c0, 0x0, 7)
198+
  Item_Name_Label = gui.newLabel(addGui, 1, 1, "   Item Name: ", 0xc0c0c0, 0x0, 7)
199-
	Item_Name = gui.newText(addGui, 15, 1, 30, "", Item_Name_Callback, 30, false)
199+
  Item_Name = gui.newText(addGui, 15, 1, 30, "", Item_Name_Callback, 30, false)
200-
	Item_Damage_Label = gui.newLabel(addGui, 1, 3, " Item Damage: ", 0xc0c0c0, 0x0, 7)
200+
  Item_Damage_Label = gui.newLabel(addGui, 1, 3, " Item Damage: ", 0xc0c0c0, 0x0, 7)
201-
	Item_Damage = gui.newText(addGui, 15, 3, 8, "", ItemDamage_Callback, 8, false)
201+
  Item_Damage = gui.newText(addGui, 15, 3, 8, "", ItemDamage_Callback, 8, false)
202-
	Item_Damage_Help = gui.newLabel(addGui, 24, 3, "(Metadata number of item)", 0xc0c0c0, 0x0, 7)
202+
  Item_Damage_Help = gui.newLabel(addGui, 24, 3, "(Metadata number of item)", 0xc0c0c0, 0x0, 7)
203-
	Setpoint_Label = gui.newLabel(addGui, 1, 5, "    Setpoint: ", 0xc0c0c0, 0x0, 7)
203+
  Setpoint_Label = gui.newLabel(addGui, 1, 5, "    Setpoint: ", 0xc0c0c0, 0x0, 7)
204-
	Setpoint = gui.newText(addGui, 15, 5, 8, "", Setpoint_Callback, 8, false)
204+
  Setpoint = gui.newText(addGui, 15, 5, 8, "", Setpoint_Callback, 8, false)
205-
	Setpoint_Help = gui.newLabel(addGui, 24, 5, "(How many items to keep in stock)", 0xc0c0c0, 0x0, 7)	
205+
  Setpoint_Help = gui.newLabel(addGui, 24, 5, "(How many items to keep in stock)", 0xc0c0c0, 0x0, 7)  
206-
	CraftAmount_Label = gui.newLabel(addGui, 1, 7, "Craft Amount: ", 0xc0c0c0, 0x0, 7)
206+
  CraftAmount_Label = gui.newLabel(addGui, 1, 7, "Craft Amount: ", 0xc0c0c0, 0x0, 7)
207-
	CraftAmount = gui.newText(addGui, 15, 7, 8, "", CraftAmount_Callback, 8, false)
207+
  CraftAmount = gui.newText(addGui, 15, 7, 8, "", CraftAmount_Callback, 8, false)
208-
	CraftAmount_Help = gui.newLabel(addGui, 24, 7, "(How many items to craft max at once)", 0xc0c0c0, 0x0, 7)
208+
  CraftAmount_Help = gui.newLabel(addGui, 24, 7, "(How many items to craft max at once)", 0xc0c0c0, 0x0, 7)
209-
	addButton = gui.newButton(addGui, 41, 9, "Add Item", addButtonCallback)
209+
  addButton = gui.newButton(addGui, 41, 9, "Add Item", addButtonCallback)
210-
	exitButton = gui.newButton(addGui, 52, 9, "Cancel", exitButtonCallback)
210+
  exitButton = gui.newButton(addGui, 52, 9, "Cancel", exitButtonCallback)
211
212-
	addGui_Open = true
212+
  addGui_Open = true
213-
	addItem = {}
213+
  addItem = {}
214
215-
	gui.displayGui(addGui)
215+
  gui.displayGui(addGui)
216-
	while addGui_Open do
216+
  while addGui_Open do
217-
		gui.runGui(addGui)
217+
    gui.runGui(addGui)
218-
	end
218+
  end
219-
	gui.closeGui(addGui)
219+
  gui.closeGui(addGui)
220
end
221
222
local function RemoveItem_Callback(guiID, buttonID)
223
   local radioIndex = gui.getRadio(guiID)
224
   local removeIndex
225
226
   for index = 1, #lines do
227-
		if lines[index]["Radio"] == radioIndex then
227+
    if lines[index]["Radio"] == radioIndex then
228-
			removeIndex = index
228+
      removeIndex = index
229-
		end
229+
    end
230
   end
231
   
232
   table.remove(items, removeIndex)
233
   saveItems()
234
   EmptyLines()
235
end
236
237
local function ChangeItem_Callback(guiID, buttonID)
238-
	local radioIndex = gui.getRadio(guiID)
238+
  local radioIndex = gui.getRadio(guiID)
239-
	if radioIndex > 0 then
239+
  if radioIndex > 0 then
240-
		for index = 1, #lines do
240+
    for index = 1, #lines do
241-
			if lines[index]["Radio"] == radioIndex then
241+
      if lines[index]["Radio"] == radioIndex then
242-
				changeItemIndex = index
242+
        changeItemIndex = index
243-
			end
243+
      end
244-
		end
244+
    end
245
246-
		local changeGui = gui.newGui("center", "center", 62, 10, true, "Change Item")
246+
    local changeGui = gui.newGui("center", "center", 62, 10, true, "Change Item")
247-
		Item_Name_Label = gui.newLabel(changeGui, 1, 1, "   Item Name: ", 0xc0c0c0, 0x0, 7)
247+
    Item_Name_Label = gui.newLabel(changeGui, 1, 1, "   Item Name: ", 0xc0c0c0, 0x0, 7)
248-
		Item_Name = gui.newText(changeGui, 15, 1, 30, items[changeItemIndex]["rawItemName"], Item_Name_Callback, 30, false)
248+
    Item_Name = gui.newText(changeGui, 15, 1, 30, items[changeItemIndex]["rawItemName"], Item_Name_Callback, 30, false)
249-
		Item_Damage_Label = gui.newLabel(changeGui, 1, 3, " Item Damage: ", 0xc0c0c0, 0x0, 7)
249+
    Item_Damage_Label = gui.newLabel(changeGui, 1, 3, " Item Damage: ", 0xc0c0c0, 0x0, 7)
250-
		Item_Damage = gui.newText(changeGui, 15, 3, 8, items[changeItemIndex]["rawItemDamage"], ItemDamage_Callback, 8, false)
250+
    Item_Damage = gui.newText(changeGui, 15, 3, 8, items[changeItemIndex]["rawItemDamage"], ItemDamage_Callback, 8, false)
251-
		Item_Damage_Help = gui.newLabel(changeGui, 24, 3, "(Metadata number of item)", 0xc0c0c0, 0x0, 7)
251+
    Item_Damage_Help = gui.newLabel(changeGui, 24, 3, "(Metadata number of item)", 0xc0c0c0, 0x0, 7)
252-
		Setpoint_Label = gui.newLabel(changeGui, 1, 5, "    Setpoint: ", 0xc0c0c0, 0x0, 7)
252+
    Setpoint_Label = gui.newLabel(changeGui, 1, 5, "    Setpoint: ", 0xc0c0c0, 0x0, 7)
253-
		Setpoint = gui.newText(changeGui, 15, 5, 8, items[changeItemIndex]["Setpoint"], Setpoint_Callback, 8, false)
253+
    Setpoint = gui.newText(changeGui, 15, 5, 8, items[changeItemIndex]["Setpoint"], Setpoint_Callback, 8, false)
254-
		Setpoint_Help = gui.newLabel(changeGui, 24, 5, "(How many items to keep in stock)", 0xc0c0c0, 0x0, 7)	
254+
    Setpoint_Help = gui.newLabel(changeGui, 24, 5, "(How many items to keep in stock)", 0xc0c0c0, 0x0, 7)  
255-
		CraftAmount_Label = gui.newLabel(changeGui, 1, 7, "Craft Amount: ", 0xc0c0c0, 0x0, 7)
255+
    CraftAmount_Label = gui.newLabel(changeGui, 1, 7, "Craft Amount: ", 0xc0c0c0, 0x0, 7)
256-
		CraftAmount = gui.newText(changeGui, 15, 7, 8, items[changeItemIndex]["CraftAmount"], CraftAmount_Callback, 8, false)
256+
    CraftAmount = gui.newText(changeGui, 15, 7, 8, items[changeItemIndex]["CraftAmount"], CraftAmount_Callback, 8, false)
257-
		CraftAmount_Help = gui.newLabel(changeGui, 24, 7, "(How many items to craft max at once)", 0xc0c0c0, 0x0, 7)
257+
    CraftAmount_Help = gui.newLabel(changeGui, 24, 7, "(How many items to craft max at once)", 0xc0c0c0, 0x0, 7)
258-
		changeButton = gui.newButton(changeGui, 38, 9, "Change Item", changeButtonCallback)
258+
    changeButton = gui.newButton(changeGui, 38, 9, "Change Item", changeButtonCallback)
259-
		exitButton = gui.newButton(changeGui, 52, 9, "Cancel", exitButtonCallback)
259+
    exitButton = gui.newButton(changeGui, 52, 9, "Cancel", exitButtonCallback)
260
261-
		changeGui_Open = true
261+
    changeGui_Open = true
262-
		addItem = {}
262+
    addItem = {}
263-
		addItem["Name"] = items[changeItemIndex]["rawItemName"]
263+
    addItem["Name"] = items[changeItemIndex]["rawItemName"]
264-
		addItem["Damage"] = items[changeItemIndex]["rawItemDamage"]
264+
    addItem["Damage"] = items[changeItemIndex]["rawItemDamage"]
265-
		addItem["Setpoint"] = items[changeItemIndex]["Setpoint"]
265+
    addItem["Setpoint"] = items[changeItemIndex]["Setpoint"]
266-
		addItem["CraftAmount"] = items[changeItemIndex]["CraftAmount"]
266+
    addItem["CraftAmount"] = items[changeItemIndex]["CraftAmount"]
267
268-
		gui.displayGui(changeGui)
268+
    gui.displayGui(changeGui)
269-
		while changeGui_Open do
269+
    while changeGui_Open do
270-
			gui.runGui(changeGui)
270+
      gui.runGui(changeGui)
271-
		end
271+
    end
272-
		gui.closeGui(changeGui)
272+
    gui.closeGui(changeGui)
273-
	end
273+
  end
274
end
275
276
local function CpuMaxUsage_Callback(guiID, textID, text)
277-
	maxCpuUsage = tonumber(text)
277+
  maxCpuUsage = tonumber(text)
278-
	SaveConfig()
278+
  SaveConfig()
279
end
280
281
local function DrawButtons()
282-
	AddButton = gui.newButton(mainGui, 1, 1, "Add Item", AddItem_Callback)
282+
  AddButton = gui.newButton(mainGui, 1, 1, "Add Item", AddItem_Callback)
283-
	RemoveButton = gui.newButton(mainGui, 12, 1, "Remove Item", RemoveItem_Callback)
283+
  RemoveButton = gui.newButton(mainGui, 12, 1, "Remove Item", RemoveItem_Callback)
284-
	ChangeButton = gui.newButton(mainGui, 26, 1, "Change Item", ChangeItem_Callback)
284+
  ChangeButton = gui.newButton(mainGui, 26, 1, "Change Item", ChangeItem_Callback)
285-
	CpuUsageLabel = gui.newLabel(mainGui, 118, 1, "CPU usage: ", 0xc0c0c0, 0x0, 13)
285+
  CpuUsageLabel = gui.newLabel(mainGui, 118, 1, "CPU usage: ", 0xc0c0c0, 0x0, 13)
286-
	CpuMaxUsageLabel = gui.newLabel(mainGui, 134, 1, "Max CPU usage: ", 0xc0c0c0, 0x0, 15)
286+
  CpuMaxUsageLabel = gui.newLabel(mainGui, 134, 1, "Max CPU usage: ", 0xc0c0c0, 0x0, 15)
287-
	CpuMaxUsage = gui.newText(mainGui, 149, 1, 4, maxCpuUsage .. "", CpuMaxUsage_Callback, 4, false)
287+
  CpuMaxUsage = gui.newText(mainGui, 149, 1, 4, maxCpuUsage .. "", CpuMaxUsage_Callback, 4, false)
288
end
289
290
function CheckItemsAndCraft()
291-
	for index = 1, #items do
291+
  for index = 1, #items do
292-
		items[index]["Message"] = ""
292+
    items[index]["Message"] = ""
293-
		items[index]["CurrentValue"] = 0
293+
    items[index]["CurrentValue"] = 0
294-
		items[index]["Name"] = ""
294+
    items[index]["Name"] = ""
295-
		
295+
    
296-
		local meItem = meController.getItemsInNetwork({ name = items[index]["rawItemName"], damage = items[index]["rawItemDamage"]})
296+
    local meItem = meController.getItemsInNetwork({ name = items[index]["rawItemName"], damage = items[index]["rawItemDamage"]})
297-
		if meItem.n >= 1 then
297+
    if meItem.n >= 1 then
298-
			if not meItem[1].isCraftable then
298+
      if not meItem[1].isCraftable then
299-
				items[index]["Message"] = "Not Craftable"
299+
        items[index]["Message"] = "Not Craftable"
300-
			end
300+
      end
301
302-
			items[index]["CurrentValue"] = meItem[1].size
302+
      items[index]["CurrentValue"] = meItem[1].size
303-
			items[index]["Name"] = meItem[1].label
303+
      items[index]["Name"] = meItem[1].label
304
305-
			indexCraftTask = 1
305+
      indexCraftTask = 1
306-
			for indexCraftTasks = 1, #craftTasks do
306+
      for indexCraftTasks = 1, #craftTasks do
307-
				if craftTasks[indexCraftTasks].Id == index then indexCraftTask = indexCraftTasks end
307+
        if craftTasks[indexCraftTasks].Id == index then indexCraftTask = indexCraftTasks end
308-
			end
308+
      end
309
310-
			if craftTasks[indexCraftTask].task ~= nil and indexCraftTask > 1 then
310+
      if craftTasks[indexCraftTask].task ~= nil and indexCraftTask > 1 then
311-
				if craftTasks[indexCraftTask].task.isDone() or craftTasks[indexCraftTask].task.isCanceled() then
311+
        if craftTasks[indexCraftTask].task.isDone() or craftTasks[indexCraftTask].task.isCanceled() then
312-
					currentCpuUsage = currentCpuUsage - 1
312+
          currentCpuUsage = currentCpuUsage - 1
313-
					items[index]["CurrentCraftAmount"] = 0
313+
          items[index]["CurrentCraftAmount"] = 0
314-
					table.remove(craftTasks, indexCraftTask)
314+
          table.remove(craftTasks, indexCraftTask)
315-
				end
315+
        end
316-
			else
316+
      else
317-
				if items[index]["CurrentCraftAmount"] == 0 and items[index]["CurrentValue"] < items[index]["Setpoint"] then
317+
        if items[index]["CurrentCraftAmount"] == 0 and items[index]["CurrentValue"] < items[index]["Setpoint"] then
318-
					if currentCpuUsage < maxCpuUsage then
318+
          if currentCpuUsage < maxCpuUsage then
319-
						local meCpus = meController.getCpus()
319+
            local meCpus = meController.getCpus()
320-
						local occupiedCpus = 0
320+
            local occupiedCpus = 0
321-
						for cpuIndex = 1, #meCpus do
321+
            for cpuIndex = 1, #meCpus do
322-
							if meCpus[cpuIndex].busy then occupiedCpus = occupiedCpus + 1 end
322+
              if meCpus[cpuIndex].busy then occupiedCpus = occupiedCpus + 1 end
323-
						end
323+
            end
324-
					
324+
          
325-
						if occupiedCpus < #meCpus then
325+
            if occupiedCpus < #meCpus then
326-
							local currentCraftAmount = items[index]["Setpoint"] - items[index]["CurrentValue"]
326+
              local currentCraftAmount = items[index]["Setpoint"] - items[index]["CurrentValue"]
327-
							if currentCraftAmount > items[index]["CraftAmount"] then
327+
              if currentCraftAmount > items[index]["CraftAmount"] then
328-
								currentCraftAmount = items[index]["CraftAmount"]
328+
                currentCraftAmount = items[index]["CraftAmount"]
329-
							end
329+
              end
330
331-
							local craftables = meController.getCraftables({ name = items[index]["rawItemName"], damage = items[index]["rawItemDamage"]})
331+
              local craftables = meController.getCraftables({ name = items[index]["rawItemName"], damage = items[index]["rawItemDamage"]})
332-
							if craftables.n >= 1 then
332+
              if craftables.n >= 1 then
333-
								craftTask = craftables[1].request(currentCraftAmount)
333+
                craftTask = craftables[1].request(currentCraftAmount)
334
335-
								if craftTask.isCanceled() then
335+
                if craftTask.isCanceled() then
336-
									items[index]["Message"] = "No ingredients"
336+
                  items[index]["Message"] = "No ingredients"
337-
								else
337+
                else
338-
									items[index]["CurrentCraftAmount"] = currentCraftAmount
338+
                  items[index]["CurrentCraftAmount"] = currentCraftAmount
339-
									craftTaskWithId = { Id = index, task = craftTask }
339+
                  craftTaskWithId = { Id = index, task = craftTask }
340-
									newIndex = #craftTasks + 1
340+
                  newIndex = #craftTasks + 1
341-
									craftTasks[newIndex] = craftTaskWithId
341+
                  craftTasks[newIndex] = craftTaskWithId
342-
									currentCpuUsage = currentCpuUsage + 1
342+
                  currentCpuUsage = currentCpuUsage + 1
343-
								end
343+
                end
344-
							end
344+
              end
345-
						else
345+
            else
346-
							items[index]["Message"] = "All CPUs busy"
346+
              items[index]["Message"] = "All CPUs busy"
347-
						end
347+
            end
348-
					else
348+
          else
349-
						items[index]["Message"] = "All CPUs busy"
349+
            items[index]["Message"] = "All CPUs busy"
350-
					end
350+
          end
351-
				end
351+
        end
352-
			end
352+
      end
353-
		end
353+
    end
354-
	end
354+
  end
355
356-
	gui.setText(mainGui, CpuUsageLabel, "CPU Usage: " .. currentCpuUsage)
356+
  gui.setText(mainGui, CpuUsageLabel, "CPU Usage: " .. currentCpuUsage)
357
end
358
359
DrawHeaders()
360
DrawLines()
361
DrawButtons()
362
LoadConfig()
363
LoadItems()
364
365
gui.clearScreen()
366
gui.setTop("Applied Energistics 2 Auto Stock")
367
gui.setBottom("")
368
369
-- Create Empty craftTask
370
craftTasks[1] = { Id = 0, task = "" }
371
372
-- Main loop
373
while true do
374
   gui.runGui(mainGui)
375
   CheckItemsAndCraft()
376
   FillLines()
377
end