mirror of
				https://github.com/LDDestroier/CC/
				synced 2025-10-31 15:32:59 +00:00 
			
		
		
		
	Create chestlist.lua
This commit is contained in:
		
							
								
								
									
										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) | ||||
		Reference in New Issue
	
	Block a user
	 LDDestroier
					LDDestroier