feat(tunnels-miner): introduce vein miner mode
This commit is contained in:
parent
6b6fcac1d1
commit
5e887959b0
@ -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
|
||||
}
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user