1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-06 00:23:49 +02:00
ComfyFactorio/modules/restrictive_fluid_mining.lua
2021-03-24 20:14:55 +01:00

91 lines
2.7 KiB
Lua

-- 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)