forked from mtcontrib/pipeworks
periodically remove one water node next to each "on" pump that's also flowing
This should make it work more or less correctly with finite water. also, fix a bug where a blocked spigot still looks like its pouring, and check for blockages on every step.
This commit is contained in:
parent
8f12d18b1d
commit
b0d92dd358
@ -14,7 +14,10 @@ local check4liquids = function(pos)
|
|||||||
{x=pos.x,y=pos.y,z=pos.z+1}, }
|
{x=pos.x,y=pos.y,z=pos.z+1}, }
|
||||||
for i =1,6 do
|
for i =1,6 do
|
||||||
local name = minetest.env:get_node(coords[i]).name
|
local name = minetest.env:get_node(coords[i]).name
|
||||||
if string.find(name,'water') then return true end
|
if string.find(name,'water') then
|
||||||
|
minetest.env:remove_node(coords[i])
|
||||||
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
@ -67,7 +70,8 @@ end
|
|||||||
local update_outlet = function(pos)
|
local update_outlet = function(pos)
|
||||||
local top = minetest.env:get_node({x=pos.x,y=pos.y+1,z=pos.z}).name
|
local top = minetest.env:get_node({x=pos.x,y=pos.y+1,z=pos.z}).name
|
||||||
if string.find(top,'_loaded') then
|
if string.find(top,'_loaded') then
|
||||||
if minetest.env:get_node({x=pos.x,y=pos.y-1,z=pos.z}).name == 'air' then
|
local name = minetest.env:get_node({x=pos.x,y=pos.y-1,z=pos.z}).name
|
||||||
|
if name == 'air' or name == "default:water_source" or name == "default:water_flowing" then
|
||||||
minetest.env:add_node({x=pos.x,y=pos.y-1,z=pos.z},{name='default:water_source'})
|
minetest.env:add_node({x=pos.x,y=pos.y-1,z=pos.z},{name='default:water_source'})
|
||||||
end
|
end
|
||||||
elseif minetest.env:get_node({x=pos.x,y=pos.y-1,z=pos.z}).name == 'default:water_source' then
|
elseif minetest.env:get_node({x=pos.x,y=pos.y-1,z=pos.z}).name == 'default:water_source' then
|
||||||
@ -81,14 +85,13 @@ local spigot_check = function(pos,node)
|
|||||||
dbg(fdir..' checking '..minetest.pos_to_string(check[fdir+1])..' for spigot at '..minetest.pos_to_string(pos))
|
dbg(fdir..' checking '..minetest.pos_to_string(check[fdir+1])..' for spigot at '..minetest.pos_to_string(pos))
|
||||||
local top = minetest.env:get_node(check[fdir+1]).name
|
local top = minetest.env:get_node(check[fdir+1]).name
|
||||||
dbg('found '..top)
|
dbg('found '..top)
|
||||||
if string.find(top,'_loaded') then
|
local name = minetest.env:get_node({x=pos.x,y=pos.y-1,z=pos.z}).name
|
||||||
|
if string.find(top,'_loaded') and (name == 'air' or name == "default:water_source" or name == "default:water_flowing") then
|
||||||
|
minetest.env:add_node({x=pos.x,y=pos.y-1,z=pos.z},{name='default:water_source'})
|
||||||
minetest.env:add_node({x=pos.x,y=pos.y,z=pos.z},{name='pipeworks:spigot_pouring', param2 = fdir})
|
minetest.env:add_node({x=pos.x,y=pos.y,z=pos.z},{name='pipeworks:spigot_pouring', param2 = fdir})
|
||||||
if minetest.env:get_node({x=pos.x,y=pos.y-1,z=pos.z}).name == 'air' then
|
|
||||||
minetest.env:add_node({x=pos.x,y=pos.y-1,z=pos.z},{name='default:water_source'})
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
minetest.env:add_node({x=pos.x,y=pos.y,z=pos.z},{name='pipeworks:spigot', param2 = fdir})
|
minetest.env:add_node({x=pos.x,y=pos.y,z=pos.z},{name='pipeworks:spigot', param2 = fdir})
|
||||||
if minetest.env:get_node({x=pos.x,y=pos.y-1,z=pos.z}).name == 'default:water_source' then
|
if name == 'air' or name == "default:water_source" or name == "default:water_flowing" then
|
||||||
minetest.env:remove_node({x=pos.x,y=pos.y-1,z=pos.z})
|
minetest.env:remove_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user