feat(tunnels-miner): introduce vein miner mode
This commit is contained in:
parent
6b6fcac1d1
commit
5e887959b0
@ -1,5 +1,11 @@
|
|||||||
return {
|
return {
|
||||||
DIRECTION = 'right',
|
DIRECTION = 'right',
|
||||||
DISTANCE_Z = 256,
|
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 IDLE_TIME_BETWEEN_TUNNELS = 1
|
||||||
local SPACE_BETWEEN_TUNNELS = 3
|
local SPACE_BETWEEN_TUNNELS = 3
|
||||||
|
|
||||||
local VERSION = "1.1.1"
|
local VERSION = "2.0.0"
|
||||||
|
|
||||||
local MOVES_BY_DIRECTION = {
|
local MOVES_BY_DIRECTION = {
|
||||||
right = {
|
right = {
|
||||||
@ -19,12 +19,19 @@ local MOVES_BY_DIRECTION = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local function noop() end
|
||||||
|
|
||||||
local function getMoves(config)
|
local function getMoves(config)
|
||||||
return MOVES_BY_DIRECTION[config.DIRECTION]
|
return MOVES_BY_DIRECTION[config.DIRECTION]
|
||||||
end
|
end
|
||||||
|
|
||||||
local function getMinFuelNeeded(config)
|
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
|
end
|
||||||
|
|
||||||
local function checkEnoughFuelForTunnel(config)
|
local function checkEnoughFuelForTunnel(config)
|
||||||
@ -77,22 +84,95 @@ local function findGroundProcedure()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function digForward(n)
|
local function digForward(n, cb)
|
||||||
n = n or 1
|
n = n or 1
|
||||||
for _=1, n, 1 do
|
cb = cb or noop
|
||||||
|
|
||||||
|
for i=1, n, 1 do
|
||||||
turtleUtils.forceForward()
|
turtleUtils.forceForward()
|
||||||
turtle.digDown()
|
turtle.digDown()
|
||||||
|
cb(i)
|
||||||
end
|
end
|
||||||
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 function mineTunnelProcedure(config)
|
||||||
local distance = config.DISTANCE_Z
|
local distance = config.DISTANCE_Z
|
||||||
|
|
||||||
digForward(distance)
|
local onMineCb = function() mineVeinProcedure(config) end
|
||||||
|
|
||||||
|
digForward(distance, onMineCb)
|
||||||
getMoves(config).turnRight()
|
getMoves(config).turnRight()
|
||||||
digForward(SPACE_BETWEEN_TUNNELS)
|
digForward(SPACE_BETWEEN_TUNNELS, onMineCb)
|
||||||
getMoves(config).turnRight()
|
getMoves(config).turnRight()
|
||||||
digForward(distance)
|
digForward(distance, onMineCb)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function dropAllProcedure(config)
|
local function dropAllProcedure(config)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user