Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require('component')
- transposer = component.transposer
- local term = require("term")
- local redstone = component.redstone
- sides = require("sides")
- local altarSide = 5
- local source = 1
- local output = 2
- local crafting = false
- bloodInfo = {
- {
- name = "Blank Slate",
- blood = 2000,
- tier = 1
- },
- {
- name = "Reinforced Slate",
- blood = 5000,
- tier = 2
- },
- {
- name = "Imbued Slate",
- blood = 15000,
- tier = 3
- },
- {
- name = "Demonic Slate",
- blood = 30000,
- tier = 4
- },
- {
- name = "Ethereal Slate",
- blood = 30000,
- tier = 5
- },
- {
- name = "Livingrock",
- blood = 1000,
- tier = 1
- }
- }
- function table.empty (self)
- for _, _ in pairs(self) do
- return false
- end
- return true
- end
- function getBloodInfoForItem(item)
- for key, value in pairs(bloodInfo) do
- if value.name == item.label then
- return value
- end
- end
- return {}
- end
- function getFirstOpenSlotForOutput(itemToOutput)
- local table = transposer.getAllStacks(output).getAll()
- for key, value in pairs(table) do
- if value.label == itemToOutput.label then
- return key
- end
- end
- for key, value in pairs(table) do
- if value.name == 'minecraft:air' then
- return key
- end
- end
- return {}
- end
- function getFirstSlotWithItems()
- local table = transposer.getAllStacks(source).getAll()
- for key, value in pairs(table) do
- if value.name ~= 'minecraft:air' then
- return {
- key = key,
- item = value
- }
- end
- end
- return {}
- end
- function getItemInAltar()
- return transposer.getStackInSlot(altarSide, 1)
- end
- function CraftSlate(itemTable)
- crafting = true
- transposer.transferItem(source, altarSide, 1, itemTable.key, 1)
- local slate = itemTable.item.label
- while (crafting) do
- writeToTerm()
- term.clearLine()
- term.write("Currently Crafting With: " .. itemTable.item.label.."\n")
- local item = getItemInAltar()
- if item.label ~= slate then
- crafting = false
- transposer.transferItem(altarSide, output, 1, 1, getFirstOpenSlotForOutput(item))
- end
- os.sleep(.1)
- end
- end
- function CraftItem(itemTable)
- crafting = true
- transposer.transferItem(source, altarSide, 1, itemTable.key, 1)
- while (crafting) do
- writeToTerm()
- term.clearLine()
- term.write("Currently Crafting With: " .. itemTable.item.label.."\n")
- local item = getItemInAltar()
- if item.label ~= itemTable.item.label then
- crafting = false
- transposer.transferItem(altarSide, output, 1, 1, getFirstOpenSlotForOutput(item))
- end
- os.sleep(.1)
- end
- end
- function getBloodInTank()
- return transposer.getFluidInTank(altarSide, 1).amount
- end
- function getTankInfo()
- tInfo = transposer.getFluidInTank(altarSide)
- tankAmount = tInfo[1].amount
- tankCapacity = tInfo[1].capacity
- tankPercent = (tankAmount / tankCapacity) * 100
- if term.isAvailable() then
- term.clearLine()
- term.write(string.format("Current Blood Level: %.2f %%, %.0d mb / %.0d mb\n", tankPercent, tankAmount, tankCapacity))
- end
- end
- function writeToTerm()
- term.setCursor(1,1)
- getTankInfo()
- term.clearLine()
- end
- component.gpu.setResolution(50, 16)
- term.clear()
- local i = 0;
- function runProgram()
- while true do
- writeToTerm()
- if redstone.getInput(sides.back) ~= 0.0 then
- term.clearLine()
- term.write("Processing Paused...")
- else
- local itemInSlot = getFirstSlotWithItems()
- if table.empty(itemInSlot) then
- -- do nothing
- else
- local itemBloodInfo = getBloodInfoForItem(itemInSlot.item)
- if getBloodInTank() >= itemBloodInfo.blood then
- if itemInSlot.item.label == 'bloodmagic:slate' then
- CraftSlate(itemInSlot)
- else
- CraftItem(itemInSlot)
- end
- else
- writeToTerm()
- term.clearLine()
- term.write("Not Enough Blood! Need " .. itemBloodInfo.blood .. " blood \n")
- end
- end
- end
- i = i + 1
- os.sleep(.2)
- if i % 5 == 0 then
- term.clear()
- end
- end
- end
- runProgram()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement