mirror of
https://github.com/LDDestroier/CC/
synced 2024-12-24 00:50:28 +00:00
Create chestlist.lua
This commit is contained in:
parent
88aa2e1e20
commit
ac63b33ed0
213
chestlist.lua
Normal file
213
chestlist.lua
Normal file
@ -0,0 +1,213 @@
|
||||
--Initially started by MinerMan132
|
||||
--Also made by LDDestroier I guess
|
||||
--Config
|
||||
|
||||
--List your chest type
|
||||
--(String)
|
||||
local chestType = "minecraft:ironchest_diamond"
|
||||
|
||||
--Select what container you want for dispensing
|
||||
--(String)
|
||||
local dropperName = "minecraft:dropper_240"
|
||||
local dropper = peripheral.wrap(dropperName)
|
||||
|
||||
--Determine how far from the bottom of the screen the list will cut off at
|
||||
--(Number)
|
||||
local listBottom = 4
|
||||
|
||||
--Choose what direction you want to dispense
|
||||
--(String)
|
||||
local dropdir = "east"
|
||||
|
||||
--Choose your input chest
|
||||
--(String)
|
||||
local input = "quark:quark_chest_1241"
|
||||
|
||||
|
||||
--===============================================--
|
||||
|
||||
if chestType == nil then
|
||||
error("Chest type is empty!")
|
||||
end
|
||||
if dropperName == nil then
|
||||
error("Output not selected!")
|
||||
end
|
||||
if dropdir == nil then
|
||||
error("Dropper direction not selected!")
|
||||
end
|
||||
if input == nil then
|
||||
error("Input container not selected!")
|
||||
end
|
||||
|
||||
--34 26
|
||||
--==============================================--
|
||||
local chests, chestNames = {}, {}
|
||||
for k,v in pairs(peripheral.getNames()) do
|
||||
if peripheral.getType(v) == chestType then
|
||||
chests[#chests + 1] = peripheral.wrap(v)
|
||||
chestNames[#chestNames + 1] = v
|
||||
end
|
||||
end
|
||||
local input = peripheral.wrap(input)
|
||||
local dropper = peripheral.wrap(dropperName)
|
||||
local monitor = peripheral.find("monitor")
|
||||
if monitor == nil then
|
||||
error("Monitor not found!")
|
||||
end
|
||||
monitor.setTextScale(0.5)
|
||||
local width, height = monitor.getSize()
|
||||
print(width,height)
|
||||
if (width <= 33) or (height <= 23) then
|
||||
error("Monitor too small!")
|
||||
end
|
||||
local max = 0
|
||||
for temp = 1, table.getn(chests) do
|
||||
local max = chests[temp].size() + max
|
||||
end
|
||||
term.redirect(monitor)
|
||||
term.clear()
|
||||
--===============================================--
|
||||
local getBiggestKey = function(tbl)
|
||||
local output = 0
|
||||
for k, v in pairs(tbl) do
|
||||
output = math.max(output, k)
|
||||
end
|
||||
return output
|
||||
end
|
||||
local pos = 0
|
||||
local maxScroll
|
||||
local fulllist, fullchecklist = {}, {}
|
||||
local itemData, itemCheckData = {}, {}
|
||||
function display()
|
||||
while true do
|
||||
fulllist = {}
|
||||
itemData = {}
|
||||
--term.setCursorPos(7,height - 2)
|
||||
--term.setTextColor(colors.orange)
|
||||
--write("<"..pos.."> ")
|
||||
|
||||
-- temp: vertical scroll offset when going through chests
|
||||
-- list: per-chest item list
|
||||
-- maxScroll: self-explanatory
|
||||
local temp, list = 0
|
||||
for i = 1, table.getn(chests) do
|
||||
list = chests[i].list()
|
||||
fulllist[temp + 1] = "PARTITION " .. ("-"):rep(width)
|
||||
fulllist[temp + 2] = "PARTITION " .. chestNames[i]
|
||||
fulllist[temp + 3] = "PARTITION " .. ("-"):rep(width)
|
||||
temp = temp + 3
|
||||
for k,v in pairs(list) do
|
||||
fulllist[temp + k] = v
|
||||
itemData[temp + k] = {
|
||||
chestName = chestNames[i],
|
||||
item = v,
|
||||
slot = k,
|
||||
}
|
||||
end
|
||||
--error(getBiggestKey(list))
|
||||
--error(textutils.serialize(list))
|
||||
temp = temp + getBiggestKey(list)
|
||||
fulllist[temp + 1] = "PARTITION "
|
||||
temp = temp + 1
|
||||
if i == table.getn(chests) then
|
||||
fulllist[temp + 1] = "PARTITION " .. ("-"):rep(width)
|
||||
temp = temp + 1
|
||||
end
|
||||
end
|
||||
fulllist[temp + 1] = "PARTITION End of the line, bucko"
|
||||
maxScroll = math.max(0, temp - height + (listBottom + 1))
|
||||
fullchecklist = fulllist
|
||||
itemCheckData = itemData
|
||||
|
||||
term.setCursorPos(7, height - 2)
|
||||
term.setTextColor(colors.orange)
|
||||
term.write("<" .. pos .. "/" .. maxScroll .. ">")
|
||||
|
||||
term.setCursorPos(1,2)
|
||||
-- temp: line number on screen
|
||||
-- temp2: current chest number
|
||||
-- pos: scroll position
|
||||
for temp = 1, height - listBottom do
|
||||
--for temp2 = 1, getBiggestKey(fulllist) do
|
||||
term.setCursorPos(1, temp)
|
||||
term.clearLine()
|
||||
if string.sub(tostring(fulllist[temp + pos] or ""), 1, 9) == "PARTITION" then
|
||||
term.setTextColor(colors.gray)
|
||||
term.write(fulllist[temp + pos]:sub(11))
|
||||
else
|
||||
if temp + pos <= getBiggestKey(fulllist) then
|
||||
term.setTextColor(colors.yellow)
|
||||
term.write("> ")
|
||||
end
|
||||
--if temp + pos <= getBiggestKey(fulllist[temp2]) then
|
||||
--if fulllist[temp2][temp + pos] ~= nil then
|
||||
if fulllist[temp + pos] ~= nil then
|
||||
term.setTextColor(colors.cyan)
|
||||
--write(fulllist[temp2][temp + pos].name)
|
||||
write(fulllist[temp + pos].count .. " x ")
|
||||
term.setTextColor(colors.green)
|
||||
write(fulllist[temp + pos].name)
|
||||
local xp = term.getCursorPos()
|
||||
term.write((" "):rep(width - xp))
|
||||
--print("")
|
||||
else
|
||||
term.write((" "):rep(width))
|
||||
end
|
||||
--end
|
||||
--print("")
|
||||
--end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function control()
|
||||
while true do
|
||||
local _, _2, xm, ym = os.pullEvent("monitor_touch")
|
||||
if ym == height - 2 then
|
||||
if xm == 2 then
|
||||
--if pos ~= 0 then
|
||||
pos = pos - 1
|
||||
--end
|
||||
elseif xm == 5 then
|
||||
--if pos ~= max - (height - listBottom) then
|
||||
pos = pos + 1
|
||||
--end
|
||||
end
|
||||
elseif ym == height - 1 then
|
||||
if xm == 2 then
|
||||
--if pos >= 10 then
|
||||
pos = pos - 10
|
||||
--end
|
||||
elseif xm == 5 then
|
||||
--if pos >= max - (height - 17) then
|
||||
pos = pos + 10
|
||||
--end
|
||||
end
|
||||
elseif ym >= 1 and ym <= (height - listBottom) then
|
||||
if fullchecklist[ym + pos] then
|
||||
--error(fullchecklist[ym + pos].name)
|
||||
if tostring(fullchecklist[ym + pos] or ""):sub(1,9) ~= "PARTITION" then
|
||||
--error(tostring(itemCheckData[ym + pos]))
|
||||
dropper.pullItems(itemCheckData[ym + pos].chestName, itemCheckData[ym + pos].slot, 1)
|
||||
dropper.drop(1)
|
||||
--error(fullchecklist[ym + pos].name)
|
||||
end
|
||||
end
|
||||
end
|
||||
pos = math.min(pos, maxScroll)
|
||||
pos = math.max(pos, 0)
|
||||
end
|
||||
end
|
||||
term.setCursorPos(2,height - 2)
|
||||
term.setBackgroundColor(colors.green)
|
||||
term.setTextColor(colors.white)
|
||||
write("<")
|
||||
term.setCursorPos(5,height - 2)
|
||||
write(">")
|
||||
term.setBackgroundColor(colors.blue)
|
||||
term.setCursorPos(2,height - 1)
|
||||
write("<")
|
||||
term.setCursorPos(5,height - 1)
|
||||
write(">")
|
||||
term.setBackgroundColor(colors.black)
|
||||
parallel.waitForAll(display,control)
|
Loading…
Reference in New Issue
Block a user