Advertisement
Beachman4

Untitled

Jun 15th, 2020
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. local component = require('component')
  2. transposer = component.transposer
  3. local term = require("term")
  4. local redstone = component.redstone
  5. sides = require("sides")
  6.  
  7.  
  8. local altarSide = 5
  9. local source = 1
  10. local output = 2
  11.  
  12. local crafting = false
  13.  
  14. bloodInfo = {
  15. {
  16. name = "Blank Slate",
  17. blood = 2000,
  18. tier = 1
  19. },
  20. {
  21. name = "Reinforced Slate",
  22. blood = 5000,
  23. tier = 2
  24. },
  25. {
  26. name = "Imbued Slate",
  27. blood = 15000,
  28. tier = 3
  29. },
  30. {
  31. name = "Demonic Slate",
  32. blood = 30000,
  33. tier = 4
  34. },
  35. {
  36. name = "Ethereal Slate",
  37. blood = 30000,
  38. tier = 5
  39. },
  40. {
  41. name = "Livingrock",
  42. blood = 1000,
  43. tier = 1
  44. }
  45. }
  46.  
  47. function table.empty (self)
  48. for _, _ in pairs(self) do
  49. return false
  50. end
  51. return true
  52. end
  53.  
  54. function getBloodInfoForItem(item)
  55. for key, value in pairs(bloodInfo) do
  56. if value.name == item.label then
  57. return value
  58. end
  59. end
  60.  
  61. return {}
  62. end
  63.  
  64. function getFirstOpenSlotForOutput(itemToOutput)
  65.  
  66. local table = transposer.getAllStacks(output).getAll()
  67.  
  68. for key, value in pairs(table) do
  69. if value.label == itemToOutput.label then
  70. return key
  71. end
  72. end
  73.  
  74. for key, value in pairs(table) do
  75. if value.name == 'minecraft:air' then
  76. return key
  77. end
  78. end
  79.  
  80. return {}
  81. end
  82.  
  83. function getFirstSlotWithItems()
  84. local table = transposer.getAllStacks(source).getAll()
  85.  
  86. for key, value in pairs(table) do
  87. if value.name ~= 'minecraft:air' then
  88. return {
  89. key = key,
  90. item = value
  91. }
  92. end
  93. end
  94.  
  95. return {}
  96. end
  97.  
  98. function getItemInAltar()
  99. return transposer.getStackInSlot(altarSide, 1)
  100. end
  101.  
  102. function CraftSlate(itemTable)
  103. crafting = true
  104. transposer.transferItem(source, altarSide, 1, itemTable.key, 1)
  105.  
  106. local slate = itemTable.item.label
  107.  
  108.  
  109. while (crafting) do
  110.  
  111. writeToTerm()
  112. term.clearLine()
  113. term.write("Currently Crafting With: " .. itemTable.item.label.."\n")
  114.  
  115. local item = getItemInAltar()
  116.  
  117. if item.label ~= slate then
  118. crafting = false
  119.  
  120. transposer.transferItem(altarSide, output, 1, 1, getFirstOpenSlotForOutput(item))
  121. end
  122.  
  123. os.sleep(.1)
  124. end
  125. end
  126.  
  127. function CraftItem(itemTable)
  128. crafting = true
  129. transposer.transferItem(source, altarSide, 1, itemTable.key, 1)
  130.  
  131. while (crafting) do
  132.  
  133. writeToTerm()
  134. term.clearLine()
  135. term.write("Currently Crafting With: " .. itemTable.item.label.."\n")
  136.  
  137. local item = getItemInAltar()
  138.  
  139. if item.label ~= itemTable.item.label then
  140. crafting = false
  141.  
  142. transposer.transferItem(altarSide, output, 1, 1, getFirstOpenSlotForOutput(item))
  143. end
  144.  
  145. os.sleep(.1)
  146. end
  147. end
  148.  
  149. function getBloodInTank()
  150. return transposer.getFluidInTank(altarSide, 1).amount
  151. end
  152.  
  153. function getTankInfo()
  154. tInfo = transposer.getFluidInTank(altarSide)
  155. tankAmount = tInfo[1].amount
  156. tankCapacity = tInfo[1].capacity
  157. tankPercent = (tankAmount / tankCapacity) * 100
  158.  
  159. if term.isAvailable() then
  160. term.clearLine()
  161. term.write(string.format("Current Blood Level: %.2f %%, %.0d mb / %.0d mb\n", tankPercent, tankAmount, tankCapacity))
  162. end
  163. end
  164.  
  165. function writeToTerm()
  166. term.setCursor(1,1)
  167. getTankInfo()
  168. term.clearLine()
  169. end
  170. component.gpu.setResolution(50, 16)
  171. term.clear()
  172.  
  173. local i = 0;
  174.  
  175. function runProgram()
  176. while true do
  177.  
  178. writeToTerm()
  179.  
  180. if redstone.getInput(sides.back) ~= 0.0 then
  181. term.clearLine()
  182. term.write("Processing Paused...")
  183. else
  184. local itemInSlot = getFirstSlotWithItems()
  185.  
  186. if table.empty(itemInSlot) then
  187. -- do nothing
  188. else
  189. local itemBloodInfo = getBloodInfoForItem(itemInSlot.item)
  190.  
  191. if getBloodInTank() >= itemBloodInfo.blood then
  192. if itemInSlot.item.label == 'bloodmagic:slate' then
  193. CraftSlate(itemInSlot)
  194. else
  195. CraftItem(itemInSlot)
  196. end
  197. else
  198. writeToTerm()
  199. term.clearLine()
  200. term.write("Not Enough Blood! Need " .. itemBloodInfo.blood .. " blood \n")
  201. end
  202. end
  203. end
  204. i = i + 1
  205.  
  206. os.sleep(.2)
  207.  
  208. if i % 5 == 0 then
  209. term.clear()
  210. end
  211. end
  212. end
  213.  
  214.  
  215. runProgram()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement