--(( Settings ))-- -- side relative to the computer -- or path if you are using cables local grindstone = peripheral.wrap("left") or error("Unable to wrap the grind stone!",0) local monitor = peripheral.wrap("top") or error("Unable to wrap the monitor!",0) -- colors local BG = colors.black local LOW = colors.red local MED = colors.orange local HIGH = colors.yellow local TOP = colors.lime -- how many times to draw per second local updateRate = 5 --(( Variables ))-- local ores = 0 local dusts = 0 local total = 0 local oresPercentage = 0 local dustsPercentage = 0 local mW,mH = monitor.getSize() local tW,tH = term.getSize() --(( Functions ))-- local function getAllStacks( inv ) local t = {} local size = inv.getInventorySize() for slot = 1,size do local item = inv.getStackInSlot(slot) or {} item.rawName = item.rawName or "" item.qty = item.qty or 0 item.dmg = item.dmg or 0 item.name = item.name or "" item.id = item.id or 0 t[slot] = item end return t end local function updateItems() local items = getAllStacks(grindstone) ores = 0 dusts = 0 total = 0 percentage = 0 for slot,item in pairs(items) do -- ores if slot >= 1 and slot <= 3 then ores = ores + item.qty end -- dusts if slot >= 4 and slot <= 6 then dusts = dusts + item.qty end end total = ores + dusts oresPercentage = ores / total dustsPercentage = dusts / total if ores == 0 then oresPercentage = 0 end if dusts == 0 then dustsPercentage = 0 end end local function draw() -- drawing a big bar over the monitor -- drawing from left to right -- black area monitor.setBackgroundColor(BG) for column = math.ceil(dustsPercentage * mW),mW,1 do for row = 1,mH,1 do monitor.setCursorPos(column,row) monitor.write(" ") end end -- colored area if dustsPercentage > 0 then -- 0% to 33% if dustsPercentage < 1/3 then monitor.setBackgroundColor(LOW) end -- 33% to 66% if dustsPercentage >= 1/3 and dustsPercentage < 2/3 then monitor.setBackgroundColor(MED) end -- 66% to 100% if dustsPercentage >= 2/3 and dustsPercentage < 1 then monitor.setBackgroundColor(HIGH) end -- 100% if dustsPercentage == 1 then monitor.setBackgroundColor(TOP) end end for column = 1,math.floor(dustsPercentage * mW),1 do for row = 1,mH,1 do monitor.setCursorPos(column,row) monitor.write(" ") end end -- on screen info term.clear() local ore = "ore" if ores > 1 then ore = "ores" end local dust = "dust" if dusts > 1 then dust = "dusts" end local text1 = "Currently "..ores.." "..ore.." and ".. dusts.." "..dust local text2 = math.floor(dustsPercentage*100).."% done" term.setCursorPos(tW/2-#text1/2,tH/2-1) term.write(text1) term.setCursorPos(tW/2-#text2/2,tH/2+1) term.write(text2) end --(( Main program ))-- -- main loop while true do updateItems() draw() sleep(1/updateRate) end