feat(tunnels-miner): introduce vein miner mode

This commit is contained in:
Guillaume ARM 2024-05-26 13:28:34 +02:00
parent 6b6fcac1d1
commit 5e887959b0
2 changed files with 94 additions and 8 deletions

View File

@ -1,5 +1,11 @@
return {
DIRECTION = 'right',
DISTANCE_Z = 256,
FUEL_MARGIN = 10
FUEL_MARGIN = 10,
VEIN_MODE = false,
VEIN_ORES_WHITELIST = {
['minecraft:cobblestone'] = true, -- TODO: remove this
['mysticalagriculture:prosperity_ore'] = true -- TODO: check this
},
FUEL_MARGIN_VEIN_MODE = 1000
}

View File

@ -6,7 +6,7 @@ local TIME_TO_START = 3
local IDLE_TIME_BETWEEN_TUNNELS = 1
local SPACE_BETWEEN_TUNNELS = 3
local VERSION = "1.1.1"
local VERSION = "2.0.0"
local MOVES_BY_DIRECTION = {
right = {
@ -19,12 +19,19 @@ local MOVES_BY_DIRECTION = {
}
}
local function noop() end
local function getMoves(config)
return MOVES_BY_DIRECTION[config.DIRECTION]
end
local function getMinFuelNeeded(config)
return (config.DISTANCE_Z * 2) + SPACE_BETWEEN_TUNNELS + config.FUEL_MARGIN
local fuelMargin = config.FUEL_MARGIN
if config.VEIN_MODE then
fuelMargin = fuelMargin + config.FUEL_MARGIN_VEIN_MODE
end
return (config.DISTANCE_Z * 2) + SPACE_BETWEEN_TUNNELS + fuelMargin
end
local function checkEnoughFuelForTunnel(config)
@ -77,22 +84,95 @@ local function findGroundProcedure()
end
end
local function digForward(n)
local function digForward(n, cb)
n = n or 1
for _=1, n, 1 do
cb = cb or noop
for i=1, n, 1 do
turtleUtils.forceForward()
turtle.digDown()
cb(i)
end
end
local function isWhitelistedOre(config, block)
local blockName = block and block.name
if config.VEIN_ORES_WHITELIST[blockName] then
return true
end
return false
end
local function inspectWhitelistedOre(config, inspectFn)
local _, block = inspectFn()
return isWhitelistedOre(config, block)
end
local function mineVeinOres(config)
-- 1. front
if inspectWhitelistedOre(config, turtle.inspect) then
turtleUtils.forceForward()
mineVeinOres(config)
turtle.back()
end
-- 2. up
if inspectWhitelistedOre(config, turtle.inspectUp) then
turtleUtils.forceUp()
mineVeinOres(config)
turtle.down()
end
-- 3. down
if inspectWhitelistedOre(config, turtle.inspectDown) then
turtleUtils.forceDown()
mineVeinOres(config)
turtle.up()
end
-- 4. check left
turtle.turnLeft()
if inspectWhitelistedOre(config, turtle.inspect) then
turtleUtils.forceForward()
mineVeinOres(config)
turtle.back()
end
turtle.turnRight()
-- 5. right
turtle.turnRight()
if inspectWhitelistedOre(config, turtle.inspect) then
turtleUtils.forceForward()
mineVeinOres(config)
turtle.back()
end
turtle.turnLeft()
end
local function mineVeinProcedure(config)
if not config.VEIN_MODE then
return
end
mineVeinOres(config)
turtleUtils.forceDown()
mineVeinOres(config)
turtleUtils.forceUp()
end
local function mineTunnelProcedure(config)
local distance = config.DISTANCE_Z
digForward(distance)
local onMineCb = function() mineVeinProcedure(config) end
digForward(distance, onMineCb)
getMoves(config).turnRight()
digForward(SPACE_BETWEEN_TUNNELS)
digForward(SPACE_BETWEEN_TUNNELS, onMineCb)
getMoves(config).turnRight()
digForward(distance)
digForward(distance, onMineCb)
end
local function dropAllProcedure(config)