feat: add inferium-upgrader
This commit is contained in:
parent
6b8cec89e8
commit
7dc979f8c4
188
inferium-upgrader.lua
Normal file
188
inferium-upgrader.lua
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
local FILL_BLOCK = 'minecraft:cobblestone'
|
||||||
|
local LEVEL_PER_TIER = 12
|
||||||
|
|
||||||
|
local formatBlockName = function(tierName)
|
||||||
|
return "mysticalagriculture:" .. tierName .. "_growth_accelerator"
|
||||||
|
end
|
||||||
|
|
||||||
|
local BLOCKS_PER_TIER = {
|
||||||
|
formatBlockName('inferium'),
|
||||||
|
formatBlockName('prudentium'),
|
||||||
|
formatBlockName('tertium'),
|
||||||
|
formatBlockName('imperium'),
|
||||||
|
formatBlockName('supremium')
|
||||||
|
}
|
||||||
|
|
||||||
|
local MAX_LEVEL = LEVEL_PER_TIER * #BLOCKS_PER_TIER
|
||||||
|
|
||||||
|
local countItems = function(itemName)
|
||||||
|
local total = 0
|
||||||
|
|
||||||
|
for i=1,16,1 do
|
||||||
|
local details = turtle.getItemDetail(i)
|
||||||
|
if details and details.name == itemName then
|
||||||
|
total = total + details.count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return total
|
||||||
|
end
|
||||||
|
|
||||||
|
local assertEnoughFillBlocks = function()
|
||||||
|
local count = countItems(FILL_BLOCK)
|
||||||
|
|
||||||
|
if count < MAX_LEVEL then
|
||||||
|
error('Not enough fill blocks, please provide at least ' .. MAX_LEVEL .. ' of ' .. FILL_BLOCK)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local assertEnoughFuel = function()
|
||||||
|
local minFuel = 10 + (MAX_LEVEL * 2)
|
||||||
|
|
||||||
|
if turtle.getFuelLevel() < minFuel then
|
||||||
|
error('Not enough fuel')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local refuel = function()
|
||||||
|
for i=1, 16, 1 do
|
||||||
|
local count = turtle.getItemCount(i)
|
||||||
|
if count > 0 then
|
||||||
|
turtle.select(i)
|
||||||
|
turtle.refuel()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local getTierFromLevel = function(level)
|
||||||
|
return math.floor((level - 1) / LEVEL_PER_TIER) + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
local getBlockNameFromLevel = function(level)
|
||||||
|
local tier = getTierFromLevel(level)
|
||||||
|
return BLOCKS_PER_TIER[tier]
|
||||||
|
end
|
||||||
|
|
||||||
|
local inspectBlockName = function()
|
||||||
|
local ok, block = turtle.inspect()
|
||||||
|
|
||||||
|
if not ok then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
return block and block.name
|
||||||
|
end
|
||||||
|
|
||||||
|
local selectBlock = function(blockName)
|
||||||
|
for i=1, 16, 1 do
|
||||||
|
local details = turtle.getItemDetail(i)
|
||||||
|
if details and details.name == blockName then
|
||||||
|
turtle.select(i)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local replaceBlockAt = function(y)
|
||||||
|
local blockName = getBlockNameFromLevel(y);
|
||||||
|
|
||||||
|
if inspectBlockName() == blockName then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local selected = selectBlock(blockName)
|
||||||
|
|
||||||
|
if not selected then
|
||||||
|
return 'error'
|
||||||
|
end
|
||||||
|
|
||||||
|
turtle.dig()
|
||||||
|
turtle.place()
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local placeDownFillBlock = function()
|
||||||
|
selectBlock(FILL_BLOCK)
|
||||||
|
turtle.placeDown()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Main state and stateful methods
|
||||||
|
local state = {
|
||||||
|
y = 1,
|
||||||
|
initialLevel = 0,
|
||||||
|
newLevel = 0,
|
||||||
|
errorLevel = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
local digAndGoDown = function()
|
||||||
|
turtle.digDown()
|
||||||
|
turtle.down()
|
||||||
|
state.y = state.y + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
local goUp = function()
|
||||||
|
turtle.up()
|
||||||
|
state.y = state.y - 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 1. down procedure
|
||||||
|
local downProcedure = function()
|
||||||
|
while state.y < 60 do
|
||||||
|
local replaced = replaceBlockAt(state.y)
|
||||||
|
|
||||||
|
if replaced == false then
|
||||||
|
state.initialLevel = state.y
|
||||||
|
state.newLevel = state.initialLevel
|
||||||
|
end
|
||||||
|
|
||||||
|
if replaced == true then
|
||||||
|
state.newLevel = state.y
|
||||||
|
end
|
||||||
|
|
||||||
|
if replaced == 'error' then
|
||||||
|
state.errorLevel = state.y
|
||||||
|
break
|
||||||
|
end
|
||||||
|
|
||||||
|
digAndGoDown()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 2. up procedure
|
||||||
|
local upProcedure = function()
|
||||||
|
while state.y ~= 1 do
|
||||||
|
goUp()
|
||||||
|
placeDownFillBlock()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 3. print report
|
||||||
|
local printReport = function()
|
||||||
|
local initialLevel = state.initialLevel
|
||||||
|
if initialLevel == nil then
|
||||||
|
initialLevel = 'nil'
|
||||||
|
end
|
||||||
|
print('Initial Level: ' .. initialLevel)
|
||||||
|
print('New Level: ' .. state.newLevel)
|
||||||
|
|
||||||
|
if state.errorLevel then
|
||||||
|
local tier = getTierFromLevel(state.errorLevel)
|
||||||
|
|
||||||
|
print('Tier ' .. tier .. ' needed for next upgrade')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Main function
|
||||||
|
local main = function()
|
||||||
|
assertEnoughFillBlocks()
|
||||||
|
refuel()
|
||||||
|
assertEnoughFuel()
|
||||||
|
|
||||||
|
downProcedure()
|
||||||
|
upProcedure()
|
||||||
|
printReport()
|
||||||
|
end
|
||||||
|
|
||||||
|
main()
|
||||||
Loading…
Reference in New Issue
Block a user