Impshial

Tekkit Base Monitor 2

Jul 24th, 2021 (edited)
977
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Base Monitoring System
  2. -- Version 0.3
  3. -----------------------------------------------------------------------------------------------------------------
  4. -- Tested on Computercraft version 1.58
  5. -- Minecraft version 1.6.4
  6. -----------------------------------------------------------------------------------------------------------------
  7. -- NOTE: THIS IS A WORK IN PROGRESS
  8. -----------------------------------------------------------------------------------------------------------------
  9. --
  10. -- This code was written by Impshial and is free software:
  11. -- You can redistribute it and/or modify
  12. -- it under the terms of the GNU General Public License as published by
  13. -- the Free Software Foundation, either version 3 of the License, or
  14. -- (at your option) any later version.
  15.  
  16. -- This program is distributed in the hope that it will be useful,
  17. -- but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. -- GNU General Public License for more details.
  20. --
  21. -- See https://www.gnu.org/licenses/ for details
  22. --
  23. -- Pastebin for this program: https://pastebin.com/e8UcSzuD
  24. --
  25. -- Pastebin for the ImpShial API: https://pastebin.com/pwBMKNCb
  26. --
  27. -- Instructions:
  28. --      1. Place an Advanced Computer
  29. --      2. Attach wired Modem to computer
  30. --      3. Set up a monitor (if there is no monitor present, the program will let you know)
  31. --      4. Attach wired Modem to monitor
  32. --      5. Connect computer and monitor via Network Cables
  33. --      6. Right-click each modem to connect devices to network
  34. --      7. Run the following command in Computer Terminal: "pastebin get B6kvjRxZ startup"
  35. --      8. Run "startup" (API will be downloaded and installed in this step)
  36. --      9. Attach machines via Modems and newtwork cable. Machines will automatically show up on monitor when connected
  37. --      10. Right-click on machine name to get details
  38. --
  39. -----------------------------------------------------------------------------------------------------------------
  40. -- Version notes:
  41. --  Added button-click capability for machines
  42. --  Works with most Thermal expansion machines
  43. --  GPL License verbiage added
  44. -----------------------------------------------------------------------------------------------------------------
  45. -- Bugs:
  46. --  Right-click intermittantly works
  47. --  Delay between right-click and machine being selected
  48. -----------------------------------------------------------------------------------------------------------------
  49. -- To Do:
  50. --  MinefactoryReloaded machines
  51. --
  52. -- Begin Program
  53. --
  54. -----------------------------------------------------------------------------------------------------------------
  55.  
  56. -- Variables
  57. local version = "0.3"       -- Program Version
  58. local scale                 -- the text scale for the monitor
  59. local monX                  -- Monitor Width
  60. local monY                  -- Monitor Height
  61. local line                  -- Monitor line variable
  62. local sizeXY                -- Text scale
  63. local mainLoop              -- Main loop variable. set to < 1 to stop loop
  64. local tableMachines = {}    -- Main machine table
  65. local render                -- Should we render the machine list?
  66. local renderReason          -- Why is our monitor too small?
  67. local clicked               -- Has the user clicked a machine?
  68. local clickedLine           -- which line was clicked
  69. local headerFooterColor     -- Color for the header/footer bar
  70. local headerFooterTextColor -- Color for header/footer text
  71. local selectedBackColor     -- Colors for selected item background
  72. local selectedTextColor     -- Colors for selected item text
  73. local detailsKeyColumn      -- Column to start at for details Key
  74. local altColor1             -- Alternating line color 1
  75. local altColor2             -- Alternating line color 2
  76. local altColorSwitch        -- Which color are we on. 0 or 1
  77. local detailsValueColumn        -- Column to start at for details Value
  78. local debugMode             -- For testing
  79.  
  80. -----------------------------------------------------------------------------------------------------------------
  81. -- Local Functions
  82. -----------------------------------------------------------------------------------------------------------------
  83.  
  84. -- Get number from machine/entity name
  85. function getMachineEntityNumber(machineName)
  86.     lastChars = string.sub(machineName, -2)
  87.    
  88.     if string.match(lastChars, "_") then
  89.         return string.sub(lastChars, -1)
  90.     else
  91.         return string.sub(lastChars, -2)
  92.     end
  93.    
  94.    
  95. end
  96. -----------------------------------------------------------------------------------------------------------------
  97. -- Startup code
  98. -----------------------------------------------------------------------------------------------------------------
  99.  
  100. -- Write startup message to Terminal
  101. term.clear()
  102.  
  103. -- Check to see if the API file exists
  104. if fs.exists("ImpAPI") == false then
  105.     term.setCursorPos(1,1)
  106.     term.setTextColor(colors.red)
  107.     term.write("Missing API File! Attempting to download...")
  108.     term.setTextColor(colors.white)
  109.     shell.run("pastebin get pwBMKNCb ImpAPI")   -- Go out and download it
  110.     sInput = nil
  111.     term.setCursorPos(1,5)
  112.     term.setTextColor(colors.green)
  113.     term.write("API Loaded.")
  114.     term.setCursorPos(1,7)
  115.     term.setTextColor(colors.white)
  116.     term.write("Press enter to continue...")
  117.     while true do
  118.        sInput = read()
  119.        if sInput ~= nil or sInput ~= "" then
  120.              break
  121.              
  122.        end
  123.     end
  124. end
  125.  
  126. os.loadAPI("ImpAPI")
  127.  
  128. term.clear()
  129. ImpAPI.draw_line_term(1,1,55,colors.green)
  130. term.setCursorPos(1,1)
  131. term.write("Base Monitoring System")
  132. ImpAPI.draw_line_term(1,2,55,colors.black)
  133. term.setCursorPos(1,3)
  134. term.write("Version"..version)
  135. term.setCursorPos(1,5)
  136. term.write("Finding Monitor...")
  137.  
  138. -- Find our monitor and define it
  139. mon=ImpAPI.monitorSearch()
  140.  
  141. -- Check to see if a monitor exists
  142. if mon then     -- Found it
  143.     ImpAPI.CTWrite(1,6,"Monitor Found!",colors.green)
  144.     ImpAPI.CTWrite(1,8,"System Running",colors.orange)
  145.    
  146. else            -- No monitor Present
  147.     ImpAPI.CTWrite(1,6,"Monitor Not Found!",colors.red)
  148.     ImpAPI.CTWrite(1,8,"Please Attach a Monitor",colors.red)
  149.     term.setCursorPos(1,9)
  150.     return
  151. end
  152.  
  153. -- Populate variables
  154. -------------------------------
  155.  
  156. -- Set the initial text scale
  157. scale = 0.5
  158.  
  159. -- Set the begining line for our text
  160. line = 1
  161.  
  162. -- Set the initial text scale
  163. sizeXY = 1
  164.  
  165. -- Set the main Loop variable
  166. mainLoop = 1
  167.  
  168. -- Set our monitor to the initial text scale
  169. mon.setTextScale(sizeXY)
  170.  
  171. -- Write out our machine list
  172. render = true
  173.  
  174. -- Nothing has been clicked
  175. clicked = false
  176.  
  177. -- Set our header/footer color
  178. headerFooterColor = colors.blue
  179.  
  180. -- Set our header/footer text color
  181. headerFooterTextColor = colors.white
  182.  
  183. -- Set background color for selected machine
  184. selectedBackColor = colors.white
  185.  
  186. -- Set text color for selected machine
  187. selectedTextColor = colors.black
  188.  
  189. -- Set the details Key column
  190. detailsKeyColumn = 43
  191.  
  192. -- Set the details value column value
  193. detailsValueColumn = 55
  194.  
  195. altColor1 = colors.lightGray
  196.  
  197. altColor2 = colors.lightBlue
  198.  
  199. altColorSwitch = 0
  200.  
  201. -- Debug mode?
  202. debugMode = false
  203. -----------------------------------------------------------------------------------------------------------------
  204. -- Main Loop
  205. -----------------------------------------------------------------------------------------------------------------
  206.  
  207. while mainLoop > 0 do
  208.    
  209.     -- Get our monitor size
  210.     monX, monY = mon.getSize()
  211.    
  212.     -- Change textScale when monitor size changes
  213.     if monX < 62 and scale == 1 then
  214.        
  215.         scale = 0.5
  216.     elseif monX > 142 and scale < 1 then
  217.        
  218.         scale = 0.5
  219.     elseif monX < 143 and scale < 1 then
  220.        
  221.         scale = 0.5
  222.     end
  223.            
  224.     mon.setTextScale(scale)
  225.    
  226.     -- If monitor is too small, let the user know
  227.    
  228.     if monX < 79 and scale == 0.5 then
  229.         render = false
  230.         renderReason = "Reason: Width"
  231.     elseif monY < 24 and scale == .05 then
  232.         render = false
  233.         renderReason = "Reason: Height"
  234.     elseif monY < 19 and scale == 1 then
  235.         render = false
  236.         renderReason = "Reason: Height"
  237.     else
  238.         render = true
  239.     end
  240.    
  241.     -- Get all peripherals on the network
  242.     machines=peripheral.getNames()
  243.        
  244.     --Create/Clear out main machine table
  245.     tableMachines = {}
  246.    
  247.    
  248.     if render == true then
  249.  
  250. -----------------------------------------------------------------------------------------------------------------
  251. -- Loop through machines
  252. -----------------------------------------------------------------------------------------------------------------
  253.         for i = 1, #machines do
  254.             machNbr = getMachineEntityNumber(machines[i])
  255.            
  256.             if string.match(machines[i], "thermalexpansion_machine_furnace") then
  257.                
  258.                 -- Check to see if furnace is active
  259.                 machine=peripheral.wrap(machines[i])
  260.                 isActive=machine.getStackInSlot(1)
  261.                 itemInSlot1 = ""
  262.                 itemQtyInSlot1 = ""
  263.                 itemInSlot2 = ""
  264.                 ItemQtyInSlot2 = ""
  265.                
  266.                 activeText = ""
  267.                
  268.                 if isActive then
  269.                     activeText = "Active"
  270.                 else
  271.                     activeText = "Idle"
  272.                 end
  273.                
  274.                 processing=machine.getStackInSlot(1)
  275.                 processed1=machine.getStackInSlot(2)
  276.                
  277.                 if processing then
  278.                
  279.                     for k,v in pairs(processing) do
  280.                         if k == "name" then
  281.                             itemInSlot1 = v
  282.                         elseif k == ("qty") then
  283.                             itemQtyInSlot1 = tostring(v)
  284.                         end
  285.                     end
  286.                 else
  287.                     itemInSlot1 = "Nothing"
  288.                     itemQtyInSlot1 = "0"
  289.                 end
  290.                
  291.                 if processed1 then 
  292.                     for k,v in pairs(processed1) do
  293.                         if k == "name" then
  294.                             itemInSlot2 = v
  295.                         elseif k == ("qty") then
  296.                             itemQtyInSlot2 = tostring(v)
  297.                         end
  298.                     end
  299.                 else
  300.                     itemInSlot2 = "Nothing"
  301.                     itemQtyInSlot2 = "0"
  302.                 end
  303.                
  304.                 table.insert(tableMachines, {   ["Machine"]="Redstone Furnace",
  305.                                                 ["Number"]=machNbr,
  306.                                                 ["HasEnergy"]=true,
  307.                                                 ["Energy"]=machine.getEnergy(),
  308.                                                 ["IsActive"]=activeText,
  309.                                                 ["PerName"]=machines[i],
  310.                                                 ["MaxEnergy"]=machine.getMaxEnergy(),
  311.                                                 ["ItemInSlot1"]=itemInSlot1,
  312.                                                 ["ItemQtyInSlot1"]=itemQtyInSlot1,
  313.                                                 ["slot1Name"]="Processing: ",
  314.                                                 ["ItemInSlot2"]=itemInSlot2,
  315.                                                 ["ItemQtyInSlot2"]=itemQtyInSlot2,
  316.                                                 ["slot2Name"]="Output: ",
  317.                                                 ["InventorySlots"]=2})
  318.                
  319.  
  320.             elseif string.match(machines[i], "thermalexpansion_machine_pulverizer") then
  321.                
  322.                 -- Check to see if pulverizer is active
  323.                 -- Check to see if furnace is active
  324.                 machine=peripheral.wrap(machines[i])
  325.                 isActive=machine.getStackInSlot(1)
  326.                 itemInSlot1 = ""
  327.                 itemQtyInSlot1 = ""
  328.                 itemInSlot2 = ""
  329.                 ItemQtyInSlot2 = ""
  330.                 itemInSlot3 = ""
  331.                 ItemQtyInSlot3 = ""
  332.                
  333.                 activeText = ""
  334.                
  335.                 if isActive then
  336.                     activeText = "Active"
  337.                 else
  338.                     activeText = "Idle"
  339.                 end
  340.                
  341.                 processing=machine.getStackInSlot(1)
  342.                 processed1=machine.getStackInSlot(2)
  343.                 processed2=machine.getStackInSlot(4)
  344.                
  345.                 if processing then
  346.                
  347.                     for k,v in pairs(processing) do
  348.                         if k == "name" then
  349.                             itemInSlot1 = v
  350.                         elseif k == ("qty") then
  351.                             itemQtyInSlot1 = tostring(v)
  352.                         end
  353.                     end
  354.                 else
  355.                     itemInSlot1 = "Nothing"
  356.                     itemQtyInSlot1 = "0"
  357.                 end
  358.                
  359.                 if processed1 then 
  360.                     for k,v in pairs(processed1) do
  361.                         if k == "name" then
  362.                             itemInSlot2 = v
  363.                         elseif k == ("qty") then
  364.                             itemQtyInSlot2 = tostring(v)
  365.                         end
  366.                     end
  367.                 else
  368.                     itemInSlot2 = "Nothing"
  369.                     itemQtyInSlot2 = "0"
  370.                 end
  371.                
  372.                 if processed2 then 
  373.                     for k,v in pairs(processed2) do
  374.                         if k == "name" then
  375.                             itemInSlot3 = v
  376.                         elseif k == ("qty") then
  377.                             itemQtyInSlot3 = tostring(v)
  378.                         end
  379.                     end
  380.                 else
  381.                     itemInSlot3 = "Nothing"
  382.                     itemQtyInSlot3 = "0"
  383.                 end
  384.                
  385.                 table.insert(tableMachines, {   ["Machine"]="Pulverizer",
  386.                                                 ["Number"]=machNbr,
  387.                                                 ["HasEnergy"]=true,
  388.                                                 ["Energy"]=machine.getEnergy(),
  389.                                                 ["IsActive"]=activeText,
  390.                                                 ["PerName"]=machines[i],
  391.                                                 ["MaxEnergy"]=machine.getMaxEnergy(),
  392.                                                 ["ItemInSlot1"]=itemInSlot1,
  393.                                                 ["ItemQtyInSlot1"]=itemQtyInSlot1,
  394.                                                 ["slot1Name"]="Processing: ",
  395.                                                 ["ItemInSlot2"]=itemInSlot2,
  396.                                                 ["ItemQtyInSlot2"]=itemQtyInSlot2,
  397.                                                 ["slot2Name"]="Output: ",
  398.                                                 ["ItemInSlot3"]=itemInSlot3,
  399.                                                 ["ItemQtyInSlot3"]=itemQtyInSlot3,
  400.                                                 ["slot3Name"]="Bonus: ",
  401.                                                 ["InventorySlots"]=3})
  402.                
  403.  
  404.             elseif string.match(machines[i], "thermalexpansion_machine_smelter") then
  405.                
  406.                 -- Check to see if induction smelter is active
  407.                 machine=peripheral.wrap(machines[i])
  408.                 isActive=machine.getStackInSlot(1)
  409.                
  410.                 if isActive then
  411.                     activeText = "Active"
  412.                 else
  413.                     activeText = "Idle"
  414.                 end
  415.                
  416.                 processing=machine.getStackInSlot(1)
  417.                 processed1=machine.getStackInSlot(2)
  418.                 processed2=machine.getStackInSlot(3)
  419.                
  420.                 if processing then
  421.                
  422.                     for k,v in pairs(processing) do
  423.                         if k == "name" then
  424.                             itemInSlot1 = v
  425.                         elseif k == ("qty") then
  426.                             itemQtyInSlot1 = tostring(v)
  427.                         end
  428.                     end
  429.                 else
  430.                     itemInSlot1 = "Nothing"
  431.                     itemQtyInSlot1 = "0"
  432.                 end
  433.                
  434.                 if processed1 then 
  435.                     for k,v in pairs(processed1) do
  436.                         if k == "name" then
  437.                             itemInSlot2 = v
  438.                         elseif k == ("qty") then
  439.                             itemQtyInSlot2 = tostring(v)
  440.                         end
  441.                     end
  442.                 else
  443.                     itemInSlot2 = "Nothing"
  444.                     itemQtyInSlot2 = "0"
  445.                 end
  446.                
  447.                 if processed2 then 
  448.                     for k,v in pairs(processed2) do
  449.                         if k == "name" then
  450.                             itemInSlot3 = v
  451.                         elseif k == ("qty") then
  452.                             itemQtyInSlot3 = tostring(v)
  453.                         end
  454.                     end
  455.                 else
  456.                     itemInSlot3 = "Nothing"
  457.                     itemQtyInSlot3 = "0"
  458.                 end
  459.                
  460.                 table.insert(tableMachines, {   ["Machine"]="Induction Smelter",
  461.                                                 ["Number"]=machNbr,
  462.                                                 ["Energy"]=machine.getEnergy(),
  463.                                                 ["IsActive"]=activeText,
  464.                                                 ["PerName"]=machines[i],
  465.                                                 ["MaxEnergy"]=machine.getMaxEnergy(),
  466.                                                 ["IsActive"]=activeText,
  467.                                                 ["ItemInSlot1"]=itemInSlot1,
  468.                                                 ["ItemQtyInSlot1"]=itemQtyInSlot1,
  469.                                                 ["ItemInSlot2"]=itemInSlot2,
  470.                                                 ["ItemQtyInSlot2"]=itemQtyInSlot2,
  471.                                                 ["ItemInSlot3"]=itemInSlot3,
  472.                                                 ["ItemQtyInSlot3"]=itemQtyInSlot3
  473.                                             })
  474.                
  475.                
  476.             elseif string.match(machines[i], "thermalexpansion_machine_crucible") then
  477.                
  478.                 -- Check to see if transposer is active
  479.                 machine=peripheral.wrap(machines[i])
  480.                 isActive=machine.getStackInSlot(1)
  481.                 if isActive then
  482.                     activeText = "Active"
  483.                 else
  484.                     activeText = "Idle"
  485.                 end
  486.                
  487.                 processing=machine.getStackInSlot(1)
  488.                 processed1=machine.getStackInSlot(2)
  489.                
  490.                
  491.                 if processing then
  492.                
  493.                     for k,v in pairs(processing) do
  494.                         if k == "name" then
  495.                             itemInSlot1 = v
  496.                         elseif k == ("qty") then
  497.                             itemQtyInSlot1 = tostring(v)
  498.                         end
  499.                     end
  500.                 else
  501.                     itemInSlot1 = "Nothing"
  502.                     itemQtyInSlot1 = "0"
  503.                 end
  504.                
  505.                 if processed1 then 
  506.                     for k,v in pairs(processed1) do
  507.                         if k == "name" then
  508.                             itemInSlot2 = v
  509.                         elseif k == ("qty") then
  510.                             itemQtyInSlot2 = tostring(v)
  511.                         end
  512.                     end
  513.                 else
  514.                     itemInSlot2 = "Nothing"
  515.                     itemQtyInSlot2 = "0"
  516.                 end
  517.                
  518.                
  519.                 table.insert(tableMachines, {   ["Machine"]="Magma Crucible",
  520.                                                 ["Number"]=machNbr,
  521.                                                 ["Energy"]=machine.getEnergy(),
  522.                                                 ["IsActive"]=activeText,
  523.                                                 ["PerName"]=machines[i],
  524.                                                 ["MaxEnergy"]=machine.getMaxEnergy(),
  525.                                                 ["IsActive"]=activeText,
  526.                                                 ["ItemInSlot1"]=itemInSlot1,
  527.                                                 ["ItemQtyInSlot1"]=itemQtyInSlot1,
  528.                                                 ["ItemInSlot2"]=itemInSlot2,
  529.                                                 ["ItemQtyInSlot2"]=itemQtyInSlot2
  530.                                             })
  531.            
  532.                
  533.                                                
  534.             elseif string.match(machines[i], "thermalexpansion_machine_transposer") then
  535.                
  536.                 -- Check to see if transposer is active
  537.                 machine=peripheral.wrap(machines[i])
  538.                 isActive=machine.getStackInSlot(1)
  539.                 if isActive then
  540.                     activeText = "Active"
  541.                 else
  542.                     activeText = "Idle"
  543.                 end
  544.                
  545.                 processing=machine.getStackInSlot(1)
  546.                 processed1=machine.getStackInSlot(2)
  547.                
  548.                
  549.                 if processing then
  550.                
  551.                     for k,v in pairs(processing) do
  552.                         if k == "name" then
  553.                             itemInSlot1 = v
  554.                         elseif k == ("qty") then
  555.                             itemQtyInSlot1 = tostring(v)
  556.                         end
  557.                     end
  558.                 else
  559.                     itemInSlot1 = "Nothing"
  560.                     itemQtyInSlot1 = "0"
  561.                 end
  562.                
  563.                 if processed1 then 
  564.                     for k,v in pairs(processed1) do
  565.                         if k == "name" then
  566.                             itemInSlot2 = v
  567.                         elseif k == ("qty") then
  568.                             itemQtyInSlot2 = tostring(v)
  569.                         end
  570.                     end
  571.                 else
  572.                     itemInSlot2 = "Nothing"
  573.                     itemQtyInSlot2 = "0"
  574.                 end
  575.                
  576.                
  577.                 table.insert(tableMachines, {   ["Machine"]="Fluid Transposer",
  578.                                                 ["Number"]=machNbr,
  579.                                                 ["Energy"]=machine.getEnergy(),
  580.                                                 ["IsActive"]=activeText,
  581.                                                 ["PerName"]=machines[i],
  582.                                                 ["MaxEnergy"]=machine.getMaxEnergy(),
  583.                                                 ["IsActive"]=activeText,
  584.                                                 ["ItemInSlot1"]=itemInSlot1,
  585.                                                 ["ItemQtyInSlot1"]=itemQtyInSlot1,
  586.                                                 ["ItemInSlot2"]=itemInSlot2,
  587.                                                 ["ItemQtyInSlot2"]=itemQtyInSlot2
  588.                                             })
  589.             end
  590.         end
  591.        
  592. -----------------------------------------------------------------------------------------------------------------
  593. -- Write static text to the main monitor
  594. -----------------------------------------------------------------------------------------------------------------      
  595.         mon.clear()
  596.        
  597.         -- Header
  598.         ImpAPI.draw_line(1, line, monX, headerFooterColor, mon)
  599.         ImpAPI.CWrite(2, line, mon, "Networked Machines", headerFooterTextColor)
  600.         ImpAPI.CWrite(29, line, mon, "Status", headerFooterTextColor)
  601.         ImpAPI.CWrite(40, line, mon, "Energy", headerFooterTextColor)
  602.         ImpAPI.CWrite(58, line, mon, "Processing", headerFooterTextColor)
  603.         ImpAPI.CWrite(94, line, mon, "Output", headerFooterTextColor)
  604.         ImpAPI.CWrite(118, line, mon, "Bonus Output", headerFooterTextColor)
  605.        
  606.         -- Center details location based on monitor width
  607.         -- startLeft = 41 + ((monX - 41) / 2 - 3)
  608.         -- ImpAPI.CWrite(startLeft, line, mon, "Details", headerFooterTextColor)
  609.        
  610.         line = line + 2
  611.        
  612.         -- Details line
  613.         -- for l = 2,(monY -1) do
  614.             -- if altColorSwitch == 0 then
  615.                 -- ImpAPI.draw_line(1, l, monX, altColor1, mon)
  616.                 -- altColorSwitch = 1
  617.             -- else
  618.                 -- ImpAPI.draw_line(1, l, monX, altColor2, mon)
  619.                 -- altColorSwitch = 0
  620.             -- end
  621.         -- end
  622.    
  623.        
  624.         -- Footer
  625.         ImpAPI.draw_line(1, monY, monX, headerFooterColor, mon)
  626.         ImpAPI.CWrite(1,monY,mon,"Impshial Base Monitor: v"..version, headerFooterTextColor)
  627.         ImpAPI.draw_line(1, (monY+1), monX, colors.black, mon)
  628.                
  629. -----------------------------------------------------------------------------------------------------------------
  630. -- Begin machine loop
  631. -----------------------------------------------------------------------------------------------------------------  
  632.  
  633.         altColorSwitch = 1 
  634.         ImpAPI.draw_line(1, 2, monX, altColor1, mon)
  635.        
  636.         for i = 1,#tableMachines do
  637.             machName = tableMachines[i].Machine
  638.             machNumber = tableMachines[i].Number
  639.             machHasEnergy = tableMachines[i].HasEnergy
  640.             invSlots = tableMachines[i].InventorySlots
  641.                        
  642.             machColor = colors.orange
  643.                        
  644.            
  645.             --ImpAPI.draw_line(1,line, 39, colors.black, mon)
  646.                        
  647.             mon.setCursorPos(2,line)
  648.            
  649.             if altColorSwitch == 0 then
  650.                 ImpAPI.draw_line(1, line, monX, altColor1, mon)
  651.                 altColorSwitch = 1
  652.             else
  653.                 ImpAPI.draw_line(1, line, monX, altColor2, mon)
  654.                 altColorSwitch = 0
  655.             end
  656.            
  657.            
  658.             if clicked == true and clickedLine == line then
  659.                     machColor = selectedTextColor
  660.             else
  661.                 if string.match(machName,"Furnace") then
  662.                     machColor = colors.cyan
  663.                 elseif string.match(machName,"Pulverizer") then
  664.                     machColor = colors.orange
  665.                 elseif string.match(machName,"Induction") then
  666.                     machColor = colors.lime
  667.                 elseif string.match(machName,"Crucible") then
  668.                     machColor = colors.lightBlue
  669.                 elseif string.match(machName,"Transposer") then
  670.                     machColor = colors.lightGray
  671.                 end
  672.             end
  673.            
  674.             machColor = colors.black
  675.            
  676.             ImpAPI.CWrite(2,line,mon, machName.." "..machNumber, machColor)
  677.             -- Status
  678.             if tableMachines[i].IsActive == "Idle" then
  679.                 ImpAPI.CWrite(29,line,mon, tableMachines[i].IsActive, colors.red)
  680.                
  681.             else
  682.                 ImpAPI.CWrite(29,line,mon, tableMachines[i].IsActive, colors.black)
  683.                
  684.             end
  685.            
  686.            
  687.             ImpAPI.CWrite(40, line, mon, tableMachines[i].Energy.."/"..tableMachines[i].MaxEnergy, colors.gray)    
  688.                    
  689.            
  690.             if (machName == "Redstone Furnace") or (machName == "Pulverizer") or (machName == "Fluid Transposer") or (machName == "Magma Crucible") then
  691.            
  692.                 if tableMachines[i].ItemInSlot1 == "Nothing" then
  693.                     ImpAPI.CWrite(58, line, mon, tableMachines[i].ItemInSlot1, colors.red)
  694.                 else
  695.                     ImpAPI.CWrite(58, line, mon, tableMachines[i].ItemInSlot1, colors.black)
  696.                 end
  697.                
  698.                 if (machName == "Redstone Furnace") or (machName == "Pulverizer") then
  699.                    
  700.                     if tableMachines[i].ItemInSlot2 == "Nothing" then
  701.                         ImpAPI.CWrite(94, line, mon, tableMachines[i].ItemInSlot2, colors.red)
  702.                     else
  703.                         ImpAPI.CWrite(94, line, mon, tableMachines[i].ItemInSlot2, colors.black)
  704.                     end
  705.                 end
  706.                
  707.                 if machName == "Pulverizer" then
  708.                     if tableMachines[i].ItemInSlot3 == "Nothing" then
  709.                         ImpAPI.CWrite(118, line, mon, tableMachines[i].ItemInSlot3, colors.red)
  710.                     else
  711.                         ImpAPI.CWrite(118, line, mon, tableMachines[i].ItemInSlot3, colors.black)
  712.                     end
  713.                 end
  714.                
  715.             end
  716.  
  717.            
  718.             if machName == "Induction Smelter" then
  719.                
  720.                 if tableMachines[i].ItemInSlot1 == "Nothing" then
  721.                     ImpAPI.CWrite(58, line, mon, tableMachines[i].ItemInSlot1, colors.red)
  722.                 else
  723.                     ImpAPI.CWrite(58, line, mon, tableMachines[i].ItemInSlot1.." & "..tableMachines[i].ItemInSlot2, colors.black)
  724.                 end
  725.                
  726.                 if tableMachines[i].ItemInSlot3 == "Nothing" then
  727.                     ImpAPI.CWrite(94, line, mon, tableMachines[i].ItemInSlot3, colors.red)
  728.                 else
  729.                     ImpAPI.CWrite(94, line, mon, tableMachines[i].ItemInSlot3, colors.black)
  730.                 end
  731.                
  732.             end
  733.            
  734.            
  735.            
  736. -----------------------------------------------------------------------------------------------------------------          
  737. -- Details
  738. -----------------------------------------------------------------------------------------------------------------
  739.  
  740.             detailsLine = 3
  741.            
  742.             --if clicked == true and clickedLine == line then
  743.                 -- Machine Name
  744.                 --ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  745.                 --ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, "Machine: ", colors.orange)
  746.                 --ImpAPI.CWrite(detailsValueColumn, detailsLine, mon, machName.." "..machNumber, colors.white)
  747.                 --detailsLine = detailsLine + 1
  748.                
  749.                 -- Energy (if applicable)
  750.                 -- if machHasEnergy == true then
  751.                     -- ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  752.                     -- ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, "Energy: ", colors.orange)
  753.                     -- ImpAPI.CWrite(detailsValueColumn, detailsLine, mon, tableMachines[i].Energy.."/"..tableMachines[i].MaxEnergy, colors.white)
  754.                     -- detailsLine = detailsLine + 2
  755.                 -- else
  756.                     -- detailsLine = detailsLine + 3
  757.                 -- end
  758.                    
  759.                     -- -- Slot 1 Item
  760.                 -- if invSlots > 0 then
  761.                     -- ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  762.                     -- ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, tableMachines[i].slot1Name, colors.orange)
  763.                     -- ImpAPI.CWrite(detailsValueColumn, detailsLine, mon, tableMachines[i].ItemInSlot1, colors.white)
  764.                     -- detailsLine = detailsLine + 1
  765.                    
  766.                     -- -- Slot 1 Qty
  767.                     -- ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  768.                     -- ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, "Qty: ", colors.orange)
  769.                     -- ImpAPI.CWrite(detailsValueColumn, detailsLine, mon, tableMachines[i].ItemQtyInSlot1, colors.white)
  770.                     -- detailsLine = detailsLine + 2
  771.                 -- end
  772.                
  773.                 -- if invSlots > 1 then
  774.                     -- -- Slot 2 Item
  775.                     -- ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  776.                     -- ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, tableMachines[i].slot2Name, colors.orange)
  777.                     -- ImpAPI.CWrite(detailsValueColumn, detailsLine, mon, tableMachines[i].ItemInSlot2, colors.white)
  778.                     -- detailsLine = detailsLine + 1
  779.                    
  780.                     -- -- Slot 2 Qty
  781.                     -- ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  782.                     -- ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, "Qty: ", colors.orange)
  783.                     -- ImpAPI.CWrite(detailsValueColumn, detailsLine, mon, tableMachines[i].ItemQtyInSlot2, colors.white)
  784.                     -- detailsLine = detailsLine + 2
  785.                 -- end
  786.                
  787.                 -- if invSlots > 2 then
  788.                     -- -- Slot 3 Item
  789.                     -- ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  790.                     -- ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, tableMachines[i].slot3Name, colors.orange)
  791.                     -- ImpAPI.CWrite(detailsValueColumn, detailsLine, mon, tableMachines[i].ItemInSlot3, colors.white)
  792.                     -- detailsLine = detailsLine + 1
  793.                    
  794.                     -- -- Slot 3 Qty
  795.                     -- ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  796.                     -- ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, "Qty: ", colors.orange)
  797.                     -- ImpAPI.CWrite(detailsValueColumn, detailsLine, mon, tableMachines[i].ItemQtyInSlot3, colors.white)
  798.                     -- detailsLine = detailsLine + 2
  799.                 -- end
  800.                
  801.             --elseif clicked == false then
  802.                 --ImpAPI.draw_line(detailsKeyColumn, detailsLine, (monX - detailsKeyColumn), colors.black, mon)
  803.                 --ImpAPI.CWrite(detailsKeyColumn, detailsLine, mon, "No Machine Selected", colors.red)
  804.                 --detailsLine = detailsLine + 1
  805.             --end
  806.            
  807.            
  808.            
  809.            
  810.            
  811.            
  812.            
  813.             --ImpAPI.draw_line(1,line+1, 39, colors.black, mon)
  814.            
  815.            
  816.  
  817.             line = line + 1
  818.                    
  819.         end    
  820.        
  821.         -- Details line
  822.             for l = line,(monY -1) do
  823.                 if altColorSwitch == 0 then
  824.                     ImpAPI.draw_line(1, l, monX, altColor1, mon)
  825.                     altColorSwitch = 1
  826.                 else
  827.                     ImpAPI.draw_line(1, l, monX, altColor2, mon)
  828.                     altColorSwitch = 0
  829.                 end
  830.             end
  831. -----------------------------------------------------------------------------------------------------------------
  832. -- Watch for mouse events
  833. -----------------------------------------------------------------------------------------------------------------
  834.         local myTimer = os.startTimer(.2)
  835.        
  836.         local exitConditionVariable = false
  837.        
  838.         while not exitConditionVariable do
  839.                 myEvent = {os.pullEvent()}
  840.                 if myEvent[1] == "monitor_touch" then
  841.                     xClicked=myEvent[3]
  842.                     yClicked=myEvent[4]
  843.                     --ImpAPI.CWrite(1,27,mon,ImpAPI.tablelength(tableMachines) + 2,colors.orange)
  844.                     if yClicked > 2 and yClicked <= (ImpAPI.tablelength(tableMachines) + 2) then
  845.                         clicked = true
  846.                         clickedLine = yClicked
  847.                     else   
  848.                         clicked = false
  849.                     end
  850.                    
  851.                    
  852.                         --button.checkxy(myEvent[3],myEvent[4])
  853.                 elseif myEvent[1] == "timer" and myEvent[2] == myTimer then
  854.                         exitConditionVariable = true
  855.                 end
  856.         end
  857.        
  858.         -- Debug for monitor size
  859.         if debugMode then
  860.             mon.setCursorPos(1,line)
  861.             mon.write("S: "..sizeXY)
  862.             line = line + 1
  863.             mon.setCursorPos(1,line)
  864.             mon.write("H: "..monY)
  865.             line = line + 1
  866.             mon.setCursorPos(1,line)
  867.             mon.write("W: "..monX)
  868.         end
  869.     else   
  870.         mon.clear()
  871.         ImpAPI.draw_line(1,1,monX, colors.red, mon)
  872.         mon.setCursorPos(1,1)
  873.         mon.setTextColor(colors.white)
  874.         mon.write("Monitor Too Small")
  875.         ImpAPI.draw_line(1,2,monX, colors.black, mon)
  876.         mon.setCursorPos(1,3)
  877.         mon.write("Please increase the")
  878.         mon.setCursorPos(1,4)
  879.         mon.write("size of your monitor")
  880.         mon.setCursorPos(1,5)
  881.         mon.write(renderReason)
  882.     end
  883.    
  884.     -- Reset line variable
  885.     line = 1
  886.  
  887.     -- Loop timer
  888.     sleep(.25)
  889. end
  890.  
  891. -----------------------------------------------------------------------------------------------------------------
  892. -- End of Program
  893. -----------------------------------------------------------------------------------------------------------------
  894.  
RAW Paste Data