-- restricts mining of fluid filled entities -- by mewmew local Event = require 'utils.event' local math_random = math.random local message_color = {r = 255, g = 150, b = 0} local max_fill_percentages = { ['storage-tank'] = 0.1, ['pipe'] = 0.25, ['pipe-to-ground'] = 0.25 } local function restrict_fluid_mining(event) if not max_fill_percentages[event.entity.type] then return end if not event.entity.fluidbox then return end local total_capacity = 0 local total_current_fluid_amount = 0 for i = 1, #event.entity.fluidbox, 1 do if event.entity.fluidbox[i] then local capacity = event.entity.fluidbox.get_capacity(i) total_capacity = total_capacity + capacity local current_fluid_amount = event.entity.fluidbox[i].amount total_current_fluid_amount = total_current_fluid_amount + current_fluid_amount end end if total_capacity == 0 or total_current_fluid_amount == 0 then return end local fill_percentage = total_current_fluid_amount / total_capacity if fill_percentage < max_fill_percentages[event.entity.type] then return end event.buffer.clear() local replacement_entity = event.entity.surface.create_entity( { name = event.entity.name, force = event.entity.force, position = event.entity.position, direction = event.entity.direction } ) replacement_entity.health = event.entity.health local fluid_name = 'fluid' local container_name = event.entity.name for i = 1, #event.entity.fluidbox, 1 do if event.entity.fluidbox[i] then replacement_entity.fluidbox[i] = {name = event.entity.fluidbox[i].name, amount = event.entity.fluidbox[i].amount, temperature = event.entity.fluidbox[i].temperature} fluid_name = event.entity.fluidbox[i].name end end if not event.player_index then return end local messages = { 'Mining this ' .. container_name .. ' would cause a terrible mess.', 'You donĀ“t want to spill all the ' .. fluid_name .. '.', 'There is too much ' .. fluid_name .. ' in the ' .. container_name .. ' to dismantle it safely.' } local player = game.players[event.player_index] player.print(messages[math_random(1, #messages)], message_color) end local function on_player_mined_entity(event) restrict_fluid_mining(event) end local function on_robot_mined_entity(event) restrict_fluid_mining(event) end Event.add(defines.events.on_robot_mined_entity, on_robot_mined_entity) Event.add(defines.events.on_player_mined_entity, on_player_mined_entity)