CCCPaste

worker_essence_farm_reader


-- peripheral setup
local import = peripheral.wrap("right")
local export = peripheral.wrap("left")
peripheral.find("modem", rednet.open)

-- variables setup
local items = {}

function stripModName(itemname)
	local parts= {}
	for part in itemname:gmatch("[^:]+") do
  		parts[ #parts + 1 ] = part
	end
	return parts[2]
end

function stripEssence(itemname)
	return itemname:gsub("_essence", "")
end

function addItem(item)
	local name = stripModName(item.name)
	name = stripEssence(name)
	if items[name] then
		items[name] = items[name] + item.count
	else
		items[name] = item.count
	end
end

function waitForRequest()
    parallel.waitForAny(wait,getRequest)
end

function wait()
 	sleep(0.5)
end
 
function getRequest()
    local sender, message, protocol = rednet.receive()
	if message == "provideEssenceCount" then
        rednet.send(sender, items, protocol)
	end
end

while true do
    for i=1,27 do
		local item = import.getItemDetail(i)
        if item then
            addItem(item)
			import.pushItems(peripheral.getName(export), i, item.count)
        end
    end
	waitForRequest()
end