From 5e887959b0efbb7729f334daa2d949b6fbc9125a Mon Sep 17 00:00:00 2001 From: Guillaume ARM Date: Sun, 26 May 2024 13:28:34 +0200 Subject: [PATCH] feat(tunnels-miner): introduce vein miner mode --- config/tunnels.lua | 8 +++- tunnels-miner.lua | 94 ++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 94 insertions(+), 8 deletions(-) diff --git a/config/tunnels.lua b/config/tunnels.lua index bc5e75c..f139fa8 100644 --- a/config/tunnels.lua +++ b/config/tunnels.lua @@ -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 } \ No newline at end of file diff --git a/tunnels-miner.lua b/tunnels-miner.lua index 1bb7a0a..513eaa9 100644 --- a/tunnels-miner.lua +++ b/tunnels-miner.lua @@ -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)