mine depletion (#439)

* Update mine_depletion.lua

* Update miner.lua

* Update mine_depletion.lua

* Compatibility with 2.0 and 2.1

---------

Co-authored-by: Cooldude2606 <25043174+Cooldude2606@users.noreply.github.com>
This commit is contained in:
2026-06-26 11:37:00 +01:00
committed by GitHub
co-authored by Cooldude2606
parent 2a1a5c952b
commit 8190b2165d
2 changed files with 50 additions and 5 deletions
+1
View File
@@ -4,4 +4,5 @@
return { return {
fluid = true, --- @setting fluid When true, checks for for fluid pipes when removing miners fluid = true, --- @setting fluid When true, checks for for fluid pipes when removing miners
chest = true, --- @setting chest When true, checks for for chest when removing miners chest = true, --- @setting chest When true, checks for for chest when removing miners
beacon = true, --- @setting beacon When true, checks for for beacon when removing miners
} }
+49 -5
View File
@@ -88,6 +88,37 @@ local function try_deconstruct_output_chest(entity)
order_deconstruction_async:start_after(10, target) order_deconstruction_async:start_after(10, target)
end end
--- Check if beacon should be deconstructed
--- @param entity LuaEntity
local function try_deconstruct_nearby_beacon(entity)
-- Get a valid chest as the target
local beacons = entity.get_beacons()
local beacon_in_use = false
-- if beacon is not supported
if not beacons then
return
end
for _, b in pairs(beacons) do
if not b.to_be_deconstructed() then
for _, r in pairs(b.get_beacon_effect_receivers()) do
if r ~= entity then
if not r.to_be_deconstructed() then
beacon_in_use = true
break
end
end
end
-- Deconstruct the beacon
if not beacon_in_use then
order_deconstruction_async:start_after(10, { name = b.name, position = b.position })
end
end
end
end
--- Check if a miner should be deconstructed --- Check if a miner should be deconstructed
--- @param entity LuaEntity --- @param entity LuaEntity
local function try_deconstruct_miner(entity) local function try_deconstruct_miner(entity)
@@ -117,8 +148,13 @@ local function try_deconstruct_miner(entity)
try_deconstruct_output_chest(entity) try_deconstruct_output_chest(entity)
end end
-- Try deconstruct the beacon
if config.beacon then
try_deconstruct_nearby_beacon(entity)
end
-- Skip pipe build if not required -- Skip pipe build if not required
if not config.fluid or #entity.fluidbox == 0 then if not config.fluid or entity.fluids_count > 1 then
return return
end end
@@ -185,11 +221,19 @@ local function try_deconstruct_miner(entity)
end end
end end
local max_quality = ""
for _, q in pairs(prototypes.quality) do
if not q.next then
max_quality = q.name
end
end
--- Get the max mining radius --- Get the max mining radius
local max_mining_radius = 0 local max_mining_radius = 0
for _, proto in pairs(prototypes.get_entity_filtered{ { filter = "type", type = "mining-drill" } }) do for _, proto in pairs(prototypes.get_entity_filtered{ { filter = "type", type = "mining-drill" } }) do
if proto.mining_drill_radius > max_mining_radius then if proto.mining_drill_radius then
max_mining_radius = proto.mining_drill_radius max_mining_radius = math.max(proto.get_mining_drill_radius(max_quality), max_mining_radius)
end end
end end
@@ -214,8 +258,8 @@ local function on_resource_depleted(event)
-- Check which could have reached this resource -- Check which could have reached this resource
for _, drill in pairs(drills) do for _, drill in pairs(drills) do
local radius = drill.prototype.mining_drill_radius local radius = drill.prototype.mining_drill_radius
local dx = math.abs(drill.position.x - resource.position.x) local dx = math.abs(drill.position.x - position.x)
local dy = math.abs(drill.position.y - resource.position.y) local dy = math.abs(drill.position.y - position.y)
if dx <= radius and dy <= radius then if dx <= radius and dy <= radius then
try_deconstruct_miner(drill) try_deconstruct_miner(drill)
end end