From 7a8636f05450804d0e36c90edbfe967ecd5736ab Mon Sep 17 00:00:00 2001 From: Guillaume ARM Date: Sun, 26 May 2024 14:00:33 +0200 Subject: [PATCH] feat(tunnels-miner): drop items from inventory when full --- config/tunnels.lua | 3 +++ tunnels-miner.lua | 33 +++++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/config/tunnels.lua b/config/tunnels.lua index 1ed74d8..62c57f0 100644 --- a/config/tunnels.lua +++ b/config/tunnels.lua @@ -9,5 +9,8 @@ return { ['mysticalagriculture:deepslate_prosperity_ore'] = true, ['mysticalagradditions:nether_prosperity_ore'] = true, ['mysticalagradditions:end_prosperity_ore'] = true + }, + VEIN_ORE_WHITELIST_ITEMS = { + ['mysticalagriculture:prosperity_shard'] = true } } \ No newline at end of file diff --git a/tunnels-miner.lua b/tunnels-miner.lua index 40bcaf1..b72aaf1 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 = "2.0.1" +local VERSION = "2.1.0" local MOVES_BY_DIRECTION = { right = { @@ -97,10 +97,14 @@ local function digForward(n, cb) end end -local function isWhitelistedOre(config, block) - local blockName = block and block.name +local function isWhitelistedOre(config, itemOrBlock) + local itemOrBlockName = itemOrBlock and itemOrBlock.name - if config.VEIN_ORES_WHITELIST[blockName] then + if config.VEIN_ORES_WHITELIST[itemOrBlockName] then + return true + end + + if config.VEIN_ORES_WHITELIST_ITEMS[itemOrBlockName] then return true end @@ -112,7 +116,28 @@ local function inspectWhitelistedOre(config, inspectFn) return isWhitelistedOre(config, block) end +local function ensureEnoughSpaceInInventory(config) + if not turtleUtils.isInventoryFull() then + return + end + + -- 1. select an item that is not in whitelist item + local selected = turtleUtils.selectItemBy(function(slot) + return not isWhitelistedOre(config, turtle.getItemDetail(slot)) + end) + + if selected then + -- 2. drop the selected item + turtle.drop() + else + -- TODO: handle when cannot drop anything + end + +end + local function mineVeinOres(config) + ensureEnoughSpaceInInventory(config) + -- 1. front if inspectWhitelistedOre(config, turtle.inspect) then turtleUtils.forceForward()